// 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 enableCombo(objID, enableObjID) {
        var frmObj = EBI(enableObjID);
        if (objID.value != "") {
            frmObj.disabled = false;
        } else {
            frmObj.disabled = true;            
        }       
}
function showHideDiv() {
    var Filter = document.getElementById("filterDiv");
    var filterVis = document.getElementById("filter");
    if (Filter.style.display == "inline") {
        Filter.style.display = "none";
        filterVis.value = "none";            
    } else {
        Filter.style.display = "inline";
        filterVis.value = "inline";
    }       
}
function passStrength(sPass) {
   var Alphabet = "0123456789.";
   var Char;
   var Count = 0; 
   for (i = 0; i < sPass.length; i++) { 
      Char = sPass.charAt(i); 
      if (Alphabet.indexOf(Char) != -1) {
         Count++;        
      }
   }
   if (Count > 1) {
        return true;
   } else {
        return false;
   }   
}
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,decimals) { //Numeric/Currency with Decimals
	if (decimals=="" || decimals=='undefined') {
		decimals = 2;
	}
	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,decimals,"",".","");
}
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";
}
function fnSendXMLHTTPRequest_Post(strURL, strXMLData){
	    var objHTTP, strResult;
	    // >> Create The XMLHTTP Object
	    objHTTP = new ActiveXObject('Microsoft.XMLHTTP');
	    // >> Initialize The XMLHTTP Object 
	    objHTTP.Open('POST',strURL,false);
	    // >> Set Compatible Request Header
	    objHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	    // >> Encode The XML Data As Valid Data For Secure Call
	    strXMLText = fnEncodeXMLForXMLHTTPPost(strXMLData);
	    // >> Post The Data To The Server
	    objHTTP.send(strXMLText);
	    // Return The Response Text
	    return objHTTP.responseText;
}
function fnEncodeXMLForXMLHTTPPost(strXMLText){
	    var blnInvalidCharPresent = true;
	    // >> Loop Through The XML String To Replace The < With &lt; And > With &gt;
	    do
	    {	strXMLText = strXMLText.replace("<", "&lt;");
		    strXMLText = strXMLText.replace(">", "&gt;");
		    if ( strXMLText.indexOf("<") < 0 && strXMLText.indexOf(">") < 0 )
			    {blnInvalidCharPresent = false;}
	    }	while (blnInvalidCharPresent == true);
	    // >> Return The Replaced String
	    return strXMLText;
}



var curTD = null;
var curBTN = null;

tabImg = new Object();

tabImg.OFF_LEFT = new Image();
tabImg.OFF_LEFT.src = "images/ui/left_tab_OFF.jpg";
tabImg.OFF_MID = new Image();
tabImg.OFF_MID.src = "images/ui/middle_tab_OFF.jpg";
tabImg.OFF_RIGHT = new Image();
tabImg.OFF_RIGHT.src = "images/ui/right_tab_OFF.jpg";

tabImg.OV_LEFT = new Image();
tabImg.OV_LEFT.src = "images/ui/left_tab_OV.jpg";
tabImg.OV_MID = new Image();
tabImg.OV_MID.src = "images/ui/middle_tab_OV.jpg";
tabImg.OV_RIGHT = new Image();
tabImg.OV_RIGHT.src = "images/ui/right_tab_OV.jpg";

tabImg.DN_LEFT = new Image();
tabImg.DN_LEFT.src = "images/ui/left_tab_ON.jpg";
tabImg.DN_MID = new Image();
tabImg.DN_MID.src = "images/ui/middle_tab_ON.jpg";
tabImg.DN_RIGHT = new Image();
tabImg.DN_RIGHT.src = "images/ui/right_tab_ON.jpg";

function tab_Ov(obj) {
	if (tabImg && obj) {
		if (obj.className != "tab_on") {
			TL = EBI("TL_" + obj.id);
			TR = EBI("TR_" + obj.id);
			TM = obj;
			TL.src = tabImg.OV_LEFT.src;
			TR.src = tabImg.OV_RIGHT.src;
			TM.style.background = "url(" + tabImg.OV_MID.src + ")";
		}
	}
}
function tab_Out(obj) {
	if (tabImg && obj) {
		if (obj.className != "tab_on") {
			TL = EBI("TL_" + obj.id);
			TR = EBI("TR_" + obj.id);
			TM = obj;
			TL.src = tabImg.OFF_LEFT.src;
			TR.src = tabImg.OFF_RIGHT.src;
			TM.style.background = "url(" + tabImg.OFF_MID.src + ")";
		}
	}
}
function tab_Dn(obj) {
	if (tabImg && obj) {
		TL = EBI("TL_" + obj.id);
		TR = EBI("TR_" + obj.id);
		TM = obj;
		TL.src = tabImg.DN_LEFT.src;
		TR.src = tabImg.DN_RIGHT.src;
		TM.style.background = "url(" + tabImg.DN_MID.src + ")";
		obj.className = "tab_on";
	}
}

function tab_Click(obj) {
	tabLoc = EBI(obj.id).getAttribute("link");

	if (tabLoc!="") {
		document.location = tabLoc;
	}
}

function track_Btn_Ovr(e) {
	if (e.target) { //Mozilla|Firefox
		sItem = e.target;
	} else {		//IE
		sItem = window.event.srcElement;
	}
	if (sItem.className=="mtBTN_OFF") {
		curBTN = sItem;
		sItem.className = "mtBTN_OV";
	}
}
function track_Btn_Dn(e) {
	if (e.target) { //Mozilla|Firefox
		sItem = e.target;
	} else {		//IE
		sItem = window.event.srcElement;
	}
	if ((sItem.className=="mtBTN_OV") || (sItem.className=="mtBTN_ON")) {
		BTN_TO(sItem.id);
	}
}
function track_Btn_Dn2(e) {
	if (e.target) { //Mozilla|Firefox
		sItem = e.target;
	} else {		//IE
		sItem = window.event.srcElement;
	}
	if ((sItem.className=="mtBTN_OV") || (sItem.className=="mtBTN_ON")) {
		BTN_TO_SUB(sItem.id);
	}
}
function track_Btn_Out() {
	if (curBTN) {
	sItem = curBTN;
		if (sItem.className=="mtBTN_OV") {
			sItem.className = "mtBTN_OFF";
			curBTN = null;
		}
	}
}
function BTN_TO(btnID) {
	sLoc = EBI(btnID).getAttribute("link");
	document.location = sLoc;
}


function setPageTitle() {
	if (document.title) {
		if (EBI("pageTitle")) {
			document.title += " / " + EBI("pageTitle").innerText;
		}
	}
}
function textLimit(field, maxlen) {
    if (field.value.length > maxlen + 1)
    alert('your input has been truncated!');
    if (field.value.length > maxlen)
    field.value = field.value.substring(0, maxlen);
}
