function ASSERT(sMessage, oOptionalError)
{
	sMessage = sMessage || "";
	sMessage = "ASSERT\n" +sMessage;
	if(oOptionalError != null)
		sMessage += "\n\nERROR:\n" + oOptionalError.message;
	alert(sMessage);
	debugger;
}

function ALERT(sMessage)
{
	alert(sMessage);
}

function JsDoPostBack(sEventType, sEventTarget, sEventArgument)
{
	try
	{
		var oForm = document.getElementById(JsGetCurrentFormName());
		oForm.__EVENTTYPE.value = sEventType;
		oForm.__EVENTTARGET.value = sEventTarget.split("$").join(".");
		oForm.__EVENTARGUMENT.value = sEventArgument;
	}
	catch(e)
	{
		//the document may not have fully loaded
		return;
	}
	
	JsSubmitForm(oForm);
}

function JsSetDocumentWaitCursor()
{
	try
	{
		document.body.style.cursor="wait";
		var oWaitLayer = document.createElement("DIV");
		oWaitLayer.id = "WaitLayer";
		oWaitLayer.style.position = "absolute";
		oWaitLayer.style.top = 0;
		oWaitLayer.style.left = 0;
		oWaitLayer.style.width = document.body.offsetWidth - 100;
		oWaitLayer.style.height = document.body.offsetHeight - 100;
		oWaitLayer.innerHTML = "&nbsp";
		oWaitLayer.style.cursor="wait";
		document.body.appendChild(oWaitLayer);
	}
	catch(e) {/*not important*/}
}

function JsRemoveDocumentWaitCursor()
{
	try
	{
		document.body.style.cursor="default";
		var oWaitLayer = document.getElementById("WaitLayer");
		oWaitLayer.parentNode.removeChild(oWaitLayer);
	}
	catch(e) {/*not important*/}
}

function JsSubmitForm(oForm,bIsRedirectForm)
{
	JsSetDocumentWaitCursor();
	var oElements = JsGetFormElements(oForm);
	JsHandlDisabledFormControls(oElements, oForm);
	JsUpdateFormAction(oElements,oForm);

	try
	{
		if(oForm.__FORMID != null)
		{
			if(bIsRedirectForm == true)
			{
				var nThisFormsNextHistory = JsGetNextHistory(oForm.__FORMID.value);
				if(nThisFormsNextHistory != 0)
				{
					history.go(nThisFormsNextHistory);
					return;
				}
				JsSetFormHistory(oForm.__FORMID.value);
			}
			else
			{
				//attach a timestamp to the __FORMID for each unique submit (does not happen for manual refreshes)
				oForm.__FORMID.value = oForm.__FORMID.value + ":" + new Date().getTime();
			}
		}
		JsRemoveDocumentWaitCursor();	
		oForm.submit();
	}
	catch(e)
	{
		//sometimes the URL is just too long
		if(oForm.sSavedAction!=null)
		{
			oForm.action=oForm.sSavedAction;
			JsRemoveDocumentWaitCursor();
			oForm.submit();
		}
	}
}

// the number of unique form id's to remember the history for
var MAX_HISTORY_LENGTH = 20;

function JsSetFormHistory(sFormID)
{
	var nNextHistoryIndex = parseInt(JsGetCookie("nNextFormHistoryIndex"));
	if(isNaN(nNextHistoryIndex) || nNextHistoryIndex == MAX_HISTORY_LENGTH)
	{
		nNextHistoryIndex = 0;
	}
	else
	{
		nNextHistoryIndex++;
	}
	JsSetCookie("nNextFormHistoryIndex", nNextHistoryIndex);
	
	var sHistory = JsGetCookie("oFormSubmitHistory");	
	var oHistory = new Array();
	if(sHistory != null)
	{
		oHistory = String(sHistory).split(",");
	}
	oHistory[nNextHistoryIndex] = sFormID + "::" + 0;
	JsSetCookie("oFormSubmitHistory", oHistory.join(","));
}

