document.writeln("<script type='text\/javascript' src='../js/prototype.js'></script>");
document.writeln("<script type='text\/javascript' src='../js/str_parser.js'><\/script>");

IPMIPrivileges = new Array();
IPMIPrivileges[0] = "Reserved";
IPMIPrivileges[1] = "Callback";
IPMIPrivileges[2] = "User";
IPMIPrivileges[3] = "Operator";
IPMIPrivileges[4] = "Administrator";
IPMIPrivileges[0xf] = "No Access";

FRUChassisType = new Array();
FRUChassisType[0x00] = "";
FRUChassisType[0x01] = "Other";
FRUChassisType[0x02] = "Unknown";
FRUChassisType[0x03] = "Desktop";
FRUChassisType[0x04] = "Low Profile Desktop";
FRUChassisType[0x05] = "Pizza Box";
FRUChassisType[0x06] = "Mini Tower";
FRUChassisType[0x07] = "Tower";
FRUChassisType[0x08] = "Portable";
FRUChassisType[0x09] = "LapTop";
FRUChassisType[0x0a] = "Notebook";
FRUChassisType[0x0b] = "Hand Held";
FRUChassisType[0x0c] = "Docking Station";
FRUChassisType[0x0d] = "All in One";
FRUChassisType[0x0e] = "Sub Notebook";
FRUChassisType[0x0f] = "All in One";
FRUChassisType[0x10] = "Lunch Box";
FRUChassisType[0x11] = "Main Server Chassis";
FRUChassisType[0x12] = "Expansion Chassis";
FRUChassisType[0x13] = "SubChassis";
FRUChassisType[0x14] = "Bus Expansion Chassis";
FRUChassisType[0x15] = "Peripheral Chassis";
FRUChassisType[0x16] = "RAID Chassis";
FRUChassisType[0x17] = "Rack Mount Chassis";

FRULanguageCodes = new Array();
FRULanguageCodes[0] = "English";
FRULanguageCodes[25] = "English";

var gSensorTypeCount = 0xff;	
var EXTENDED_ERROR = 10;
gSensorType = [];
gSensorType[0x00] = "All Sensors";
gSensorType[0x01] = "Temperature Sensors";
gSensorType[0x02] = "Voltage Sensors";
gSensorType[0x03] = "Current Sensors";
gSensorType[0x04] = "Fan Sensors";
gSensorType[0x05] = "Physical Security";
gSensorType[0x06] = "Platform Security Violation Attempt";
gSensorType[0x07] = "Processor";
gSensorType[0x08] = "Power Supply";
gSensorType[0x09] = "Power Unit";
gSensorType[0x0A] = "Cooling Device";
gSensorType[0x0B] = "Other Units-based Sensor";
gSensorType[0x0C] = "Memory";
gSensorType[0x0D] = "Drive Slot";
gSensorType[0x0E] = "POST Memory Resize";
gSensorType[0x0F] = "System Firmware Progress";
gSensorType[0x10] = "Event Logging Disabled";
gSensorType[0x11] = "Watchdog 1";
gSensorType[0x12] = "System Event";
gSensorType[0x13] = "Critical Interrupt";
gSensorType[0x14] = "Button / Switch";
gSensorType[0x15] = "Module / Board";
gSensorType[0x16] = "Microcontroller / Coprocessor";
gSensorType[0x17] = "Add-in Card";
gSensorType[0x18] = "Chassis";
gSensorType[0x19] = "Chip Set";
gSensorType[0x1A] = "Other FRU";
gSensorType[0x1B] = "Cable / Interconnect";
gSensorType[0x1C] = "Terminator";
gSensorType[0x1D] = "System Boot Initiated";
gSensorType[0x1E] = "Boot Error";
gSensorType[0x1F] = "OS Boot";
gSensorType[0x20] = "OS Critical Stop";
gSensorType[0x21] = "Slot / Connector";
gSensorType[0x22] = "System ACPI Power State";
gSensorType[0x23] = "Watchdog 2";
gSensorType[0x24] = "Platform Alert";
gSensorType[0x25] = "Entity Presence";
gSensorType[0x26] = "Monitor ASIC / IC";
gSensorType[0x27] = "LAN";
gSensorType[0x28] = "Management Subsystem Health";
gSensorType[0x29] = "Battery";
gSensorType[0x2A] = "Session Audit";
gSensorType[0x2B] = "Version Change";
gSensorType[0x2C] = "FRU State";
gSensorType[0xC0] = "OEM Sensors";
function session_timeout()
{
	if(typeof session_timeout.record == 'undefined')
	{
		session_timeout.record = 0;
	}
	if(session_timeout.record == 0)
	{
		++session_timeout.record;
		alert(read_str('common','STR_SESSION_TIMEOUT_ERROR'));
		location.href = "/page/logout.htm";
	}
}
function getResponseXML(response)
{
	if (window.ActiveXObject){ //ie
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(response);
	}else if (window.XMLHttpRequest) //Firefox or Safari
	{
		parser=new DOMParser();
		xmlDoc=parser.parseFromString(response,"text/xml");
	}
	if(xmlDoc.childNodes[0].nodeName == 'HTML')
	{
		xmlDoc = null;
	}
	return xmlDoc;
}
function validateSession()
{
	var url = '/cgi/check_session.cgi';
	var pars = 'time_stamp='+(new Date());
  	var myAjax = new Ajax.Request(
                url,
                {method: 'get',parameters:pars, onComplete: validateSessResp}//reigister callback function
                );
}

