// Global Section
var isNN = (navigator.appName.indexOf("Netscape")!=-1);

function isDate(date, yearFormat){
	// Returns true if parameter is a valid date
	var month = date.substr(0,2),
		day = date.substr(3,2),
		year = 0;
			
	if(yearFormat == null)
		yearFormat = 2;

	if(yearFormat == 2)
		year = date.substr(6,2);
	else
		year = date.substr(6,4);

	if(date.substr(2,1) != "/" || date.substr(5,1) != "/")
		return false;

	if(!isInt(month) || !isInt(day) || !isInt(year))
		return false;

	if(month < 1 || month > 12)
		return false;

	if(day < 1 || day > 31)
		return false;

	if(month == "02" && day > 29)
		return false;

	if((month == "04" || month == "06" || month == "09" || month == "11") && day > 30)
		return false;

	return true;
}

function isEmail(email){
	// Returns true if parameter is a valid email (name@domain.com)
	var at = email.indexOf("@"),
		dot = email.indexOf(".", at);

	if(at < 1 || dot < 1 || dot > email.length - 3)
		return false;

	return true;
}

function isInt(value){
	// Returns true if parameter is an Integer
	var checkstr = "0123456789";

   for (i = 0; i < value.length; i++)
		if(checkstr.indexOf(value.substr(i,1)) < 0)
			return false;

	return true;
}

function isNumeric(value){
	// Returns true if parameter is an number
	var checkstr = "0123456789.";

   for (i = 0; i < value.length; i++)
		if(checkstr.indexOf(value.substr(i,1)) < 0)
			return false;

	return true;
}

function intToDate(num){
	if(!isInt(num) || num == 0)
		return null;

	num = num.toString();
	if(num.left(2) == "19" || num.left(2) == "20")
		return num.substr(4,2) + "/" + num.substr(6,2) + "/" + num.substr(2,2);
	else
		return num.substr(0,2) + "/" + num.substr(2,2) + "/" + num.substr(6,2);
}

function dateToInt(date, yearAtEnd){
	var yearLen = 2;
	
	if(date.length > 8)
		yearlen = 4;

	if(yearAtEnd == null)
		yearAtEnd = false;

	if(date == "")
		return 0;
	
	if(yearAtEnd)
		return parseInt(date.substr(0,2) + date.substr(3,2) + "20" + date.substr(6,yearLen));
	else
		return parseInt("20" + date.substr(6,2) + date.substr(0,2) + date.substr(3,yearLen));
}

function dateToAS400Int(date, yearAtEnd){
	var yearLen = 2;
	
	if(date.length > 8)
		yearlen = 4;

	if(yearAtEnd == null)
		yearAtEnd = false;

	if(date == "")
		return 0;
		
		return parseInt(date.substr(6,4) + date.substr(0,2) + date.substr(3,yearLen));		
}

function numbers(box){
	// Restricts entry to numbers only
	var checkstr = "0123456789";

	if(checkstr.indexOf(box.value.substr(box.value.length-1, 1)) < 0)
		box.value = box.value.substr(0, box.value.length-1);
}

function slashes(box, event, tab, yearFormat){
	// Puts slashes into a date and restricts entry to numbers and slashes.
	var checkstr = "0123456789/";

	if(tab == null)
		tab = false;
	
	if(yearFormat == null)
		yearFormat = 2;

	// if not backspacing, put slashes in date positions
	if(event.keyCode != 8){
		if(checkstr.indexOf(box.value.substr(box.value.length-1, 1)) < 0)
			box.value = box.value.substr(0, box.value.length-1);

		if(box.value.length == 2)
			if(box.value.substr(1,1) == "/")
				box.value = "0" + box.value;
			else
				box.value = box.value + "/";

		if(box.value.indexOf("//") > 0)
			box.value = box.value.substr(0,box.value.length-1);

		if(box.value.length == 5)
			if(box.value.substr(4,1) == "/")
				box.value = box.value.substr(0,3) + "0" + box.value.substr(3,2);
			else
				box.value = box.value + "/";
		
	}

	if(tab)
		autoTab(box, 10, event);
}

function dashes(box, event, tab){
	// Puts dashes into a phone number and restricts entry to numbers and dashes.
	var checkstr = "0123456789-";

	if(tab == null)
		tab = false;

	// if not backspacing, put dashes in phone number positions (999-999-9999)
	if(event.keyCode != 8){
		if(checkstr.indexOf(box.value.substr(box.value.length-1, 1)) < 0)
			box.value = box.value.substr(0, box.value.length-1);

		if(box.value.indexOf("--") > 0)
			box.value = box.value.substr(0, box.value.length-1);

		if(box.value.length == 3 || box.value.length == 7)
			box.value = box.value + "-";
	}

	if(tab)
		autoTab(box, 12, event);
}

