function BodyLoadHandler(e) {
	try {
		OnBodyLoad(e);
	} catch (err) {}
}

function BodyKeyUpHandler(e) {
	try {
		OnBodyKeyUp(e);
	} catch (err) {}
}



// Function for creating an XMLHTTP object on different browsers.
function CreateXMLObject() {
	var obj = null;
	try {
		// Try the IE-version-7-and-all-other-browsers mode
		obj = new XMLHttpRequest();
	} catch (e) {
		try {
			obj = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				obj = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (E) {
				obj = null;
			}
		}
	}
	return obj;
}

function RefreshableUrl(x) {
	var d = new Date();
	var strAddTx = "refresh=" + d.valueOf();
	if (x.indexOf("?") != -1) {
		return x + "&" + strAddTx;
	} else {
		return x + "?" + strAddTx;
	}
}

function XMLTransmission(strMethod, strUrl, strPost, fnOnResult, fnParam) {
	var objXML = CreateXMLObject();
	var bIsPost = (strMethod == "POST");
	objXML.open(bIsPost ? "POST" : "GET", RefreshableUrl(strUrl), true);
	if (bIsPost) objXML.setRequestHeader("content-type", "application/x-www-form-urlencoded");
	objXML.onreadystatechange = newReadyStateHandler(objXML, fnOnResult, fnParam);
	objXML.send(bIsPost ? strPost : null);
	return objXML;
}

function newReadyStateHandler(objXML, HandlerFunction, param) {
	if (HandlerFunction) {
		try {
			  return function () {
					if (objXML.readyState == 4) {
						HandlerFunction(objXML, param);
					}
			  }
		} catch (err) {}
	}
}


function GetFormContents(f) {
	var strValueList = "";
	var strThisValue = "";
	var arrObj = f.getElementsByTagName("INPUT");
	var ctObj = arrObj.length;
	for (var iObj = 0; iObj < ctObj; iObj++) {
		// Watch for radio buttons
		if (arrObj[iObj].type != "radio" || arrObj[iObj].checked) {
			strThisValue = GetFieldValue(arrObj[iObj]);
			if (strValueList) strValueList += "&";
			strValueList += arrObj[iObj].name + "=" + PostEncode(strThisValue);
		}
	}
	arrObj = f.getElementsByTagName("TEXTAREA");
	ctObj = arrObj.length;
	for (var iObj = 0; iObj < ctObj; iObj++) {
		strThisValue = GetFieldValue(arrObj[iObj]);
		if (strValueList) strValueList += "&";
		strValueList += arrObj[iObj].name + "=" + PostEncode(strThisValue);
	}
	arrObj = f.getElementsByTagName("SELECT");
	ctObj = arrObj.length;
	for (var iObj = 0; iObj < ctObj; iObj++) {
		strThisValue = GetFieldValue(arrObj[iObj]);
		if (strValueList) strValueList += "&";
		strValueList += arrObj[iObj].name + "=" + PostEncode(strThisValue);
	}
	return strValueList;			
}

function GetRadioValue(elemname) {
	var arrE = document.getElementsByName(elemname);
	var ctE = arrE.length;
	for (var i = 0; i < ctE; i++) {
		if (arrE[i].checked) return arrE[i].value;
	}
	return "";
}

function GetFieldValue(f) {
	var strTag = f.tagName.toLowerCase();
	var strType = f.type.toLowerCase();
	if (strTag == "input" && (strType == "checkbox" || strType == "radio")) {
		return ((f.checked) ? f.value : "");
	} else if (strTag == "select") {
		var iOpt = f.selectedIndex;
		if (iOpt == -1) 
			return "";
		else
			return f.options[iOpt].value;
	} else if (strTag == "input" && strType == "button") {
		return "";
	} else {
		return f.value;
	}
}

function PostEncode(V) {
	return escape(V).replace(/[+]/g, "%2B");

}

function IsXmlHttpResponseSuccess(XmlHttp) {
	if (XmlHttp.status == 200 && XmlHttp.responseText.indexOf("OKAY:") == 0) {
		return true;
	} else {
		return false;
	}
}

function HandleXmlHttpResponse(XmlHttp) {
	if (XmlHttp.status == 200 && (XmlHttp.responseText.indexOf("ERR:") == 0 || XmlHttp.responseText.indexOf("OKAY:") == 0)) {
		if (XmlHttp.responseText.indexOf("ERR:") == 0) {
			alert(XmlHttp.responseText.substr(4));
			return false;
		} else {
			alert(XmlHttp.responseText.substr(5));
			return true;
		}
	} else {
		alert("An error occurred while trying to carry out this action. Please try again.");
		return false;
	}
}

function GetXmlHttpResponseData(XmlHttp) {
	var d = XmlHttp.responseText.indexOf(":");

	if (d == -1) {
		return "";
	} else {
		return XmlHttp.responseText.substr(d + 1);
	}
}

function AddClass(elem, strClass) {
	if (strClass == "") return;
	

	var strC = elem.className;
	if (strC == "") {
		elem.className = strClass;
	} else {
		var arrC = strC.split(" ");
		var ctC = arrC.length;
		for (var i = 0; i < ctC; i++) {
			if (arrC[i] == strClass) return;
		}
		
		elem.className += " " + strClass;
	}
}