// will return 0, 1 or -1 depending on the last
// history recorded for the form id given
function JsGetNextHistory(sFormID)
{
	var sHistory = JsGetCookie("oFormSubmitHistory");	
	if(sHistory == null)
	{
		return 0;
	}
	
	var oHistory = sHistory.split(",");
	for(var i = 0; i < oHistory.length; i++)
	{
		var oHistoryParts = oHistory[i].split("::");
		if(oHistoryParts[0] == sFormID)
		{
			var nLastHistory = oHistoryParts[1];
			if(nLastHistory == 0 || nLastHistory == 1)
			{
				nLastHistory = -1;
			}
			else
			{
				nLastHistory = 1;
			}
			var sNewHistory = oHistoryParts[0] + "::" + nLastHistory;
			// remove the history and put it at the end
			oHistory.splice(i,1);
			oHistory[oHistory.length] = sNewHistory;
			JsSetCookie("oFormSubmitHistory", oHistory.join(","));
			return nLastHistory;
		}
	}
	return 0;
}

function JsSetCookie(sName, sValue, dExpire) 
{
	var locationParts = location.toString().split("/");
	var locationDomain = locationParts[2];
	if(dExpire == null)
	{
		dExpire = new Date(3000, 0 , 1);
	}
	var sCookie = sName + "=" + escape(sValue);
	if (dExpire)
	{
		sCookie += "; expires=" + dExpire.toGMTString() + "; path=/;";
	}
	document.cookie = sCookie;
}

function JsGetCookie(sName) 
{
	var sSearch = sName + "="
	if (document.cookie.length > 0) 
	{	 
		var nOffset = document.cookie.indexOf(sSearch)
		if(nOffset != -1)
		{ 
			nOffset += sSearch.length
			var nEnd = document.cookie.indexOf(";", nOffset)
			if (nEnd == -1)
			{
				nEnd = document.cookie.length
			}
			return unescape(document.cookie.substring(nOffset, nEnd))
		}
	}
	return null;
}

function JsGetFormElements(oForm)
{
	var oElements = new Array();
	
	//add all of the list controls to the element array
	for(var sControlName in oClientControls)
	{
		var oControl = JsGetControl(sControlName);
		if(oControl.m_oListControlDiv != null)
		{
			oElements.push(oControl.m_oListControlDiv);
		}
	}
	
	var oInputs = oForm.getElementsByTagName("INPUT");
	for(var x = 0; x < oInputs.length; x++)
	{
		oElements.push(oInputs[x]);
	}
	
	var oSelects = oForm.getElementsByTagName("SELECT");
	for(var x = 0; x < oSelects.length; x++)
	{
		oElements.push(oSelects[x]);
	}
	
	var oTextAreas = oForm.getElementsByTagName("TEXTAREA");
	for(var x = 0; x < oTextAreas.length; x++)
	{
		oElements.push(oTextAreas[x]);
	}

	return oElements;
}

function JsUpdateFormAction(oElements,oForm)
{
	if(oForm.method.toUpperCase()!="POST" || oElements.length==0)
	{
		return;
	}

	//dont append any properties if url properties already exist	
	if(oForm.action.indexOf('?')!=-1)
	{
		return;
	}
	
	//dont update the URL for dialogs they can easily exceed max the URL length
	if(/Dlg[^/]*\.asp/.test(oForm.action))
	{
		return;
	}

	// Fix for 9456. Make sure the URL for the custom performance monitor dialogs (scripted, snmp and wmi)
	// are stripped from their arguments.
	if (oForm.action.indexOf("07D98585-8694-4882-BDDF-4C826B3A8788/Default.asp") != -1 ||
		oForm.action.indexOf("2F300544-CBA3-4341-9B05-2D1786F68E07/Default.asp") != -1 ||
		oForm.action.indexOf("3392ABFE-CC36-47E1-9B53-BD1D2B9E060E/Default.asp") != -1 )
	{
		return;
	}

	var sProperties = "";
	for(var x = 0; x < oElements.length; x++)
	{
		var oElement = oElements[x];
		
		var sValue = JsGetElementValue(oElement);
		if(sValue==null)
		{
			continue;
		}
		if(sProperties.length>0)
		{
			sProperties += "&";
		}
		sProperties = sProperties + oElement.name + "=" + encodeURIComponent(sValue);
	}
	
	if(sProperties.length==0)
	{
		return;
	}
	oForm.sSavedAction=oForm.action;
	oForm.action = oForm.action + "?" + sProperties;
}

