/*
 * 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.
 */

/*************************************************************
 * 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 */

/*************************************************************
 * LOG OUT CONFIRMATION
 ************************************************************/
function logOut()
	{
	if (confirm("Are you sure you want to logout?"))
		{ location = "index.jsp?logout"; }
	}

/*************************************************************
 * DELETE CONFIRMATION
 ************************************************************/
function confirmDelete(url)
	{
	//return confirm("Are you sure you want to delete this item"+
	//	((desc != null) ? " ("+desc+")" : "")+"?");
	var confirmed = confirm("Are you sure you want to permanently delete this record?");
	if (url && confirmed) location = url;
	else if (url == null) return confirmed;
	else return;
	}

/******************************************************
 * CSS DROP-DOWN MENU FUNCTIONS
 *****************************************************/
function showMenu(id)
	{
	var ele = document.getElementById(id);
	ele.style.display = (ele.style.display != 'block') ? "block" : "none";
	}
var crrt = null;
function showIt(div)
	{
	if (crrt != null) hideIt(crrt);
	crrt = div;
	var obj = document.getElementById(div);
	if (obj != null) obj.style.visibility='visible';
	}
function hideIt(div)
	{
	var obj = document.getElementById(div);
	if (obj != null) obj.style.visibility='hidden';
	}

/*************************************************************
 * PAGE SCROLLING
 ************************************************************/
function toTop() { window.scrollTo(0,0); }
function toBottom() { window.scrollTo(0,6000); }

/******************************************************
 * WINDOWS STATUS
 *****************************************************/
function setStatusMsg(statusMsg)
	{ window.status = (statusMsg != null) ? statusMsg : ''; }

/******************************************************
 * 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 "";
	}

/******************************************************
 * Add dollar amounts and handle the listed JavaScript issues we learned 'the hard way'.  For
 * subtraction, simply negate 2nd arg (ie -1*y).
 *
 * - Replace numeric adds (x + y) with (x - (-1*y)) in order to prevent JavaScript
 * from doing String append instead of the intended numeric addition.  So, 2 + 3 will
 * equal 5 and not the string "2 + 3".
 *
 * - Use round() and divide/multiply by 100 to ensure results to 1/100 of a dollar (ie 2 decimal
 * places).  This will avoid results like 986.11 + (-124) = 1186.11000000000001 (ie should be
 * 1186.11).
 ******************************************************/
function addCurrency(op1, op2) {
	result = op1 - (-1*op2);
	return (Math.round(result*100)/100);
}

/******************************************************
 * Convert arg to dollar format (X.XX) or returns "" for invalid amounts.
 *****************************************************/
function formatCurrency(pAmount)
	{
	var amountFormatted = "";

	// Convert to string
	var amount = "";
	if (typeof pAmount == "object") {
		amount = pAmount.toString();
	} else {
		amount = pAmount + "";
	}

	// Continue processing if valid number
	var amountNumber = new Number(amount);
	if (! isNaN(amountNumber)) {
		// Determine dollars
		var dollars = amount.substring(0, amount.indexOf("."));	// if no . returns empty value
		if (dollars.length == 0) {
			dollars = amount;
		}

		// Determine cents and format a result
		var cents = amount.substring(amount.indexOf(".")+1);	// if no . returns whole value
		if ((cents == amount) || (cents.length == 0)) {	// XXX or XXX.
			amountFormatted = dollars + ".00";
		} else if (cents.length == 1) {		// XXX.X
			amountFormatted = dollars + "." + cents + "0";
		} else if (cents.length == 2) {		// XXX.XX
			amountFormatted = amount;
		} else {
			// XXX.XXX...
		}
	}

	return amountFormatted;
	}

/******************************************************
 * AUTO-TAB FEATURE
 *
 * Insert the following code into a text field:
 * .. onKeyUp="return autoTab(this, 2, event);" ..
 * The number 2 represents the number of
 * characters to be entered before it tabs over
 *****************************************************/
var isNN = (navigator.appName.indexOf("Netscape")!=-1); //TEST BROWSER
function autoTab(input,len, e)
	{
	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))
		{
		var t = (getIndex(input)+1) % input.form.length;
		input.value = input.value.slice(0, len);
		input.form[t].focus();
		if (input.form[t].type=='text')
			{ input.form[t].select(); }
		}

	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;
	}

/******************************************************
 * openWin
 *
 * 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 : 'winPop';
	if (name == null)
		{
		if (URL.indexOf(".jsp") > -1) windowname = URL.substring(0,URL.indexOf(".jsp"));
		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 (false) settings += ",width=400,height=450";
	else
		{
		if (width == null) settings += ",width=450,height=500";
		else settings += ",width="+width+",height="+height;
		}
	window.child = window.open(URL, windowname, settings);
	if (window.opener == null) window.opener = self;
	child.focus();
	}

/*************************************************************
* AJAX Methods
************************************************************/
function getNewHttpRequest() {
	var obj;
	try {
		// For Internet Explorer.
		obj = new ActiveXObject('Microsoft.XMLHTTP');
	}
	catch (e) {
		try {
			// Gecko-based browsers, Safari, and Opera.
			obj = new XMLHttpRequest();
		}
		catch (e) {
			// Browser supports Javascript but not XMLHttpRequest.
			obj = false;
		}
	}
	return obj;
}

