//STRING FUNCTIONS-----------------------------------------------------------

function replaceAll(myString, oldChar, newChar)
{
	if (myString == "")
		return myString;
    var leftHalf="";
    var rightHalf="";
    while (myString.indexOf(oldChar) != -1)
    {
        leftHalf=myString.substring(0,myString.indexOf(oldChar));
        rightHalf=myString.substr(myString.indexOf(oldChar)+oldChar.length);
    	myString=leftHalf + newChar + rightHalf;
    }
    return myString;
}

function removeAll(myString, oldChar)
{
	return replaceAll(myString, oldChar, "");
}

function Len(myString)
{
	return myString.length;
}

function Left(myString, charCount)
{
	if (myString.length < charCount)
		return -1;
	return myString.substr(0,charCount);
}
function Right(myString, charCount)
{
	if (myString.length < charCount)
		return -1;
	return myString.substr(myString.length-charCount,myString.length);
}

function Trim(myString)
{
	//trim front
	while (myString.charAt(0) == " " || escape(myString.charAt(0)) == "%0A" || escape(myString.charAt(0)) == "%0D" || escape(myString.charAt(0)) == "%09")
		myString=myString.substring(1)
	//trim back
	while (myString.charAt(myString.length-1) == " " || escape(myString.charAt(myString.length-1)) == "%0A" || escape(myString.charAt(myString.length-1)) == "%0D")
		myString=myString.substring(0,myString.length-1)
	return myString;
}

function getParameter(URL, Parameter)
{
	if (URL.indexOf("?" + Parameter + "=") == -1 && URL.indexOf("&" + Parameter + "=") == -1)
		return false;
	else
	{
		var parameterPos=(URL.indexOf("?" + Parameter + "=") > URL.indexOf("&" + Parameter + "="))?URL.indexOf("?" + Parameter + "="):URL.indexOf("&" + Parameter + "=");
		parameterPos+=2+Parameter.length;
		var parameterValue=URL.substr(parameterPos);
		if (parameterValue.indexOf("&") != -1)
			parameterValue=parameterValue.substring(0,parameterValue.indexOf("&"));
		return parameterValue;
	}
	
}

function isNumeric(thisString)
{
	for (var d=0; d<thisString.length; d++)
	{
		if (thisString.charCodeAt(d) < 48 || thisString.charCodeAt(d) > 57)
		{
			if (thisString.charCodeAt(d) != 46 && thisString.charCodeAt(d) != 45)
				return false;
		}
	}
	if (charCount(thisString, ".") > 1 || charCount(thisString, "-") > 1 || (charCount(thisString, "-") == 1 && thisString.indexOf("-") != 0))
		return false;
	return true;
}

function containsNumeric(thisString)
{
	var containsNumeric=false;
	var containsCharacter=false;
	for (var d=0; d<thisString.length; d++)
	{
		if (thisString.charCodeAt(d) > 47 && thisString.charCodeAt(d) < 58)
		{
			containsNumeric=true;
		}
	}
	return containsNumeric;
}

function NumberFormat(thisString,thisFormat)
{
	thisString+="";
	thisFormat+="";
	if (!isNumeric(removeAlphas(thisString)) || !isNumeric(removeAlphas(thisFormat)))
		return -1
	thisString=removeAlphas(thisString);
	//Remove leading 0
	if (Left(thisString, 2) == "0.")
		thisString = Right(thisString,Len(thisString)-1)	
	//Add extras "9"s to the Format, as necessary
	for (var xxx=charCount(ListGetAt(thisFormat,1,"."),"9"); xxx < Len(ListGetAt(removeAll(removeAll(thisString,","),"-"),1,".")); xxx++)
		thisFormat=ListSetAt(thisFormat,1,ListGetAt(thisFormat,1,".")+"9",".");
	//Remove extra "9"s from the Format, as necessary
	format9Count = charCount(ListGetAt(thisFormat,1,"."),"9");
	for (var xxx=Len(ListGetAt(removeAll(removeAll(thisString,","),"-"),1,".")); xxx < format9Count; xxx++)
	{
		pos=Find(thisFormat,"9",charCount(ListGetAt(thisFormat,1,"."),"9"));
		thisFormat=ListSetAt(thisFormat,1,Left(ListGetAt(thisFormat,1,"."),pos-1)+Right(ListGetAt(thisFormat,1,"."),Len(ListGetAt(thisFormat,1,"."))-pos),".");
	}
	//Round if necessary
	if (ListLen(thisFormat,".") > 1 && charCount(ListGetAt(thisFormat,2,"."),"9") > 0)
		thisString=Math.round(thisString*Math.pow(10,charCount(ListGetAt(thisFormat,2,"."),"9")))/Math.pow(10,charCount(ListGetAt(thisFormat,2,"."),"9"))+"";
	//Remove leading from rounding
	if (Left(thisString, 2) == "0.")
		thisString = Right(thisString,Len(thisString)-1)	
	if (Find(thisFormat,".",1) > 0 && Find(thisString,".",1) < 1)		//format has decimal but string does not
	{
		thisString+=".";
		for (var www=1; www<=Len(ListGetAt(thisFormat,ListLen(thisFormat,"."),".")); www++)
			thisString+="0";
	}
	else if (Find(thisFormat,".",1) < 1)								//format does not have a decimal
	{
		thisString=Math.round(thisString)+"";
	}
	else if (Find(thisFormat,".",1) > 0 && Find(thisString,".",1) > 0)	//they both have a decimal
	{
		for (var www=Len(ListGetAt(thisString,2,".")); www<charCount(ListGetAt(thisFormat,2,"."),"9"); www++)
			thisString+="0";
	}
	//Make negative if necessary
	if (Left(thisString,1) == "-")
		thisFormat="-"+thisFormat;
	//create Output String
	thisString=removeAll(removeAll(removeAll(thisString,","),"."),"-");	//so that we only have digits
	var outputString = "";
	while (thisFormat != "" && Find(thisFormat,"9",1))
	{
		outputString+=Left(thisFormat,Find(thisFormat,"9",1)-1)+Left(thisString,1);
		thisFormat=Right(thisFormat,Len(thisFormat)-Find(thisFormat,"9",1));
		thisString=Right(thisString,Len(thisString)-1);
	}
	outputString+=thisFormat;
	return outputString;
}

