String.prototype.trim = function(){
	return( this.replace(/^\s*([\s\S]*\S+)\s*$|^\s*$/,'$1') );   
}

function fncIsNumber(n_strVal) {
	var digits="1234567890.";
	for (var i=0; i < n_strVal.length; i++)
		if (digits.indexOf(n_strVal.charAt(i)) == -1)
			return false;
	return true;
}

var objLastError = null;

function fncWriteError(n_blnSuccess, n_errError, n_objFormField){
	if (n_blnSuccess) {
		n_strLabel = n_objFormField.title + " " + n_errError;
		alert(n_strLabel);

		if (objLastError != null)
		{	//objLastError.style.background = 'FFFFFF';
			objLastError.className = "frm-inp";
		}

		objLastError = n_objFormField;
		//n_objFormField.style.background = 'FF9999';
		n_objFormField.className = "frm-err";
		n_objFormField.focus();
	}
}

function fncValidateFormField(n_blnSuccess, n_formObject, n_type, n_blnRequired){
	if (n_blnSuccess){
		if (n_blnRequired && n_type != 'radio'){
			if (!n_formObject.value.trim().length){
				fncWriteError(n_blnSuccess, "is required", n_formObject);
				n_blnSuccess = false;
			}
		}
		switch (n_type){
			case "string":
			case "name":
			case "alpha":
				if (fncValidateFormField.arguments.length >= 5){
					var intMinLength = parseInt(fncValidateFormField.arguments[4]);
					if (n_formObject.value.trim().length < intMinLength && n_formObject.value.length > 0){
						fncWriteError(n_blnSuccess, "must be at least " + intMinLength + " characters", n_formObject)
						n_blnSuccess = false;
					}
				}
				if (fncValidateFormField.arguments.length == 6){
					var intMaxLength = parseInt(fncValidateFormField.arguments[5]);
					if (n_formObject.value.trim().length > intMaxLength && n_formObject.value.length > 0){
						fncWriteError(n_blnSuccess, "can only be " + intMaxLength + " characters, currently you have " +n_formObject.value.trim().length+" characters", n_formObject)
						n_blnSuccess = false;
					}
				}
				if (n_type == "string"){
					if (n_formObject.value.indexOf('%') >= 0){
						fncWriteError(n_blnSuccess, "cannot contain a '%'", n_formObject)
						n_blnSuccess = false;
					}
				}			
				if (n_type == "name"){
					var n_regExpression = new RegExp("[^A-Za-z .'`,-]","gi");
					var n_strAlphaOnly = n_formObject.value.trim();
					var n_strAlphaOnly = n_strAlphaOnly.replace(n_regExpression,"");
					if (n_strAlphaOnly != n_formObject.value.trim()){
						fncWriteError(n_blnSuccess, "can only be alpha characters (A-Z), spaces, commas, apostrophes, hyphens and periods", n_formObject)
						n_blnSuccess = false;
					}		
				}
				if (n_type == "alpha"){
					var n_regExpression = new RegExp("[^A-Za-z ]","gi");
					var n_strAlphaOnly = n_formObject.value.trim();
					var n_strAlphaOnly = n_strAlphaOnly.replace(n_regExpression,"");
					if (n_strAlphaOnly != n_formObject.value.trim()){
						fncWriteError(n_blnSuccess, "can only be alpha characters (A-Z) and spaces", n_formObject)
						n_blnSuccess = false;
					}			
				}
				break;
			case "email":
				var emailReg = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.*[.].*$";					
				var regex = new RegExp(emailReg);
					
				if (n_formObject.value.trim().length > 0){					
					if (!regex.test(n_formObject.value)){
						fncWriteError(n_blnSuccess, "is not a valid email address", n_formObject);
						n_blnSuccess = false;
					}					
				}	
				break;
			case "numeric":
				blnNumericError = false;
				if (!fncIsNumber(n_formObject.value) && n_formObject.value.trim().length){
					fncWriteError(n_blnSuccess, "must be numeric", n_formObject)
					n_blnSuccess = false;
				}

				if (fncValidateFormField.arguments.length >= 5) {
					var intLowerBound = parseFloat(fncValidateFormField.arguments[4]);
					if (!isNaN(intLowerBound) && (parseFloat(n_formObject.value) < intLowerBound)) {
						fncWriteError(n_blnSuccess, "must be at least "+intLowerBound, n_formObject);
						n_blnSuccess = false;
					}
				} 
				
				if (fncValidateFormField.arguments.length == 6) {
					var intUpperBound = parseFloat(fncValidateFormField.arguments[5]);
					if (!isNaN(intUpperBound) && (parseFloat(n_formObject.value) > intUpperBound)) {
						fncWriteError(n_blnSuccess, "must be at most "+intLowerBound, n_formObject);
						n_blnSuccess = false;
					}
				} 
				break;
			case "numericstring":
				if (!n_blnRequired && n_formObject.value.trim().length == 0)
					break;

				if (!fncIsNumber(n_formObject.value) && n_formObject.value.trim().length > 0){
					fncWriteError(n_blnSuccess, "must be numeric", n_formObject)
					n_blnSuccess = false;
				}

				if (fncValidateFormField.arguments.length >= 5){
					var intLowerBound = parseInt(fncValidateFormField.arguments[4]);
					if (!isNaN(intLowerBound) && (parseInt(n_formObject.value.trim().length) < intLowerBound)) {
						fncWriteError(n_blnSuccess, "must be at least " + intLowerBound + " digits in length", n_formObject);
						n_blnSuccess = false;
					}
				}
				
				if (fncValidateFormField.arguments.length == 6){
					var intUpperBound = parseInt(fncValidateFormField.arguments[5]);
					if (!isNaN(intUpperBound) && (parseInt(n_formObject.value.trim().length) > intUpperBound)) {
						fncWriteError(n_blnSuccess, "must be at most " + intUpperBound + " digits in length", n_formObject);
						n_blnSuccess = false;
					}
				}
				break;
			case "dollar":
	
				//Allows user to enter dollar amount, and allows ranges
				//Ex, $1 $1. $1.0 $1.00 $.75 $0.75
				//
	
				if (!n_blnRequired && n_formObject.value.trim().length == 0)
					break;

				var regDollar = "^[$]{0,1}[0-9]*[.]{0,1}([0-9]{0,2})$";
				var regex = new RegExp(regDollar);
				
				if (!regex.test(n_formObject.value.trim())){
					fncWriteError(n_blnSuccess, "must be valid dollar amount", n_formObject);
					n_blnSuccess = false;
					break;
				}
	
				if (fncValidateFormField.arguments.length > 4){
					var n_regExpression = new RegExp("[^0-9.]","gi");
					var numVar = n_formObject.value.trim().replace(n_regExpression,"");
					
					var blnNumericError = false;
					var blnLowerLimitError = false;
					var blnUpperLimitError = false;
					
					var blnLowerLimitInclude = false;
					var blnUpperLimitInclude = false;
					
					var numLowerLimit = null;
					var numUpperLimit = null;
					
					var m_strNotation = fncValidateFormField.arguments[4].trim();
					var m_intLocation = m_strNotation.indexOf(',');
					var m_strLeftNotation = m_strNotation.substr(0,1);
					var m_strRightNotation = m_strNotation.substr(m_strNotation.length-1,1);
					
					if (m_strLeftNotation == '[')
						blnLowerLimitInclude = true;
					
					if (m_strRightNotation == ']')
						blnUpperLimitInclude = true;
	
					numLowerLimit = parseFloat(m_strNotation.substr(1,m_intLocation-1));
					numUpperLimit = parseFloat(m_strNotation.substr(m_intLocation+1));
					
					if (isNaN(numLowerLimit))
						numLowerLimit = null;
						
					if (isNaN(numUpperLimit))
						numUpperLimit = null;
					
					//Check lower limits.
					//If there is a lower limit...
					if (numLowerLimit != null){
						if (blnLowerLimitInclude){
							if (numVar < numLowerLimit){
								blnLowerLimitError = true;
							}
						}else{
							if (numVar <= numLowerLimit){
								blnLowerLimitError = true;
							}
						}
					}
					
					if (numUpperLimit != null){
						if (blnUpperLimitInclude){
							if (numVar > numUpperLimit){
								blnUpperLimitError = true;
							}
						}else{
							if (numVar >= numUpperLimit){
								blnUpperLimitError = true;
							}
						}
					}
					
					var strVarPrefix = '$';
					
					if((blnLowerLimitError || blnUpperLimitError) && numLowerLimit == null){
						fncWriteError(n_blnSuccess, 'must be ' + (blnUpperLimitInclude ? 'no more than ' : 'less than ')+ strVarPrefix + numUpperLimit, n_formObject);
						n_blnSuccess = false;
					}else if((blnLowerLimitError || blnUpperLimitError) && numUpperLimit == null){
						fncWriteError(n_blnSuccess, 'must be ' + (blnLowerLimitInclude ? 'at least ' : 'greater than ') + strVarPrefix + numLowerLimit, n_formObject);
						n_blnSuccess = false;
					}else if((blnLowerLimitError || blnUpperLimitError) && (numLowerLimit != null || numUpperLimit != null)){
						fncWriteError(n_blnSuccess, 'must be ' + (blnLowerLimitInclude ? 'at least ' : 'greater than ') + strVarPrefix + numLowerLimit +  ' and ' + (blnUpperLimitInclude ? 'no more than ' : 'less than ') + strVarPrefix + numUpperLimit , n_formObject);
						n_blnSuccess = false;
					}
				}
				break;
			case "select":			
				if (n_blnRequired){
					if(n_formObject.selectedIndex == 0){
						fncWriteError(n_blnSuccess, "is required", n_formObject);
						n_blnSuccess = false;
					}
				} 
				break;
			case "radio":
				if (n_blnRequired){
					myOption = -1;
					for (i=n_formObject.length-1; i > -1; i--) 
					{
						if (n_formObject[i].checked) {
							myOption = i;
						}
					}
					if (myOption == -1) 
					{
						n_blnSuccess = false;
					}
				}
				break;
		}
	}
	return n_blnSuccess;
}
function autoTab2(field1, len, field2) 
{
	if (document.getElementById(field1).value.length == len) 
	{
		document.getElementById(field2).focus();
	}
}

