//Gets and Object by ID
function getElement(idName)
{
	if ( document.all )
		return document.all[idName];
	else if ( document.getElementById )
		return document.getElementById(idName);
	else if ( document[idName] )
		return document[idName];
	else if ( document.layers )
		return document.layers[idName];
	else
		return document.idName;
}
//returns the code for the keypressed for all browsers
function getKeyCode(event)
{
	//show_props(event,"event");
	if(event.keyCode != 0)
		return event.keyCode;
	else if(event.charCode != 0)
		return event.charCode;
	else
		return event.which;
}

// returns the absolute position of an element's top pixel
function getAbsoluteTop(elm) 
{
	var mOffsetTop = elm.offsetTop;
	if(elm.offsetParent)
	{
		mOffsetTop += getAbsoluteTop(elm.offsetParent);
	}
	return mOffsetTop;
}

// returns the absolute position of an element's top pixel
function getAbsoluteLeft(elm) 
{
	var mOffsetLeft = elm.offsetLeft;
	if(elm.offsetParent)
	{
		mOffsetLeft += getAbsoluteLeft(elm.offsetParent);
	}
	return mOffsetLeft;
}

function clickButton(event, targetId)
{
	if(getKeyCode(event) == 13) // the "enter" key
	{
		getElement(targetId).click();
		return false;
	}
	else
	{
		return true;
	}
}

//Show a layer
function hide(idName) 
{
	var thisLevel = getElement(idName);
	thisLevel.style.display = "none";
}

//Hides a layer
function show(idName) 
{
	var thisLevel = getElement(idName);
	thisLevel.style.display = "";
}

//Gets the object root ID
function getRoot(object)
{
	var strReturn;	
	if (object.id != null && object.id.lastIndexOf("_") > 0)
		strReturn = object.id.substr(0,object.id.lastIndexOf("_"));
	else if (object.lastIndexOf("_") > 0)
		strReturn = object.substr(0,object.lastIndexOf("_"));
	else if (object.id != null)
		strReturn = object.id;
	else
		strReturn = object;
	return strReturn;
}	

//Ensures on alpha values are entered
function KeystrokeIsAlpha(event)
{
	var blnReturn = false;
	var intKey = getKeyCode(event);
	if ((intKey > 64 && intKey < 91) || (intKey > 96 && intKey < 123) || intKey == 32)
		return true;
	else if (KeystrokeIsCommonKey(event))
		return true;
	else 	
		return false;
}

//Ensures on numeric values are entered
function KeystrokeIsNumeric(event)
{
	var blnReturn = false;
	var intKey = getKeyCode(event);
	if (intKey > 47 && intKey < 58)
		return true;
	else if (KeystrokeIsCommonKey(event))
		return true;
	else
		return false;
	
}

function KeystrokeIsAlphaSpecialChar(event)
{
	var blnReturn = false;
	var intKey = getKeyCode(event);
		switch (intKey)
		{
			case 45: //-
			case 46: //.
			case 44: //,
			case 58: //:
			case 35: //#
			case 39: //'
			case 64: //@
			case 95: //_
				return true;
		}
		
	return false;
}

function KeystrokeIsNumericSpecialChar(event)
{
	var blnReturn = false;
	var intKey = getKeyCode(event);
	switch (intKey)
	{
		case 45: //-
		case 46: //.
			blnReturn = true;		
	}	
	return blnReturn;
}
//Key is null, backspace, delete or an arrow key
function KeystrokeIsCommonKey(event)
{
	if (event.keyCode == 9 // backspace
	 || event.keyCode == 8 // delete/tab (NS)
	 || (event.keyCode == 46 && IsNetscape()) // delete (NS)
	 //|| event.keyCode == 13 // 'enter' key
	 )
			return true;
	if (getKeyCode(event) == null || getKeyCode(event) == 0)
		return true;
		
	return false;
}

function IsNetscape()
{
	var browserName=navigator.appName;
	return browserName == "Netscape";
}

