$(document).ready(function(){
	
	var $noticeCounter=0;
	var $special_chars = "áàãââæåçéèêëìíîïñòóôõöøùúûüýÿ";
	var $all_chars = "\\w" + $special_chars;
	var $missingFieldsInfo="";
	
	function jquerySimpleValidate(obj){
					
		// get required type
	  	var matchArr = obj.attr('class').match("required_[a-z_]+");
		var reqType = matchArr[0];
		
		// define reg expressions
		var expObj = { 
			email: "^[_a-z0-9-"+$special_chars+"]+([\.]{1}[_a-z0-9-"+$special_chars+"]+)*@([a-z0-9-"+$special_chars+"]+[\.]{1})+[a-z]{2,5}$",
			captcha: "[0-9A-Za-z]{4}",
			text: "["+$all_chars+"]{2,}"
		};
		
		// get reg ex
		var reqTypeShort = reqType.split('_')[1];
		var ex=expObj[reqTypeShort];	
		
		// text expressiosn
		var regExpObj = new RegExp(ex);
		var match = regExpObj.test(obj.val());
		
		// return match
		if (match){	
			return true;
		}
		else{			
			return false;
		}
		
	}
	
	// style input field
	function jquerySimpleValidateStyle(obj, accepted, animate){
		var style = "";
		if (accepted){
			style = "4px solid #a0cc87";			
		}	
		else{
			style = "4px solid #cc0000";
		}
		obj.css('border-left',style);
		if (!accepted && 	animate){
			var i;
			var styleBlink = "#000";
			for(i=1; i<=3; i++){
				obj.
					animate({'opacity':0.2},200).
					animate({'opacity':1},200);
			}
		}
	}
	
	
	// validate on change
	$('input.required, textarea.required').keyup(function(){
		var test = jquerySimpleValidate($(this));
		jquerySimpleValidateStyle($(this), test);
	});
	
	// style on load
	$('.required').each(function(){
		var test = jquerySimpleValidate($(this));
		validated = test;
		jquerySimpleValidateStyle($(this), test);
	});	
	
	// validate on submit
	$('form.validate').submit(function(){
		$missingFieldsInfo = "";
		var fieldsMissing = false;
		// loop through all required
		$('.required').each(function(){
			var test = jquerySimpleValidate($(this));
			if (!test) {fieldsMissing = true;}
			jquerySimpleValidateStyle($(this), test, true);
			// add to missing fields info
			if (!test){
				$missingFieldLabel = $(this.parentNode).children('label').html();
				$missingFieldsInfo += "<div>- "+$missingFieldLabel+"</div>";
			}
		});					
		// fields missing		
		if (fieldsMissing){
			if (!$(".notice").html()){
				$(this).prepend("<div class=\"notice\" style=\"display:none;\"></div>");
				//$(this).append("<div class=\"notice\" style=\"display:none;\"></div>");
			}
			var $noticeText = $('#MISSING_FIELDS').val();
			if (!$noticeText) $noticeText = "One or more input fields missing";
			$(".notice").html($noticeText+"<br />"+$missingFieldsInfo);
			$noticeCounter++;
			$(".notice").fadeIn();
			return false;
		}
		// fields ok
		else{
			var confirmQuestion = $('#CONFIRM_QUESTION').val();
			if (!confirmQuestion) confirmQuestion = "Submit";
			return confirm(confirmQuestion+"?");
		}
	});
			
});