//--------------------------------------------------+
// External dependancies                            |
//                                                  |
// logOutSessionID:						common.js   |
// strPort:								common.js   |
// strLegalNotice:						message.js  |
// strRootDir:							message.js  |
// strUnknownError						message.js  |
// strLoginTooManyAttempts				msglogin.js |
// strLoginSystemError					msglogin.js |
// strLoginMissingHost					msglogin.js |
// strLoginForm							msglogin.js |
// strExpiredUser						msglogin.js |
// strExpiredBoth						msglogin.js |
// strExpiredPassword					msglogin.js |
// strLibEnter							msglogin.js |
// strIE55DownloadDialogInstructions	msglogin.js |
// strIE6DownloadDialogInstructions		msglogin.js |
// strODWebSetupNotInstalled			msglogin.js |
// strODWebSetupPromptPartOne			msglogin.js |
// strODWebSetupPromptPartTwo			msglogin.js |
// Functions related to User Data		store.js|
//--------------------------------------------------+

// LOGIN CONSTANTS
var IS_ALLOWED = 0;
var INVALID_UNAME = 1;
var INVALID_PWORD = 2;
var EXPIRED_UNAME = 3;
var EXPIRED_PWORD = 4;
var EXPIRED_BOTH = 5;
var CANT_CREATE_SESSION = 6;
var TOO_MANY_ATTEMPTS = 7;
var UNMATCHED_DIVISION = 8;
var INVALID_ASSIGN = 9;
var INVALID_MACHINE_ID = 10;
var INVALID_ROLE_ACCESS = 11;
var EXPIRED_DATESTAMP = 12;
var FIRST_LOGIN_CHANGE_USERID_PASSWORD = 15;
var SUGGEST_CHANGE_PASSWORD = 16;
var EXPIRED_USER = 99;

// LOGIN UPDATE CONSTANTS
var IS_UPDATED = 0;
var INVALID_OLD_LOGIN = 1;
var NOT_UNIQUE_NEW_LOGIN = 2;
var UNCHANGED_PASSWORD = 3;
var TOO_SHORT_NEW_LOGIN_OR_PASSWORD = 4;
var UNKNOWN = 5;

// Misc globals
var strSessionID = "";
var strSuggestTimeout = "6";
var strOldLogin = "";
var gbToApp = false;
var strStartPage = "mric";
var g_nIEVer = 0.0;

// The following are to support hilite() in common.js
var globals = this;
var strHighlightColor = "orangered";

// ODWebUtil.dll constant
var UPDATE_NEEDED = 2;

var strLoginForm = '<table border="0" cellspacing="0" cellpadding="0" width="100%" id="idLoginTable"><tr><td>&nbsp;</td></tr><tr><td>&nbsp;</td></tr><tr><td>&nbsp;</td></tr><tr align="center"><td id="idLoginProduct" class="clsDesc">Product</td></tr><tr><td>&nbsp;</td></tr><tr><td>&nbsp;</td></tr><tr align="center"><td><table border="0" cellspacing="0" cellpadding="1" id="Table2"><tr><td class="clsLoginLabel" nowrap="true" align="right">User Name:</td><td width="10">&nbsp;</td><td align="left"><input maxlength="100" size="24" title="Enter your User Name" id="idUserName" name="idUserName" style="width: 170px;" ></td></tr><tr><td class="clsLoginLabel" align="right">Password:</td><td width="10">&nbsp;</td><td align="left"><input size="24" maxlength="100" title="Enter your Password" id="idPassword" type="password" onfocus="clearInput();" name="idPassword"  style="width: 170px;" ></td></tr><tr><td colspan="3">&nbsp;</td></tr><tr align="center"><td nowrap="true" colspan="3" align="center"><a href="#" title="Click here if you forgot your password" class="clsHelpLink" onclick="onClickForgotPassword()" onmouseover="hilite(this)" onmouseout="lowlite(this)">Forgot Your Password?</a></td></tr><tr><td colspan="3">&nbsp;</td></tr><tr><td colspan="3">&nbsp;</td></tr><tr><td align="center" colspan="3" class="clsLoginLabel"><input title="Check to Save User Name and Password" type="checkbox" name="idSavePassword" style="margin-left: -4px" onclick="AlertCookies(this);" id="idSavePassword">Save User Name and Password&nbsp;&nbsp;</td></tr><tr><td colspan="3">&nbsp;</td></tr><tr><td colspan="3">&nbsp;</td></tr><tr><td align="center" colspan="3"><button title="Press this button to Log In" type="submit" onclick="logIn();" class="clsLoginBtn" id="idLoginButton">Log In</button></td></tr></table></td></tr><tr><td>&nbsp;</td></tr><tr><td>&nbsp;</td></tr><tr><td>&nbsp;</td></tr><tr><td align="center"><span id="idErrorMsg" /></td></tr></table>';

