var _loginButton;
var _passedAgentID;
var _passedPassword;
var _passedOfflineFlag;
var _passedProxyAddress;
var _passedProxyUserName;
var _passedProxyPassword;
var _startPage;
var _agentidInput;			//Input box for agent id
var _passwordInput;			//Input box for password
var _saveidInput;				//Checkbox for saveid
var _originalForgotYourPasswordText;

/**************************************
*		Called from homePage Init()				*
**************************************/
function loginInit()
{
//debugger;
	_agentidInput = document.getElementById("agentid");
	if (!_agentidInput) return alert("Unable to find an input box called agentid on the login form");
	_passwordInput = document.getElementById("password");
	if (!_passwordInput) return alert("Unable to find an inptu box called password on the login form");
	_saveidInput = document.getElementById("saveid");


	
	var config = document.location.search;

	_passedProxyAddress = "";
	_passedProxyUserName = "";
	_passedProxyPassword = "";
	var siteAllowsPasswordsToBeSaved = true;
	if (config.length)
	{
		config = unescape(config);
		re = /config\=([^\&\s]*)/i;
		if (re.test(config))
		{
			var match = config.match(re);
			agt.defaultconfig = match[1];
		}

		re = /startpage\=([^\&\s]*)/i;
		if (re.test(config))
		{
			var match = config.match(re);
			_startPage = match[1];
		}
		
		re = /agentid\=([^\&\s]*)/i;
		if (re.test(config))
		{
			var match = config.match(re);
			_passedAgentID = match[1];
			_passedOfflineFlag = false;
		}
		
		re = /password\=([^\&\s]*)/i;
		if (re.test(config))
		{
			var match = config.match(re);
			_passedPassword = match[1];
		}
		
		re = /proxyaddress\=([^\&\s]*)/i;
		if (re.test(config))
		{
			var match = config.match(re);
			_passedProxyAddress = match[1];
		}
		
		re = /proxyusername\=([^\&\s]*)/i;
		if (re.test(config))
		{
			var match = config.match(re);
			_passedProxyUserName = match[1];
		}

		re = /proxypassword\=([^\&\s]*)/i;
		if (re.test(config))
		{
			var match = config.match(re);
			_passedProxyPassword = match[1];
		}
		
		re = /offline\=true/i;
		if (re.test(config)) _passedOfflineFlag = true;
		
	}
	/*************************************
	*			Some sites don't want to allow users to
	*			save their id/password using the browser.
	*			We allow for a switch to bypass this feature.
	********************************************************/
	var elem = document.getElementById("hideSaveIdrequiredByCode");
	if (elem)
	{
		if (config.match(/saveid=true/i)) elem.style.display = "block";
		else siteAllowsPasswordsToBeSaved = false;
	}


	hObj = agt.configurationoptions;
	if (!hObj.errorCheck("Unable to open configurations file"))
	{
		return window.close();
	}

	var tNode = agt.confignode.selectSingleNode("TITLE");
	if (tNode) document.title = tNode.text;
	
	if (_passedAgentID)
	{
		_agt.proxyaddress = _passedProxyAddress;
		_agt.proxyusername = _passedProxyUserName;
		_agt.proxypassword = _passedProxyPassword;
		
		_agt.login(_passedAgentID, _passedPassword, _passedOfflineFlag);		//loginComplete will be fired
		return;
	}


	var uNode = dashboardOptions.selectSingleNode("//URLS");				//See if this host wants to rework the URLS
	if (uNode) _agt.resetUrls(uNode.xml);
	else alert("Did not find URLS in\r\n" + dashboardOptions.xml);

	//***   Read any saved id/password ***/
	if (siteAllowsPasswordsToBeSaved)
	{
		var st = document.getElementById("storeTable");
		if (st)
		{
			st.load("ValetLogin");
			if (st.getAttribute("id"))
			{
				_agentidInput.value = st.getAttribute("id").replace(/\s*$/, "").replace(/^\s*/, "");
				if (st.getAttribute("pwd")) _passwordInput.value = st.getAttribute("pwd").replace(/\s*$/, "").replace(/^\s*/, "");
				if (st.getAttribute("offlineflag") == "true") offlineflag.checked = true;
				else offlineflag.checked = false;
				if (_saveidInput) _saveidInput.checked = true;
			}
		}
	}
	else	if (_saveidInput) _saveidInput.checked = false;

	_agentidInput.focus();
}

