function do_login(form,hform)
{
    //*****************************************************************
    //***  Modified by Chuen      2008-10-20
    //***  Fix: Empty user name result in dislay login.fcc
    //*****************************************************************
    if (null == form)
    {
        return false;
    }
    if (0 == form.UserID.value.length)
    {
        var  sTarget    = form.ErrorURL.value;
        var  sTemp;

        if ("?" != sTarget.charAt(sTarget.length - 1))
        {
            sTarget = sTarget + "?";
        }
        sTarget = sTarget + "GSS2ErrorCode=GSS00110&" +
                            "errCode=110&" +
                            "GSS2ErrorMsg=Invalid+user%2C+please+enter+the+correct+user+name.";

        sTemp  = form.language.value;
        if (null != sTemp && 0 < sTemp.length)
        {
            sTarget = sTarget + "&language=" + sTemp;
        }

        sTemp  = form.country.value;
        if (null != sTemp && 0 < sTemp.length)
        {
            sTarget = sTarget + "&country=" + sTemp;
        }

        window.navigate(sTarget);
        return false;
    }
    //*****************************************************************
    //***  End Modified by Chuen      2008-10-20
    //*****************************************************************

	var locID = ""

	// Getting computer ID from registry
//	locID = getLocationIDFromRegistry();
	
	// Getting computer ID form computer
//	locID = getLocationIDFromComputer();

	if (locID.length == 0) {
		locID = getComputerID();
	}
	do_login2(form,hform,locID);
}

function do_login2(form,hform,locID)
{
	var s1 = "";
	s1 = s1 + "FrameWork=" + form.FrameWork.value;
	s1 = s1 + "|" + "SourceID=" + form.SourceID.value;
	s1 = s1 + "|" + "AuthSuccessURL=" + form.AuthSuccessURL.value;
	s1 = s1 + "|" + "ErrorURL=" + form.ErrorURL.value;

	for (i=0;i<form.elements.length;i++)
	{
		if (form.elements[i].name.toUpperCase() != "USERID" &&
			form.elements[i].name.toUpperCase() != "PASSWD" &&
			form.elements[i].name.toUpperCase() != "FRAMEWORK" &&
			form.elements[i].name.toUpperCase() != "SOURCEID" &&
			form.elements[i].name.toUpperCase() != "AUTHSUCCESSURL" &&
			form.elements[i].name.toUpperCase() != "ERRORURL" &&
			form.elements[i].name.toUpperCase() != "TERMINALID" &&
			form.elements[i].name.toUpperCase() != "SUBMIT" &&
			form.elements[i].name.toUpperCase() != "RESET"
			)
		{
			switch (form.elements[i].type.toUpperCase())
			{
				case "":
				case "HIDDEN":
				case "TEXT":
					s1 = s1 + "|POSTVAL_" + form.elements[i].name + "=" + form.elements[i].value;
					break;
				case "CHECKBOX":
				case "RADIO":
					if (form.elements[i].checked)
					{
						s1 = s1 + "|POSTVAL_" + form.elements[i].name + "=" + form.elements[i].value;
					}
					break;
				case "SELECT-ONE":
				case "SELECT-MULTIPLE":
					for (j=0;j<form.elements[i].options.length;j++)
					{
						if (form.elements[i].options[j].selected)
						{
							if (form.elements[i].options[j].value != "")
							{
								s1 = s1 + "|POSTVAL_" + form.elements[i].name + "=" + form.elements[i].options[j].value;
							}
							else
							{
								s1 = s1 + "|POSTVAL_" + form.elements[i].name + "=" + form.elements[i].options[j].text;
							}
						}
					}
					break;
			}
		}
	}

	//hform.s1.value = s1;

	s1 = base64encode(s1);

//        if (form.UserID.value == "") {
//                alert("Please enter User ID!\n\u8acb\u8f38\u5165\u7528\u6236\u540d!\n\u8bf7\u8f93\u5165\u7528\u6237\u540d!");
//                return false;
//        }

	hform.USER.value = form.UserID.value;
	hform.PASSWORD.value = form.Passwd.value + "|" + locID + "|"  + s1;
	hform.target.value = hform.target.value + s1;
	hform.submit();
}

function do_sslLogin(form,hform)
{
//    if (form.UserID.value == "") {
//   	alert("Please enter User ID!\n\u8acb\u8f38\u5165\u7528\u6236\u540d!\n\u8bf7\u8f93\u5165\u7528\u6237\u540d!");
//        return false;
//    }
    //****************************************************************   
    //***  Modified by Alan Tam     2011-04-01    
    //***  Fix: IE8 Compatible Problems    
    //*****************************************************************

//    hform.action = "https://" + document.location.hostname + hform.action;	

      hform.action = "https://" + document.location.hostname + hform.getAttribute("action");	
      do_login(form, hform);
}

function do_dispatch(action, d)
{
	var dd, nvps, nvp, name, value;
	var oInput;
	var defaultLocale;
	var i;

	dd = base64decode(d);

	nvps = dd.split("|");

	for (i=0;i<nvps.length;i++)
	{
		nvp = nvps[i].split("=");
		name = nvp[0];
		value = nvp[1];
		if (name == action)
		{
			document.write("<FORM METHOD='POST' ACTION='" + value + "' NAME='dispatchForm'>");
		}
	}
	for (i=0;i<nvps.length;i++)
	{
		nvp = nvps[i].split("=");
		name = nvp[0];
		value = nvp[1];
		if (name.substring(0,8) == "POSTVAL_")
		{
			document.write("<INPUT TYPE='HIDDEN' NAME='" + name.substr(8) + "' VALUE='" + value + "'>");
		}
	}

	document.write("</FORM>");
	document.dispatchForm.submit();
}