var QueryString = new Array();
function SetQueryString()
{
	var tokens;
	var key, value;
	var nX, nLength;
	var nIndex;
	var sQuery;
	sQuery = location.search.substring(1).replace(/\+/g,"%20");

	if(sQuery)
	{		
		tokens = sQuery.split("&");
		nLength = tokens.length;

		
		for( nX=0 ; nX < nLength; nX++)
		{
			nIndex = tokens[nX].indexOf("=");
			key = tokens[nX].substring(0,nIndex);
			value = tokens[nX].substring(nIndex+1);
			QueryString[key] = unescape(value);		
		}		
	}
}

function document.onreadystatechange()
{

	if (document.readyState == "complete")
	{			
		if (typeof(document.all.idHomeLink) == "object")
		{
			document.all.idHomeLink.href = strHomeUrl;
		}

		if (typeof(document.all.idHomeImg) == "object")
		{
			document.all.idHomeImg.title = strLogoTitle;
		}
		
		if (typeof(document.all.idHelpLink) == "object")
		{
			document.all.idHelpLink.href = strHelpUrl;
		}

		if (bLibrary)
		{
			idContent.innerHTML = strLibEnter;
			//Authorization LIBRARY User with MACHINE ID.
			AuthorizationWithPC_KEY();		
		}
		else
		{
			document.all.fldShowAll.value = GetShowOption();
			//idContent.innerHTML = strAutoLogin;
			//Try login user by login and password from user data.
			AutoLogin();
			FocusUserName();
			
			if (typeof(document.all.idLoginProduct) == "object")
			{
				document.all.idLoginProduct.innerHTML = "Please log in below if you are an " + strProductName + " subscriber.";
			}
			
			var sLocation = new String(this.location);
			var nPos = sLocation.indexOf("nStatus");
			if(nPos > 0)
			{
				nStatus = eval(sLocation.substring(nPos + 8));
				idErrorMsg.innerHTML = getErrorMessage(nStatus);
			}		
			
            SetQueryString();
            switch(QueryString["err"])
            {
                case "InvalidSession":
                    idErrorMsg.innerHTML = "Invalid session.";
                    break;
                case "ExpiredSession":
                    idErrorMsg.innerHTML = "Expired session.";
                    break;
                case "InvalidUserModule":
                    idErrorMsg.innerHTML = "Invalid user module.";
                    break;
                case "ExpiredUserModule":
                    idErrorMsg.innerHTML = "Invalid user module.";
                    break;
                case "ExceededNumConCurrent":
                    idErrorMsg.innerHTML = "Exceeded number of concurrent users.";
                    break;
                default:
                    break;
            }		    
		}
	}
}

function getErrorMessage(nStatus)
{
	switch(nStatus)
	{
		case IS_ALLOWED: //0
			break;
		case INVALID_UNAME: //1
			return "The User Name you entered is invalid!  Please try again.";
		case INVALID_PWORD: //2
			return "The Password you entered is invalid!  Please try again.";		
		case EXPIRED_UNAME: //3
		case EXPIRED_PWORD: //4
			break;
		case EXPIRED_BOTH: //5
			break;		
		case CANT_CREATE_SESSION: //6
			return strLoginSystemError;
		case TOO_MANY_ATTEMPTS: //7
			return strLoginTooManyAttempts;
		case UNMATCHED_DIVISION: //8
			return strUnmatchedDivision;
		case INVALID_ASSIGN: //9
			return strLicenseExceed;		
		case INVALID_MACHINE_ID: //10
			return strLicenseExceed;
		case INVALID_ROLE_ACCESS: //11
			return strInvalidRoleAccess;
		case EXPIRED_DATESTAMP: //12
			return "Expired date stamp.";
		case FIRST_LOGIN_CHANGE_USERID_PASSWORD: //15
			break;
		case SUGGEST_CHANGE_PASSWORD: //16
			break;		
		default:
			break;	
	}
}