/**************************************
*		User clicked on the login button	*
**************************************/
function login()
{
	// loading some script is deferred.  check to make sure it has been loaded
	if (typeof(g_modalDivCol)=="undefined") 
	{
		setTimeout('login()', 100);
		return;
	}
	
	if (_ModalDiv == null) initModalDiv();

	var av = _agentidInput.value.replace(/\s*$/, "").replace(/^\s*/, "");
	if (av.length <= 0)
	{
		top.valetAlert("You must enter an agent id");
		_agentidInput.focus();
		window.event.cancelBubble = true;
		window.event.returnValue = false;
		return;
	}
	if (_passwordInput.value.replace(/\s*$/, "").replace(/^\s*/, "").length <= 0)
	{
		top.valetAlert("You must enter a password");
		_passwordInput.focus();
		return false;
	}
	
	_agt.safemls = false;
	var smls = document.getElementById("safemls");
	if (smls) _agt.safemls = smls.checked;
	
	_agt.safemlspin = "";
	var smlspin = document.getElementById("safemlspin");
	if (smlspin) _agt.safemlspin = smlspin.value;
	
	var elem = document.getElementById("proxyAddress");
	if (elem) _agt.proxyaddress = elem.value;
	else _agt.proxyaddress = "";

	var elem = document.getElementById("proxyUserName");
	if (elem) _agt.proxyusername = elem.value;
	else _agt.proxyusername = "";
	
	var elem = document.getElementById("proxyPassword");
	if (elem) _agt.proxypassword = elem.value;	
	else _agt.proxypassword = "";
	
	document.body.style.cursor = "wait";
	loginButton = document.getElementById('loginbutton');
	_loginButton = loginButton;
	loginButton.disabled = true;

	var agtid = _agentidInput.value.replace(/\s*$/, "").replace(/^\s*/, "");
	var asegs = agtid.split("/");
	if (asegs.length > 1)
	{
		agtid = asegs[0];
		if (asegs[1].toLowerCase() == "nosafemls")
		{
			_agt.safemls = false;
			var smls = document.getElementById("safemls");
			if (smls) smls.checked = false;
			_agt.safemlspin = "";
		}
	}
	_agt.login(agtid, _passwordInput.value.replace(/\s*$/, "").replace(/^\s*/, ""), offlineflag.checked);
}

