/*
 * jQuery formalize Plugin
 */

;(function($) {	
	
	$.fn.formalize = function() {
		$.form = this;
		
		// add security token to the form and ajax it
		$.get($(this).attr('action')+"?get_token=1",function(txt){
			$($.form).append('<input type="hidden" id="ts" name="ts" value="'+txt+'" \/>');
		});
		
		$(this).find(':input.autoclear').not(':submit').each(function(i){
			$(this).attr('alt', $(this).attr('value'))
			$.form.autoClearField(this)
		})
		
		$(this).submit(function(){
			if ( $.form.validate() ) {
				$($.form).find(':submit').after('<span class="msg-status loading-img">Sending...</span>');
				$.ajax({ 
					type: "POST",
					url: $($.form).attr('action'),
					data:  $.str, 
					success: $.form.showResponse, 
					error: function(){ $.form.showResponse('Network Error') }
			    })
			}
			return false
		})
		return this
	};
	
	$.fn.showResponse = function(responseText){			
		if ( responseText == '1')
			var msg = '<span class="msg-status success-img">Email Sent!</span>';
		else
			var msg = '<span class="msg-status alert-img">'+responseText+'</span>';
		$($.form).find('.msg-status').replaceWith(msg);
	 	// reset form
		$($.form).animate({opacity: 1.0}, 1000, null, function(){ 
			$($.form).find(':input').not(':submit').each(function(){
				$(this).removeClass('disabled')
				if ( responseText == 1 ) $(this).attr('value', $(this).attr('alt')); 
				this.disabled = false; 
				$($.form).find('.msg-status').animate({opacity: 0.0}, 500, null, function(){ $(this).remove(); })
			}) 
		})
	}

	$.fn.validate = function(){
		$.str = $($.form).serialize();
		$($.form).find(':input').each(function(){
			$(this).addClass('disabled'); 
			this.disabled = true
		})
		var perfect = true;
		$($.form).find('.required').each(function(i){
			if ( $(this).attr('value') == '' ) 
				$(this).attr('value', $(this).attr('alt'))
			var valid = 0;
			valid = $.form.requiredField($(this).attr('id'))
			if (!valid) perfect = false;
		})
		$($.form).find('.validate-email').each(function(i){
			if ( $(this).attr('value') == '' ) 
				$(this).attr('value', $(this).attr('alt'))
			var valid = 0;
			valid = $.form.validEmail($(this).attr('id'))
			if (!valid) perfect = false;
		})
		if ( !perfect ) {
			$($.form).animate({opacity: 1.0}, 2000, null, function(){ 
				$($.form).find(':input').each(function(){$(this).removeClass('disabled'); this.disabled = false}) })
			return false
		}else{
			
			return true
		}
	}
	
	/*	function verifies email formatting 
		if invalid, returns false and displays error in the field value
		error message can be set in the email field title tag
		receives id of email field
	*/
	$.fn.validEmail = function(id) {
		var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
		var domEle = $('#'+id);
		var defaultValue = domEle.attr('alt');
		var userValue = domEle.val();
		if ( userValue == '' || userValue == defaultValue || !emailReg.test(userValue) ) {
			domEle.addClass('input-error').animate({opacity: 1.0}, 1000, null, function(){ domEle.attr('value', userValue).removeClass('input-error'); })
			return false;
		}else{
			return true;
		}	
	}
	/*	function verifies there is content
	*/
	$.fn.requiredField = function(id){
		var domEle = $('#'+id);
		if ( domEle.hasClass('validate-email') )
		 return true
		var userValue = domEle.val();
		var defaultValue = domEle.attr('alt');
		var fieldType = domEle.attr('type');
		if ( fieldType == 'checkbox') {
			if (  domEle.attr('checked') == undefined ){
				$('label[for="'+id+'"]').addClass('input-error').animate({opacity: 1.0}, 1000, null, function(){ $('label[for="'+id+'"]').removeClass('input-error') })
				return false;
			}else{
				return true
			}
		} else {
			if ( userValue == '' || userValue == defaultValue ){
				domEle.addClass('input-error').animate({opacity: 1.0}, 1000, null, function(){ domEle.attr('value', userValue).removeClass('input-error') })
				return false;
			}else{
				return true;
			}
		}
	}
	
	/*	function auto clears a form field when a use clicks it to enter data
		receives two paramemeters, id of form field and defaultValue of that field
		if nothing is entered defaultValue is restored on blur
	*/
	$.fn.autoClearField = function (obj){
		var defaultValue = $(obj).attr('alt');
		$(obj).focus(function(){ 
			if ( $(obj).val() == defaultValue ) $(obj).attr('value', '') 
		});
		$(obj).blur(function(){ 
			if ( $(obj).val() == '' ) $(obj).attr('value', defaultValue) 
		});
	}
	
	
})(jQuery);