/**
 * Validate Plugins
 *
 * @Author Phanus Thitratsamee
 * Email: jean@backtobasicsdesign.com
 * Version: 0.1
 */
(function($) {
	$.fn.Validate = function(options) {

		var defaults = {
			default_values : {},
			default_alert : 'You forgot to type in %s',
		};

		var $element = $(this),
		$form = $( 'form', $element ),
		url = $form.attr( 'action' );

		var options = $.extend(defaults, options);

		var default_value = options.default_values;
		$.each(default_value, function(key, value) {
			$("input[name='"+key+"']", $form).val(value);
			toggle();
		});
		$.each(default_value, function(key, value) {
			$("input[name='"+key+"']", $form).focus( function() {
				if($(this).val() == value) {
					$(this).val('');
				}
				toggle();
			});
			$("input[name='"+key+"']", $form).blur( function() {
				str = jQuery.trim($(this).val());
				if(str == '' && str != value) {
					$(this).val(value);
				}
				toggle();
			});
		});
		
		function toggle(){
			$.each(default_value, function(key, value) {
				if($("input[name='"+key+"']", $form).val() == value) {
					$("input[name='"+key+"']", $form).attr('style', 'color: #999;');
				} else {
					$("input[name='"+key+"']", $form).attr('style', '');
				}
			});
		}
		

		$form.submit( function(event) {

			// stop form from submitting normally
			event.preventDefault();
			var error = false;

			$("input", $form).each( function() {
				if($(this).attr('class').match('require')) {

					if( $(this).val()==''
					|| ( default_value[$(this).attr('name')] && $(this).val() == default_value[$(this).attr('name')]  ) ) {

						if(default_value[$(this).attr('name')]) {
							var label = default_value[$(this).attr('name')];
						} else {
							var label = $(this).attr('name');
						}

						alert(options.default_alert.replace('%s',label));
						$(this).focus();

						error = true;
						return false;
					}

				}
			});
			if(error == false) {

				var $submit = $('input[type="submit"]', $form);

				var $element_name = $submit.attr('name').replace('action[','');
				$element_name = $element_name.replace(']','');

				// Send the data using post and put the results in a div
				$.post( url, $('form').serialize() + '&'+$submit.attr('name')+'=submit' , function( xml ) {

					if($('#'+$element_name+'-result').length <= 0)
						$element.prepend('<div id="'+$element_name+'-result"></div>');
					var conTainer = $('#'+$element_name+'-result');

					conTainer.html('<ul style="list-style-position:inside;"></ul>');
					$(xml).find('message').each( function() {
						var type = $(this).attr('type');
						if(type == 'error') {
							conTainer.removeClass('success');
							conTainer.addClass('error');
						} else {
							conTainer.removeClass('error');
							conTainer.addClass('success');
						}
						$('#'+$element_name+'-result ul').append('<li style="">'+$(this).text()+'</li>');
						conTainer.show();
						$form.hide();
						conTainer.fadeOut(2000, function() {
							$('input[type!="submit"][type!="button"][type!="hidden"]', $form).each( function() {
								$(this).val('');
								$(this).blur();
							});
							$form.show();
						});
					});
				}
				);
			}

		});
	}
})(jQuery);