/************************************
*				The user has logged in.			*
************************************/
function loginComplete()
{
	document.body.style.cursor = "auto";
	if (!_agt.status) 
	{
		if (_loginButton) 
		{
			_loginButton.disabled = false;
			if (_agt.loginstatuscode == 407)
			{
				if (_passedAgentID)
				{
					_agt.login(_passedAgentID, _passedPassword, _passedOfflineFlag);		//loginComplete will be fired
					return;
				}
				//loadPage(	_agt.confignode.selectSingleNode("LOGINPAGE"));
			}
		}
		else window.close();
		return false;				//Login failure
	}

  // clear the resize event that keeps the login footer on the bottom of the page.
	window.removeEvent('resize', setLoginSize);


	/************************************
	*		If the login page has a data 		*
	*		store called "storeTable", and	*
	*		a checkbox labeled "saveid",		*
	*		we can retain id/passwords.			*
	************************************/
	var st = document.all("storeTable");
	if (st)
	{
		if (_agt.originalid == _agt.agentid)
		{
			if (_saveidInput)
			{
				var safemls = document.all("safemls");
				if (safemls) st.setAttribute("safemls", safemls.checked);
				var safemlspin = document.all("safemlspin");
				if (safemlspin) st.setAttribute("safemlspin", safemlspin.value);
				
				var elem = document.all("proxyAddress");
				if (elem) st.setAttribute("proxyaddress", elem.value);
				elem = document.all("proxyUserName");
				if (elem) st.setAttribute("proxyusername", elem.value);
				elem = document.all("proxyPassword");
				if (elem) st.setAttribute("proxypassword", elem.value);
								
				if (_saveidInput.checked)
				{
					st.setAttribute("id", _agt.agentid);
					if ((safemls) && (safemls.checked)) st.removeAttribute("pwd");
					else st.setAttribute("pwd", _agt.password);
					st.setAttribute("offlineflag", _agt.offlineflag);
				}
				else
				{
					st.removeAttribute("id");
					st.removeAttribute("pwd");
					st.removeAttribute("offlineflag");
					st.removeAttribute("safemlspin");
					st.removeAttribute("safemls");
					st.removeAttribute("proxyaddress");
					st.removeAttribute("proxyusername");
					st.removeAttribute("proxypassword");
				}
				
				st.save("ValetLogin");
			}
			else
			{
				st.removeAttribute("id");
				st.removeAttribute("pwd");
				st.removeAttribute("offlineflag");
				st.removeAttribute("safemlspin");
				st.removeAttribute("safemls");
				st.removeAttribute("proxyaddress");
				st.removeAttribute("proxyusername");
				st.removeAttribute("proxypassword");
			}
			
			st.save("ValetLogin");
		}
	}	
	return true;
}

/************************************************
*		The user asked for help while logging in		*
************************************************/
function loginHelp(loginAlgorithm)
{
	if (_agentidInput.value.replace(/\s*$/, "").replace(/^\s*/, "").length <= 0)
	{
		top.valetAlert("You must enter an agent id");
		_agentidInput.focus();
		return false;
	}

	_loginAlgorithm = loginAlgorithm.toUpperCase();
	var agt = _agt;
	if (agt.offlineflag) {valetAlert("You do not need to login when working offline"); return false;}
	if (agt.loggedin) {valetAlert("You are already logged in"); return false;}

	agt.agentid = _agentidInput.value.replace(/\s*$/, "").replace(/^\s*/, "");

	var elem = document.getElementById("proxyAddress");
	if (elem) _agt.proxyaddress = elem.value;

	var elem = document.getElementById("proxyUserName");
	if (elem) _agt.proxyusername = elem.value;
	
	var elem = document.getElementById("proxyPassword");
	if (elem) _agt.proxypassword = elem.value;	
	
	var xstr = "Testing connection to " + agt.domain + "...";
	var uri = agt.baseurl + "pweblogin.srf?passwordanswer=xxx";
	if (loginAlgorithm.toUpperCase() == "EMAIL") uri = "../emailpassword.srf?emailpassword=true&AgentID=" + _agentidInput.value.replace(/\s*$/, "").replace(/^\s*/, "") + "&Password=email";
	

	var lNode = loginObject.selectSingleNode("LOGIN");
	lNode.setAttribute("format", "waitforpasswordhelp");
	_originalForgotYourPasswordText = requiredByCodeForgotYourPassword.innerHTML;
	requiredByCodeForgotYourPassword.innerHTML = lNode.transformNode(dashboardFormat.XMLDocument);

	_agt.password = "xxx";
	loginHelpObject.ondataavailable=loginHelpResults;
	loginHelpObject.load("GET", uri, true);
}