function KeystrokeIsValid(event, allowAlpha, allowNumeric, allowAlphaSpecialChars, allowNumericSpecialChars)
{
	//alert(getKeyCode(event));
	if (allowAlpha && KeystrokeIsAlpha(event)) 
		return true;
	if (allowNumeric && KeystrokeIsNumeric(event)) 
		return true;
	if (allowAlphaSpecialChars && KeystrokeIsAlphaSpecialChar(event))
		return true;
	if (allowNumericSpecialChars && KeystrokeIsNumericSpecialChar(event))
		return true;
	if (KeystrokeIsCommonKey(event))
		return true;
					 
	return false;
}
//alert(navigator.appName);

//Moves cursor to nextField when maxLength is hit
function tabToNextBox(event, object, maxLength, nextField){
	var intKey = getKeyCode(event);
	var intValueLength = object.value.length;
	var frmCurrent = object.form;
	//allow shift-tab
	if (intValueLength >= maxLength && intKey != 9 && intKey != 16){
		frmCurrent.elements[nextField].focus();
	}
}

//Shows the properties of an object (DEBUG)
function show_props(obj, obj_name) {
	var result = "";
	for (var i in obj) 
	{
	try {
		result += obj_name + "." + i + " = " + obj[i] + "<br>\n"
		} catch (exp){}
	}
	newWindow =	window.open()
	newWindow.document.write("Here is the object "+obj_name+":<br/><br/>");
	newWindow.document.write(result)
}

function isDigit(event)
{
	var intKeyCode = getKeyCode(event);

	if (intKeyCode > 47 && intKeyCode < 58) return;
	if (intKeyCode == 8 || intKeyCode == 9 || intKeyCode == 28 || intKeyCode == 29 || intKeyCode == 127) return;

	event.returnValue = false;
	return false;
}

// ########## Begin Phone Control Scripts ########## //
// also uses isDigit(objEvent)


//checks if the US phone is valid
function validUSPhone(source, arguments)
{
	var reg3digits = /\d{3}/;
	var reg4digits = /\d{4}/;
	var areaCode = getElement(getRoot(source) + '_txtAreaCode');
	var prefix = getElement(getRoot(source) + '_txtPrefix');
	var suffix = getElement(getRoot(source) + '_txtSuffix');
	var extension = getElement(getRoot(source) + '_txtExtension');
	if(areaCode.value.replace(/\s/g, "") == "" && prefix.value.replace(/\s/g, "") == "" && suffix.value.replace(/\s/g, "") == "")
	{
		arguments.IsValid = true;
	}
	else
	{
		if(reg3digits.test(areaCode.value.replace(/\s/g, "")) && reg3digits.test(prefix.value.replace(/\s/g, "")) && reg4digits.test(suffix.value.replace(/\s/g, "")))
		{
			arguments.IsValid = true;
		}
		else
		{
			arguments.IsValid = false;
		}
	}
}

//restricts characters allowed in the international phone to [digits - . ( )] 
function isValidCharInternational(event)
{
	var intKeyCode = getKeyCode(event);

	if (intKeyCode > 47 && intKeyCode < 58) return;
	if (intKeyCode == 8 || intKeyCode == 9 || intKeyCode == 28 || intKeyCode == 29 || intKeyCode == 127 || intKeyCode == 46 || intKeyCode == 45 || intKeyCode == 40 || intKeyCode == 41) return;
	event.returnValue = false;
	return false;
}

	
// ########## End Phone Control Scripts ########## //

