function cc(elID, elClass) 
{
	changeID=document.getElementById(elID);
	changeID.className=elClass;
}

function doNil() { }

function StripBlanks(a) { a = a.replace(/(^ +)|( +$)/g,'');	return a; }

/* VALIDATION VARS */
var firstError = "";
var errorMarker = "";
var fieldTemp = "";
var fieldCheck = "";
var fieldError = "";
var ERRORS = "";
var s = "";
var a = "";
var alphaValid = true;
var rstatus = false;

function textCounter(fieldname, maxlimit)
{
	var field;
	for(i=0; i < document.forms.length; ++i)
	{
		var obj = document.forms[i].elements[fieldname];
		if (obj) field = obj;
	}

	if (field.value.length > maxlimit)
	{
		field.style.color = 'red';
		maxLengths();
	}
	else
	{
		field.style.color = 'black';
	}
}


/* ***************************************************** */
/* VALIDATE TYPE OF DATA ENTERED */
var numb = '0123456789';
var lwr = 'abcdefghijklmnopqrstuvwxyz';
var upr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var spec = ' -/';
var emailspec = '@_.+';
var phonespec = ')(-';

function isValid(parm,val)
{
	if (parm == "") return true;

	for (i=0; i<parm.length; i++)
	{
		if (val.indexOf(parm.charAt(i),0) == -1) return false;
	}
	return true;
}

function isNum(parm) {return isValid(parm,numb);}
function isLower(parm) {return isValid(parm,lwr);}
function isUpper(parm) {return isValid(parm,upr);}
function isAlpha(parm) {return isValid(parm,lwr+upr);}
function isAlphanum(parm) {return isValid(parm,lwr+upr+numb);}
function isAlphaSpec(parm) { return isValid(parm,lwr+upr+spec); }
function isEmail(parm) { return isValid(parm,lwr+upr+numb+emailspec+spec); }
function isPhone(parm) { return isValid(parm,numb+phonespec); }

/* ***************************************************** */
/* VALIDATE FIELD TYPES */
/* ***************************************************** */

/* ***************************************************** */
// Check email field
function checkEmail(fieldName, fieldMax, fieldLabel, validType)
{
	fieldTemp = "document.f."+fieldName+".value";
	fieldValue = eval(fieldTemp);
	fieldError = "err"+fieldName;
	s = ""; s = fieldValue; s = StripBlanks(s); fieldValue = s;

	//validEmailChars = true;

	// Check for alphabetic characters
	if (validType == "email")
	{
		validEmailChars = isEmail(fieldValue);
		//alert(validEmailChars);
	}

	if (fieldValue != "")
	{
		if (validEmailChars == true)
		{
			// Check validity
			if (fieldValue.length > 5)
			{
				var a=fieldValue.indexOf("@");
				var b=fieldValue.indexOf(".",a);
				var c=fieldValue.indexOf(",");
				var d=fieldValue.indexOf(" ");
				var e=fieldValue.lastIndexOf(".")+1;
				var g=fieldValue.length;
				if ((a>0) && (b>(1+1)) && (c==-1) && (d==-1) && (g-e >=2) && ((g-e)<=4)) { }
				else 
				{
					cc(fieldError,'formerror');
					ERRORS += "Please enter a valid "+fieldLabel+".\n";
					getFirstError(fieldName);
				}
			}
			else
			{
				if (fieldValue.length > fieldMax)
				{
					cc(fieldError,'formerror');
					ERRORS += "The length of the "+fieldLabel+" cannot exceed "+fieldMax+".\n";
					getFirstError(fieldName);
				}
				else if (fieldValue.length <= 5)
				{
					cc(fieldError,'formerror');
					ERRORS += "Please enter a valid "+fieldLabel+".\n";
					getFirstError(fieldName);	
				}
			}
		}
		else
		{
			ERRORS += "Please provide a valid "+fieldLabel+".\n";
			cc(fieldError,'formerror');
			getFirstError(fieldName);
		}
	}
	else
	{
		ERRORS += "Please provide your "+fieldLabel+".\n";
		cc(fieldError,'formerror');
		getFirstError(fieldName);
	}
}

