// JavaScript Document

/************************************************************************************************************
(C) www.dhtmlgoodies.com, February 2006

This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.	

Terms of use:
You are free to use this script as long as the copyright message is kept intact. However, you may not
redistribute, sell or repost it without our permission.

Thank you!

www.dhtmlgoodies.com
Alf Magne Kalleland

************************************************************************************************************
Some modifications by Justin Youens, TargetScope, Inc.  (www.targetscope.com)
************************************************************************************************************/	

// Patterns
var formValidationMasks = new Array();
formValidationMasks['email'] = /\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/gi;	// Email
formValidationMasks['numeric'] = /^[0-9]+$/gi;	// Numeric
formValidationMasks['zip'] = /^[0-9]{5}$/gi;	// Numeric
formValidationMasks['txtname'] = /^[a-zA-Z\'\-\.\ ]+$/gi;     
var formElementArray = new Array();


function validateInput(e,inputObj)
{
	//debugger;
	if(!inputObj)inputObj = this;		
	var inputValidates = true;
	var requiredFailed = false;
	var showBlank = false;
	
	if(formElementArray[inputObj.name]['required'] && (inputObj.tagName=='INPUT' || inputObj.tagName=='TEXTAREA') && inputObj.value.length==0){
		inputValidates = false;
		requiredFailed = true;
	}
	if(formElementArray[inputObj.name]['required'] && inputObj.tagName=='SELECT' && inputObj.selectedIndex==0){
		inputValidates = false;
		requiredFailed = true;
	}
	if(formElementArray[inputObj.name]['mask'] && !inputObj.value.match(formValidationMasks[formElementArray[inputObj.name]['mask']]))inputValidates = false;

	if(formElementArray[inputObj.name]['freemask']){
		var tmpMask = formElementArray[inputObj.name]['freemask'];
		tmpMask = tmpMask.replace(/-/g,'\\-');
		tmpMask = tmpMask.replace(/S/g,'[A-Z]');
		tmpMask = tmpMask.replace(/N/g,'[0-9]');
		tmpMask = eval("/^" + tmpMask + "$/gi");
		if(!inputObj.value.match(tmpMask))inputValidates = false
	}	
	
	if(formElementArray[inputObj.name]['regexpPattern']){
		var tmpMask = eval(formElementArray[inputObj.name]['regexpPattern']);
		if(!inputObj.value.match(tmpMask))inputValidates = false;
	}
	
	if(formElementArray[inputObj.name]['customCheck']){
		var tmpMask = formElementArray[inputObj.name]['customCheck'];
		var tmpValue = inputObj.value;
		
		//Can add more custom handlers here if you need to
		if(tmpMask == 'birthday'){
			if (checkDate(tmpValue) == false) inputValidates = false;
		}	
		
		if (tmpMask == "phone"){
			var stripped = tmpValue.replace(/[\(\)\.\-\ ]/g, '');
			//strip out acceptable non-numeric characters
			if (isNaN(parseInt(stripped))) {
			   inputValidates = false;
			}
			if (!(stripped.length == 10)) {
				inputValidates = false;
			}
		}
				
	}
	
	
	if(!formElementArray[inputObj.name]['required'] && inputObj.value.length==0 && (inputObj.tagName=='INPUT' || inputObj.tagName=='TEXTAREA' || inputObj.tagName=='SELECT'))
	{
		inputValidates = true;
		showBlank = true;
	}
	
	
		
	
		
	if(inputValidates){
		
	
		if (inputObj.getAttribute('hide_check')){
			showBlank = true;	
		}		
		
		if (showBlank) {
			inputObj.className=''
		} else {			
			inputObj.className='validInput';		
		}
		
	}else{
		if (requiredFailed)
			inputObj.className='required'		
		else
			inputObj.className='invalidInput'
	}
}

function isFormValid(showalert)
{
	//debugger;
	var success = true;
	var response = 'The following problems must be corrected before continuing:\n';
	response += '------------\n';
	
	var inputFields = document.getElementsByTagName('INPUT');
	var selectBoxes = document.getElementsByTagName('SELECT');
	var memoBoxes = document.getElementsByTagName('TEXTAREA');

	var inputs = new Array();
	
	for(var no=0;no<inputFields.length;no++){
		if (inputFields[no].type == 'text') //Don't catch buttons
			inputs[inputs.length] = inputFields[no];
	}	
	for(var no=0;no<selectBoxes.length;no++){
		inputs[inputs.length] = selectBoxes[no];
	}
	
	for(var no=0;no<memoBoxes.length;no++){
		inputs[inputs.length] = memoBoxes[no];		
	}

	


	for(var no=0;no<inputs.length;no++){

		if(inputs[no].type == 'text' || inputs[no].type == 'textarea')
		{
			if (inputs[no].className == 'required')
			{
				//Check if we have a manual message override
				
				
				if (inputs[no].getAttribute('requiredMessage') !=  null)
				{	
					response += '- ' + inputs[no].getAttribute('requiredMessage') + '\n';
				}
				else
				{
					response += '- Required Field: ' + inputs[no].id + '\n';
				}
				
				success = false;
			}
			if (inputs[no].className=='invalidInput')
			{
				if (inputs[no].getAttribute('invalidMessage') != null)
				{	
					response += '- ' + inputs[no].getAttribute('invalidMessage') + '\n';
				}
				else
				{
					response += '- The \"' + inputs[no].id + '\" field is invalid.\n';
				}
				
				success = false;
			}
			
		}
	}
	
	//alert("Show Alert: " + showalert +"\nSuccess: " + success);
			
			
	if (showalert && !success)
	{
		response += '------------\n';
		alert(response);
	}
	
	return success;	
}



function initFormValidation()
{

	var inputFields = document.getElementsByTagName('INPUT');
	var selectBoxes = document.getElementsByTagName('SELECT');
	var memoBoxes = document.getElementsByTagName('TEXTAREA');

	var inputs = new Array();
	
	
	for(var no=0;no<inputFields.length;no++){
		if (inputFields[no].type == 'text') //Don't catch buttons
			inputs[inputs.length] = inputFields[no];
		
	}	
	for(var no=0;no<selectBoxes.length;no++){
		inputs[inputs.length] = selectBoxes[no];
		
	}
	
	for(var no=0;no<memoBoxes.length;no++){
		inputs[inputs.length] = memoBoxes[no];		
	}
	
	var typeOfField = 'Types:\n';
	
	for(var no=0;no<inputs.length;no++){
		
		var required = inputs[no].getAttribute('required');
		if(!required)required = inputs[no].required;		
		
		var mask = inputs[no].getAttribute('mask');
		if(!mask)mask = inputs[no].mask;
		
		var freemask = inputs[no].getAttribute('freemask');
		if(!freemask)freemask = inputs[no].freemask;
		
		var regexpPattern = inputs[no].getAttribute('regexpPattern');
		if(!regexpPattern)regexpPattern = inputs[no].regexpPattern;			

		var customCheck = inputs[no].getAttribute('customCheck');
		if(!customCheck)customCheck = inputs[no].customCheck;			



		
		//Alternate "*" display for Safari 2.x
		if ((((navigator.userAgent.indexOf("MSIE")!=-1) && (navigator.userAgent.indexOf("Mac")!=-1)) || (navigator.vendor == 'Apple Computer, Inc.')) || (inputs[no].type == 'select-one'))
		{
			//Check to see if we have a Safari 3+
			//- - - - - - - - - - - - - - - - - - - - - - - 
			var BrowserDetect = {
				init: function () {
					this.version = this.searchVersion(navigator.userAgent)
						|| this.searchVersion(navigator.appVersion)
						|| "an unknown version";
				},

				searchVersion: function (dataString) {
					var BrowserString = 'Safari';
					var index = dataString.indexOf(BrowserString);
					if (index == -1) return;
					return parseFloat(dataString.substring(index+BrowserString.length+1));
				}
			};

			BrowserDetect.init(); //Run the browser test
			var Old_Safari = 419.3; //We want to target Safari 3+.  I think 2.x was under 500.

			var isSafari3 = false;
			
			if (BrowserDetect.version > Old_Safari){
				isSafari3 = true;}
				
			//- - - - - - - - - - - - - - - - - - - - - - - 
		
		
			
			if (isSafari3 == false)
			{			
				if (required)
				{
					var div = document.createElement('DIV');
					div.className = 'requiredText';
					inputs[no].parentNode.insertBefore(div,inputs[no]);
					var required_ast = document.createTextNode(" *");
					div.appendChild(inputs[no]);
					div.appendChild(required_ast);
				}
			}
		}

		
		inputs[no].onblur = validateInput;
		//inputs[no].onchange = validateInput;  //Was coliding with Jason's Code
		inputs[no].onpaste = validateInput;
		inputs[no].onkeyup = validateInput;
		
		
		formElementArray[inputs[no].name] = new Array();
		formElementArray[inputs[no].name]['mask'] = mask;
		formElementArray[inputs[no].name]['freemask'] = freemask;
		formElementArray[inputs[no].name]['required'] = required;
		formElementArray[inputs[no].name]['regexpPattern'] = regexpPattern;
		formElementArray[inputs[no].name]['customCheck'] = customCheck;
		

		validateInput(false,inputs[no]);
			
	}
}

function checkDate(dateVal)
{
var exp = new RegExp(/^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/);
    if (dateVal.match(exp))
    {
        if (dateVal.length<10)
        {
            return false;
        }
        // is the date in the future?
        if (new Date(dateVal) > new Date())
        {
            return false;
        }
        return true;
    }
    else
    {
        return false;
    }
}


		

		function getQueryVariable(variable) {
			var query = window.location.search.substring(1);
			var vars = query.split("&");
			
			for (var i=0;i<vars.length;i++) {
				var pair = vars[i].split("=");
				if (pair[0] == variable) {
					return pair[1];
				}
			}
		}
		
	 	

