/************************************************************************************************************
(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['numeric1'] = /^[.0-9]+$/gi;
formValidationMasks['alphabet'] = /^[\sA-Z]+$/gi;	// Numeric
formValidationMasks['zip'] = /^[0-9]{5}\-[0-9]{4}$/gi;	// Numeric

var formElementArray = new Array();


function validateInput(e,inputObj)
{
	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]['required'] && inputObj.value.length==0 && (inputObj.tagName=='INPUT' || inputObj.tagName=='TEXTAREA' || inputObj.tagName=='SELECT'))
	{
		inputValidates = true;
		showBlank = true;
	}
		
	
		
	if(inputValidates){
		if (showBlank)
			inputObj.className=''
		else
			inputObj.className='validInput'
	}else{
		if (requiredFailed)
			inputObj.className='required'		
		else
			inputObj.className='invalidInput'
	}
}

function isFormValid(showalert)
{
	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 != 'submit') && (inputFields[no].type != 'button')) //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].className=='invalidInput') || ((inputs[no].className=='required') && (inputs[no].value.length==0)))
		{
			if (inputs[no].className=='required')
			{
				response += '- Required Field: ' + inputs[no].id + '\n';
			}
			if (inputs[no].className=='invalidInput')
			{
				response += '- The \"' + inputs[no].id + '\" field is invalid.\n';
			}
			success = false;
		}
	}
				
	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 images = document.getElementById('IMG');
	

	var inputs = new Array();
	
	
	for(var no=0;no<inputFields.length;no++){
		if ((inputFields[no].type != 'submit') && (inputFields[no].type != 'button')&& (inputFields[no].type != 'radio')) //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<images.length;no++){
		inputs[inputs.length] = images[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;			
		
		
		//Alternate "*" display for Safari
		if ((((navigator.userAgent.indexOf("MSIE")!=-1) && (navigator.userAgent.indexOf("Mac")!=-1)) || (navigator.vendor == 'Apple Computer, Inc.')) || (inputs[no].type == 'select-one'))
		{
			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;
		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;

		validateInput(false,inputs[no]);
			
	}
	
}