﻿$(function(){
// Grab each form element
$(".validate").each(function(){
if($(":submit", this)[0] != null){

sbmt=$(":submit", this)[0];
$(sbmt).click(function() {
valid = true;
cnt = $(":input",$(".validate")).length;
elmts = $(":input",$(".validate"));

for(i=0; i<cnt; i++){
elmt = elmts[i];
elmtvalid = validate(elmt);
valid = valid && elmtvalid;
if(elmtvalid){
isGood(elmt);
} 
}
return valid;
});

} else {
$(this).append("<div class=\"infopop\">");	
titletext = $(this).attr("title");
$(this).removeAttr("title");
$(".infopop",this).css({opacity:0}).html(titletext);
$("input",this).focus(function(){
// Mouseover
doFocus(this);
}).blur(function(){
// MouseOut
doBlur(this);
});
$("select",this).focus(function(){
// Mouseover
doFocus(this);
}).blur(function(){
// MouseOut
doBlur(this);
});
}
});
});

function doFocus(obj) {
//$(obj).addClass("active").parents("label").addClass("active").find(".infopop").animate({opacity:1,left:450},500);
$(obj).addClass("active").parents("label").addClass("active");
}

function doBlur(obj) {
if (validate(obj)) { 
isGood(obj);
}
}

function reportErr(obj, message) {
$(obj).addClass("error").parents("label").removeClass("isgood").addClass("required").addClass("error").find(".infopop").html(message).addClass("errorpop").animate({opacity:1,left:400},500);
}

function isGood(obj) {
$(obj).removeClass("error").removeClass("active").parents("label").addClass("isgood").removeClass("error").removeClass("active").find(".infopop").removeClass("errorpop").animate({opacity:0,left:400},500);
} 			

function validate(obj) {
// Extend jQuery object to include Regular expression masks assigned to properties
mask = jQuery.extend({textfieldmask: /^[\s\S\w\W]{1,}$/i, checkmask:true ,phonemask: /^[0-9\(\)\+\.\s-]{8,}$/i,passwordmask: /^\w{5,}$/,dropdownmask:/^(?!(Please Select...))[\s\S\w\W]+/i,emailmask:/^([a-zA-Z0-9\+_\-]+)(\.[a-zA-Z0-9\+_\-]+)*@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,6}$/});
// Extend jQuery object to include error messages assigned to properties
errmsg = jQuery.extend({textfielderr:"This field cannot be left blank",checkerr: "This field must be checked to continue",dropdownerr: "You must select an item to continue",phoneerr: "Include dialing code",passworderr:"Minimum 5 characters",emailerr:"Invalid email address",matcherr: "Must match"});

// Set up variables to hold details of which mask to use and whether the field should match another field
var masktouse = null;
var mustmatch = null;
// Determine the type of mask we're going to validate against
if ( $(obj).hasClass("text")) {
masktouse="textfieldmask"; 		errtouse="textfielderr";
} else if ( $(obj).hasClass("password")) {
masktouse="passwordmask"; 			errtouse="passworderr";
} else if ( $(obj).hasClass("phone")) {
masktouse="phonemask"; 			errtouse="phoneerr";
} else if ( $(obj).hasClass("email")) {
masktouse="emailmask"; 			errtouse="emailerr"; 	
} else if ( $(obj).hasClass("check")) {
masktouse= "checkmask"; errtouse="checkerr";
} else if ( $(obj).hasClass("dropdown")) {
masktouse= "dropdownmask"; errtouse="dropdownerr";
}
// Check that the element is a required field before validating against it.
if($(obj).parents("label").hasClass("required") && masktouse) {
	// Set up a quick way of accessing the object we're validating
	pointer = $(obj);
	
	if (pointer.hasClass("check")){
				if( $(obj).is(":checked"))
				{
				
				return true;
				}
				else {			
				// The field failed to validate against the Regular Expression
				reportErr(obj,errmsg[errtouse]);
				return false; 
				}
				}
			else {
	
	// Test the value of the field against the Regular Expression
	if (mask[masktouse].test(pointer.val())) {
		// The field validated successfully!
		
		// Check to see if the field needs to match another field in the form
		if (mustmatch) {
			// It does need to match, so grab the object it needs to match
			matchobj = $("#"+mustmatch);
			if (matchobj.val()!='' && matchobj.val()!=pointer.val()) {
				// The fields don't match, so report an error on both of them
				reportErr(obj,errmsg["matcherr"]);	
				reportErr(matchobj,errmsg["matcherr"]);
			}
			else {
				// Either the fields match, or the other field hasn't been completed yet
				// If the other field has been completed, call the isGood function to clear any error message showing
				if (matchobj.val()!='') { isGood(matchobj);}
				return true;
			}
		}
		else {
			// No match is required, so return true - validation passed!
			return true;			
		} 
	}
	else { 
		// The field failed to validate against the Regular Expression
		reportErr(obj,errmsg[errtouse]);
		return false; 
	}
} }
else {	
// This isn't a required field, so we won't validate it against anything			
return true;
}
}