function RemoveClass(elem, strClass) {
	if (strClass == "") return;
	
	var strC = elem.className;
	if (strC == "") {
		return;
	} else {
		var strNewList = "";
		var arrC = strC.split(" ");
		var ctC = arrC.length;
		for (var i = 0; i < ctC; i++) {
			if (arrC[i] != "" && arrC[i] != strClass) {
				strNewList += (strNewList ? " " : "") + arrC[i];
			}
		}
		
		elem.className = strNewList;
	}
}

function Goto(strUrl) {
	document.location.href = RefreshableUrl(strUrl);
}

function Goto2(strUrl) {
	document.location.href = strUrl;
}

function RefreshableUrl(x) {
	var p1 = x.indexOf("?rx");
	if (p1 == -1) p1 = x.indexOf("&rx");
	if (p1 != -1) {
		var p2 = x.indexOf("&", p1 + 1);
		if (p2 == -1) {
			x = x.substr(0, p1);
		} else {
			x = x.substr(0, p1 + 1) + x.substr(p2);

		}
	}

	var d = new Date();
	var strAddTx = "rx=" + d.valueOf();
	if (x.indexOf("?") != -1) {
		return x + "&" + strAddTx;
	} else {
		return x + "?" + strAddTx;
	}
}

function CancelGoto(strUrl) {
	try {
		if (strReferer) {
			Goto(strReferer);
			return;
		}
	} catch (ex) {}
	if (history.length) {
		history.go(-1);
	} else {
		Goto(strUrl);
	}
}


function CapitaliseText(fd, bNoTrim) {
	try {
		if (fd.value && fd.value.indexOf("://") == -1 && fd.value.indexOf("www.") == -1 && fd.value.indexOf("skype:") == -1) {
			if (!bNoTrim) fd.value = Trim(fd.value);
			if (fd.value == fd.value.toLowerCase()) {
				var newstr = "";
				var mode = 1;

				for (var l=0; l<fd.value.length; l++) {
					var c = fd.value.substr(l,1);

					switch (mode) {
						case 0:
							newstr += c.toLowerCase();
							break;
						case 1:
							newstr += c.toUpperCase();
							break;
						case 2:
							newstr +=c;
							break;
					}


					mode = 0;
					switch (c) {
						case " ":
							mode=1;
							break;
						case "'":
							if (l>0) {
								if (newstr.substr(l-1,1) == "O") mode=1;							
							}
							break;
						case "c":
							if (l>0) {
								if (newstr.substr(l-1,1) == "M") {
									mode = 2;
								} else {
									if (l>1) {
										if (newstr.substr(l-2,2) == "Ma") {
											mode = 2;
										}
									}
								}

							}
							break;
						case "z":
							if (l>2) {
								if (newstr.substr(l-3,3) == "Fitz") mode=2;
							}
							break;
					}
				}

				fd.value = newstr;
				fd.onchange();
			}
		}			
	} catch (err) {}
}

function Trim(V) {
	var temp = V.replace(/^[\s]+/g, "");
	temp = temp.replace(/[\s]+$/g, "");
	return temp;
}

function ValidateYYYYMMDD(x) {
	try {
		var arrX;
		if (x.indexOf("-") != -1) {
			arrX = x.split("-");
		} else if (x.indexOf("/") != -1) {
			arrX = x.split("/");
		} else if (x.length == 8) {
			arrX = new Array();
			arrX.push(x.substr(0,4));
			arrX.push(x.substr(4,2));
			arrX.push(x.substr(6,2));
		} else {
			return false;
		}
		if (arrX.length != 3) return false;

		var y = parseInt(arrX[0], 10);
		var m = parseInt(arrX[1], 10);
		var d = parseInt(arrX[2], 10);
		if (isNaN(y) || isNaN(m) || isNaN(d)) return false;
		
		if (m < 1 || m > 12) return false;
		if (d < 1 || d > 31) return false;
		if (y < 2000 || y > 2099) return false;
		
		switch (m) {
			case 2:
				if (y % 4 != 0) {
					if (d > 28) return false;
				} else {
					if (y % 100 != 0) { 
						if (d > 29) return false;
					} else {
						if (d > 28) return false;
					}
				}
				break;
				
			case 4:
			case 6:
			case 9:
			case 11:
				if (d > 30) return false;
				break;
			default:
				// Done check above
				break;
		}

		return true;		
	} catch (ex) {
		return false;
	}

}

function FireA(elem, e) {
	var arrE = elem.getElementsByTagName("A");
	if (arrE.length) {
		if (arrE[0].onclick) {
			try {
				arrE[0].onclick();
			} catch (ex) {}
		} else {
			Goto(arrE[0].href);
		}
	}
	return KillEvent(e);
}

function FireA2(elem, e) {
	var arrE = elem.getElementsByTagName("A");
	if (arrE.length) {
		if (arrE[0].onclick) {
			try {
				arrE[0].onclick();
			} catch (ex) {}
		} else {
			Goto2(arrE[0].href);
		}
	}
	return KillEvent(e);
}

function KillEvent(e) {
	try {e.cancelBubble = true;} catch (ex) {}
	try {e.stopPropagation();} catch (ex) {}
	return false;
}

function ShowPending() {
	var elem = document.getElementById("WaitMsg");
	if (elem) {
		elem.style.display = "";
	}
}

function HidePending() {
	var elem = document.getElementById("WaitMsg");
	if (elem) {
		elem.style.display = "none";
	}
}