/* ***************************************************** */
// Check text fields
function checkText(fieldName, fieldMax, fieldLabel, validType, fieldSize, specificSize)
{

	fieldTemp = "document.f."+fieldName+".value";
	fieldValue = eval(fieldTemp);
	fieldError = "err"+fieldName; 
	
	s = ""; s = fieldValue; s = StripBlanks(s); fieldValue = s;
	alphaValid = true;
	numValid = true;
	telValid = true;

	// Check for alphabetic characters
	if (validType == "alpha")
	{
		alphaValid = isAlphaSpec(fieldValue);
	}

	if (validType == "num")
	{
		numValid = isNum(fieldValue);
	}

	if (validType == "phone")
	{
		telValid = isPhone(fieldValue);
	}

	if (fieldValue != "")
	{
		//alert(alphaValid);
		if ((alphaValid == true) && (validType == "alpha"))
		{
			if (fieldValue.length > fieldMax)
			{
				cc(fieldError,'formerror');
				ERRORS += "The length of the "+fieldLabel+" cannot exceed "+fieldMax+".\n";
				getFirstError(fieldName);
			}
			else if (fieldValue.length == 1)
			{
				cc(fieldError,'formerror');
				ERRORS += "Please enter a valid "+fieldLabel+".\n";
				getFirstError(fieldName);
			}
		}

		if ((numValid == true) && (validType == "num"))
		{
			if ((fieldValue.length != fieldSize) && (specificSize == 'true'))
			{
				cc(fieldError,'formerror');
				ERRORS += "The length of the "+fieldLabel+" must be "+fieldSize+" characters.\n";
				getFirstError(fieldName);
			}
			else if (fieldValue.length == 1)
			{
				cc(fieldError,'formerror');
				ERRORS += "Please enter a valid "+fieldLabel+".\n";
				getFirstError(fieldName);
			}
		}

		//alert(alphaValid);
		if ((telValid == true) && (validType == "phone"))
		{
			if (fieldValue.length != fieldMax)
			{
				cc(fieldError,'formerror');
				ERRORS += "Please enter a valid "+fieldLabel+".\n";
				getFirstError(fieldName);
			}
		}
	}
	else
	{
		ERRORS += "Please provide a valid "+fieldLabel+".\n";
		cc(fieldError,'formerror');
		getFirstError(fieldName);
	}
}

/* ***************************************************** */
// Check Pulldown selections
function checkSelect(fieldName, fieldLabel, fieldTag)
{
	currSel = eval('document.f.'+fieldName+'.selectedIndex');
	currSelValue = eval('document.f.'+fieldName+'.options['+currSel+'].value');
	fieldError = "err"+fieldName; 
		
	if (currSelValue == "")
	{
		ERRORS += "Please select "+fieldTag+" "+fieldLabel+".\n";
		cc(fieldError,'formerror');
		getFirstError(fieldName);
	}
}

/* ***************************************************** */
// Check Radio buttons
function checkRadio(fieldName, fieldLabel, fieldReq, fieldIndex)
{
	fieldError = "err"+fieldName;
	if (eval('document.f.'+fieldName+'[fieldIndex].checked'))
	{
	}
	else
	{
		if (fieldReq)
		{
			ERRORS += "You must select '"+fieldReq+"' in response to "+fieldLabel+" to continue.\n";
			getFirstError(fieldName);
		}
		else
		{
			ERRORS += "Please provide your response to "+fieldLabel+".\n";
			getFirstError(fieldName);
		}
		cc(fieldError,'formerror');
	}
}

/* ***************************************************** */
// Check Checkbox
function checkCheckbox(fieldName, fieldLabel, fieldReq, fieldIndex)
{
	fieldError = "err"+fieldName;
	if (eval('document.f.'+fieldName+'.checked'))
	{
	}
	else
	{
		if (fieldReq)
		{
			ERRORS += "Please indicate that you "+fieldLabel+".\n";
			getFirstError(fieldName);
		}
		else
		{
			ERRORS += "Please provide your response to "+fieldLabel+".\n";
			getFirstError(fieldName);
		}
		cc(fieldError,'formerror');
	}
}

/* ***************************************************** */
/* Check Currency */
function isValidCurrency(obj)
{
	 val = obj.value;
	 cur  = /^-?\d{1,3}(,\d{3})*(\.\d{1,2})?$/;
	 anum=/(^-?\d+$)|(^-?\d+\.\d+$)/;
	 ret = false;

	 if(val.indexOf(",")>-1)
	 	ret = cur.test(val);
	 else
	 	ret = anum.test(val);

	 if(!ret){
//	 	alert("Invalid number format");
	 	return false;
	 }
	 else
	 {
	 	return true;
	 }
}

/* ***************************************************** */
/* Check Numbers on the fly */
function checkNumbers(e)
{
	var unicode=e.charCode? e.charCode : e.keyCode
	if (unicode!=8) //if the key isn't the backspace key (which we should allow)
	{ 
		if (unicode<48||unicode>57) //if not a number
		return false //disable key press
	}
}

/* ***************************************************** */
// Check Telephone Numbers on the fly

var zChar = new Array(' ', '(', ')', '-', '.');
var maxphonelength = 13;
var phonevalue1;
var phonevalue2;
var cursorposition;