function JsGetElementValue(oElement)
{
	var sElementName = oElement.name;
	if(sElementName==null)
	{
		sElementName=oElement.id;
	}
	if(sElementName==null || sElementName=="" /*|| sElementName.substring(0,2)=="__"*/)
	{
		return null;
	}
	if(sElementName.indexOf(".SAVEDFORMSTATE")!=-1 || 
		sElementName.indexOf(".VISITEDFORM")!=-1 ||
		sElementName.indexOf("__EVENTTYPE")!=-1 ||
		sElementName.indexOf("__EVENTTARGET")!=-1 ||
		sElementName.indexOf("__EVENTARGUMENT")!=-1 ||
		sElementName.indexOf("__SOURCEFORM")!=-1 ||
		sElementName.indexOf("__VIEWSTATE")!=-1 ||
		sElementName.indexOf("__FORMID")!=-1 ||
		sElementName.indexOf(".DIALOGRETURNURL")!=-1)
	{
		return null;
	}
	
	if(oElement.disabled || oElement.tagName==null)
	{
		return null;
	}
	switch(oElement.tagName.toUpperCase())
	{
		case "SELECT":
		case "TEXTAREA":
		{
			return oElement.value;	
		}
		case "INPUT":
		{
			if(oElement.type.toUpperCase() == "BUTTON"	|| oElement.type.toUpperCase() == "SUBMIT" ) 
			{
				return null;
			}
		
			// skip unchecked checkboxes
			if(oElement.type.toUpperCase() == "CHECKBOX" || oElement.type.toUpperCase() == "RADIO")
			{
				if(oElement.checked==false) 
				{
					return null;
				}
				else
				{
					return oElement.value;
				}
			}
			
			return oElement.value;
		}
		case "DIV":
		{
			if(oElement.className == "Aspf-ListCtrl")
			{
				return oElement.value;
			}
		}
		default:
			return null;
	}
}

function JsPressButton(sControlName,sArgument)
{
	JsDoPostBack("LinkButtonPressed",JsGetFormFieldID(sControlName),sArgument);
}

function JsGetFormFieldID(sShortName)
{
	if(sShortName.substr(0,1)=="_") 
		return sShortName; 
	if(sShortName.substr(0,2)=="__") 
		return sShortName; 
	if(sShortName.indexOf(".")!=-1)
		return sShortName; 
	return JsGetCurrentFormName() + "." + sShortName;
}

function JsGetFormField(sShortName)
{
	return document.getElementById(JsGetFormFieldID(sShortName));
}

var oClientControls = new Array();

function JsGetControl(sControlID)
{
	var oControl = oClientControls[sControlID];
	if(oControl==null)
	{
		var sFullControlID = JsGetFormFieldID(sControlID);
		oControl = oClientControls[sFullControlID];
		if(oControl == null)
		{
			return null;
		}
	}
	return oControl;
}	

function JsSetControl(sControlID,oControl)
{
	oClientControls[sControlID] = oControl;
}

function JsGetXmlDom()
{
	var oXmlDom = null;
	if(window.ActiveXObject)
	{
		oXmlDom = new ActiveXObject("Microsoft.XMLDOM");
	} // code for Mozilla, etc.
	else if (document.implementation && document.implementation.createDocument)
	{
		oXmlDom = document.implementation.createDocument("","",null);
	}
	else ALERT("Your browser does not support the Xml Dom.");
	oXmlDom.async = false; 
	oXmlDom.resolveExternals = false; 
	oXmlDom.validateOnParse = false;
	return oXmlDom;
}