function document.onselectstart()
{
	event.cancelBubble = true;
	var eSrc = event.srcElement;
	if (!((eSrc.tagName == "INPUT") || (eSrc.tagName == "TEXTAREA")))
    		event.returnValue = false;
}

function document.onmouseover()
{
	var objSrc = event.srcElement;
	if (!objSrc)
		return;

	var strTagName = objSrc.tagName;
	strTagName = strTagName.toUpperCase();

	var strClassName = objSrc.className;
	if (strClassName == "clsSuperLink")
	{
		objSrc.oldClass = strClassName;
		objSrc.className = "clsSuperLinkOver";
	}
}

function document.onmouseout()
{
	var objSrc = event.srcElement;
	if (!objSrc)
		return;

	//------------------------------------------------------------------------+
	// get tag & class names & make sure tag name is uppercase for comparison |
	// see comment in document.onmouseover for more information for why       |
	//------------------------------------------------------------------------+
	var strTagName = objSrc.tagName;
	strTagName = strTagName.toUpperCase();

	if (objSrc.className == "clsSuperLinkOver")
	{
		objSrc.className = objSrc.oldClass;
	}
}

function onClickForgotPassword()
{
	openResetPasswordPage(strProductForgotPasswordUrl, strProductForgotPasswordWndSettings);
}

//Authorization LIBRARY User with MACHINE ID.
function AuthorizationWithPC_KEY()
{
	g_nIEVer = isIE60Up();
	
	if (g_nIEVer < 6.0)
	{
		location.href = "/" + strRootDir + "/common/asp/browserhelp.aspx";
		return;
	}
	
	loadODWebStart(false);
}

//Set the autologin field for future use.
function SetAutoLogin(value)
{
	document.all.fldAutoLogin.value = value;
}

function AlertCookies(obj)
{
	//if (obj.checked)
	//	alert("Cookies must be enabled on your browser!");
}

//Reads user name and password from user data. 
//If login and password not null, try to login the user.
function AutoLogin()
{
	strOldLogin = new String(GetUserName());
	var strPassword = new String(GetPassword());
	
	if (strOldLogin == "" || strPassword == "")	
	{
		idContent.innerHTML = strLoginForm;
		return;
	}
	
	SetAutoLogin(1);
	
	logInDefault(strOldLogin, strPassword, true);
}

var strLoginForFail = "";
var strPasswordForFail = "";
var enterViaLoginForm = false;

//Users try to login using Login Form.
function logIn()
{
	strOldLogin = document.all.idUserName.value.toLowerCase();
	var strPassword = document.all.idPassword.value.toLowerCase();

	strLoginForFail = document.all.idUserName.value;
	strPasswordForFail = document.all.idPassword.value;
	
	if (!validateInputs())
		return;
	
	idLoginHelpLink.innerHTML = "" ;
	checkBoxChecked = document.all.idSavePassword.checked;
	idContent.innerHTML = strAutoLogin;
	enterViaLoginForm = true;
	window.setTimeout("logInDefault('" + JSEncode(strOldLogin) + "', '" + JSEncode(strPassword) + "', false);", 1000);
}

var checkBoxChecked = true;

