/*
	================================================================================
	= Naam             : String Functions 2.0                                      =
	= Programmeur      : Rob Timmers                                               =
	= Laatst gewijzigd : 18 oktober 2007                                           =
	= Omschrijving     : Functies om strings to manipuleren                        =
	================================================================================
	
	================================================================================
	= Changes																	   =
	================================================================================
	
	2007-10-18
	----------
	De functie InStr bevatte een logische fout. Indien deze losgelaten werd op een
	lege string dan gaf de routine 0 terug wat fout is aangezien 0 de eerste positie
	in een string is. Dit is gewijzigd naar -1.
	
	
	================================================================================
	= Overzicht functies                                                           =
	================================================================================
	
	Trim(strString)
	LTrim(strString)
	RTrim(strString)
	LTrimZero(strString)
	FillZero(strString, lngToLength)
	LCase(strString)
	UCase(strString)
	InStr(lngStartPosition, strExpression, strStringToFind, blnCaseSensitive)
	ReplaceString(strExpression, strStringToFind, strStringToReplaceWith, lngStartAtPosition, blnCaseSensitive)
	URLDecode(strString)
*/
	
//	================================================================================
//	= De functies                                                                  =
//	================================================================================

function Trim(strString) {
	strString = strString.replace( /^\s+/g, "" );
	return (strString.replace( /\s+$/g, "" ));
}


function RTrim(strString) {
	return (strString.replace( /\s+$/g, "" ));
}


function LTrim(strString) {
	return (strString.replace( /^\s+/g, "" ));
}


function LTrimZero(strString) {
	while(strString.charAt(0) == "0") {
		strString = strString.substring(1, strString.length)
	}
	return (strString);
}


function FillZero(strString, lngToLength) {
	var l_strString = new String();
	
	l_strString = strString.toString();
	while (l_strString.length < lngToLength) {
		l_strString = "0" + l_strString;
	}
	return (l_strString);
}


function UCase(strString) {
	return (strString.toString().toUpperCase());
}

		
function LCase(strString) {
	return (strString.toString().toLowerCase());
}


function InStr(lngStartPosition, strExpression, strStringToFind, blnCaseSensitive) {
	var l_strExpression = new String();
	var l_strStringToFind = new String();
	var l_lngPosition = new Number();
	
	l_strExpression = strExpression.toString();
	l_strStringToFind = strStringToFind.toString();
	
	if (!isNaN(parseInt(lngStartPosition, 10)))
		l_lngPosition = parseInt(lngStartPosition, 10);
	else
		l_lngPosition = 0;
	
	if (strExpression.length == 0) return (-1);
	
	for (l_lngPosition; l_lngPosition < (l_strExpression.length - l_strStringToFind.length + 1); l_lngPosition++) {
		if (blnCaseSensitive) {
			if (l_strExpression.substr(l_lngPosition, l_strStringToFind.length) == l_strStringToFind) return (l_lngPosition);
		} else {
			if (l_strExpression.toUpperCase().substr(l_lngPosition, l_strStringToFind.length) == l_strStringToFind.toUpperCase()) return (l_lngPosition);
		}
	}
	return (-1);
}


function ReplaceString(strExpression, strStringToFind, strStringToReplaceWith, lngStartAtPosition, blnCaseSensitive) {
	var l_strExpression = new String();
	var l_strStringToFind = new String();
	var l_strStringToReplaceWith = new String();
	var l_strResult = new String();
	var l_lngPosition = new Number();
	
	l_strExpression = strExpression.toString();
	l_strStringToFind = strStringToFind.toString();
	l_strStringToReplaceWith = strStringToReplaceWith.toString();
	l_lngPosition = 0;
	
	if (!isNaN(lngStartAtPosition)) l_lngPosition = parseInt(lngStartAtPosition, 10);
	
	while (l_lngPosition < l_strExpression.length) {
		if (((l_strExpression.substr(l_lngPosition, l_strStringToFind.length) == l_strStringToFind) && blnCaseSensitive) || ((l_strExpression.substr(l_lngPosition, l_strStringToFind.length).toUpperCase()  == l_strStringToFind.toUpperCase()) && !blnCaseSensitive)) {
			l_strResult = l_strResult + l_strStringToReplaceWith;
			l_lngPosition = l_lngPosition + l_strStringToFind.length;
		} else {
			l_strResult = l_strResult + l_strExpression.substr(l_lngPosition, 1);
			l_lngPosition = l_lngPosition + 1;
		}
	}
	return (l_strResult);
}


function URLDecode(strString) {
	var l_strEncoded = new String();
	var l_strDecoded = new String();
	var l_lngPosition = new Number();
	var l_strHexCharacters = "0123456789ABCDEF";
	l_strEncoded = strString.toString();
	l_lngPosition = 0;
				
	while (l_lngPosition < l_strEncoded.length) {
		if (l_strEncoded.charAt(l_lngPosition) == "%") {
			if ((l_lngPosition + 2) < l_strEncoded.length) {
				if (l_strHexCharacters.indexOf(l_strEncoded.charAt(l_lngPosition + 1).toUpperCase(), 0) != -1 && l_strHexCharacters.indexOf(l_strEncoded.charAt(l_lngPosition + 2).toUpperCase(), 0) != -1) {
					l_strDecoded = l_strDecoded + unescape(l_strEncoded.substr(l_lngPosition, 3));
					l_lngPosition = l_lngPosition + 3;
				}
			}
		}
		else if (l_strEncoded.charAt(l_lngPosition) == "+") {
			l_strDecoded = l_strDecoded + " ";
			l_lngPosition = l_lngPosition + 1;
		} else {
			l_strDecoded = l_strDecoded + l_strEncoded.charAt(l_lngPosition);
			l_lngPosition = l_lngPosition + 1;
		}
	}
	return (l_strDecoded);
}