function containsAlpha(thisString)
{
	var containsAlpha=false;
	for (var d=0; d<thisString.length; d++)
	{
		if (thisString.charCodeAt(d) > 64 && thisString.charCodeAt(d) < 123)
		{
			containsAlpha=true;
		}
	}
	return containsAlpha;
}

function charCount(thisString, targetChar)
{
	var count=0;
	for (var d=0; d<thisString.length; d++)
	{
		if (thisString.charAt(d) == targetChar)
			count++
	}
	return count;
}

function Find(thisString, targetSubString, instance)
{
	//instance is the nth targetSubString index to find (like find the 3rd instance of "@!!")
	var newString=thisString;
	var charCount=0;
	while (instance>0)
	{
		if (newString.indexOf(targetSubString) != -1)
		{
			charCount+=newString.indexOf(targetSubString)+1;
			newString=newString.substr(newString.indexOf(targetSubString)+1);
			instance--;
		}	
		else
			return -1;
	}
	return charCount;
}

function validateEmailAddress(emailAddress)
{
	if (emailAddress == "")
		return false;
	else if (Find(emailAddress, "@", 1) == -1)
		return false;
	else if (Right(emailAddress, 1) == ".")
		return false;
	else if (Right(emailAddress, 1) == "@")
		return false;
	else if (Find(emailAddress, "@.", 1) != -1)
		return false;
	else if (Find(emailAddress, ".", 1) == -1)
		return false;
	var emailCharList = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0,_,@,.,-,!,#,$,%,&,',*,+,/,=,?,^,`,{,|,},~"; 
	for (var a=1; a<=Len(emailAddress); a++)
	{
		if (ListFind(emailCharList,Right(Left(emailAddress,a),1)) == 0)
			return false;
	}
	return true;
}

function Reverse(myString)
{
	var newString="";
	for (var d = 0; d<myString.length; d++)
	{
		newString=myString.substr(d,1)+newString;
	}
	return newString;
}

function URLEncodedFormat(myString)
{
	var newString=replaceAll(myString, "%", "%25");
	var newString=replaceAll(newString, " ", "%20");
	var newString=replaceAll(newString, "&", "%26");
	var newString=replaceAll(newString, "?", "%3F");
	var newString=replaceAll(newString, ".", "%2E");
	var newString=replaceAll(newString, "!", "%21");
	var newString=replaceAll(newString, "#", "%23");
	var newString=replaceAll(newString, "@", "%40");
	var newString=replaceAll(newString, "$", "%24");
	var newString=replaceAll(newString, "+", "%2B");
	var newString=replaceAll(newString, "[", "%5B");
	var newString=replaceAll(newString, "]", "%5D");
	var newString=replaceAll(newString, "{", "%7B");
	var newString=replaceAll(newString, "}", "%7D");
	var newString=replaceAll(newString, ";", "%3B");
	var newString=replaceAll(newString, ":", "%3A");
	var newString=replaceAll(newString, "'", "%27");
	var newString=replaceAll(newString, ",", "%2C");
	var newString=replaceAll(newString, "<", "%3C");
	var newString=replaceAll(newString, ">", "%3E");
	var newString=replaceAll(newString, "/", "%2F");
	var newString=replaceAll(newString, '"', '%22');
	return newString;
}

