function RedirectToURL(strURL){
	self.location = strURL; 
}

function TargettedSubmit(objForm, objHiddenVarTargetURL, strUrl){
	objHiddenVarTargetURL.value = strUrl;
	objForm.submit();
}

function ValidateAndRedirectToURL(strValidationMessage, strURL){
	if (confirm(strValidationMessage)) {
		RedirectToURL(strURL);
	}
}

function GoBack(intHowFar){
	if (!intHowFar) {
		intHowFar = -1;
	}
	if (intHowFar > 0) {
		intHowFar = -1 * intHowFar
	}
	self.history.go(intHowFar); 
}

function GoForward(intHowFar){
	if (!intHowFar) {
		intHowFar = 1;
	}
	self.history.go(intHowFar); 
}

function CloseCurrentWindow(){
	self.close();
}

function SubmitFormAndCloseCurrentWindow(objForm) {
	objForm.submit();
	CloseCurrentWindow();
}

function CloseCurentWindowAndRefreshParent(strSelectListText, strOriginalParms) {
	if (!self.opener.closed){
		if (strOriginalParms){
			self.opener.location.href = self.opener.location.pathname + strOriginalParms + "&Parm1=" + strSelectListText + '&Time=' + escape(new Date());	
		}
		else{
			self.opener.location.href = self.opener.location.pathname + '?Time=' + escape(new Date()) + "&Parm1=" + strSelectListText;
		}
	}
	CloseCurrentWindow();
}

function refreshParentWindow() {
	if (self.opener) {
		if (!self.opener.closed) {
			var strHREF    = new String(self.opener.location.href);
			var strNewHREF = self.opener.location.href;
				
			if ( strHREF.indexOf("?") > -1 ) {
				strNewHREF += "&";
			}
			else {
				strNewHREF += "?";
			}
			self.opener.location.href = strNewHREF + 'Time=' + escape(new Date());
		}
	}
}

function addQueryStringParam(strQS, strParamName, strParamValue, blnEncodeValue) {
	var strQueryString = new String(strQS);

	if (blnEncodeValue == null) {
		blnEncodeValue = false;
	}
	
	if (strQueryString.indexOf("?") == -1) {
		strQueryString += "?";
	}
	else {
		strQueryString += "&";
	}
	
	strQueryString += strParamName + "="
	if (blnEncodeValue) {
		strParamValue += escape(strParamValue);
	}
	strQueryString += strParamValue;
	
	return strQueryString;
}

function setQueryStringParam(strQS, strParamName, strParamValue, blnEncodeValue) {
	strQS = deleteQueryStringParam(strQS, strParamName);
	strQS = addQueryStringParam(strQS, strParamName, strParamValue, blnEncodeValue);
	return strQS;
}

function deleteQueryStringParam(strQS, strParamName) {
	var strQueryString = new String(strQS);
	var intParamStart  = 0;
	var intParamEnd    = 0;
	
	//is this parameter in query string?
	if (strQueryString.indexOf(strParamName + "=") > -1) {
		//make sure this is the right parameter, it should be preceded with & or ?
		intParamStart = strQueryString.indexOf("?" + strParamName + "=");
		if (intParamStart == -1) {
			intParamStart = strQueryString.indexOf("&" + strParamName + "=");
		}
		if (intParamStart > -1) {
			//the end of paramname=paramvalue group
			//either followed by & or end of query string
			intParamEnd = strQueryString.indexOf("&",intParamStart + 1);
			
			strQueryString = strQueryString.substring(0,intParamStart);
			if (intParamEnd > -1) {
				strQueryString += strQueryString.substring(intParamEnd);
			}
			
		}
	}
	return strQueryString;
}

function setRefresh(strQS) {
	return setQueryStringParam(strQS, "Time", new Date(), true);
}

function addQueryStringParam(strQS, strParamName, strParamValue, blnEncodeValue) {
	var strQueryString = new String(strQS);

	if (blnEncodeValue == null) {
		blnEncodeValue = false;
	}
	
	if (strQueryString.indexOf("?") == -1) {
		strQueryString += "?";
	}
	else {
		strQueryString += "&";
	}
	
	strQueryString += strParamName + "="
	if (blnEncodeValue) {
		strParamValue += escape(strParamValue);
	}
	strQueryString += strParamValue;
	
	return strQueryString;
}

function setQueryStringParam(strQS, strParamName, strParamValue, blnEncodeValue) {
	strQS = deleteQueryStringParam(strQS, strParamName);
	strQS = addQueryStringParam(strQS, strParamName, strParamValue, blnEncodeValue);
	return strQS;
}

function deleteQueryStringParam(strQS, strParamName) {
	var strQueryString = new String(strQS);
	var intParamStart  = 0;
	var intParamEnd    = 0;
	
	//is this parameter in query string?
	if (strQueryString.indexOf(strParamName + "=") > -1) {
		//make sure this is the right parameter, it should be preceded with & or ?
		intParamStart = strQueryString.indexOf("?" + strParamName + "=");
		if (intParamStart == -1) {
			intParamStart = strQueryString.indexOf("&" + strParamName + "=");
		}
		if (intParamStart > -1) {
			//the end of paramname=paramvalue group
			//either followed by & or end of query string
			intParamEnd = strQueryString.indexOf("&",intParamStart + 1);
			
			strQueryString = strQueryString.substring(0,intParamStart);
			if (intParamEnd > -1) {
				strQueryString += strQueryString.substring(intParamEnd);
			}
			
		}
	}
	return strQueryString;
}

function setRefresh(strQS) {
	return setQueryStringParam(strQS, "Time", new Date(), true);
}
