function URLEncode(sString){
	sString = sString.replace(/%/g,"%25");
	sString = sString.replace(/\./g,"%2E");
	sString = sString.replace(/\+/g,"%2B");
	sString = sString.replace(/ /g,"%20");
	sString = sString.replace(/\'/g,"%27");
	sString = sString.replace(/\"/g,"%22");
	sString = sString.replace(/!/g,"%21");
	sString = sString.replace(/#/g,"%23");
	sString = sString.replace(/\$/g,"%24");
	sString = sString.replace(/&/g,"%26");
	sString = sString.replace(/\(/g,"%28");
	sString = sString.replace(/\)/g,"%29");
	sString = sString.replace(/\//g,"%2F");
	sString = sString.replace(/:/g,"%3A");
	sString = sString.replace(/;/g,"%3B");
	sString = sString.replace(/\[/g,"%5B");
	sString = sString.replace(/\\/g,"%5C");
	sString = sString.replace(/\]/g,"%5D");
	sString = sString.replace(/\^/g,"%5E");
	sString = sString.replace(/`/g,"%60");
	sString = sString.replace(/\{/g,"%7B");
	sString = sString.replace(/\|/g,"%7C");
	sString = sString.replace(/\}/g,"%7D");
	sString = sString.replace(/</g,"%3C");
	sString = sString.replace(/=/g,"%3D");
	sString = sString.replace(/>/g,"%3E");
	sString = sString.replace(/\?/g,"%3F");
	sString = sString.replace(/_/g,"%5F");
	sString = sString.replace(/\$/g,"%24");
	return sString;
}

function getParametersFromQueryString(sQueryString){
	var aNameValuePairs = sQueryString.split("&");
	var aParts;

	var aParameters = new Array(aNameValuePairs.length);
	for(var i=0; i<aNameValuePairs.length; i++){
		aParameters[i] = new Array(2);
		aParts = aNameValuePairs[i].split("=");
		aParameters[i][0] = aParts[0];
		aParameters[i][1] = aParts[1];
	}
	return aParameters;
}

function mergeQueryStrings(sQueryString1, sQueryString2){
	var sMergedQueryString;
	//voegt twee query strings samen
	//als een parameter uit de tweede string ook voorkomt in de eerste string dan is de waarde van de tweede bepalend

	if(sQueryString1=="" || sQueryString2==""){
		sMergedQueryString = sQueryString1 + sQueryString2;
	}
	else{
		var aParameters1 = getParametersFromQueryString(sQueryString1);
		var aParameters2 = getParametersFromQueryString(sQueryString2);

		for(var i=0; i<aParameters2.length; i++){
			bFound = false;
			for(var j=0; j<aParameters1.length; j++){
				if((aParameters2[i][0]==aParameters1[j][0])||(URLEncode(aParameters2[i][0])==aParameters1[j][0])||(aParameters2[i][0]==URLEncode(aParameters1[j][0]))){
					aParameters1[j][1] = aParameters2[i][1];
					bFound = true;
				}
			}
			if(!bFound){
				//parameter toevoegen
				newIndex = aParameters1.length
				aParameters1[newIndex] = new Array(2);
				aParameters1[newIndex][0] = aParameters2[i][0];
				aParameters1[newIndex][1] = aParameters2[i][1];
			}
		}
		for(var i=0; i<aParameters1.length; i++){
			if(i==0){
				sMergedQueryString = aParameters1[i][0] + "=" + aParameters1[i][1]
			}
			else{
				sMergedQueryString = sMergedQueryString + "&" + aParameters1[i][0] + "=" + aParameters1[i][1]
			}
		}
	}

	return sMergedQueryString;
}

function deleteParameterFromQueryString(sParameterName, sQueryString){
	var sNewQueryString = "";
	var aParameters = getParametersFromQueryString(sQueryString);
	
	var bFirst = true;
	for (var i=0; i<aParameters.length; i++)
	{
		if(!(aParameters[i][0]==sParameterName)){
			if(bFirst){
				sNewQueryString = sNewQueryString + aParameters[i][0] + "=" + aParameters[i][1];
				bFirst = false;
			}
			else{
				sNewQueryString = sNewQueryString + "&" + aParameters[i][0] + "=" + aParameters[i][1];
			}
		}
	}
	return sNewQueryString;
}

function setQueryStringParameter(sParameterName, sQueryString, sNewValue){
	var sNewQueryString = "";
	var aParameters = getParametersFromQueryString(sQueryString);
	
	var bFirst = true;
	for (var i=0; i<aParameters.length; i++)
	{
		if(aParameters[i][0]==sParameterName){
			aParameters[i][1] = sNewValue;
		}
		if(bFirst){
			sNewQueryString = sNewQueryString + aParameters[i][0] + "=" + aParameters[i][1];
			bFirst = false;
		}
		else{
			sNewQueryString = sNewQueryString + "&" + aParameters[i][0] + "=" + aParameters[i][1];
		}
	}
	return sNewQueryString;
}