function ParseForNumber1(object) { phonevalue1 = ParseChar(object.value, zChar); }
function ParseForNumber2(object) { phonevalue2 = ParseChar(object.value, zChar); }

function validateTel(object,e,updown)
{
	if(e)
	{
		e = e;
	}
	else
	{
		e = window.event;
	}

	if (updown == "up")
	{
		if(e.which)
		{
			var keycode = e.which;
		}
		else
		{
			var keycode = e.keyCode;
		}

		ParseForNumber1(object);

		if(keycode > 48)
		{
			ValidatePhone(object)
		}
	}
	if (updown == "down")
	{
		if(e.which)
		{
			var keycode = e.which;
		}
		else
		{
			var keycode = e.keyCode;
		}

		ParseForNumber2(object);
	}
}

function GetCursorPosition()
{
	var t1 = phonevalue1;
	var t2 = phonevalue2;
	var bool = false
	for (i=0; i<t1.length; i++)
	{
		if (t1.substring(i,1) != t2.substring(i,1))
		{
			if(!bool)
			{
				cursorposition=i;
				bool=true;
			}
		}
	}
}

function ValidatePhone(object)
{
	var p = phonevalue1;
	p = p.replace(/[^\d]*/gi,"");
	if (p.length < 3)
	{
		object.value=p;
	}
	else if(p.length==3)
	{
		pp=p;
		d4=p.indexOf('(');
		d5=p.indexOf(')');
		if(d4==-1)
		{
			pp="("+pp;
		}
		if(d5==-1)
		{
			pp=pp+")";
		}
		object.value = pp;
	}
	else if(p.length>3 && p.length < 7)
	{
		p ="(" + p;
		l30=p.length;
		p30=p.substring(0,4);
		p30=p30+")";
		p31=p.substring(4,l30);
		pp=p30+p31;

		object.value = pp;
	}
	else if(p.length >= 7)
	{
		p ="(" + p;
		l30=p.length;
		p30=p.substring(0,4);
		p30=p30+")";

		p31=p.substring(4,l30);
		pp=p30+p31;

		l40 = pp.length;
		p40 = pp.substring(0,8);
		p40 = p40 + "-";

		p41 = pp.substring(8,l40);
		ppp = p40 + p41;

		object.value = ppp.substring(0, maxphonelength);
	}

	GetCursorPosition()

	if(cursorposition >= 0)
	{
		if (cursorposition == 0)
		{
			cursorposition = 2;
		} else if (cursorposition <= 2)
		{
			cursorposition = cursorposition + 1;
		} else if (cursorposition <= 5)
		{
			cursorposition = cursorposition + 2;
		} else if (cursorposition == 6)
		{
			cursorposition = cursorposition + 2;
		} else if (cursorposition == 7)
		{
			cursorposition = cursorposition + 4;
			e1=object.value.indexOf(')');
			e2=object.value.indexOf('-');
			if (e1>-1 && e2>-1)
			{
				if (e2-e1 == 4)
				{
					cursorposition = cursorposition - 1;
				}
			}
		} else if (cursorposition < 11)
		{
			cursorposition = cursorposition + 3;
		} else if (cursorposition == 11)
		{
			cursorposition = cursorposition + 1;
		} else if (cursorposition >= 12)
		{
			cursorposition = cursorposition;
		}

		var txtRange = object.createTextRange();
		txtRange.moveStart( "character", cursorposition);
		txtRange.moveEnd( "character", cursorposition - object.value.length);
		txtRange.select();
	}
}

function ParseChar(sStr, sChar)
{
	if (sChar.length == null)
	{
		zChar = new Array(sChar);
	}
	else zChar = sChar;

	for (i=0; i<zChar.length; i++)
	{
		sNewStr = "";
		var iStart = 0;
		var iEnd = sStr.indexOf(sChar[i]);

		while (iEnd != -1)
		{
			sNewStr += sStr.substring(iStart, iEnd);
			iStart = iEnd + 1;
			iEnd = sStr.indexOf(sChar[i], iStart);
		}
		sNewStr += sStr.substring(sStr.lastIndexOf(sChar[i]) + 1, sStr.length);

		sStr = sNewStr;
	}
	return sNewStr;
}

function getFirstError(errorMarker)
{
	if (firstError == "") { firstError = errorMarker; }
}

// Check that one transportation type is selected 
function checkTransTypes()
{
	if ( (!(document.f.int_type_trans_car.checked)) && (!(document.f.int_type_trans_plane.checked)) && (!(document.f.int_public_trans.checked)) )
	{
		alert('Please provide honest answers. Select at least one transportation type and click \'Next\' to continue.');
		return false;
	}
	else
	{
		return true;		
	}
}