//Login procedure
function logInDefault(sLogin, strPassword, isAutoLogin)
{	

	strOldLogin = sLogin;
	
	g_nIEVer = isIE60Up();
	
	if (g_nIEVer < 6.0)
	{
		location.href = "/" + strRootDir + "/common/asp/browserhelp.aspx";
		return;
	}
	
	// create XMLDOM object
	var objXMLDOM = new ActiveXObject("Microsoft.XMLDOM");
	var objElem = objXMLDOM.createElement("LOGIN");
    objXMLDOM.appendChild(objElem);
    var objRoot = objXMLDOM.documentElement;
   
    // add UserName to XMLDOM object
    objElem = objXMLDOM.createElement("UNAME");
    objRoot.appendChild(objElem);
    objElem.text = strOldLogin;
    
    // add password to XMLDOM object
    objElem = objXMLDOM.createElement("PWORD");
    objRoot.appendChild(objElem);
    objElem.text = strPassword;
    
    //add option autologin.
    objElem = objXMLDOM.createElement("AUTOLOGIN");
    objRoot.appendChild(objElem);
    objElem.text = isAutoLogin ? "1" : "0";
    
     //add Machine ID.
    objElem = objXMLDOM.createElement("PC_KEY");
    objRoot.appendChild(objElem);
    objElem.text = GetPC_KEY();

	// add save password option to XMLDOM object	
    objElem = objXMLDOM.createElement("SAVE_PASSWORD");
    objRoot.appendChild(objElem);
	
	if (!isAutoLogin)
		objElem.text = checkBoxChecked ? "1" : "0";
	else
		objElem.text = "1";
	
	// create XMLHTTP object and use it to send login info to server
	
	var xmlRequest = new ActiveXObject("microsoft.xmlhttp");
	
	xmlRequest.open("POST", "/" + strRootDir + "/common/asp/auth.asp", false);
	
	xmlRequest.send(objXMLDOM);

	// save response from server & clean up
	var loginResponseXML = null;
	loginResponseXML = xmlRequest.responseXML;
	xmlRequest = null;


	// retrieve login result from response XML
	objElem = loginResponseXML.selectSingleNode("//AUTHCODE");

	if (objElem == null)
	{
		if (isAutoLogin)
			showFailedAutoLogin();
		else
			showUnknownErr();
			
		return;
	}
	
	var objElemPC = loginResponseXML.selectSingleNode("//SAVE_PASSWORD");
		
	if (objElemPC != null)
	{
		//Get machine id and decrypt user name.
		var machine_id = objElemPC.selectSingleNode("//PC_KEY");
		var strUserNameDecr = objElemPC.selectSingleNode("//DECRYPT_USER_NAME").text;
		strOldLogin = strUserNameDecr;
		
		if (machine_id != null)
		{
			SetPC_INFO(machine_id.text, "", "");
		}
	}
	
	var nLoginResult = parseInt(objElem.text);
	
	if (isNaN(nLoginResult))
	{
		if (isAutoLogin)
			showFailedAutoLogin();
		else
			showUnknownErr();
		return;
	}
	else
	{
		if (nLoginResult != IS_ALLOWED 
			&& isAutoLogin)
		{
			//AutoLogin is not accessible.
			showFailedAutoLogin();
		}
		
		if (nLoginResult != IS_ALLOWED)
			showUnknownErr();
			
		objElem = loginResponseXML.selectSingleNode("//SESSION_ID");
		strSessionID = objElem ? objElem.text : "" ;
		switch (nLoginResult)
		{					
			case IS_ALLOWED:
				// retrieve session ID from response XML										
											
				if (objElem == null)
				{
					showUnknownErr();
					return;
				}
																
				objElem = loginResponseXML.selectSingleNode("//SAVE_PASSWORD");
				
				//Save login info in user data on client PC.
				if (objElem != null)
				{
					var pcKey = objElem.selectSingleNode("//PC_KEY");
						
					var userName = objElem.selectSingleNode("//USER_NAME");
					var password = objElem.selectSingleNode("//PASSWORD");
					if (pcKey != null && userName != null && password != null)
						SetPC_INFO(pcKey.text, userName.text, password.text);
				}
				
				if (userName.text != "" && password.text != "")
					SetAutoLogin(1);

				loadODWebStart(false);
				
				break;
			case INVALID_UNAME:
				idErrorMsg.innerHTML = "The User Name you entered is invalid!  Please try again.";
				FocusUserName();
				break;
			case INVALID_PWORD:
				idErrorMsg.innerHTML = "The Password you entered is invalid!  Please try again.";
				idPassword.focus();
				break;				

			case SUGGEST_CHANGE_PASSWORD:				
				if (objElem == null)
				{
					showUnknownErr();
					return;
				}
				
				var objSuggestTimeout = loginResponseXML.selectSingleNode("//LOGIN/SUGGEST_TIMEOUT");
				if (objSuggestTimeout == null)
				{
					showUnknownErr();
					return;
				}
				strSuggestTimeout = objSuggestTimeout.text;
				var strSuggestPassword = strSuggestPasswordHead + strSuggestTimeout + 
					strSuggestPasswordTail + strSuggestTimeout + strSuggestPasswordTail2;
				idContent.innerHTML = strSuggestPassword;
				
				break;
				
			case EXPIRED_PWORD:				
				if (objElem == null)
				{
					showUnknownErr();
					return;
				}
				
				idContent.innerHTML = strExpiredPassword;
				FocusPassword();
				
				break;
			case FIRST_LOGIN_CHANGE_USERID_PASSWORD:				
				if (objElem == null)
				{
					showUnknownErr();
					return;
				}							
				
				idContent.innerHTML = strExpiredBoth;
				idErrorMsg.innerHTML = strFirstLogin;
				FocusUserName();
				
				break;
			case EXPIRED_UNAME:
			case EXPIRED_BOTH:				
				if (objElem == null)
				{
					showUnknownErr();
					return;
				}
				
				idContent.innerHTML = strExpiredBoth;
				FocusUserName();
				
				break;
				
			case CANT_CREATE_SESSION:
				idContent.innerHTML = strLoginSystemError;
				break;
			case TOO_MANY_ATTEMPTS:
				idContent.innerHTML = strLoginTooManyAttempts;
				break;
			case UNMATCHED_DIVISION:
				idErrorMsg.innerHTML = strUnmatchedDivision;
				break;
			case EXPIRED_USER:
				idErrorMsg.innerHTML = strExpiredUser;
				break;
			case INVALID_ASSIGN:
				idErrorMsg.innerHTML = strLicenseExceed;
				break;
			case INVALID_MACHINE_ID:
				idErrorMsg.innerHTML = strLicenseExceed;
				break;
			case INVALID_ROLE_ACCESS:
				idErrorMsg.innerHTML = strInvalidRoleAccess;
				break;
                									
			default:
				showUnknownErr();
		}
	}
}