function autoTab(input,len, e) {
var isNN = (navigator.appName.indexOf("Netscape")!=-1);
var keyCode = (isNN) ? e.which : e.keyCode;
var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
if(input.value.length >= len && !containsElement(filter,keyCode)) {
input.value = input.value.slice(0, len);
input.form[(getIndex(input)+1) % input.form.length].focus();
}
function containsElement(arr, ele) {
var found = false, index = 0;
while(!found && index < arr.length)
if(arr[index] == ele)
found = true;
else
index++;
return found;
}
function getIndex(input) {
var index = -1, i = 0, found = false;
while (i < input.form.length && index == -1)
if (input.form[i] == input)index = i;
else i++;
return index;
}
return true;
}


// Script for the Stop Creative on all the forms
// Added by: Amu on August 8th, 2006
// Modified on: August 15th, 2006

//Pop-Up Script is disabled since Aug 16, 2006
//window.onunload = popUp;

function getCurrUrl()
{
	var currUrl = document.URL;
	return (currUrl);
}

function chkPblocker(win,url,Jh,Mk)
{
	var Wd=xq(top,url,Jh,Mk);
	if(!Wd){Wd=xq(win,url,Jh,Mk)}
	if(!Wd){alertUnload()}
	else{Wd.close();}
}

function xq(win,url,name,features){
	var Wd;
	if(features){Wd=win.open(url,name,features)}
	else if(name){Wd=win.open(url,name)}
	else{Wd=win.open(url)}
	return Wd;
}