function validateSessResp(originalRequest)
{
	if (originalRequest.readyState == 4 && originalRequest.status == 200){
		var response = originalRequest.responseText.replace(/^\s+|\s+$/g,"");
		var xmldoc=getResponseXML(response);
		if(xmldoc == null)
		{
			session_timeout();
			return;
		}	
		var IPMI=xmldoc.documentElement;//point to IPMI
		SESSION=IPMI.getElementsByTagName('SESSION');//point to SENSOR_INFO
	    STATE = SESSION[0].getElementsByTagName('STATE');
	    var state = parseInt(STATE[0].getAttribute("CODE"), 10);   
	    if(state == 0){
	    	session_timeout();
			}
		}
}
doLaunchJava = function()
{
	// check if current JRE version is greater than 1.6.0     
	if (deployJava.versionCheck('1.6.0_10+') == false) {                           
		userInput = confirm("You need the latest Java(TM) Runtime Environment. Would you like to update now?");                
		if (userInput == true) {                  
			// Set deployJava.returnPage to make sure user comes back to             
			// your web site after installing the JRE            
			deployJava.returnPage = location.href;                        
			// install latest JRE or redirect user to another page to get JRE from.            
			deployJava.installLatestJRE();         
			}    
		}
	else{
		var url = '/cgi/Build_jnlp.cgi';
		var pars = 'time_stamp='+(new Date()) ;    //(0,0) ask for privilege
		var myAjax = new Ajax.Request(
	                 url,
	                 {method: 'get',parameters:pars, onComplete: GetJNLP}//reigister callback function
	                 );
	//	location.href = "/cgi/Build_jnlp.cgi";
		return;
	}
}
function GetJNLP(originalRequest)
{
	var response = originalRequest.responseText.replace(/^\s+|\s+$/g,"");
	var xmldoc=getResponseXML(response);
	if(xmldoc == null)
	{
		session_timeout();
		return;
	}
    var host_addr;
    var host_tmp  = location.host;
    
    if((host_tmp.indexOf("[", 0) == -1) && (host_tmp.indexOf(":", 0) != -1))
        host_addr = "[" + host_tmp + "]";
    else
        host_addr = host_tmp;

	var jnlp = "http://" + host_addr + "/ikvm.jnlp";
	deployJava.launch(jnlp);
//	deployJava.getPlugin().launch(jnlp);
}
function Loading(enable, text)
{
	text="";
	document.getElementById("wait").innerHTML=enable?text+"<font style='background:#990000; color:#FFFFFF;'>loading...</font>":"";
}

