// JavaScript Document

//Empty functionality
function bindToEmpty(obj) {
	if(obj.length) {
		obj.each(function() {
			$(this).data('initValue', $(this).val());
		});
		obj.focus(function() {
			if($(this).val() == $(this).data('initValue')) {
				$(this).val('');
			}
		}).blur(function() {
			if($(this).val() == '') {
				$(this).val($(this).data('initValue'));
			}
		});
	}
}

//Validatin plugin
(function($){
	$.fn.validate = function(options) {
		var options = $.extend({
			requiredSelector		:	'.required',
			emailSelector			:	'.email',
			hasErrorClass			:	'error',
			hasSuccessClass			:	'success',
			bind					:	{selector:'this', action:'submit'},
			errorMessages			:	{required:'Please make sure all required fields are filled in', email:'Please enter a valid email'},
			onSuccess				: 	function(e) {return true;},
			onError					:	function(e) {return false;}
		}, options);
		
		$(this).each(function() {
			var env = {
				requireds				:	$(options.requiredSelector, $(this)),
				emails					:	$(options.emailSelector, $(this)),
				errors					:	{required:false, email:false},
				errorMssgs				:	[]
			}
			
			if(options.bind.selector == 'this') {
				$(this).bind(options.bind.action, bindingAction);
			} else {
				$(options.bind.selector).bind(options.bind.action, bindingAction);
			}
		
			function bindingAction(e) {
				//Check Required
				env.requireds.each(function(i) {
					if(!$(this).val().length || $(this).val() == $(this).data('initValue')) {
						$(this).parent().removeClass(options.hasErrorClass).addClass(options.hasErrorClass);
						env.errors.required = true;
					} else {
						$(this).parent().removeClass(options.hasErrorClass).removeClass(options.hasSuccessClass).addClass(options.hasSuccessClass);
					}
				});
				
				//Check Emails
				env.emails.each(function(i) {
					if(!validEmail($(this).val()) && $(this).val().length) {
						$(this).parent().removeClass(options.hasErrorClass).addClass(options.hasErrorClass);
						env.errors.email = true;
					} else if($(this).hasClass(options.requiredSelector) && $(this).val().length) {
						$(this).parent().removeClass(options.hasErrorClass).removeClass(options.hasSuccessClass).addClass(options.hasSuccessClass);
					}
				});
				
				for (x in env.errors) {
					if(env.errors[x] == true) {
						env.errorMssgs.push(options.errorMessages[x]);
					}
				}

				if(env.errorMssgs.length) {	
					//Reset for next pass
					clear();
					return options.onError(e);
				}
				return options.onSuccess(e);
			}//end bindingAction
			
			//Clear errors / messages
			function clear() {
				env.errors = {required:false, email:false};
				env.errorMssgs = [];
			}
		});//end $(this).each()
		
		//Valid Email
		function validEmail(email) {
			var regex = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
			return regex.test(email);
		}
		
	}//end $.fn 
})(jQuery);


//Run on load
$(function(){
	bindToEmpty($('#ce_contact_form .empty'));
	
	$('#ce_contact_form form').validate();
});