var g_oViewStateDom = null;
function JsGetViewStateXmlDom()
{
	if(g_oViewStateDom != null)
	{
		return g_oViewStateDom;
	}
	try 
	{
		var oXmlDom = JsGetXmlDom();
		var oHiddenField = document.getElementById("__VIEWSTATE");
		if(oHiddenField!=null)
		{
			var sXmlViewState = oHiddenField.value; 
			sXmlViewState = decodeURI(sXmlViewState);
			oXmlDom.loadXML(sXmlViewState); 
		}
		g_oViewStateDome = oXmlDom;
		return g_oViewStateDome;
	}
	catch(e)
	{
		return null;
	}
}

function JsGetGlobalViewState(sName) 
{ 
	var oViewStateXmlDom = JsGetViewStateXmlDom();
	var sXPathQuery = "//oElement[@sName='" + sName + "']";
	var oElement = oViewStateXmlDom.selectSingleNode(sXPathQuery);
	if(oElement==null)
	{
		return null;
	}
	
	// replace the undecoded quotes with quotes
	var sValue = oElement.getAttribute("sValue");
	sValue = sValue.replace(/%26quot;/g, "\\\"");
	// replace the undecoded # sign
	sValue = sValue.replace(/%23/g,"#");
	return sValue
}

function JsSetGlobalViewState(sName,sValue)
{	
	var oViewStateXmlDom = JsGetViewStateXmlDom();
	if(oViewStateXmlDom==null)
	{
		return;
	}
	var sXPathQuery = "//oElement[@sName='" + sName + "']";
	var oElement = oViewStateXmlDom.selectSingleNode(sXPathQuery);
	if(oElement==null)
	{
		var oViewStateElement = oViewStateXmlDom.firstChild;
		if(oViewStateElement==null)
		{
			oViewStateElement = oViewStateXmlDom.createElement("oViewState");
			oViewStateXmlDom.appendChild(oElement);
		}
		oElement = oViewStateXmlDom.createElement("oElement");
		oViewStateElement.appendChild(oElement);
	}	
	oElement.setAttribute("sName",sName);
	oElement.setAttribute("sValue",sValue);
	var sXmlViewState = String(oViewStateXmlDom.xml);
	sXmlViewState = encodeURI(sXmlViewState);

	// put the view state encoding back the way it was on the server
	sXmlViewState = sXmlViewState.replace(/%2526quot;/g, "%26quot;");
	sXmlViewState = sXmlViewState.replace(/%2526lt;/g, "%26lt;");
	sXmlViewState = sXmlViewState.replace(/%2526gt;/g, "%26gt;");
	//	Defect #8673 - The ? and & on the URL are encoded differently,
	//	this wil fix the issue.
	sXmlViewState = sXmlViewState.replace(/%253f/g,		"%3f");
	sXmlViewState = sXmlViewState.replace(/%2526amp;/g,	"%26amp;");
	document.getElementById("__VIEWSTATE").value = sXmlViewState;
	g_oViewStateDome = null;
	return;
}

function JsGetViewState(sName) 
{
	var sFullName = JsGetFormFieldID(sName);
	return JsGetGlobalViewState(sFullName);
}

function JsSetViewState(sName,sValue)
{
	var sFullName = JsGetFormFieldID(sName);
	return JsSetGlobalViewState(sFullName,sValue);
}

function JsOnResizeCenterDiv(event, sDivID)
{
	JsCenterDiv(document.getElementById(sDivID));
}