function SetAcceptEula_OnClick(m_Value)
{
    var m_hdnUserSessionId = document.getElementById("hdnUserSessionId");  
    var m_UserSessionId = m_hdnUserSessionId.value;
            
    var oXMLDoc  = new ActiveXObject("Microsoft.XMLDOM");
    var m_ChildNode;
    
    var root = oXMLDoc.createElement("VehicleContext");
    oXMLDoc.appendChild(root);
    
    m_ChildNode = oXMLDoc.createElement("ACTION_HANDLER");
    m_ChildNode.text = "UserDataHandler";
    root.appendChild(m_ChildNode);

    m_ChildNode = oXMLDoc.createElement("ACTION");
    m_ChildNode.text = "SetEulaSettings";
    root.appendChild(m_ChildNode);    
    
    m_ChildNode = oXMLDoc.createElement("SESSION_ID");
    m_ChildNode.text = m_UserSessionId;
    root.appendChild(m_ChildNode);    

    m_ChildNode = oXMLDoc.createElement("ACCEPT_EULA");
    m_ChildNode.text = m_Value ? "True" : "False";
    root.appendChild(m_ChildNode);
         
    var xmlRequest = new ActiveXObject("microsoft.xmlhttp");
    xmlRequest.open("POST", "/mric/server/DataRetrieval.aspx", false);
    xmlRequest.send(oXMLDoc);

    var responseXml = xmlRequest.responseXML;
    loadODWebStart(false);
}

function changePasswordFromSuggest()
{
	idContent.innerHTML = strExpiredPassword;
	FocusPassword();
}


//-------------------------------------------------------------------------------+
// isIE55Up used to return true/false but now returns a float that indicates the |
// version of IE if 5.5 or above and 0.0 if the browser is not 5.5 or above.     |
//-------------------------------------------------------------------------------+
function isIE60Up()
{

	var userAgt = navigator.userAgent.toLowerCase();
	var iePos = userAgt.indexOf("msie");
	var isIE = false;
	var minorVer = 0.0;
	if (isIE = (iePos != -1))
	{
		minorVer = parseFloat(userAgt.substring(iePos + 5, userAgt.indexOf(';', iePos)));
	}
	
	if (isIE && (minorVer >= 6.0))
	{
		// user agent string contains "msie 5.5" - should be IE5.5 BUT
		// opera will have "msie X.X" in its string, so check for it also
		var operaPos = userAgt.indexOf("opera");
		if (operaPos > -1)
			return (0.0);
		else
			return (minorVer);
	}	
	return(0.0);
}