function readCookie(name) 
{
	var nameEQ = name + "=";
	var ca = top.document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
function createCookie(name, value)
{
	top.document.cookie = name+"="+value+"; path=/";
}
function eraseCookie(name)
{
	var cookiedate = new Date();
	cookiedate.setTime(cookiedate.getTime() + 2*60*1000);   //exist in 2min
	top.document.cookie = name+"=; expires=" + cookiedate.toGMTString() + ";path=/";
}
function checkWord(txt) //the txt only exists letter and number.
{
	re = /\W/;
	if (re.test(txt))
    	return false;
	else
    	return true;
}
function checkPath(txt) 
{
	var path = txt;
	var filter = /^\\[a-zA-Z0-9_\.\- ]+\\([a-zA-Z0-9_\.\- ]+\\*)+(\.[iI][sS][oO]){1}$/;
	
	if(filter.test(path))
		return true;
	else
			 	 
		return false;
}

function checkEMAIL(e)
{
	var filter =  /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
	var v = new String(e);

	if ( v.match( (filter) ) )
	{
		return true;
	}
	delete v;
	if(this.verbose){read_str('err',EXTENDED_ERROR+31);}
	this.lastErrorNum = EXTENDED_ERROR+31;
	return false;
}
	
function checkPWD(password, minlen, maxlen)
{
	if(minlen){minlen=minlen;}else{var minlen=8;}
	if(maxlen){maxlen=maxlen;}else{var maxlen=20;}
    if( (password.length > maxlen) || (password.length < minlen) )
    {
        if(this.verbose){read_str('err',EXTENDED_ERROR+24);}
		this.lastErrorNum = EXTENDED_ERROR+24;
        return false;
    }
	else
	{
		// Create regexp to validate ip
		var re=/^[^ ]+$/;
		if (re.test(password)==false)
		{
			//alert(eLang.getSysString("STR_PASSWORD_SPC"));
			return false;
		}
	}
	return true;
}
function checkUsrName(username)
{
    if( (username.length > 16) || (username.length < 4) )
    {
        if(this.verbose){read_str('err',EXTENDED_ERROR+27);}
		this.lastErrorNum = EXTENDED_ERROR+27;
        return false;
    }
    var usernamecopy = new String(username);
    var invalidchar_filter = /([,; &"<>\\?])/;
    if( usernamecopy.match(invalidchar_filter) )
    {
        if(this.verbose){read_str('err',EXTENDED_ERROR+25);}
		this.lastErrorNum = EXTENDED_ERROR+25;
        return false;
    }
    else
    {
        return true;
    }
}
function checkIllegalChar(str)
{
    var str_copy = new String(str);
    var invalidchar_filter = /([,; &"<>\\=$#*!@~`%^])/;
    if( str_copy.match(invalidchar_filter) )
    {        
        return false;
    }
    else
    {
        return true;
    }
}   
function checkNum(n)
{
	return typeof n == 'number' && isFinite(n);
}
	
function checkIP(ip,boolAllow0000)
{
	var ipv = (new String(ip)).split(".");
	if(ipv.length != 4)
	{
		if(this.verbose)
		{
			read_str('err',EXTENDED_ERROR+30);
		}
		this.lastErrorNum = EXTENDED_ERROR+30;
		return false;
	}
	for( var i=0; i<4 ;i++)
	{
		if( isNaN(ipv[i]) || ipv[i]=="" || ipv[i] < 0 || ipv[i] > 255 ||ipv[i].length>3)
		{
			if(this.verbose)
			{
				read_str('err',EXTENDED_ERROR+30);
			}
			this.lastErrorNum = EXTENDED_ERROR+30;
			return false;
		}
	}

	delete ipv;
	return true;
}

function checkExtName(str, lookfor)
{
    var strlen = str.length;
    var lookforlen = lookfor.length;
                                                                                                                         
    var lookforptr = lookforlen;
    while( lookforptr > 0 )
    {
            if( str.charAt(strlen-lookforptr) != lookfor.charAt(lookforlen-lookforptr) )
                    return false;
            lookforptr--;
    }
    return true;
}

function trim(str)
{ 
	return str.replace(/^\s+|\s+$/g,"");
}

function getbits(orig,startbit,endbit)
{
	var temp = orig;
	var mask =0x00;
	for(var i=startbit;i>=endbit;i--)
	{
		mask = mask | (1 << i);
	}
	return (temp & mask);
}

function GET_ERROR_CODE(x)
{
	return (x & 0xff);
}

function GetVars(searchtoken)
{
	URLVariables=location.search;
	//var URLVariables=decodeURIComponent(location.search);	// Convert esc code back to &
	URLVariables=URLVariables.substring(1);         // Clear off ? from query
	return (decodeURIComponent(parsetokens(URLVariables,searchtoken,/\s*&\s*/)));
}

function ToLocale(str)
{
	var CardDate = new Date(str + " GMT");

	return ( CardDate.toLocaleString() );

}

function parsetokens(tokenlist,searchtoken, delimiter, boolDebug)
{
	// Take apart each 'token=value' and put them into an array
	var tokenpairs=tokenlist.split(delimiter);         // Now we have an array of
																	//  token pairs
	var tokenvals= new Array();                     // Create array object for
	var tokenpieces= new Array();                     // Create array object for
																	//  further splitting
	// This loop will split each token set (token=value) into
	// token[x*2] and value[x*2+1]

	for (var i=0;i<tokenpairs.length;i++)
	{
		 tokenpieces=tokenpairs[i].split("=");       // split each set at '='
		 tokenvals[i*2]=tokenpieces[0];              // Assign token to new array
		 tokenvals[i*2+1]=tokenpieces[1];            // Assign value to adjacent pos
	}

	// Done with token name and value extraction.  Now just
	// parse the array to find the one we want.

	var finaltokenvalue=null;                       // Default to null
	for (i=0;i<(tokenvals.length/2);i++)
	{
		if (tokenvals[i*2]==searchtoken)
		{
			finaltokenvalue=tokenvals[i*2+1];
		}
		// Display all token names and values
		if (boolDebug)
		{
			document.write("[searchtoken:"+searchtoken+"][tokenName:"+tokenvals[i*2]+"] [tokenValue:"+tokenvals[i*2+1]+"]"+(tokenvals[i*2]==searchtoken)+"<BR>");
		}
	}
	return(finaltokenvalue);
}

