/*
 * Copyright (c) 2004 Lucid Technologies.
 * All rights reserved.
 *
 * This software is the confidential and proprietary property of
 * Lucid Technologies ('Confidential Information').  This Confidential
 * Information and property shall only be used in strict accordance
 * with the terms set forth in the Master Software License Agreement
 * with Lucid Technologies.
 */

function findObj(n, d)
	{
	var p,i,x;
	if (!d) d=document;
	if ((p=n.indexOf("?"))>0&&parent.frames.length)
		{
		d=parent.frames[n.substring(p+1)].document;
		n=n.substring(0,p);
		}
	if (!(x=d[n])&&d.all) x=d.all[n];
	for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
	for (i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObj(n,d.layers[i].document);
	if (!x && d.getElementById) x=d.getElementById(n);
	return x;
	}

function imageSwap()
	{
	var i,j=0,x,a=imageSwap.arguments;
	document.sr=new Array;
	for (i=0;i<(a.length-2);i+=3)
		{
		if ((x=findObj(a[i]))!=null)
			{
			document.sr[j++]=x;
			if (!x.oSrc) x.oSrc=x.src; x.src=a[i+2];
			}
		}
	}

function imageRestore()
	{
	var i,x,a=document.sr;
	for (i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
	}
	
/*************************************************************
 * Set global variables to use between validation methods
 ************************************************************/
var messagetmp	= "";	// Temporary message storage
var isModified = false;
var targetpage = '';
var browserName = navigator.appName;
var browserVer = parseInt(navigator.appVersion);

var REQUIRED_BGCOLOR= "#FAFCCA";
var ERROR_BGCOLOR= "#EDBCBA";
var NORMAL_BGCOLOR= "white";
var REQD_CHK_BGCOLOR= "#8A6F4A";

/* Format CONSTANTS */
var NONE				= 0;
var SOCIAL_SECURITY 	= 1;
var PHONE_NUMBER 		= 2;
var DATE 				= 3;
var CURRENCY 			= 4;
var NUMERIC 			= 5;
var ALPHA 				= 6;
var ALPHA_NUM 			= 7;
var ZIP_CODE			= 8;
var EMAIL_ADDRESS		= 9;
var TIME				= 10;
var PASSWORD			= 11;
/* End Format CONSTANTS */

/* Input Types */
var TEXT = "text";
var RADIO = "radio";
var CHECK = "checkbox";
/* End Input Types */

/******************************************************
 * Date/Time Methods
 *****************************************************/
function year(date) { return parseInt(getYear(date)); }
function month(date) { return ((parseInt((m = getMonth(date))) == 0) ? parseInt(m.substring(1,2)) : parseInt(m))-1; }
function day(date) { return (parseInt((d = getDay(date))) == 0) ? parseInt(d.substring(1,2)) : parseInt(d); }
function dateObj(date) { return new Date(year(date),month(date),day(date)); }

function diff(date1,date2) { return ((date1-date2)/1000/60/60/24); }
function addDates(date,days) { return new Date(date.getTime() + (days*24*60*60*1000)); }

function getMonthAbbr(month)
	{
	var allMonths = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
	for (var i = 1; i < 13; i++)
		{ if (month == i) return allMonths[i-1]; }
	return null;
	}

function formatTime(time)
	{
	var timeval = getHour(time)+":"+getMinutes(time)+" "+
		getAP(time);
	return timeval;
	}
function getHour(val)
	{
	if (val != null && val.length == 4)
		{
		var newval = parseInt(val.substring(0,2));
		newval = (newval < 10) ? parseInt(val.substring(1,2)) : newval;
		if (newval > 12) newval -= 12;
		if (newval == 0) newval = 12;
		return ((newval < 10) ? "0"+newval : newval);
		}
	else if (val != null && val.length >= 12)
		{
		var newval = parseInt(val.substring(8,10));
		if (newval > 12) newval -= 12;
		if (newval == 0) newval = 12;
		return ((newval < 10) ? "0"+newval : newval);
		}
	return "";
	}
function getMinutes(val)
	{
	if (val != null && val.length == 4) return val.substring(2,4);
	else if (val != null && val.length >= 12) return val.substring(10,12);
	return "";
	}
function getAP(val)
	{
	if (val != null && val.length == 4)
		{
		var newval = parseInt(val.substring(0,2));
		return ((newval >= 12) ? "PM" : "AM");
		}
	else if (val != null && val.length >= 12)
		{
		var newval = parseInt(val.substring(8,10));
		return ((newval >= 12) ? "PM" : "AM");
		}
	return "AM";
	}

function formatDate(date)
	{
	var dateval = getMonth(date)+"/"+getDay(date)+"/"+
		getYear(date);
	return dateval;
	}

function getMonth(val)
	{
	if (val != null && val.length >= 8) return val.substring(4,6);
	return "";
	}
function getDay(val)
	{
	if (val != null && val.length >= 8) return val.substring(6,8);
	return "";
	}
function getYear(val)
	{
	if (val != null && val.length >= 8) return val.substring(0,4);
	return "";
	}

/*************************************************************
 * NUMERIC Field Validator
 ************************************************************/
function chkNum(field_value, field_desc, numeric_only, icd)
	{
	if (numeric_only == null) numeric_only = false;
	if (icd == null) icd = false;
	if (field_value.length > 0)
		{
		var nmbs = "0123456789"+((!numeric_only) ? "-." : "");
		nmbs += (icd) ? "VvEe" : "";
		var bad = 0;
		var str;

		for (var n = 0; n < field_value.length; n++)
			{
			str = field_value.substring(n, n + 1);
			if (nmbs.indexOf(str) < 0)
				{ bad++; }
			}

		if (bad > 0)
			{ return ("\n * "+field_desc+" has invalid characters"); }
		else return ("");
		}
	else return ("");
	}

/*************************************************************
 * ALPHA Field Validator
 ************************************************************/
function chkAlpha(field_value, field_desc)
	{
	field_value = field_value.toLowerCase();
	if (field_value.length > 0)
		{
		var nmbs = "abcdefghijklmnopqrstuvwxyz ";
		var bad = 0;
		var str;

		for (var n = 0; n < field_value.length; n++)
			{
			str = field_value.substring(n, n + 1);
			if (nmbs.indexOf(str) < 0)
				{ bad++; }
			}

		if (bad > 0)
			{ return ("\n * "+field_desc+" has invalid characters"); }
		else return ("");
		}
	else return ("");
	}

/*************************************************************
 * ALPHA-NUMERIC Field Validator
 ************************************************************/
function chkAlphaNum(field_value, field_desc)
	{
	field_value = field_value.toLowerCase();
	if (field_value.length > 0)
		{
		var nmbs = "-abcdefghijklmnopqrstuvwxyz0123456789. ";
		var bad = 0;
		var str;

		for (var n = 0; n < field_value.length; n++)
			{
			str = field_value.substring(n, n + 1);
			if (nmbs.indexOf(str) < 0)
				{ bad++; }
			}

		if (bad > 0)
			{ return ("\n * "+field_desc+" has invalid characters"); }
		else return ("");
		}
	else return ("");
	}

/*************************************************************
 * SSN Field Validator
 ************************************************************/
function chkSSN(name_of_field, field_desc, formname)
	{
	field_desc = (field_desc == null || field_desc.length < 1) ? name_of_field : field_desc;
	formname = (formname == null) ? "form" : formname;

	var SSN1 = eval("document."+formname+"."+name_of_field+"1");
	var SSN2 = eval("document."+formname+"."+name_of_field+"2");
	var SSN3 = eval("document."+formname+"."+name_of_field+"3");
	if (field_desc == name_of_field && SSN1.title.length > 0)
		{ field_desc = SSN1.title; }

	var isComplete = (	SSN1.value.length > 0 ||
						SSN2.value.length > 0 ||
						SSN3.value.length > 0) ? true : false;
	messagetmp = "";
	if (isComplete)
		{
		messagetmp += chkNum(SSN1.value, field_desc, true);
		messagetmp += chkNum(SSN2.value, field_desc, true);
		messagetmp += chkNum(SSN3.value, field_desc, true);
		if (messagetmp.length < 1)
			{
			if (SSN1.value.length < 3 || SSN2.value.length < 2 || SSN3.value.length < 4)
				{ messagetmp += ("\n * "+field_desc+" has an incorrect number of digits"); }
			}
		}
	if (messagetmp.length > 0)
		{
		SSN1.style.background = ERROR_BGCOLOR;
		SSN2.style.background = ERROR_BGCOLOR;
		SSN3.style.background = ERROR_BGCOLOR;
		}
	return (messagetmp);
	}

/*************************************************************
 * PHONE Field Validator
 ************************************************************/
function chkPhone(name_of_field, field_desc, formname)
	{
	field_desc = (field_desc == null || field_desc.length < 1) ? name_of_field : field_desc;
	formname = (formname == null) ? "form" : formname;

	var area = eval("document."+formname+"."+name_of_field+"AC");
	var pref = eval("document."+formname+"."+name_of_field+"PRE");
	var suff = eval("document."+formname+"."+name_of_field+"SUF");
	var extn = (eval("document."+formname+"."+name_of_field+"EXT")) ? eval("document."+formname+"."+name_of_field+"EXT") : null;
	if (field_desc == name_of_field && area.title.length > 0)
		{ field_desc = area.title; }

	messagetmp = "";
	if (area.value.length > 0) messagetmp += chkNum(area.value, field_desc);
	if (pref.value.length > 0) messagetmp += chkNum(pref.value, field_desc);
	if (suff.value.length > 0) messagetmp += chkNum(suff.value, field_desc);
	if (extn != null && extn.value.length > 0) messagetmp += chkNum(extn.value, field_desc);

	if (messagetmp.length < 1)
		{
		if (area.value.length > 0 || pref.value.length > 0 || suff.value.length > 0)
			{
			if	(area.value.length < 3 || pref.value.length < 3 || suff.value.length < 4)
				{ messagetmp += ("\n * "+field_desc+" has an incorrect number of digits."); }
			}
		}
	if (messagetmp.length > 0)
		{
		area.style.background = ERROR_BGCOLOR;
		pref.style.background = ERROR_BGCOLOR;
		suff.style.background = ERROR_BGCOLOR;
		extn.style.background = ERROR_BGCOLOR;
		}
	return (messagetmp);
	}

/*************************************************************
 * DATE Field Validator
 ************************************************************/
function chkDate(name_of_field, field_desc, formname, idx)
	{
	formname = (formname == null) ? "form" : formname;
	field_desc = (field_desc == null || field_desc.length < 1) ? name_of_field : field_desc;

	if (idx == null) idx = 0;
	var array = (eval("document."+formname+"."+name_of_field+"Month["+idx+"]")) ? true : false;
	var arrayNxt = (eval("document."+formname+"."+name_of_field+"Month["+(idx+1)+"]")) ? true : false;
	messagetmp = "";

	var arrayVal = (array) ? "["+idx+"]" : "";
	if (field_desc == name_of_field && eval("document."+formname+"."+name_of_field+"Month"+arrayVal+".title") &&
		eval("document."+formname+"."+name_of_field+"Month"+arrayVal+".title.length > 0"))
		{ field_desc = eval("document."+formname+"."+name_of_field+"Month"+arrayVal+".title"); }

	var myDay = eval("document."+formname+"." + name_of_field + "Day"+arrayVal);
	var myMonth = eval("document."+formname+"." + name_of_field + "Month"+arrayVal);
	var myYear = eval("document."+formname+"." + name_of_field + "Year"+arrayVal);

	var now = new Date();
	var nowYear = ""+now.getYear();
	nowYear = parseInt(nowYear.substring(2));

	myDay.value = (myDay.value.length > 0 && myDay.value.length < 2) ? "0"+myDay.value : myDay.value;
	myMonth.value = (myMonth.value.length > 0 && myMonth.value.length < 2) ? "0"+myMonth.value : myMonth.value;
	myYear.value = (myYear.value.length > 0 && myYear.value.length == 2 && parseInt(myYear.value) < (nowYear+3)) ? "20"+myYear.value :
		((myYear.value.length == 2 && parseInt(myYear.value) >= (nowYear+3)) ? "19"+myYear.value :
		((myYear.value.length == 3) ? "BAD" : myYear.value));

	var myDayStr = myDay.value;
	var myMonthStr = myMonth.value;
	var myYearStr = myYear.value;

	var isComplete = (myDayStr.length > 0 || myMonthStr.length > 0 || myYearStr.length > 0);
	if (isComplete)
		{
		var allMonths = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
		for (var i = 1; i < 13; i++)
			{ if (myMonthStr == i) myMonthStr = allMonths[i-1]; }

		var myDateStr = myDayStr + ' ' + myMonthStr + ' ' + myYearStr;
		var myDate = new Date(myDateStr);
		var myDate_string = myDate.toGMTString();
		var myDate_array = myDate_string.split(' ');

		if ((myDate_array[2] != myMonthStr) || (myYearStr.length == 4 && parseInt(myYearStr) < 1900))
			{
			myDateStr = myMonthStr + ' ' + myDayStr + ", " + myYearStr;
			messagetmp += ('\n * '+field_desc+': ("' + myDateStr + '")');
			}
		}
	if (messagetmp.length > 0)
		{
		myDay.style.background = ERROR_BGCOLOR;
		myMonth.style.background = ERROR_BGCOLOR;
		myYear.style.background = ERROR_BGCOLOR;
		}
	if (arrayNxt && messagetmp.length == 0) return chkDate(name_of_field,name_of_field,formname,idx+1);
	else return (messagetmp);
	}

/*************************************************************
 * CURRENCY Field Validator
 ************************************************************/
function chkCurrency(name_of_field, field_desc, formname)
	{
	formname = (formname == null) ? "form" : formname;
	field_desc = (field_desc == null || field_desc.length < 1) ? name_of_field : field_desc;
	if (field_desc == name_of_field && eval("document."+formname+"."+name_of_field+".title.length > 0"))
		{ field_desc = eval("document."+formname+"."+name_of_field+".title"); }

	var amt = eval("document."+formname+"."+name_of_field);

	messagetmp = "";
	if (amt.value.length > 0)
		{
		if (amt.value.substring(0,1) == "$") amt.value = amt.value.substring(1,amt.value.length);
		messagetmp += chkNum(amt.value, field_desc);
		}

	if (messagetmp.length < 1 && amt.value.length > 0)
		{
		if (amt.value.indexOf(".") < 0)
			{ amt.value = amt.value + ".00"; }
		else
			{
			var amount = "";
			var dollar = amt.value.substring(0,amt.value.indexOf("."));
			var cents  = amt.value.substring(amt.value.indexOf(".")+1);
			if (cents.length > 2)
				{
				amount = ""+(Math.round(amt.value*100)/100);
				cents  = amount.substring(amount.indexOf(".")+1);
				}

			//if (cents.length > 2) messagetmp += "\n * "+field_desc+" is an incorrect dollar amount.";
			if (cents.length == 0) cents = "00";
			else if (cents.length < 2) cents = cents + "0";
			amount = dollar+"."+cents;

			if (messagetmp.length < 1) amt.value = amount;
			}
		}
	if (messagetmp.length > 0) { mt.style.background = ERROR_BGCOLOR; }
	return (messagetmp);
	}

/*************************************************************
 * TIME Field Validator
 ************************************************************/
function chkTime(name_of_field, field_desc, formname, idx)
	{
	formname = (formname == null) ? "form" : formname;
	field_desc = (field_desc == null || field_desc.length < 1) ? name_of_field : field_desc;

	if (idx == null) idx = 0;
	var array = (eval("document."+formname+"."+name_of_field+"HH["+idx+"]")) ? true : false;
	var arrayNxt = (eval("document."+formname+"."+name_of_field+"HH["+(idx+1)+"]")) ? true : false;

	var arrayVal = (array) ? "["+idx+"]" : "";
	if (field_desc == name_of_field && eval("document."+formname+"."+name_of_field+"HH"+arrayVal+".title.length > 0"))
		{ field_desc = eval("document."+formname+"."+name_of_field+"HH"+arrayVal+".title"); }

	var hour = eval("document."+formname+"."+name_of_field+"HH"+arrayVal+"");
	var minute = eval("document."+formname+"."+name_of_field+"MM"+arrayVal+"");

	messagetmp = "";
	if (hour.value.length > 0) messagetmp += chkNum(hour.value, field_desc);
	if (minute.value.length > 0) messagetmp += chkNum(minute.value, field_desc);

	if (messagetmp.length < 1 && hour.value.length > 0)
		{
		if (hour.value.length == 1) hour.value = "0"+hour.value;
		if (minute.value.length == 1) minute.value = "0"+minute.value;
		else if (minute.value.length == 0) minute.value = "00";

		var hourInt = parseInt(hour.value);
		var minuteInt = parseInt(minute.value);
		if (hourInt > 12) messagetmp += "\n * "+field_desc+" is an incorrect time.";
		else if (minuteInt > 59) messagetmp += "\n * "+field_desc+" is an incorrect time.";
		}
	if (messagetmp.length > 0)
		{
		hour.style.background = ERROR_BGCOLOR;
		minute.style.background = ERROR_BGCOLOR;
		}
	if (arrayNxt && messagetmp.length == 0) return chkTime(name_of_field,name_of_field,formname,idx+1);
	else return (messagetmp);
	}

/*************************************************************
 * ZIPCODE Field Validator
 ************************************************************/
function chkZip(name_of_field, field_desc, formname)
	{
	formname = (formname == null) ? "form" : formname;
	field_desc = (field_desc == null || field_desc.length < 1) ? name_of_field : field_desc;

	var array = (eval("document."+formname+"."+name_of_field+"1[0]")) ? true : false;
	var arrayLng = (array) ? eval("document."+formname+"."+name_of_field+"1.length") : 1;

	messagetmp = "";
	for (var i = 0; i < arrayLng; i++)
		{
		var arrayVal = (array) ? "["+i+"]" : "";
		var thismessage = "";

		var zip1 = eval("document."+formname+"."+name_of_field+"1"+arrayVal);
		var zip2 = eval("document."+formname+"."+name_of_field+"2"+arrayVal);
		if (field_desc == name_of_field && zip1.title.length > 0)
			{ field_desc = zip1.title; }

		if (zip1.value.length == 3) thismessage += chkAlphaNum(zip1.value, field_desc+((array) ? " (Row "+(i+1)+")" : ""));
		else if (zip1.value.length > 0) thismessage += chkNum(zip1.value, field_desc+((array) ? " (Row "+(i+1)+")" : ""));
		if (zip2.value.length == 3) thismessage += chkAlphaNum(zip2.value, field_desc+((array) ? " (Row "+(i+1)+")" : ""));
		else if (zip2.value.length > 0) thismessage += chkNum(zip2.value, field_desc+((array) ? " (Row "+(i+1)+")" : ""));

		if (thismessage.length < 1)
			{
			if (zip1.value.length != 3 || zip2.value.length != 3)
				{
				if ((zip1.value.length > 0 && zip1.value.length < 5) ||
					(zip2.value.length > 0 && zip2.value.length < 4))
					{
					thismessage += ("\n * "+field_desc+((array) ? " (Row "+(i+1)+")" : "")+" has an incorrect number of digits.");
					}
				}
			}
		if (thismessage.length > 0) { zip1.style.background = ERROR_BGCOLOR; zip2.style.background = ERROR_BGCOLOR; }
		messagetmp += thismessage;
		}
	return (messagetmp);
	}

/*************************************************************
 * EMAIL Field Validator
 ************************************************************/
function chkEmail(name_of_field, field_desc, formname)
	{
	formname = (formname == null) ? "form" : formname;
	field_desc = (field_desc == null || field_desc.length < 1) ? name_of_field : field_desc;
	if (field_desc == name_of_field && eval("document."+formname+"."+name_of_field+".title.length > 0"))
		{ field_desc = eval("document."+formname+"."+name_of_field+".title"); }

	var field = eval("document."+formname+"."+name_of_field);
	var field_value = field.value.toLowerCase();

	messagetmp = "";
	if (field_value.length > 0)
		{
		if (field_value.indexOf("@") <= 0 || field_value.indexOf(".") <= 0)
			{ messagetmp += ("\n * "+field_desc+" is an invalid email address"); }
		else
			{
			var nmbs = "abcdefghijklmnopqrstuvwxyz0123456789._@-+";
			var bad = 0;
			var str;

			for (var n = 0; n < field_value.length; n++)
				{
				str = field_value.substring(n, n + 1);
				if (nmbs.indexOf(str) < 0)
					{ bad++; }
				}

			if (bad > 0)
				{ messagetmp += ("\n * "+field_desc+" has invalid characters"); }
			}
		}
	if (messagetmp.length > 0) { field.style.background = ERROR_BGCOLOR; }
	return (messagetmp);
	}

/*************************************************************
 * PASSWORD Field Validator
 ************************************************************/
function chkPassword(name_of_field, field_desc, formname)
	{
	formname = (formname == null) ? "form" : formname;
	field_desc = (field_desc == null || field_desc.length < 1) ? name_of_field : field_desc;
	if (field_desc == name_of_field && eval("document."+formname+"."+name_of_field+".title.length > 0"))
		{ field_desc = eval("document."+formname+"."+name_of_field+".title"); }

	var field = eval("document."+formname+"."+name_of_field);
	var field_value = field.value.toLowerCase();

	messagetmp = "";
	if (field_value.length > 0 && field_value.length < 8) messagetmp += "\n * "+field_desc+" does not contain at least 8 characters";
	else if (field_value.length > 0)
		{
		var alpha = "abcdefghijklmnopqrstuvwxyz";
		var num = "0123456789";
		var bad = 0;
		var str;

		var hasAlpha = false;
		var hasNum = false;
		for (var n = 0; n < field_value.length; n++)
			{
			str = field_value.substring(n, n + 1);
			if (alpha.indexOf(str) > -1) hasAlpha = true;
			if (num.indexOf(str) > -1) hasNum = true;
			if (alpha.indexOf(str) < 0 && num.indexOf(str) < 0) { bad++; }
			}

		if (bad > 0) { messagetmp += ("\n * "+field_desc+" has invalid characters"); }
		else if (!hasAlpha || !hasNum) messagetmp += "\n * "+field_desc+" does not contain alpha and numeric characters";
		}
	if (messagetmp.length > 0) { field.style.background = ERROR_BGCOLOR; }
	return (messagetmp);
	}

/*************************************************************
 * REQUIRED Field Validator
 ************************************************************/
function chkRequired(name_of_field, input_type, format_type, field_desc, formname)
	{
	formname = (formname == null) ? "form" : formname;
	field_desc = (field_desc == null || field_desc.length < 1) ? name_of_field : field_desc;

	messagetmp = "";
	if (input_type == "text")
		{
		if (format_type == SOCIAL_SECURITY || format_type == ZIP_CODE)
			{
			var array = (eval("document."+formname+"."+name_of_field+"1[0]")) ? true : false;
			var arrayLng = (array) ? eval("document."+formname+"."+name_of_field+"1.length") : 1;
			for (var i = 0; i < arrayLng; i++)
				{
				var arrayVal = (array) ? "["+i+"]" : "";

				if (eval("!document."+formname+"."+name_of_field+"1"+arrayVal+".disabled"))
					{
					if ((format_type == ZIP_CODE) &&
						(eval("document."+formname+"."+name_of_field+"1"+arrayVal+".value.length < 1")))
						{
						if (field_desc == name_of_field && eval("document."+formname+"."+name_of_field+"1"+arrayVal+".title.length > 0"))
							{ field_desc = eval("document."+formname+"."+name_of_field+"1"+arrayVal+".title"); }
						messagetmp += ("\n * "+field_desc+((array) ? " (Row "+(i+1)+")" : ""));
						}
					else if ((format_type == SOCIAL_SECURITY) &&
						(eval("document."+formname+"."+name_of_field+"1"+arrayVal+".value.length < 1") ||
						 eval("document."+formname+"."+name_of_field+"2"+arrayVal+".value.length < 1") ||
						 eval("document."+formname+"."+name_of_field+"3"+arrayVal+".value.length < 1")))
						{
						if (field_desc == name_of_field && eval("document."+formname+"."+name_of_field+"1"+arrayVal+".title.length > 0"))
							{ field_desc = eval("document."+formname+"."+name_of_field+"1"+arrayVal+".title"); }
						messagetmp += ("\n * "+field_desc+((array) ? " (Row "+(i+1)+")" : ""));
						}
					}
				}
			}
		else if (format_type == PHONE_NUMBER)
			{
			if (eval("!document."+formname+"."+name_of_field+"AC.disabled") &&
			   (eval("document."+formname+"."+name_of_field+"AC.value.length < 1") ||
				eval("document."+formname+"."+name_of_field+"PRE.value.length < 1") ||
				eval("document."+formname+"."+name_of_field+"SUF.value.length < 1")))
				{
				if (field_desc == name_of_field && eval("document."+formname+"."+name_of_field+"AC.title.length > 0"))
					{ field_desc = eval("document."+formname+"."+name_of_field+"AC.title"); }
				messagetmp += ("\n * "+field_desc);
				}
			}
		else if (format_type == DATE)
			{
			var array = (eval("document."+formname+"."+name_of_field+"Month[0]")) ? true : false;
			var arrayLng = (array) ? eval("document."+formname+"."+name_of_field+"Month.length") : 1;
			for (var i = 0; i < arrayLng; i++)
				{
				var arrayVal = (array) ? "["+i+"]" : "";
				if (eval("!document."+formname+"."+name_of_field+"Month"+arrayVal+".disabled") &&
				   (eval("document."+formname+"."+name_of_field+"Month"+arrayVal+".value.length < 1") ||
					eval("document."+formname+"."+name_of_field+"Day"+arrayVal+".value.length < 1") ||
					eval("document."+formname+"."+name_of_field+"Year"+arrayVal+".value.length < 1")))
					{
					if (field_desc == name_of_field || eval("document."+formname+"."+name_of_field+"Month"+arrayVal+".title.length > 0"))
						{ field_desc = eval("document."+formname+"."+name_of_field+"Month"+arrayVal+".title"); }
					messagetmp += ("\n * "+field_desc);
					}
				}
			}
		else if (format_type == TIME)
			{
			var array = (eval("document."+formname+"."+name_of_field+"HH[0]")) ? true : false;
			var arrayLng = (array) ? eval("document."+formname+"."+name_of_field+"HH.length") : 1;
			for (var i = 0; i < arrayLng; i++)
				{
				var arrayVal = (array) ? "["+i+"]" : "";
				if (eval("!document."+formname+"."+name_of_field+"HH"+arrayVal+".disabled") &&
				   (eval("document."+formname+"."+name_of_field+"HH"+arrayVal+".value.length < 1")))
					{
					if (field_desc == name_of_field || eval("document."+formname+"."+name_of_field+"HH"+arrayVal+".title.length > 0"))
						{ field_desc = eval("document."+formname+"."+name_of_field+"HH"+arrayVal+".title"); }
					messagetmp += ("\n * "+field_desc);
					}
				}
			}
		else
			{
			//alert("document."+formname+"."+name_of_field+"[0]");
			var array = (eval("document."+formname+"."+name_of_field+"[0]")) ? true : false;
			var arrayLng = (array) ? eval("document."+formname+"."+name_of_field+".length") : 1;
			array = (array && eval("typeof document."+formname+"."+name_of_field+"[0].type") != "undefined");
			arrayLng = (array) ? eval("document."+formname+"."+name_of_field+".length") : 1;
			for (var i = 0; i < arrayLng; i++)
				{
				var arrayVal = (array) ? "["+i+"]" : "";
				if ( eval("!document."+formname+"."+name_of_field+""+arrayVal+".disabled") &&
					(eval("document."+formname+"."+name_of_field+""+arrayVal+".value.length < 1")))
					{
					if (field_desc == name_of_field || eval("document."+formname+"."+name_of_field+""+arrayVal+".title.length > 0"))
						{ field_desc = eval("document."+formname+"."+name_of_field+""+arrayVal+".title"); }
					messagetmp += ("\n * "+field_desc);
					}
				}
			}
		}
	else if (input_type == "radio")
		{
		var isChecked = true;
		var radio = eval("document."+formname+"."+name_of_field);
		for (var i = 0; i < radio.length; i++)
			{
			if (!radio[i].disabled) isChecked = false;
			if (radio[i].checked) { isChecked = true; break; }
			}
		if (field_desc == name_of_field && eval("document."+formname+"."+name_of_field+".title.length > 0"))
			{ field_desc = eval("document."+formname+"."+name_of_field+".title"); }
		if (!isChecked)
			{ messagetmp += ("\n * "+field_desc); }
		}
	else if (input_type == "checkbox")
		{
		var isChecked = false;
		if (checkbox = eval("document."+formname+"."+name_of_field))
			{
			if (checkbox.disabled || checkbox.checked)
				{ isChecked = true; }
			}
		else if (eval("document."+formname+"."+name_of_field+"a"))
			{
			var letters = "abcdefghijklmnopqrstuvwxyz";
			var n = 0;
			while (checkbox = eval("document."+formname+"."+name_of_field+""+letters.substring(n,n+1)))
				{
				n++;
				if (checkbox.disabled || checkbox.checked)
					{ isChecked = true; }
				}
			if (field_desc == name_of_field && eval("document."+formname+"."+name_of_field+""+letters.substring(n,n+1)+".title.length > 0"))
				{ field_desc = eval("document."+formname+"."+name_of_field+""+letters.substring(n,n+1)+".title"); }
			}
		else
			{
			var n = 1;
			if (eval("document."+formname+"."+name_of_field+""+0)) n = 0;
			while (checkbox = eval("document."+formname+"."+name_of_field+""+n))
				{
				n++;
				if (checkbox.disabled || checkbox.checked)
					{ isChecked = true; }
				}
			if (field_desc == name_of_field && eval("document."+formname+"."+name_of_field+""+1+".title.length > 0"))
				{ field_desc = eval("document."+formname+"."+name_of_field+""+1+".title"); }
			}

		if (!isChecked)
			{ messagetmp += ("\n * "+field_desc); }
		}
	return (messagetmp);
	}

/*************************************************************
 * MAIN Form Validator
 ************************************************************/
function validateForm(params,formname)
	{
	/****************************************
	 * CONSTANTS
	 *
	 * var NONE				= 0;
	 * var SOCIAL_SECURITY 	= 1;
	 * var PHONE_NUMBER 	= 2;
	 * var DATE 			= 3;
	 * var CURRENCY 		= 4;
	 * var NUMERIC 			= 5;
	 * var ALPHA 			= 6;
	 * var ALPHA_NUM 		= 7;
	 * var ZIP_CODE			= 8;
	 * var EMAIL_ADDRESS	= 9;
	 * var TIME				= 10;
	 * var PASSWORD			= 11;
	 ***************************************/

	/****************************************
	 * params[
	 *	[
	 *	String name_of_field,
	 *	String input_type,
	 *	Constant format_type,
	 *	boolean required,
	 *	Integer field_desc
	 *	]
	 *		 ]
	 ***************************************/
	var messagetxt = "";
	var messagereq = "";
	var messagedt = "";
	var messagefld = "";
	formname = (formname == null) ? "form" : formname;
	for (var i = 0; i < params.length; i++)
		{		var name_of_field 		= params[i][0];
		var input_type			= params[i][1];
		var format_type			= params[i][2];
		var required			= params[i][3];
		var field_desc			= params[i][4];

		var chkttl = false;
		field_desc = (chkttl = (typeof field_desc == 'undefined' || field_desc == null || field_desc.length < 1)) ? name_of_field : field_desc;
		var ttl = eval("document."+formname+"."+name_of_field);
		if (input_type == "radio" && chkttl && ttl[0].title && ttl[0].title.length > 0)
			{ field_desc = eval("document."+formname+"."+name_of_field+"[0].title"); }
		else if (chkttl && ((ttl && ttl.title && ttl.title.length > 0) || (ttl && ttl[0] && ttl[0].title && ttl[0].title.length > 0)))
			{
			if (ttl[0]) field_desc = eval("document."+formname+"."+name_of_field+"[0].title");
			else field_desc = eval("document."+formname+"."+name_of_field+".title");
			}

		if (required)
			{ messagereq += chkRequired(name_of_field, input_type, format_type, field_desc, formname); }
		if (format_type == DATE)
			{ messagedt += chkDate(name_of_field, field_desc, formname); }
		else if (format_type == CURRENCY)
			{ messagefld += chkCurrency(name_of_field, field_desc, formname); }
		else if (format_type == SOCIAL_SECURITY)
			{ messagefld += chkSSN(name_of_field, field_desc, formname); }
		else if (format_type == PHONE_NUMBER)
			{ messagefld += chkPhone(name_of_field, field_desc, formname); }
		else if (format_type == NUMERIC)
			{
			var fld = eval("document."+formname+"."+name_of_field);
			var isArr = (fld && fld[0]) ? true : false;
			var arrLng = (isArr) ? fld.length : 1;
			for (var j = 0, n = arrLng; j < n; j++)
				{
				var arrStr = (isArr) ? "["+j+"]" : "";
				fld = (isArr) ? eval("document."+formname+"."+name_of_field+arrStr) : fld;
				messagetmp = chkNum(fld.value, field_desc);
				if (messagetmp.length > 0) fld.style.background = ERROR_BGCOLOR;
				messagefld += messagetmp;
				}
			}
		else if (format_type == ALPHA)
			{
			var fld = eval("document."+formname+"."+name_of_field);
			var isArr = (fld && fld[0]) ? true : false;
			var arrLng = (isArr) ? fld.length : 1;
			for (var j = 0, n = arrLng; j < n; j++)
				{
				var arrStr = (isArr) ? "["+j+"]" : "";
				fld = (isArr) ? eval("document."+formname+"."+name_of_field+arrStr) : fld;
				messagetmp = chkAlpha(fld.value, field_desc);
				if (messagetmp.length > 0) fld.style.background = ERROR_BGCOLOR;
				messagefld += messagetmp;
				}
			}
		else if (format_type == ALPHA_NUM)
			{
			var fld = eval("document."+formname+"."+name_of_field);
			var isArr = (fld && fld[0]) ? true : false;
			var arrLng = (isArr) ? fld.length : 1;
			for (var j = 0, n = arrLng; j < n; j++)
				{
				var arrStr = (isArr) ? "["+j+"]" : "";
				fld = (isArr) ? eval("document."+formname+"."+name_of_field+arrStr) : fld;
				messagetmp = chkAlphaNum(fld.value, field_desc);
				if (messagetmp.length > 0) fld.style.background = ERROR_BGCOLOR;
				messagefld += messagetmp;
				}
			}
		else if (format_type == ZIP_CODE)
			{ messagefld += chkZip(name_of_field, field_desc, formname); }
		else if (format_type == EMAIL_ADDRESS)
			{ messagefld += chkEmail(name_of_field, field_desc, formname); }
		else if (format_type == PASSWORD)
			{ messagefld += chkPassword(name_of_field, field_desc, formname); }
		else if (format_type == TIME)
			{ messagefld += chkTime(name_of_field, field_desc, formname); }
		}

	if (messagereq.length > 0)
		{ messagetxt += "\nTHE FOLLOWING FIELDS ARE REQUIRED:\n__________________________________\n"+messagereq; }
	if (messagedt.length > 0)
		{ messagetxt += "\n\nTHE FOLLOWING DATE FIELDS ARE INVALID:\n__________________________________\n"+messagedt; }
	if (messagefld.length > 0)
		{ messagetxt += "\n\nTHE FOLLOWING FIELDS ARE INVALID:\n__________________________________\n"+messagefld; }

	if (messagetxt.length > 0)
		{
		alert(messagetxt);
		return (false);
		}
	else return (true);
	}

/*************************************************************
 * SET REQUIRED
 *
 * This method is designed to loop through the specified
 * param fields and colorize the ones indicated as required.
 ************************************************************/
function setRequired(params,formname,resetAll)
	{
	formname = (formname == null) ? "form" : formname;
	var form = eval("document."+formname);
	resetAll = (resetAll == null) ? false : resetAll;

	/** Loop through params checking for required fields */
	for (var i = 0; i < params.length; i++)
		{
		/** param vars */
		var name_of_field	= params[i][0];
		var input_type		= params[i][1];
		var format_type		= params[i][2];
		var required		= params[i][3];
		var field_desc		= params[i][4];

		/** vars for array fields */
		var array = false;
		var arrayLng = -1;
		var arrayVal = "";

		/** form field objects */
		var field1 = null;
		var field2 = null;
		var field3 = null;
		var field4 = null;

		/** Check for required */
		var newBGColor = (required) ? REQUIRED_BGCOLOR : NORMAL_BGCOLOR;
		if (required || resetAll)
			{
			/** Set field vars based on format_type */
			if (input_type != "checkbox")
				{
				if (format_type == SOCIAL_SECURITY || format_type == ZIP_CODE)
					{
					field1 = (form[name_of_field+"1"]) ? form[name_of_field+"1"] : null;
					field2 = (form[name_of_field+"2"]) ? form[name_of_field+"2"] : null;
					field3 = (form[name_of_field+"3"]) ? form[name_of_field+"3"] : null;
					}
				else if (format_type == DATE)
					{
					field1 = (form[name_of_field+"Month"]) ? form[name_of_field+"Month"] : null;
					field2 = (form[name_of_field+"Day"]) ? form[name_of_field+"Day"] : null;
					field3 = (form[name_of_field+"Year"]) ? form[name_of_field+"Year"] : null;
					}
				else if (format_type == PHONE_NUMBER)
					{
					field1 = (form[name_of_field+"AC"]) ? form[name_of_field+"AC"] : null;
					field2 = (form[name_of_field+"PRE"]) ? form[name_of_field+"PRE"] : null;
					field3 = (form[name_of_field+"SUF"]) ? form[name_of_field+"SUF"] : null;
					field4 = (form[name_of_field+"EXT"]) ? form[name_of_field+"EXT"] : null;
					}
				else if (format_type == TIME)
					{
					field1 = (form[name_of_field+"HH"]) ? form[name_of_field+"HH"] : null;
					field2 = (form[name_of_field+"MM"]) ? form[name_of_field+"MM"] : null;
					field3 = (form[name_of_field+"AP"]) ? form[name_of_field+"AP"] : null;
					}
				else
					{
					field1 = (form[name_of_field]) ? form[name_of_field] : null;
					}

				/** Check for array */
				array = (field1 && field1[0]) ? true : false;
				if (field1[0] && field1.type && field1.type.indexOf("select") > 0) array = false;
				if (field1[0] && field1.options) arrayLng = field1.options.length;
				else arrayLng = (array) ? field1.length : 1;

				for (var x = 0; x < arrayLng; x++)
					{
					/** is select box */
					var isSel1 = (field1 && field1.options && field1.options[x]) ? true : false;
					var isSel2 = (field2 && field2.options) ? true : false;
					var isSel3 = (field3 && field3.options) ? true : false;
					var isSel4 = (field4 && field4.options) ? true : false;

					/** Check for array */
					var nField1 = (array && field1) ? (isSel1) ? field1.options[x] : field1[x] : (field1) ? field1 : null;
					var nField2 = (array && field2) ? (isSel2) ? field2.options[x] : field2[x] : (field2) ? field2 : null;
					var nField3 = (array && field3) ? (isSel3) ? field3.options[x] : field3[x] : (field3) ? field3 : null;
					var nField4 = (array && field4) ? (isSel4) ? field4.options[x] : field4[x] : (field4) ? field4 : null;

					/** Mark required fields */
					if (nField1) nField1.style.background = newBGColor;
					if (nField2) nField2.style.background = newBGColor;
					if (nField3) nField3.style.background = newBGColor;
					if (nField4) nField4.style.background = newBGColor;
					}
				}
			else
				{
				var isLetter = (form[name_of_field+"a"]) ? true : false;
				var letters = "abcdefghijklmnopqrstuvwxyz";
				var n = 0;
				var suffix = (isLetter) ? letters.substring(n,n+1) : ""+n;
				var chk = null;
				while (chk = form[name_of_field+suffix])
					{
					n++;
					suffix = (isLetter) ? letters.substring(n,n+1) : ""+n;
					chk.style.background = newBGColor;
					/*
					chk.style.background = REQD_CHK_BGCOLOR; //newBGColor;
					chk.style.height = "16px";
					chk.style.width = "16px";
					*/
					}
				}
			}
		}
	}

/******************************************************
 * Window Opener
 *
 * This method opens a new method with the specified
 * size and url.
 *****************************************************/
function openWin(URL, width, height, name)
	{
	var settings = "toolbar=0,location=0,statusbar=0,menubar=0,resizable=1";
	var windowname = (name != null) ? name : 'openwin';
	if (name == null)
		{
		if (URL.indexOf(".aspx") > -1) windowname = URL.substring(0,URL.indexOf(".aspx"));
		while (windowname.indexOf("/") > -1)
			{ windowname = windowname.substring(windowname.indexOf("/")+1); }
		if (windowname.length > 20) windowname = windowname.substring(0,20);
		}

	/** scrollbars */
	settings += ",scrollbars=1";

	/** dimensions for specific pages */
	if (width == null) settings += ",width=450,height=350";
	else settings += ",width="+width+",height="+height;

	window.child = window.open(URL, windowname, settings);
	if (window.opener == null) window.opener = self;
	child.focus();
	}

// AJAX Map
function openMap(location)
	{
	var overlay = document.getElementById('overlay');
	overlay.style.visibility = 'visible';
	//map_frame.location = 'map.php?location=0';
	}
function closeMap()
	{
	var overlay = document.getElementById('overlay');
	overlay.style.visibility = 'hidden';
	//map_frame.location = "about:blank";
	}