function removeAlphas(tempNumber)
{
	
	var tempLH="";
	var tempRH=tempNumber;
	for (var a=0; a<tempNumber.length; a++)	//check for alpha characters
	{
		if (isNumeric(Left(tempRH,1)))
			tempLH+=Left(tempRH,1);
		if (tempRH.length > 1)
			tempRH=Right(tempRH, tempRH.length-1);
	}
	return tempLH;
}

function percentFormat(thisNumber)
{
	var tempNumber=removeAlphas(thisNumber);
	if (Trim(tempNumber) == "")
		return 0;
	//if (tempNumber > 100)
	//	return 100;
	//else
		return tempNumber;
}

function MoneyFormat(thisNumber)
{
	var tempNumber=thisNumber+"";
	// changed to allow variable pricing
	if(thisNumber == "var"){
		tempNumber = "var";
	}
	else{
		if (charCount(tempNumber,".") > 1)	//if there is a 2nd ".", remove it and everything past it.
			tempNumber=Left(tempNumber,Find(tempNumber,".",2)-1);
		tempNumber=replaceAll(tempNumber, ",", "");
		while (Left(tempNumber,1) == "0")
		{
			tempNumber = Right(tempNumber,Len(tempNumber)-1);
		}
		if (Left(tempNumber,1) == ".")
			tempNumber = "0" + tempNumber;
		tempNumber=removeAlphas(tempNumber);
		if (Trim(tempNumber) == "")
			return "0.00";
		var InDecPlaces=0;
		if (Find(tempNumber, ".", 1) == -1)	//check for no decimal
			tempNumber+=".";
		else					//check for too many digits
		{
			InDecPlaces=Len(tempNumber)-Find(tempNumber, ".", 1);
			if (InDecPlaces > 2)
			{
				tempNumber = Left(tempNumber, Find(tempNumber, ".", 1)+3);
				if (parseInt(Right(tempNumber,1)) > 4)
				{
					tempNumber*=1;
					tempNumber+=parseFloat(1*.01);
				}
				tempNumber = tempNumber + "";
				tempNumber = Left(tempNumber, Find(tempNumber, ".", 1)+2);
			}	
		}
		InDecPlaces=Len(tempNumber)-Find(tempNumber, ".", 1);
		for (var d=0; d<(2-InDecPlaces); d++)
			tempNumber+="0";
		if (Len(tempNumber) > 6)
		{
			tempRH=Right(tempNumber, 3);
			tempLH=Left(tempNumber, Len(tempNumber)-3);
			while (Len(replaceAll(tempLH,"-","")) > 3)
			{
				tempRH=Right(tempLH, 3) + tempRH;
				if (Len(replaceAll(tempLH,"-","")) > 3)
				{
					tempRH="," + tempRH;
					tempLH=Left(tempLH, Len(tempLH)-3);
				}
				else
					tempLH="";
			}
			tempNumber=tempLH+tempRH;	
		}
	}
	return tempNumber;
}

function radio_getSelectedIndex(formObj)
{
 	var checkedIdx = -1;
 	if (formObj)
	{
		if (!formObj.length)
		{
			if (formObj.checked)
				checkedIdx = 0;
		}
		else if (formObj && formObj.length)
		{
			for (var d=0; d<formObj.length; d++)
			{
				if (formObj[d].checked)
					checkedIdx = d;
			}
		}
		return checkedIdx;
	}
	else
		return -1;
}
 
function radio_getSelectedValue(formObj)
{
  	if (formObj)
	{
		if (!formObj.length)
		{
	 		if (radio_getSelectedIndex(formObj) >= 0)
				return formObj.value;
			else
				return -1;
		}
		else
		{
	 		if (radio_getSelectedIndex(formObj) >= 0)
				return formObj[radio_getSelectedIndex(formObj)].value;
			else
				return -1;
		}
	}
	else
		return -1;
} 

function checkbox_checkAll(formObj,newStatus)
{
 	if (formObj)
	{
		if (!formObj.length)
			formObj.checked=newStatus;
		else
		{
			for (var d=0; d<formObj.length; d++)
				formObj[d].checked=newStatus;
		}
	}
}

function checkbox_countChecks(formObj)
 {
 	var checkCount=0;
 	if (formObj)
	{
		if (!formObj.length)
		{
			if (formObj.checked)
				return 1;
			else
				return 0;
		}
		else
		{
			for (var d=0; d<formObj.length; d++)
			{
				if (formObj[d].checked)
					checkCount++;
			}
			return checkCount;
		}
	}
	else
		return -1;
}

function addLoadEvent(func) {	
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
    	window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		}
	}
}