function JsCenterDiv(oDiv)
{
	if(oDiv == null) 
		return;

	var nDivWidth = oDiv.offsetWidth || 200;
	var nDivHeight = oDiv.offsetHeight;
	if(oDiv.childNodes[1]) // for moz
	{
		if(oDiv.childNodes[1].offsetWidth > nDivWidth)
			nDivWidth = oDiv.childNodes[1].offsetWidth;
		if(oDiv.childNodes[1].offsetHeight > nDivHeight)
			nDivHeight = oDiv.childNodes[1].offsetHeight;
	}
	var oDW = document.body.clientWidth;
	var oDH = document.body.clientHeight;
	
	var nDivLeft = parseInt((oDW-nDivWidth) / 2);
	if(nDivLeft < 0) 
		nDivLeft = 0;
	
	var nDivTop = parseInt((oDH-nDivHeight) / 2.5);
	if(nDivTop < 0) 
		nDivTop = 0;
	
	// attempt to size the title
	try
	{	
		var oDialogTitleDiv = document.getElementById("oDialogTitleDiv");
		oDialogTitleDiv.style.width = nDivWidth - 90;
	}
	catch(e){}
	
	oDiv.style.position = "absolute";
	oDiv.style.width = nDivWidth;
	oDiv.style.left = nDivLeft;
	oDiv.style.top = nDivTop;
}

var sSavedEventType = null;
var sSavedEventTarget = null;
var sSavedEventArgument = null;

function JsSetFormFocus()
{
	try
	{
		var oInputs = document.getElementsByTagName("INPUT");
		for(var i = 0; i < oInputs.length; i++)
		{
			if(oInputs[i].type == "text")
			{
				oInputs[i].focus();
				break;
			}	
		}

		//set focus back to the control that generated the postback
		var oEventTarget = JsGetFormField(sSavedEventTarget);
		if(oEventTarget==null)
		{
			return;
		}
		var oControl = JsGetControl(sSavedEventTarget);
		if(oControl!=null && oControl.OnFocus)
		{
			oControl.OnFocus();
			return;
		}
		if(oEventTarget.tabIndex!=-1)
		{
			oEventTarget.focus();
			return;
		}
	}
	catch(e) { /* throw away this error - not important */ }
}

//for each disabled control, create a hidden field so their 
//value gets posted even though they are disabled
function JsHandlDisabledFormControls(oElements,oForm)
{	
	for(var x = 0; x < oElements.length; x++)
	{
		var oNode = oElements[x];
		if(IsDisabledControl(oNode)==false)
		{
			continue;
		}
		
		// create the hidden element and add it to the form
		var oHiddenField = document.createElement("INPUT");
		oHiddenField.type = "hidden";
		oHiddenField.name = oNode.name;
		oHiddenField.value = oNode.value;
		oForm.appendChild(oHiddenField);		
	}
}
function IsDisabledControl(oNode)
{
	// returns true if an "INPUT" (exept for types "BUTTON" and "SUBMIT"
	// and for "SELECT" and "TEXTAREA"
	if(oNode.disabled==false || oNode.tagName==null)
	{
		return false;
	}
	switch(oNode.tagName.toUpperCase())
	{
		case "SELECT":
		case "TEXTAREA":
		{
			return true;	
		}
		case "INPUT":
		{
			if(oNode.type.toUpperCase() == "BUTTON"	|| oNode.type.toUpperCase() == "SUBMIT" ) 
				return false;
		
			// skip unchecked checkboxes
			if(oNode.type.toUpperCase() == "CHECKBOX" && !oNode.checked) 
				return false;
		
			// skip unchecked radio buttons
			if(oNode.type.toUpperCase() == "RADIO" && !oNode.checked) 
				return false;
				
			return true;
		}
		case "DIV":
		{
			if(oNode.className == "Aspf-ListCtrl")
			{
				oNode.disabled = false;
				return false;
			}
		}
		default:
			return false;
	}
}

// extend the document to add this function that gets all elements
// with the specified class name under the specified node
document.getElementsByClassName = function(sClassName, oNode)
{
	var a = [];
	var oRegX = new RegExp('(^| )'+ sClassName +'( |$)');
	var oDivs = oNode.getElementsByTagName("DIV");
	for(var i = 0; i < oDivs.length; i++)
	{
		if(oRegX.test(oDivs[i].className))
		{
			a.push(oDivs[i]);
		}
	}
	return a;
}

//web browser types
var BT_UNKNOWN=0;
var BT_IE=1;

