﻿$(function(){
	// Grab each form element
	$("label[title]").each(function(){
		$(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);
		});
	});
});

function doFocus(obj) {
	$(obj).addClass("active").parents("label").addClass("active").find(".infopop").animate({opacity:1,left:492},500);
}

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:492},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:513},500);
} 	

function validate(obj) {
	// Extend jQuery object to include Regular expression masks assigned to properties
	mask = jQuery.extend({textfieldmask: /^[a-z\.\s-]{5,}$/i,phonemask: /^[0-9\(\)\+\.\s-]{8,}$/i,passwordmask: /^\w{5,}$/, emailmask:/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/});
	// Extend jQuery object to include error messages assigned to properties
	errmsg = jQuery.extend({textfielderr:"5 or more letters",phoneerr: "Include dialling code",passworderr:"Minimum 5 characters",emailerr:"Invalid address",matcherr: "Must match",selectfielderr:"Make date selection"});

	// 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
	switch(obj.name) {
		case "name": 		masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
		case "phone": 		masktouse="phonemask"; 			errtouse="phoneerr"; 		break;
		case "email": 		masktouse="emailmask"; 			errtouse="emailerr"; 		break;
		case "date":        masktouse="datemask";           errtouse="selectfielderr";  break;
		// case "username": 	masktouse="textfieldmask"; 		errtouse="textfielderr"; 	break;
		// case "password": 	masktouse="passwordmask"; 		errtouse="passworderr"; 	mustmatch="verpassword"; 	break;
		// case "verpassword": masktouse="passwordmask"; 		errtouse="passworderr"; 	mustmatch="password"; 		break;
	}
	// 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);
		// 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;
	}
}
		