// remove leading whitespace
String.prototype.lTrim = function () {
	return this.replace(/^\s*/, "");
}
// remove trailing whitespace
String.prototype.rTrim = function () {
	return this.replace(/\s*$/, "");
}
// remove leading and trailing whitespace
String.prototype.trim = function () {
	return this.rTrim().lTrim();
}
// removes unwanted characters from a string
String.prototype.clean = function() {
	strQuote = /'/g;
	strDQuote= /"/g;
	strLT=/</g;
	strGT=/>/g;
	myString = this.replace(strQuote, "’");			// Single Quote
	myString = myString.replace(strDQuote, "’");	// Double Quote
	myString = myString.replace(strLT, "[");		// lt HTML
	myString = myString.replace(strGT, "]");		// gt HTML
	myString = myString.trim();
	return myString;
}
function PadLeft(String,Length,PadChar) {
	String += ""       // Force argument to string.
	Length += ""       // Force argument to string.
	PadChar += ""      // Force argument to string.
	if((PadChar == "") || (!(PadChar.length == 1)))
	PadChar = " "
	var Count = 0
	var PadLength = 0
	Length = parseInt(0 + Length,10)
	if(Length <= String.length) // No padding necessary.
	return(String)
	PadLength = Length - String.length
	for(Count = 0; Count < PadLength; Count++)
	String = PadChar + String
	return(String)
}
function FormatNumber(Number,Decimals,Separator) {
	Number += ""          // Force argument to string.
	Decimals += ""        // Force argument to string.
	Separator += ""       // Force argument to string.
	if((Separator == "") || (Separator.length > 1))
	Separator = "."
	if(Number.length == 0)
	Number = "0"
	var OriginalNumber = Number  // Save for number too large.
	var Sign = 1
	var Pad = ""
	var Count = 0
	// If no number passed, force number to 0.
	if(parseFloat(Number)){
	Number = parseFloat(Number)} else {
	Number = 0}
	// If no decimals passed, clisting decimals to 2.
	if((parseInt(Decimals,10)) || (parseInt(Decimals,10) == 0)){
	Decimals = parseInt(Decimals,10)} else {
	Decimals = 2}
	if(Number < 0)
	{
	Sign = -1         // Remember sign of Number.
	Number *= Sign    // Force absolute value of Number.
	}
	if(Decimals < 0)
	Decimals *= -1    // Force absolute value of Decimals.
	// Next, convert number to rounded integer and force to string value.
	// (Number contains 1 extra digit used to force rounding)
	Number = "" + Math.floor(Number * Math.pow(10,Decimals + 1) + 5)
	if((Number.substring(1,2) == '.')||((Number + '')=='NaN'))
	return(OriginalNumber) // Number too large to format as specified.
	// If length of Number is less than number of decimals requested +1,
	// pad with zeros to requested length.
	if(Number.length < Decimals +1) // Construct pad string.
	{
	for(Count = Number.length; Count <= Decimals; Count++)
	Pad += "0"
	}
	Number = Pad + Number // Pad number as needed.
	if(Decimals == 0){
	// Drop extra digit -- Decimal portion is formatted.
	Number = Number.substring(0, Number.length -1)} else {
	// Or, format number with decimal point and drop extra decimal digit.
	Number = Number.substring(0,Number.length - Decimals -1) +
		  Separator +
		  Number.substring(Number.length - Decimals -1,
		  Number.length -1)}
	if((Number == "") || (parseFloat(Number) < 1))
	Number="0"+Number // Force leading 0 for |Number| less than 1.
	if(Sign == -1)
	Number = "-" + Number  // Set sign of number.
	return(Number)
}
function FormatNumberField(Object,Decimals,Pad,Separator,PadChar) {
	if(Object.value == "")
	Object.value = "0"
	if(Object == null)
	return(null)
	Separator += ""      // Force argument to string.
	if((Separator == "") || (Separator.length > 1))
	Separator = "."
	PadChar += ""
	if((PadChar == "") || (!(PadChar.length == 1)))
	PadChar = " "
	Object.value = FormatNumber(Object.value,Decimals,Separator)
	Object.value = PadLeft(Object.value,Pad,PadChar)
	return(Object.value)
}
function makeNumber(obj) { //Simple Number without Decimals
	obj.value = obj.value.replace(/ /g, ""); //Remove space
	obj.value = obj.value.replace(/-/g, ""); //Remove dash
	obj.value = obj.value.replace(/\(/g, ""); //Remove parenthesis
	obj.value = obj.value.replace(/\)/g, ""); //Remove parenthesis
	obj.value = obj.value.replace(/\+/g, ""); //Remove plus
	obj.value = FormatNumberField(obj,0,"","",""); //Validate
}
function makeFloat(obj) { //Numeric/Currency with Decimals
	obj.value = obj.value.replace(/ /g, ""); //Remove space
	obj.value = obj.value.replace(/-/g, ""); //Remove dash
	obj.value = obj.value.replace(/,/g, "."); //Replace comma with period;
	obj.value = FormatNumberField(obj,2,"",".","");
}
function makePercent(obj) { //Percentage with Decimals if applicable
	obj.value = obj.value.replace(/,/g, "."); //Replace comma with period;
	var pVal = FormatNumberField(obj,2,"",".","");
	if (pVal>100) { //Reset to 100
		pVal = 100;
	}
	if (pVal<0) { //Reset to 0
		pVal = 0;
	}
	obj.value = pVal*1; //Remove trailing 00
}
function cleanThis(targ) {
	targ.value = targ.value.clean();
}
function EBI(objID) {
	if (document.getElementById(objID)) {
		return document.getElementById(objID);
	} else {
		return false;
	}
}
// check whether field has a value
function isPopulated(src) {
	if (src) {
		var srcVal = src.value;
		srcVal = srcVal.trim();
		if (srcVal.length == 0) {
			return false;
		} else {
			return true;
		}
	}
}
// validate email address
function ValidateEmail(src) {
	var emailReg = /^([a-zA-Z0-9_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/
	return emailReg.test(src);
}
// validate email address extension
function ValidateEmailEx(src) {
	var emailReg = /^[\w\.\+\-]+@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
	return emailReg.test(src);
}

function ValidateAlphaNumeric(src) {
	var alphaReg = /[^a-zA-Z0-9]/g
	return !alphaReg.test(src);
}
// Create xmlHttp Object for function: XMLHttp(formFields, strUrl, httpGET)
function GetXmlHttpObject() {
	var xmlHttp;
	if (!window.XMLHttpRequest) {
		try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP.4.0"); return xmlHttp; } catch (ex) {}
		try { xmlHttp = new ActiveXObject("MSXML2.XMLHTTP"); return xmlHttp; } catch (ex){}
		try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); return xmlHttp; } catch (ex) {}
		return null;
	} else	{
		try {xmlHttp = new XMLHttpRequest(); return xmlHttp;} catch(ex) {}
		return null;
	}
}
// Use AJAX-type method to execute server-side script
function XMLHttp(formFields, strUrl, httpGET) {
	 var strText = "";
	 var getorpost=(typeof(httpGET)!="undefined" && httpGET==true)? "GET" : "POST";
	 xmlhttp = GetXmlHttpObject();
	 try {
		 if (xmlhttp != null) {
			 xmlhttp.open(getorpost, strUrl, false);
			 xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			 xmlhttp.send(formFields);
			 strText = xmlhttp.responseText;
		 }
	 }catch(ex){}
	 return strText;
}
// Simple Find & Replace within a string
function ReplaceString(TheString, SearchFor, ReplaceWith) {
	var SearchPattern = eval("/" + SearchFor + "/g");
	return TheString.replace(SearchPattern, ReplaceWith);
}
// Set SelectBox's Selected Value
function setSelect(elmID, selectedValue, force) {
	if ((force !== 'undefined') && (force == true)) {
		if (EBI(elmID)) { //Make sure select box exists
			EBI(elmID).value = selectedValue;
		}
	} else {
		if (selectedValue.length!==0 && selectedValue.trim()!=="") { //check that a value was sent
			if (EBI(elmID)) { //Make sure select box exists
				EBI(elmID).value = selectedValue;
			}
		}
	}
}

// Get form Context
function getForm(formName) {
	var obj_frm = null;
	if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
		try { obj_frm = eval("document." + formName);} catch (ex) {}
	} else {
		try { obj_frm = document.forms[formName]; } catch (ex) {}
	}
	return obj_frm;
}

// Show or Hide an Element
function sh(elmID, elmTarget) {
	var objTarget = null;
	if (elmID) {
		if (EBI(elmID)) {
			objTarget = EBI(elmID);
		}
	} else {
		if (elmTarget) {
			objTarget = elmTarget;
		}
	}
	if (objTarget) {
		if (objTarget.style.display=="none") {
			objTarget.style.display = "inline";
		} else {
			objTarget.style.display = "none";
		}
	}
}
/*
	Form Validation Functions
	Shows/Hide Validation Messages
*/
function Show_Error(formName, errObject) {
	var frm = getForm(objForm);
	if (frm[errObject]) {frm[errObject].focus();}
	EBI("v"+errObject).style.display = "block";
}
function Hide_Error(errObject) {
	EBI("v"+errObject).style.display = "none";
}



