/*
 * jQuery sendRichMail Plugin
 */

;(function($) {	
	
	$.fn.sendRichMail = function() {
		var ref = this
		$.form = this
		$('.autoclear', this).each(function(i){
			$(this).attr('alt', $(this).attr('value'))
			ref.autoClearField(this)
		})
		// set default values to the alt tag for later use
		
		$(this).submit(function(){
			$('.msg-success', $.form).slideUp();
			$('.msg-error', $.form).slideUp();
			if ( ref.validate() ) {
				$.ajax({ 
					type: "POST",
					url: "/demo/sendRichMail.php",
					data:  $.str, 
					success: ref.showResponse, 
					error: function(){ ref.showResponse('Network Error') }
			    })
			}
			return false
		})
		return this
	};
	
	$.fn.showResponse = function(responseText){
		if ( responseText == 1 )
			$('.msg-success', $.form).slideDown();
		else
			$('.msg-error', $.form).html(responseText).slideDown()
	 	// reset form
		$($.form).animate({opacity: 1.0}, 1000, null, function(){ 
			$(':input', $.form).each(function(){
				$(this).removeClass('disabled')
				this.disabled = false; 
			})
			$(':text', $.form).each(function(){
				if ( responseText == 1 ) $(this).attr('value', $(this).attr('alt')); 
			})
		})
	}

	$.fn.validate = function(){
		$.str = $($.form).serialize();
		$(':input', $.form).each(function(){
			$(this).addClass('disabled'); 
			this.disabled = true
		})
		var perfect = true;
		$('.required', $.form).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;
		})
		$('.validate-email', $.form).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(){ $(':input', $.form).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();
		var curentColor = domEle.css('color');
		var errorMsg = ( !domEle.attr("title") ) ? 'not a valid email' : domEle.attr("title");
		if ( userValue == '' || userValue == defaultValue || !emailReg.test(userValue) ) {
			domEle.attr('value', errorMsg).css('color', 'red').animate({opacity: 1.0}, 2000, null, function(){ domEle.attr('value', userValue).css('color', curentColor) })
			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');
		var errorMsg = ( !domEle.attr("title") ) ? 'required' : domEle.attr("title");
		var curentColor = domEle.css('color');
		if ( fieldType == 'checkbox') {
			if (  domEle.attr('checked') == undefined ){
				$('label[for="'+id+'"]').text(errorMsg).css('color', 'red').animate({opacity: 1.0}, 2000, null, function(){ $('label[for="'+id+'"]').text(defaultValue).css('color', curentColor) })
				return false;
			}else{
				return true
			}
		} else {
			if ( userValue == '' || userValue == defaultValue ){
				domEle.attr('value', errorMsg).css('color', 'red').animate({opacity: 1.0}, 2000, null, function(){ domEle.attr('value', userValue).css('color', curentColor) })
				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);