function showFailedAutoLogin()
{

	var pc_key = GetPC_KEY();

	SetPC_INFO(pc_key, "", "");

	SetAutoLogin(0);
	idContent.innerHTML = strLoginForm;
	idErrorMsg.innerHTML = "User Authorization Failed";
}

function showUnknownErr()
{
	idContent.innerHTML = strLoginForm;
	idErrorMsg.innerHTML = strUnknownError;
	clearAllInputs();
	document.all.idUserName.value = strLoginForFail;
	document.all.idPassword.value = strPasswordForFail;
	
	if (typeof(document.all.idLoginProduct) == "object")
	{
		document.all.idLoginProduct.innerHTML = "Please log in below if you are an " + strProductName + " subscriber.";
	}

	
	FocusUserName();
}

function FocusUserName()
{
	if (document.all.idUserName != null && document.all.idUserName.type == "text")
	{
		document.all.idUserName.select();
		document.all.idUserName.focus();
	}
}

function FocusPassword()
{
	if (document.all.idPassword != null && document.all.idPassword.type == "password")
	{
		document.all.idPassword.select();
		document.all.idPassword.focus();
	}
}


function clearInput()
{
	var oSrc = event.srcElement;
	if (oSrc.tagName == "INPUT")
		oSrc.value = "";
}

function changeBoth()
{
	if (validateInputs())
	{
		var strUser = idUserName.value.toLowerCase();
		var strPassword = idPassword.value.toLowerCase();
		var strConfirm = idPasswordConfirm.value.toLowerCase();
		if (strOldLogin == strUser)
		{
			idErrorMsg.innerHTML = "The New User Name is not changed. Please try again.";
			FocusUserName();
		}
		else if (strPassword != strConfirm)
		{
			idErrorMsg.innerHTML = "The confirmation password does not match the password.  Please try again.";		
			idPassword.focus();
			idPasswordConfirm.value = "";
		}
		else
		{
			//store new login info	
			updateLogin(strUser, strPassword);
		}
	}
}

function changePassword()
{
	if (validateInputs())
	{
		var strPassword = idPassword.value.toLowerCase();
		var strConfirm = idPasswordConfirm.value.toLowerCase();
		if (strPassword != strConfirm)
		{
			idErrorMsg.innerHTML = "The confirmation password does not match the password.  Please try again";		
			idPassword.focus();
			idPasswordConfirm.value = "";
		}
		else
		{
			//store new password
			updateLogin(strOldLogin, strPassword);
		}
	}
}

function updateLogin(strUserName, strPassword)
{
	// create XMLDOM object
	var objXMLDOM = new ActiveXObject("Microsoft.XMLDOM");
	var objElem = objXMLDOM.createElement("UPDATE");
    objXMLDOM.appendChild(objElem);
    var objRoot = objXMLDOM.documentElement;
    
    // add old UserName to XMLDOM object
    objElem = objXMLDOM.createElement("OLDLOGIN");
    objRoot.appendChild(objElem);
    objElem.text = strOldLogin;
    
    // add new UserName to XMLDOM object
    objElem = objXMLDOM.createElement("NEWLOGIN");
    objRoot.appendChild(objElem);
    objElem.text = strUserName;
    
    // add password to XMLDOM object
    objElem = objXMLDOM.createElement("PWORD");
    objRoot.appendChild(objElem);
    objElem.text = strPassword;
    
	// create XMLHTTP object and use it to send updated login info to server
	var xmlRequest = new ActiveXObject("microsoft.xmlhttp");
	xmlRequest.open("POST", "/" + strRootDir + "/common/asp/auth.asp", false);
	xmlRequest.send(objXMLDOM);
	
	// save response from server & clean up
	var updateResponseXML = null;
	updateResponseXML = xmlRequest.responseXML;
	xmlRequest = null;
   
	// retrieve update result from response XML
	objElem = updateResponseXML.selectSingleNode("//UPDATECODE");
	if (objElem == null)
	{
		showUnknownErr();
		return;
	}
	var nUpdateResult = parseInt(objElem.text);
	if (isNaN(nUpdateResult))
	{
		showUnknownErr();
		return;
	}
	
	switch (nUpdateResult)
	{
		case IS_UPDATED:
			loadODWebStart(false);
			break;
		case INVALID_OLD_LOGIN:
			idContent.innerHTML = strLoginForm;
			showUnknownErr();
			break;
		case NOT_UNIQUE_NEW_LOGIN:
			idErrorMsg.innerHTML = "The User Name you have selected is not available.&nbsp;&nbsp;Please try again.";
			clearAllInputs();
			FocusUserName();
			break;
		case UNCHANGED_PASSWORD:
			idErrorMsg.innerHTML = "The Password you entered has not been changed.&nbsp;&nbsp;Please try again.";
			idPassword.focus();
			idPasswordConfirm.value = "";
			break;
		case TOO_SHORT_NEW_LOGIN_OR_PASSWORD:
			idErrorMsg.innerHTML = "The User Name or Password you have selected must be at least 6 characters.";
			break;
		
        break;
                
		case UNKNOWN:
			showUnknownErr();
	}
}