function loginHelpResults()
{
	
	requiredByCodeForgotYourPassword.innerHTML = _originalForgotYourPasswordText;
	top.valetAlert(loginHelpObject.httpobj.responseText);
	return;		//We used to get an XML structure back and transform it

	var extra = top.mainWindow.extra;
	extra.xmlobject.loadXML(loginHelpObject.httpobj.responseText);
	var perr = extra.xmlobject.parseError;
	var status = true;
	var statusText = "";
	var lNode = loginObject.selectSingleNode("LOGIN");
	
	if (perr.errorCode)
	{
		status = false;
		statusText = "Error reading from host<br/>" + perr.reason;
		lNode.text = statusText;
		lNode.setAttribute("format", "badhelpresponse");
	}
	else
	{
		lNode = extra.xmlobject.selectSingleNode("LOGIN");
		if (!lNode) {lNode = loginObject.selectSingleNode("LOGIN"); lNode.text = "No &lt;LOGIN&gt; tag in response from host"; lNode.setAttribute("format", "badhelpresponse");}
		else lNode.setAttribute("format", "goodhelpresponse");
			
		var pNode = lNode.selectSingleNode("//PasswordQuestion[.!= '']");
		if (!pNode)
		{
			pNode = lNode.selectSingleNode("//PasswordHint[.!= '']");
			if (!pNode)
			{
				lNode = loginObject.selectSingleNode("LOGIN");
				if (lNode) lNode.setAttribute("nohints", "true");
			}
		}
	}

	requiredByCodeForgotYourPassword.innerHTML = lNode.transformNode(dashboardFormat.XMLDocument);
}

/**********************************************
*			Agent has provided a password answer.
*			Decide if it is the correct one.
**********************************************/
function tryPasswordAnswer()
{
	var agt = _agt;
	var pa = document.getElementById("passwordAnswer");
	if (pa.value.length == 0) 
	{
		pa.focus();
		return top.valetAlert("You did not enter an answer");
	}
	var lNode = loginObject.selectSingleNode("LOGIN");
	lNode.setAttribute("format", "submitanswer");
	passwordHelpDisplay.innerHTML = lNode.transformNode(dashboardFormat.XMLDocument);

	var uri = agt.baseurl + "pweblogin.srf?passwordanswer="+escape(pa.value);
	loginHelpObject.ondataavailable=passwordAnswerResults;
	loginHelpObject.load("GET", uri, true);
}

/*****************************************
*		Agent answered the password question.
*		Process the host response.
*****************************************/
function passwordAnswerResults()
{
	var extra = top.mainWindow.extra;
	var xstr = "";
	extra.xmlobject.loadXML(loginHelpObject.httpobj.responseText);
	var perr = extra.xmlobject.parseError;
	var status = true;
	var statusText = "";

	var lNode = loginObject.selectSingleNode("LOGIN");
	lNode.setAttribute("format", "questionresponse");
	
	if (perr.errorCode)
	{
		status = false;
		statusText = "Error reading from host<br/>" + perr.reason;
		lNode.text = statusText;
		lNode.setAttribute("format", "badhelpresponse");
	}
	else
	{
		var sNode = extra.xmlobject.selectSingleNode("//StatusText");
		if (sNode) lNode.text = sNode.text;
		else lNode.text = "Response from host did not contain a StatusText";
	}

	requiredByCodeForgotYourPassword.innerHTML = lNode.transformNode(dashboardFormat.XMLDocument);

	
}

function cancelLoginHelp()
{
	loginHelpObject.httpobj.abort();
	returnToLoginScreen();
}

function returnToLoginScreen()
{
	requiredByCodeForgotYourPassword.innerHTML = _originalForgotYourPasswordText;
}

function clearLogout()
{
	if (_loginButton) _loginButton.disabled = false;
	if ((_saveidInput) && (_saveidInput.checked == true)) {}
	else
	{
		if (_agentidInput) _agentidInput.value = "";				//Input box for agent id
		if (_passwordInput) _passwordInput.value = "";			//Input box for password
		if (_saveidInput) _saveidInput.checked = false;			//Checkbox for saveid
	}
}