function do_errDispatch(action, d, errCode, errMsg, bh)
{
	var dd, nvps, nvp, name, value;
	var oInput;
	var i;

	dd = base64decode(d);

	nvps = dd.split("|");

	for (i=0;i<nvps.length;i++)
	{
		nvp = nvps[i].split("=");
		name = nvp[0];
		value = nvp[1];
		if (name == action)
		{
		    var frmMethod;
		    
	        if (value.slice(-4) == ".htm" || value.slice(-5) == ".html")
	        {
	            frmMethod   = "GET";
	        }
	        else
	        {
	            frmMethod   = "POST";
	        }
            document.write("<FORM METHOD='" + frmMethod + "' ACTION='" + value + "' NAME='dispatchForm'>");
		}
	}
	for (i=0;i<nvps.length;i++)
	{
		nvp = nvps[i].split("=");
		name = nvp[0];
		value = nvp[1];
		if (name.substring(0,8) == "POSTVAL_")
		{
			document.write("<INPUT TYPE='HIDDEN' NAME='" + name.substr(8) + "' VALUE='" + value + "'>");
		}
	}
	document.write("<INPUT TYPE='HIDDEN' NAME='GSS2ErrorCode' VALUE='GSS00" + errCode + "'>");
	document.write("<INPUT TYPE='HIDDEN' NAME='errCode' VALUE='" + errCode + "'>");
	document.write("<INPUT TYPE='HIDDEN' NAME='GSS2ErrorMsg' VALUE='" + errMsg + "'>");
	document.write("<INPUT TYPE='HIDDEN' NAME='bh' VALUE='" + bh + "'>");

	document.write("</FORM>");
	document.dispatchForm.submit();
}

/*
 * Interfaces:
 * b64 = base64encode(data);
 * data = base64decode(b64);
 */

var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var base64DecodeChars = new Array(
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
    52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
    -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
    15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
    -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);

function base64encode(str) {
    var out, i, len;
    var c1, c2, c3;

    len = str.length;
    i = 0;
    out = "";
    while(i < len) {
	c1 = str.charCodeAt(i++) & 0xff;
	if(i == len)
	{
	    out += base64EncodeChars.charAt(c1 >> 2);
	    out += base64EncodeChars.charAt((c1 & 0x3) << 4);
	    out += "==";
	    break;
	}
	c2 = str.charCodeAt(i++);
	if(i == len)
	{
	    out += base64EncodeChars.charAt(c1 >> 2);
	    out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
	    out += base64EncodeChars.charAt((c2 & 0xF) << 2);
	    out += "=";
	    break;
	}
	c3 = str.charCodeAt(i++);
	out += base64EncodeChars.charAt(c1 >> 2);
	out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
	out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
	out += base64EncodeChars.charAt(c3 & 0x3F);
    }
    return out;
}

function base64decode(str) {
    var c1, c2, c3, c4;
    var i, len, out;

    len = str.length;
    i = 0;
    out = "";
    while(i < len) {
	/* c1 */
	do {
	    c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
	} while(i < len && c1 == -1);
	if(c1 == -1)
	    break;

	/* c2 */
	do {
	    c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
	} while(i < len && c2 == -1);
	if(c2 == -1)
	    break;

	out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));

	/* c3 */
	do {
	    c3 = str.charCodeAt(i++) & 0xff;
	    if(c3 == 61)
		return out;
	    c3 = base64DecodeChars[c3];
	} while(i < len && c3 == -1);
	if(c3 == -1)
	    break;

	out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));

	/* c4 */
	do {
	    c4 = str.charCodeAt(i++) & 0xff;
	    if(c4 == 61)
		return out;
	    c4 = base64DecodeChars[c4];
	} while(i < len && c4 == -1);
	if(c4 == -1)
	    break;
	out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
    }
    return out;
}

function getComputerID()
{
	var u;
	try	{
		var o = new ActiveXObject("CitrixTool.CitrixSession");
		u = o.CurrentUser;
	} catch (e)	{
		u = "";
	}   
	return u;
}

function getLocationIDFromRegistry()
{
	var u;
	try	{
//		alert("Calling Active Object to get Location ID from registry!");
		var o = new ActiveXObject("LocalReader.Registry.1");
		u= o.GetLocationID();
	} catch (e)	{
		alert("Got exception when getting Location ID from registry!");
		u = "";
	}
	return u;
}

function getLocationIDFromComputer()
{
	var u;
	try	{
//		alert("Calling Active Object to get Location ID from computer name!");
		var o = new ActiveXObject("LocalReader.Computer.1");
		u= o.GetName();
	} catch (e)	{
		alert("Got exception when getting Location ID from computer name!");
		u = "";
	}
	return u;
}

function getMFT_ID(mft2ID){
	myString = new String(mft2ID);
	result = myString.replace(/XP/gi,"");
	return result;
}