function CAspForm()
{
	if(navigator.userAgent.indexOf("MSIE")>0)
	{
		this.m_nBrowserType=BT_IE;
		
		//this makes IE6 behave a little nicer regarding background images
		document.execCommand("BackgroundImageCache",false,true);
	}
	else
	{
		this.m_nBrowserType=BT_UNKNOWN;
	}
}

CAspForm.prototype.GetBrowserType=function()
{
	return this.m_nBrowserType;
}

var KEY_CTRL = 1;
var KEY_SHIFT = 2;
var KEY_ALT = 4;
var VK_ENTER=0x0D;

//function prototype should look like OnKeyDown(event,oKeyHandlerData)
var oKeyDownFunctions=new Array();
CAspForm.prototype.AddKeyDownHandler=function(oFunction, nOptionalAsciiCode, nOptionalKeyModifierMask,oOptionalItemData)
{
	var oKeyHandlerData = new Object();
	oKeyHandlerData.m_oFunction=oFunction;
	oKeyHandlerData.m_nOptionalAsciiCode=nOptionalAsciiCode;
	oKeyHandlerData.m_nOptionalKeyModifierMask=nOptionalKeyModifierMask;
	oKeyHandlerData.m_oOptionalItemData=oOptionalItemData;
	
	document.onkeydown = JsHandleKeyDown;
	oKeyDownFunctions.push(oKeyHandlerData);
}

function JsHandleKeyDown(event)
{
	if(event==null) 
		event = window.event;
	
	//dont run any key handlers for textarea/enter key
	if(event.keyCode==VK_ENTER)
	{
		var oSourceElement = event.srcElement;
		if(oSourceElement == null) oSourceElement = event.target;
		if(oSourceElement.tagName=="TEXTAREA")
		{
			return;
		}
	}
	for(var x = 0; x < oKeyDownFunctions.length; x++)
	{
		var oKeyHandlerData = oKeyDownFunctions[x];
		
		//was a specific key requested
		if(oKeyHandlerData.m_nOptionalAsciiCode != null)
		{
			if(event.keyCode != oKeyHandlerData.m_nOptionalAsciiCode)
				continue;
				
			if(oKeyHandlerData.m_nOptionalKeyModifierMask != null)
			{
				var nKeysDown = 0;
				if(event.ctrlKey)nKeysDown+=KEY_CTRL;
				if(event.shiftKey)nKeysDown+=KEY_SHIFT;
				if(event.altKey)nKeysDown+=KEY_ALT;
				if((oKeyHandlerData.m_nOptionalKeyModifierMask & nKeysDown)!=oKeyHandlerData.m_nOptionalKeyModifierMask)
					continue;
			}
		}			
		if(oKeyHandlerData.m_oFunction(event,oKeyHandlerData))
		{
			if(oAspForm.m_nBrowserType==BT_IE)
			{
				window.event.cancelBubble=true;
				window.event.returnValue = false;
			}
			else
			{
				event.stopPropagation();
				event.preventDefault();
			}
			return false;
		}
	}
	return true;
}

//function prototype should look like OnLoad(event,oOptionalItemData)
var oDocumentLoadFunctions=new Array();
CAspForm.prototype.AddDocumentLoadHandler=function(oFunction, oOptionalItemData)
{
	var oDocumentLoadData = new Object();
	oDocumentLoadData.m_oFunction=oFunction;
	oDocumentLoadData.m_oOptionalItemData=oOptionalItemData;
	
	window.onload = JsHandleDocumentLoad;
	oDocumentLoadFunctions.push(oDocumentLoadData);
}

function JsHandleDocumentLoad(event)
{
	if(event==null) 
		event = window.event;
	
	for(var x = 0; x < oDocumentLoadFunctions.length; x++)
	{
		var oDocumentLoadData = oDocumentLoadFunctions[x];
		
		oDocumentLoadData.m_oFunction(event,oDocumentLoadData.m_oOptionalItemData);
	}
}