function alertUnload()
{
	var sConfirmMsg = "Wait! You are almost done! \nDon't leave now!\n\nThe browser's BACK or REFRESH button is not able to save your information at this point in the California Home Saving's Qualification Form. \nTo continue with your Form, please click the 'OK' button below. Clicking 'Cancel' will end your session. \n\nOr, you can choose to call at 1-800-596-7524, and fill out the form over the phone!"
	var sPath = getCurrUrl();
	var sURL = window.location.search
	if (confirm(sConfirmMsg))
		{
			window.location.href = sPath;
			return;
		}
}

function popUp() 
{
	if (document.forms[0].allowNav.value != '1' && document.forms[0].allowNav.value != null)
	{

		if (navigator.appName == "Netscape")
		{
				alertUnload();
		}
		else if (navigator.appName == "Microsoft Internet Explorer")
		{
				sServer = window.location.host;
				sPath = "http://" + sServer + "/BacktoForm.asp";
				
				chkPblocker(top,"about:blank",'testwindow','width=100,height=100');
				
				sDimensions = 'dialogHeight:450px;dialogWidth:560px;edge:Sunken;center:Yes;help:No;scroll:No;resizable:No;status:No;';
					
				var daObject=new Object();
				daObject.window=window;
				daObject.clientX=window.event.clientX;
				daObject.clientY=window.event.clientY;
				objWin = window.showModalDialog(sPath + "?CurrForm=" + getCurrUrl(), window, sDimensions);
				daObject=null;
		}
	}
	return
}

// Script for the Stop Creative ENDS HERE

//-------------- char counter ----------------------
var ns6=document.getElementById&&!document.all

function restrictinput(maxlength,e,placeholder){
if (window.event&&event.srcElement.value.length>=maxlength)
return false
else if (e.target&&e.target==eval(placeholder)&&e.target.value.length>=maxlength){
var pressedkey=/[a-zA-Z0-9\.\,\/]/ //detect alphanumeric keys
if (pressedkey.test(String.fromCharCode(e.which)))
e.stopPropagation()
}
}

function countlimit(maxlength,e,placeholder){
var theform=eval(placeholder)
var lengthleft=maxlength-theform.value.length
var placeholderobj=document.all? document.all[placeholder] : document.getElementById(placeholder)
if (window.event||e.target&&e.target==eval(placeholder)){
if (lengthleft<0)
theform.value=theform.value.substring(0,maxlength)
placeholderobj.innerHTML=lengthleft
}
}


function displaylimit(thename, theid, thelimit){
var theform=theid!=""? document.getElementById(theid) : thename
var limit_text='<b><span id="'+theform.toString()+'">'+thelimit+'</span></b> characters remaining on your input limit of '+thelimit
if (document.all||ns6)
document.write(limit_text)
if (document.all){
eval(theform).onkeypress=function(){ return restrictinput(thelimit,event,theform)}
eval(theform).onkeyup=function(){ countlimit(thelimit,event,theform)}
}
else if (ns6){
document.body.addEventListener('keypress', function(event) { restrictinput(thelimit,event,theform) }, true); 
document.body.addEventListener('keyup', function(event) { countlimit(thelimit,event,theform) }, true); 
}
}