function clearAllInputs()
{
	var collInputs = document.getElementsByTagName("INPUT");
	var len = collInputs.length;
	for (var i = 0; i < len; i++)
	{
		// Ignore the session ID hidden input
		if (collInputs[i].name != "nmSIDInfo")
			collInputs[i].value = "";
	}
}

function validateInputs()
{
	var collInputs = document.getElementsByTagName("INPUT");
	var len = collInputs.length;
	for (var i = 0; i < len; i++)
	{
		// Ignore the session ID hidden input
		if (
		        collInputs[i].name != "fldShowAll" && 
		        collInputs[i].name != "nmSIDInfo" && 
		        collInputs[i].value == "" && 
		        collInputs[i].name != "idSavePassword" && 
		        collInputs[i].name != "fldAutoLogin" && 
		        collInputs[i].name != "hdnUserSessionId" && 
		        collInputs[i].name != "__VIEWSTATE" )
		{
			idErrorMsg.innerHTML = "Unable to proceed because one or more fields are empty.&nbsp;&nbsp;Please try again.";
			
			collInputs[i].focus();
			return(false);
		}
	}
	return(true);	
}

function ContinueFromSuggestPage()
{	
	if (document.all.idDisableSuggest.checked)
	{
	
		var objXMLDOM = new ActiveXObject("Microsoft.XMLDOM");	
		var objElem = objXMLDOM.createElement("UPDATE_SUGGEST");
		objXMLDOM.appendChild(objElem);
		var objRoot = objXMLDOM.documentElement;
		
		
		var objElem = objXMLDOM.createElement("DISABLE_SUGGEST");		
		objRoot.appendChild(objElem);
		objElem.text = "1";

         // add old UserName to XMLDOM object
		objElem = objXMLDOM.createElement("SESSION_ID");
		objRoot.appendChild(objElem);
		objElem.text = strSessionID;

		// add old UserName to XMLDOM object
		objElem = objXMLDOM.createElement("SUGGEST_TIMEOUT");
		objRoot.appendChild(objElem);
		objElem.text = strSuggestTimeout;

		// create XMLHTTP object and use it to send updated login info to server
		var xmlRequest = new ActiveXObject("microsoft.xmlhttp");
		xmlRequest.open("POST", "/" + strRootDir + "/common/asp/auth.asp", false);
		xmlRequest.send(objXMLDOM);
	
		// save response from server & clean up
		var updateResponseXML = null;
		updateResponseXML = xmlRequest.responseXML;
		xmlRequest = null;
		
		// retrieve update result from response XML
		objElem = updateResponseXML.selectSingleNode("//UPDATECODE");
		
		if (objElem == null)
		{
			showUnknownErr();
		}
	}
	loadODWebStart(false);		
}