function getAjaxResponse(url, params) {
	var request = getNewHttpRequest();
	request.open("POST", url, true);
	request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	request.setRequestHeader("Content-length", params.length);
	request.setRequestHeader("Connection", "close");
	request.onreadystatechange = function () {
		if (request.readyState == 4 && request.status == 200) {
			return request.responseText;
		} else return "AJAX Response Failure";
	}
	request.send(params);
}

function getAjaxContent(url, params, id, params2) {
	if (id) {
		var div = document.getElementById(id);
		if (div) div.innerHTML = "<img src=\"images/loading.gif\" height=15 alt=\"Loading\" />";
	}

	var request = getNewHttpRequest();
	request.open("POST", url, true);
	request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	request.setRequestHeader("Content-length", params.length);
	request.setRequestHeader("Connection", "close");
	request.onreadystatechange = function () {
		if (request.readyState == 4 && request.status == 200) {
			if (id) {
				var div = document.getElementById(id);
				if (div) {
					var resp = request.responseText;
					div.innerHTML = resp;

					var js_start = "<script type=\"text/javascript\">";
					var js_end = "</script>";
					var tmp = resp.substring(resp.indexOf(js_start));
					while (tmp.indexOf(js_start) >= 0) {
						tmp = tmp.substring(tmp.indexOf(js_start) + js_start.length);
						var js = tmp.substring(0, tmp.indexOf(js_end));
						//alert(js);
						eval(js);
						//var scripts = t_document.scripts; //$$('#widget script'); // look up the script tags in the widget HTML
						//alert(scripts.length);
						//for (var i = 0; i < scripts.length; i++) {
						//eval(scripts[i].innerHTML);   // for each script tag, evaluate its contents
					}

					if (params2) GetProfileStarter(params2);
				}
			}
		}
	}
	request.send(params);
}

var open_div;
function OpenAjax(box, params) {
	document.getElementById("ajax").style.visibility = 'visible';
	document.getElementById("ajax_bg").style.display = '';
	document.getElementById("ajax_bg").style.height = "150%";
	document.getElementById("ajax_" + box).style.display = '';
	var pg = (box == "profile") ? "profile" : "video";
	getAjaxContent(pg + ".php", params, "ajax_" + box);
	open_div = box;
}
function CloseAjax(box) {
	document.getElementById("ajax").style.visibility = 'hidden';
	document.getElementById("ajax_bg").style.height = "auto";
	document.getElementById("ajax_bg").style.display = 'none';
	var div = document.getElementById("ajax_" + box);
	div.style.display = 'none';
	if (box != "news" && box != "docs") div.innerHTML = '';
}

/******************************************************
 * DATE SELECTOR
 *
 * This method opens the Quick Calendar date selector.
 *****************************************************/
function dateSelector(object, newmonth, newyear, formname, idx)
	{
	newmonth = (newmonth == null) ? "" : newmonth;
	newyear = (newyear == null) ? "" : newyear;
	formname = (formname == null) ? "form" : formname;
	var params = "?object="+object+"&newmonth="+newmonth+"&newyear="+newyear+"&formname="+formname;
	if (idx != null) params += "&idx="+idx;
	openWin('DateSelector.aspx'+params,'285','350');
	}

/*************************************************************
 * 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+"Day["+idx+"]")) ? true : false;
	var arrayNxt = (eval("document."+formname+"."+name_of_field+"Day["+(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+"Day[0]")) ? true : false;
			var arrayLng = (array) ? eval("document."+formname+"."+name_of_field+"Day.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";
					*/
					}
				}
			}
		}
	}

function doNothing() {}

function round(number, decimalDigits)
	{
	return Math.round(number*Math.pow(10,decimalDigits))/Math.pow(10,decimalDigits);
	}

// swap div content
function swapContent(div1, holder)
	{
	holder = document.getElementById(holder);
	div1 = document.getElementById(div1);

	// set html
	holder.innerHTML = div1.innerHTML;
	}


// slider
var crrt_pos = 0;
var max_pos = 0;
function slide(pos, max) {
	var div = document.getElementById('scroller');
	if (max == null || max == undefined) max = 1;
	var width = 535;
	var rate = (-pos) * 20;
	var to_pos = crrt_pos + ((-pos) * width);
	max_pos = -((width * max) - width);
	//alert("rate="+rate+", from="+crrt_pos+", to="+to_pos);

	if (to_pos <= 0 && to_pos >= max_pos) slideOver(div, crrt_pos, to_pos, rate);
}
function slideOver(div, from, to, rate) {
	if ((rate < 0 && from >= to) || (rate > 0 && from <= to)) {
		//alert("from="+from+", to="+to);
		from += rate;
		div.style.left = from+"px";
		window.setTimeout(function() { slideOver(div, from, to, rate); }, 5);
	} else {
		//alert("crrt=" + crrt_pos);
		crrt_pos = to;
		div.style.left = to+"px";
	}
}

// photo switcher
var crrt_photo = 0;
function switchPhoto(i) {
	var img = document.getElementById("photo_"+crrt_photo);
	img.style.display = 'none';

	img = document.getElementById("photo_"+i);
	img.style.display = '';
	crrt_photo = i;
}