//function prototype should look like OnLoad(event,oOptionalItemData)
var oDocumentResizeFunctions=new Array();
CAspForm.prototype.AddDocumentResizeHandler=function(oFunction, oOptionalItemData)
{
	var oDocumentResizeData = new Object();
	oDocumentResizeData.m_oFunction=oFunction;
	oDocumentResizeData.m_oOptionalItemData=oOptionalItemData;
	
	window.onresize = JsHandleDocumentResize;
	oDocumentResizeFunctions.push(oDocumentResizeData);
}

function JsHandleDocumentResize(event)
{
	if(event==null) 
		event = window.event;
	
	for(var x = 0; x < oDocumentResizeFunctions.length; x++)
	{
		var oDocumentResizeData = oDocumentResizeFunctions[x];
		
		oDocumentResizeData.m_oFunction(event,oDocumentResizeData.m_oOptionalItemData);
	}
}

//function prototype should look like Function(oSourceElement, event,oOptionalItemData)
var oDocumentLeftClickFunctions=new Array();
CAspForm.prototype.AddDocumentLeftClickHandler=function(oFunction, oOptionalItemData)
{
	var oDocumentLeftClickData = new Object();
	oDocumentLeftClickData.m_oFunction=oFunction;
	oDocumentLeftClickData.m_oOptionalItemData=oOptionalItemData;
	
	document.onmousedown = JsHandleDocumentLeftClick;
	oDocumentLeftClickFunctions.push(oDocumentLeftClickData);
}

CAspForm.prototype.GetHelpTopic = function()
{
	return this.m_sHelpTopic;
}

CAspForm.prototype.SetHelpTopic = function(sHelpTopic)
{
	this.m_sHelpTopic=sHelpTopic;
}

CAspForm.prototype.OpenHelpTopic = function(sHelpTopicUrl)
{
	alert("The oAspForm.OpenHelpTopic function needs to be overriden to open the help topic.\n\nURL: " + sHelpTopicUrl);
}
			
function JsHandleDocumentLeftClick(event)
{	
	if(event==null) 
		event = window.event;
	var oSourceElement = event.srcElement;
	if(oSourceElement == null)
		oSourceElement = event.target;

	// test for left click	
	var bLeftClicked = false;
	if (event.which) bLeftClicked = (event.which == 1);
	else if (event.button) bLeftClicked = (event.button == 1);
	if(bLeftClicked)
	{
		for(var x = 0; x < oDocumentLeftClickFunctions.length; x++)
		{
			var oDocumentLeftClickData = oDocumentLeftClickFunctions[x];
			if(oDocumentLeftClickData.m_oFunction(oSourceElement, event, oDocumentLeftClickData.m_oOptionalItemData))
			{
				// mouse down handled
				return false;
			}
		}
		return true;
	}
}


//create the singleton
var oAspForm = new CAspForm();

// allow all client-side controls to perform their final initialization when the page has loaded
function JsDoFinalFormInitialization()
{
	for(var sControlName in oClientControls)
	{
		var oControl = oClientControls[sControlName];
		if(oControl.DoFinalControlInitialization!=undefined)
		{
			oControl.DoFinalControlInitialization();
		}
	}
}

oAspForm.AddDocumentLoadHandler(JsDoFinalFormInitialization,null);

// Attach the help to the F1 key
var VK_F1=0x70; 
oAspForm.AddKeyDownHandler(OnF1KeyDown, VK_F1);

//this prevents IE from launching its own help on VK_F1 
document.onhelp=function() {document.parentWindow.event.returnValue=0;}; 

function OnF1KeyDown(event,oKeyHandlerData) 
{ 
	//prevent the mouse move from continuing 
	if (oAspForm.m_nBrowserType==BT_IE)  
	{ 
		window.event.cancelBubble = true; 
		window.event.returnValue = false; 
	} 
	else 
	{ 
		event.preventDefault(); 
	}
	oAspForm.OpenHelpTopic(oAspForm.GetHelpTopic());
	//document.getElementById('helplink').click() 
	return true; 
}