//------------------------------------------------------------------------+
// Entering the ODWeb site is broken into 2 functions:                    |
//
// loadODWebStart:
// Is called in multiple areas within this JS file. Initiates a check on  |
// the ODWebUtil.DLL version number installed on the client machine. The  |
// check is performed by another file, checkdll.htm, so that the DLL can  |
// be removed from memory when the check is finished by closing the       |
// checkdll window. At this time there is no way to remove the DLL from   |
// memory using JScript. So the workaround is to have another window do   |
// it. When checkdll is finished, it writes the result of the check to an |
// invisible SELECT element added to the login page in loadODWebStart.    |
// checkdll then fires the onchange event on the same SELECT element to   |
// signal to the login page that the check is finished.                   |
//                                                                        |
// loadODWebEnd:                                                          |
// This is the onchange handler for the SELECT element created in         |
// loadODWebStart.  When checkdll fires the onchange event, it invokes    |
// this function, which finishes up by evaluating the result of the DLL   |
// version check stashed in the SELECT element and either prompts the     |
// user again to install the DLL or loads the ODWeb site.                 |
//------------------------------------------------------------------------+

function loadODWebStart()
{
	// Clear the error message SPAN
//	var objErrMsgSpan = document.getElementById("idErrorMsg");
//	if (objErrMsgSpan)
//		objErrMsgSpan.innerHTML = "";
	
	// Try to find the SELECT element
//	var objResultSelect = document.getElementById("idResultSelect");
//	
//	if (objResultSelect == null)
//	{
//		// Add the SELECT element if not present
//		var strResultHTM = "<select id='idResultSelect' onchange='loadODWebEnd()'><option value='0' selected>UNKNOWN<option value='1'>NO UPDATE<option value='2'>UPDATE NEEDED</select>";		
//		document.body.innerHTML += strResultHTM;
//	}
	
	loadODWebEnd();
}

function loadODWebEnd()
{
		document.all.nmSIDInfo.value = strSessionID;

	    if (!bLibrary)
		{
			//---------------------------------------------------------+
			// Construct absolute URL for form's action attribute when |
			// logging in so that we can switch from https to http     |
			// Use host property to get server name because it will    |
			// contain any domain, host (server) name & port info.     |
			//---------------------------------------------------------+
			var strHost = new String(document.location.host);
			if (strHost == "")
			{
				idErrorMsg.innerHTML = strLoginMissingHost;
				clearAllInputs();
				return;
			}

			strHost = strHost.split(":")[0]; // Remove port if it exists and use the one below...
			strHost += strPort;

			var strURL = "http://<servername>/" + strRootDir + "/" + strStartPage + ".aspx";
			var re = /<servername>/;
			strURL = strURL.replace(re, strHost);			
			if (strURL == "http://<servername>/" + strRootDir + "/" + strStartPage + ".aspx")
			{
				idErrorMsg.innerHTML = strMissingHost;
				clearAllInputs();
				return;
			}
			
			document.all.idSIDForm.action = strURL + location.search;
		}


		//---------------------------------------------------------------------------+
		// Setting this to true indicates that the user is headed to mric/pcmain.asp |
		// This is important for libraries because if they go anywhere but           |
		// mric/pcmain.asp from the welcome screen, their session will be logged out |
		//---------------------------------------------------------------------------+
		gbToApp = true;
		
		// Set cursor to hourglass prior to posting as it can take awhile
		document.body.style.cursor = "wait";
		
		//TODO: This next line does not look right. document.body.innerHTML should not change
		// because we are submitting form data that is on the body. The appropriate way is
		// to have the tag that reads "OnDemand5 Loading..." set to hidden by default. And then
		// when the code reaches here, the visibility changes to visible, and the rest of the page changes
		// to hidden. 
		document.body.innerHTML = strLoadingHomePage + document.all.idFormToSubmit.innerHTML;		
		document.all.idSIDForm.submit();
}

function window.onunload()
{
	if ((bLibrary) && (!gbToApp))
	{		
		logOutSessionID(strSessionID);
	}
}

function openResetPasswordPage(strForgotPasswordURL, strWndSettings)
{
	window.open(strForgotPasswordURL, "wndResetPass", strWndSettings);
}

function JSEncode(str)
{
	str = str.replace(/\\/g, "\\\\");
	str = str.replace(/\'/g, "\\'");
	str = str.replace(/\"/g, "\\\"");
	str = str.replace(/</g,"&lt;",1,-1,1);
	str = str.replace(/>/g,"&gt;",1,-1,1);
	str = str.replace(/\n/g, "\\n");
	str = str.replace(/\r/g, "\\r");
 
	return str;
}


 