function getRadio(group){
	// Returns the value of the selected item in a radio group.  Returns "" if non selected.
	for(var x=0; x<group.length; x++)
		if(group[x].checked)
			return group[x].value;

	return "";
}

function autoTab(input, len, e){
	// Auto tabs to the next tab in any form
	// ex. onKeyUp="autoTab(this, 3, event);"
	var keyCode = (isNN) ? e.which : e.keyCode;
	var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];

	if(input.value.length >= len && !containsElement(filter,keyCode)) {
		input.value = input.value.slice(0, len);
		input.form[(getIndex(input)+1) % input.form.length].focus();
	}

	function containsElement(arr, ele) {
		var found = false, index = 0;
		while(!found && index < arr.length)
			if(arr[index] == ele)
				found = true;
			else
				index++;
		return found;
	}

	function getIndex(input) {
		var index = -1, i = 0, found = false;
		while (i < input.form.length && index == -1)
			if (input.form[i] == input)
				index = i;
			else
				i++;
			return index;
	}

	return true;
}

function validState(){
	// Checks to see if a state is valid.  Case insensitive
	states = new Array();
	states[0] = "AK";
	states[1] = "AL";
	states[2] = "AR";
	states[3] = "AZ";
	states[4] = "CA";
	states[5] = "CO";
	states[6] = "CT";
	states[7] = "DC";
	states[8] = "DE";
	states[9] = "FL";
	states[10] = "GA";
	states[11] = "HI";
	states[12] = "IA";
	states[13] = "ID";
	states[14] = "IL";
	states[15] = "IN";
	states[16] = "KS";
	states[17] = "KY";
	states[18] = "LA";
	states[19] = "MA";
	states[20] = "MD";
	states[21] = "ME";
	states[22] = "MI";
	states[23] = "MN";
	states[24] = "MO";
	states[25] = "MS";
	states[26] = "MT";
	states[27] = "NC";
	states[28] = "ND";
	states[29] = "NE";
	states[30] = "NH";
	states[31] = "NJ";
	states[32] = "NM";
	states[33] = "NV";
	states[34] = "NY";
	states[35] = "OH";
	states[36] = "OK";
	states[37] = "OR";
	states[38] = "PA";
	states[39] = "PR";
	states[40] = "RI";
	states[41] = "SC";
	states[42] = "SD";
	states[43] = "TN";
	states[44] = "TX";
	states[45] = "UT";
	states[46] = "VA";
	states[47] = "VT";
	states[48] = "WA";
	states[49] = "WI";
	states[50] = "WV";
	states[51] = "WY";

	for(var x = 0; x < 51; x++)
		if(document.entryform.custState.value.toUpperCase( ) == states[x])
			return true;

	return false;
}

function roundUp(num){
	if(num == 0)
		return 0;

	if(parseInt(num)/num == 1)
		return num;
	else
		return parseInt(num) + 1;
}

function positive(num){
	if(isNumeric(num) && num > 0)
		return num;
	
	return 0;
}

function zeroPad(acct, fullLen) {
	var returnAcct = acct;
	
	if(returnAcct.length < fullLen){
		for(var x=1; x=fullLen; x++){
			returnAcct = "0" + returnAcct;
			
			if(returnAcct.length >= fullLen)
				break;
		}
	}
	
	return returnAcct;
}

function acctCheck(objForm, iframe) {
	var acct = zeroPad(document.getElementById("account").value, 10);
	var oFrame = document.getElementById(iframe);
	var queryString = "/customtags/accountCheck.cfm?acct=" + acct;

	oFrame.src = queryString;

	if(acct != "" && acct != "0000000000"){ 
		if(acctValid)
			objForm.submit();
		else {
			window.alert("Invalid account number " + acct + ".  Please verify");
			objForm.account.focus();
		}
	}
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
      
var SingleDigits = new Array("Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen");
var DoubleDigits = new Array("Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety");

function DigitsToWords(Digits)
{
	var Words = "";
	var St;
	if (Digits > 999)
	{
		  return "The number exceeds 999.";
	}
	if (Digits == 0)
	{
		  return SingleDigits[0];
	}
	for (var i = 9; i >= 1; i--)
	{
		if (Digits >= i * 100)
		{
			Words += SingleDigits[i];
			St = 1;
			Words += " hundred";
			if (Digits != i * 100) Words += " and ";
			{
				  Digits -= i*100;
			}
			i=0;
		}
	}
	
	for (var i = 9; i >= 2; i--)
	{
		if (Digits >= i * 10)
		{
			Words += (St?DoubleDigits[i-2].toLowerCase():DoubleDigits[i-2]);
			St = 1;
			if (Digits != i * 10) Words += "-";
			{
				  Digits -= i*10;
			}
			i=0;
		}
	}
	
	for (var i = 1; i < 20; i++)
	{
		if (Digits == i)
		{
			Words += (St?SingleDigits[i].toLowerCase():SingleDigits[i]);
		}
	}
	return Words;
}