// ########## Begin UBI Control Scripts ########## //
function validUBI(source, arguments)
{
	var reg3digits = /\d{3}/;
	var regValidUBI = /^(\d{3}[- ]?\d{3}[- ]?\d{3})$/;
	var UBICombined = getElement(getRoot(source) + '_txtUBICombined');
	if(UBICombined != null)
	{
		if(UBICombined.value.replace(/\s/g, "") == "")
		{
			arguments.IsValid = true;
		}
		else
		{
			if(regValidUBI.test(UBICombined.value.replace(/\s/g, "")))
			{
				arguments.IsValid = true;
			}
			else
			{
				arguments.IsValid = false;
			}
		}
	}
	else
	{
		var UBI1 = getElement(getRoot(source) + '_txtUBI1');
		var UBI2 = getElement(getRoot(source) + '_txtUBI2');
		var UBI3 = getElement(getRoot(source) + '_txtUBI3');
		if(UBI1.value.replace(/\s/g, "") == "" && UBI2.value.replace(/\s/g, "") == "" && UBI3.value.replace(/\s/g, "") == "")
		{
			arguments.IsValid = true;
		}
		else
		{
			if(reg3digits.test(UBI1.value.replace(/\s/g, "")) && reg3digits.test(UBI2.value.replace(/\s/g, "")) && reg3digits.test(UBI3.value.replace(/\s/g, "")))
			{
				arguments.IsValid = true;
			}
			else
			{
				arguments.IsValid = false;
			}
		}
	}
}
// ########## End UBI Control Scripts ########## //

// ########## Begin Zip Control Scripts ########## //
function validZip(source, arguments)
{
	var reg5digits = /\d{5}/;
	var reg4digits = /\d{4}/;
	var zip1 = getElement(getRoot(source) + '_txtZip1').value.replace(/\s/g, "");
	var zip2 = getElement(getRoot(source) + '_txtZip2').value.replace(/\s/g, "");
	if(zip1 == "" && zip2 == "")
		arguments.IsValid = true;
	else if (reg5digits.test(zip1))
	{
		if (zip2 == "")
			arguments.IsValid = true;
		else
			return reg4digits.test(zip2);
	}
	else	
		arguments.IsValid = false;	
}
// ########## End UBI Control Scripts ########## //

// ########## Begin Accounting Format Function ########## //

function formatAccounting(strNumber)
{
	if (strNumber != "") {
		strNumber = parseFloat(strNumber).toFixed(2);
		var strFmtValue = "";
		var intCnt = 0;
		var intDecLoc = 0;
		var intNeg = strNumber.indexOf("-",0);
		
		if ( intNeg != -1 )
			strNumber = strNumber.substring(1,strNumber.length);
		
		intDecLoc = strNumber.indexOf(".",0);
		if ( intDecLoc < 0 )
			intDecLoc = strNumber.length;
		
		for ( intCnt = intDecLoc; intCnt > 2; intCnt -= 3 )
		{
			strFmtValue = strNumber.substring(intCnt - 3,intCnt) + strFmtValue;
			if ( intCnt > 3 )
				strFmtValue = "," + strFmtValue;
		}
		
		if ( intCnt > 0 )
			strFmtValue = strNumber.substring(0,intCnt) + strFmtValue;
		
		if ( intDecLoc < strNumber.length )
		{
			while ( strNumber.length < (intDecLoc + 3) )
				strNumber = strNumber + "0";
			
			strFmtValue = strFmtValue + strNumber.substring(intDecLoc,intDecLoc + 3);
			if ( intDecLoc == 0 )
				strFmtValue = "0" + strFmtValue;
		}
		else
			strFmtValue = strFmtValue + ".00";
		
		if ( intNeg != -1 )
			strFmtValue = "(" + strFmtValue + ")";
	
	return strFmtValue;
	} 
	else 
		return "0.00";
}

function removeAccountingFormat(strNumber)
{
	if (strNumber == "0.00" || strNumber == "(0.00)")
		return "";
	if (strNumber != ""){
		var intNeg = strNumber.indexOf("(",0);
		
		if ( intNeg != -1 )
			strNumber = strNumber.substring(1,strNumber.length);
		
		strNumber = strNumber.replace("(","").replace(")","").replace(",","");
		if (intNeg != -1)
			strNumber = "-" + strNumber;
	} 
	return strNumber;
}

// ########## End Accounting Format Function ########## //