var totalExisted = 2;
var req, response;

function loadXMLDoc(url) {
	req = false;
	try{
		req = getXMLHttpRequestObject();
	}
	catch(e){
		req = false;
	}
	if(req) {
		req.onreadystatechange = processReqChange;
		req.open("GET", url, true);
		req.send("");
	}
}
function getXMLHttpRequestObject()
{
	try{
		return new XMLHttpRequest();	//	Firefox, Mozilla, Flock, Opera and Chrome
	}catch(exXMLHttpRequest){
		try{ // Microsoft Internet Explorer < 5.0
			return new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(exMsxml2){  // Microsoft Internet Explorer > 5.0
			try{
				return new ActiveXObject("Microsoft.XMLHTTP");
			}catch(exMicrosoftXMLHTTP){
				return null;
			}
		}
	}
}
function handleException(e)
{
	loadXMLDoc("../jsp/scripterrhandler.jsp?expdesc=" + e.message + "&expname=" + e.name + "&expnumber=" + (e.number & 0xFFFF) + "&explocation=" + location.href);
	return false;
}

function processReqChange() 
{
    // only if req shows "complete"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            // ...processing statements go here...
        } else {
           // alert("There was a problem retrieving the XML data:\n" + req.statusText);
        }
    }
}

function blinkItem(itemName)
{
	if (document.getElementById(itemName).style.display == 'none')
	{
		document.getElementById(itemName).style.display = 'block';
		setTimeout('blinkItem("'+itemName+'")', 1200);
	}
	else
	{
		document.getElementById(itemName).style.display = 'none';
		setTimeout('blinkItem("'+itemName+'")', 500);
	}
}

function blinkToggleItem(itemName, contentItemName, firstText, secondText)
{
	document.getElementById(contentItemName).innerText = firstText;
	if (document.getElementById(itemName).style.display == 'none')
	{
		document.getElementById(itemName).style.display = 'block';
		setTimeout('blinkToggleItem("'+itemName+'", "'+contentItemName+'", "'+secondText+'", "'+firstText+'")', 1200);
	}
	else
	{
		document.getElementById(itemName).style.display = 'none';
		setTimeout('blinkToggleItem("'+itemName+'", "'+contentItemName+'", "'+firstText+'", "'+secondText+'")', 500);
	}
}

function displayDifferent(currentlyDisplayed)
{
	do
	{
		currentlyDisplayed = Math.round(Math.random(totalExisted) * totalExisted);
	}
	while(currentlyDisplayed == 0);
	return currentlyDisplayed;
}

function MM_displayStatusMsg(msgStr) {status=msgStr;document.MM_returnValue = true;}
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
}
MM_reloadPage(true);

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}
//	Allow only characters in some text fields
//	Works only with onkeypress event
function charsOnly(eventObj)
{
	var key = getKeyCode(eventObj);
	//	Allow a-z, A-Z, control key operaitons like cut, copy, paste, move etc., and navigation keys
	if (key > 0 && (key < 65 || (key > 90 && key < 97) || key > 122) && !eventObj.ctrlKey){	
		return false;
	}
	return true;
}
//	Allow only numbers in some text fields
//	Works only with onkeypress event
function integerOnly(eventObj)
{
	var key = getKeyCode(eventObj);
	//	Allows 0-9, control key operaitons like cut, copy, paste, move etc., and navigation keys
	if (key > 0 && (key < 48 || key > 57) && !eventObj.ctrlKey){	
		return false;
	}
	return true;
}
//	Allow only numbers and characters in some text fields
//	Works only with onkeypress event
function alphaNumericsOnly(eventObj)
{
	return integerOnly(eventObj) || charsOnly(eventObj);
}
//	Works only with onkeypress event
function getKeyCode(eventObj)
{
	return eventObj.charCode || eventObj.charCode == 0 ? eventObj.charCode : eventObj.keyCode;
}
// allowedCharacterString should be string containing group of characters to be allowed. Ex: '.#()[]{}, &_-'. 
//	Works only with onkeypress event
function specificCharactersOnly(allowedCharacterString, eventObj)
{
	return allowedCharacterString.indexOf(String.fromCharCode(getKeyCode(eventObj))) != -1;
}
// This javascript function will enable / disable ctrl key options like ctrl + a, ctrl + c, ctrl + v, ctrl + x.
// If the 'flag' value is "true", then it enables the ctrl key options.
// If the 'flag' value is "false" then it disables the ctrl key options.
// Works good with IE.
function enableDisableCtrlKeyOptions(eventObj, flag)
{
	// 65 - for 'A' :: 67 - for 'C' :: 86 - for 'V'  :: 88 - for 'X'
	// 97 - for 'a' :: 99 - for 'c' :: 118 - for 'v'  :: 120 - for 'x'
	if(eventObj.ctrlKey)
	{
		if(flag && (getKeyCode(eventObj) == 97 || getKeyCode(eventObj) == 99 || getKeyCode(eventObj) == 118 || getKeyCode(eventObj) == 120 || getKeyCode(eventObj) == 65 || getKeyCode(eventObj) == 67 || getKeyCode(eventObj) == 86 || getKeyCode(eventObj) == 88))
			return true;
	}
	return false;	
}
function getCurrYear()
{
	return new Date().getFullYear();
}
function trimValue()
{
	var content;
	if (arguments.length == 1)
	{
		content = arguments[0].value;
		if (content != '' && document.all)
			arguments[0].value = content.replace(/^\s+/g, '').replace(/\s+$/g, '');
	}
	else if (arguments.length == 2)
	{
		content = arguments[0];
	}
	return  document.all ? content.replace(/^\s+/g, '').replace(/\s+$/g, '') : content;
}
function countChars(field, countfield, maxlimit)
{
	if (trimValue(field.value, 'NOTACONTROL').length > maxlimit)
    {
		alert("Number of characters exceeds maximum ("+ maxlimit + " characters) limit. Extra characters were truncated.");
		field.value = trimValue(field.value, 'NOTACONTROL').substring(0, maxlimit);
		countfield.value = maxlimit - field.value.length;
	}
    else
		countfield.value = maxlimit - trimValue(field.value, 'NOTACONTROL').length;
}

function countGroupChars()
{
	//	Fields whose total length to check, counter  field to be updated and maximum limit
	var totalLength = 0;
	var maxlimit = arguments[arguments.length - 1];
	for (var argsIndex = 1; argsIndex < arguments.length - 2; argsIndex ++)
	{
		totalLength += trimValue(arguments[argsIndex].value, 'NOTACONTROL').length;
	}
	var keyval = getKeyCode(arguments[0]);
	if (totalLength > maxlimit)
    {
		if (keyval != 9 && (keyval < 16 || keyval > 20) && keyval != 27 && (keyval < 33 || keyval > 36)  &&  keyval != 8 && keyval != 46 && keyval != 45 && keyval != 91 && (keyval < 112 || keyval > 123) && keyval != 144 && keyval != 145)
			return false;
		else
			return true;
	}
    else
    {
		arguments[arguments.length - 2].value = maxlimit - totalLength;
		return true;
	}
}
/*
	Author: Sriram Gullapalli
	
	Q: Purpose and usage of this method?
	
	A: Whenever you want to fetch the mouse co-ordinates (X and Y positions) 
		1. Attach this script file to the source file
		2. Call this method for the "onmousemove" event which is the 'document' property, as follows...
	
			var mouseXYCoordinates = "";
			document.onmousemove = function(event){
				mouseXYCoordinates = getMouseXY(event); // This call will come here and executes the following defined code
			}
			
			Note: This method finds out the mouse X and Y positions and returns the result as <X-Position value> + "," + <Y-Position Value>. 
			Once received you need to separate both X & Y values. Eg: 456,789

*/
function getMouseXY(eventObj)
{
		var leftCoordinate = document.all ? (event.clientX + document.body.scrollLeft) : eventObj.pageX;
		var topCoordinate = document.all ? (event.clientY + document.body.scrollTop) : eventObj.pageY;
		return (leftCoordinate + "," + topCoordinate);
}
function convertDegreeToDegreeMinuteSecond(degree)
// Author : Ajay D. Desai. 16-Jan-2010.
// degree : a real number like 12.345678.
//			This number must be >= 0.0. Negative number is not handled by this method.
//			If it is a negative number, 0 degree, 0 minute, 0.0 second will be returned.
// Returns an Array(3) : (0)=Degrees(integer), (1)=Minutes(integer) and (2)=Seconds(real).
{
		var degreeFractionInt;
		if (String(degree).length==0)
		{
			var degreeMinuteSecond = new Array(3);
			degreeMinuteSecond[0]="0";
			degreeMinuteSecond[1]="0";
			degreeMinuteSecond[2]="0.0";
			return degreeMinuteSecond;
		}
		if (eval(degree)<0)
		{
			var degreeMinuteSecond = new Array(3);
			degreeMinuteSecond[0]="0";
			degreeMinuteSecond[1]="0";
			degreeMinuteSecond[2]="0.0";
			return degreeMinuteSecond;
		}
		if (String(degree).length>1 && String(degree).substr(0,1)==".")
		{
			degree="0".concat(String(degree));
		}
		var degreeInt = parseInt(degree);
		var degreeFraction = eval(degree) - eval(degreeInt);
		degreeFractionInt = eval(degreeFraction)*3600;
		var minutePart = eval(degreeFractionInt) / 60;
		minutePart = parseInt(minutePart);
		var secondPart = eval(degreeFractionInt) - eval(minutePart * 60);
		if (eval(secondPart)<eval(0.000001))
			secondPart=0.0;
		else if (eval(secondPart)>eval(59.9999)) // by design, secondPart < 60, always.
		{
			secondPart=0;
			minutePart=eval(eval(minutePart)+1);
		}
		if (eval(minutePart)>=eval(60))
		{
			minutePart=eval(eval(minutePart)-60);
			degreeInt=eval(eval(degreeInt)+1);
		}
		var decPos=eval(getIndexOf(String(secondPart), "."))+eval("1");
		var secLen=String(secondPart).length;
		var totDec=eval(secLen)-eval(decPos);
		if (totDec>4)
		{
			secondPart=String(secondPart).substring(0, eval(String(secondPart).length - (eval(totDec) - 4)));
		}
		var degreeMinuteSecond = new Array(3);
		degreeMinuteSecond[0]=degreeInt;
		degreeMinuteSecond[1]=minutePart;
		degreeMinuteSecond[2]=secondPart;
		return degreeMinuteSecond;
}
function getRoundedValue(numberString, positionNo, typeOfRounding)
// Author : Ajay D. Desai. 16-Jan-2010.
// numberString   : integer number, e.g. 123456789
// positionNo     : number of digits required, e.g. 3
// typeOfRounding : "R" for rounding to the nearest full number: either 0(removed from numberString's end part) Or
//																 10 (add 1 to last digit which is required)
//					"U" for rounding up : if the value to be discarded(at positionNo+1) is > 0, add 1 to last
//										  digit which is required.
// Returns rounded value of numberString, having number of digits=positionNo and having value either rounded to
// nearest or rounded up.
{
	var numberMain=numberString.substring(0, eval(positionNo));
	var numberFrac=numberString.substring(eval(positionNo), eval(positionNo)+1);
	if (typeOfRounding=="R")
	{
		if (eval(numberFrac)<=4)
			return eval(numberMain);
		else
			return eval(numberMain)+1;
	}
	else // if (typeOfRounding="U")
	{
		if (eval(numberFrac)>0)
			return eval(numberMain)+1;
		else
			return eval(numberMain);
	}
}
function getIndexOf(strVal, lookFor)
// Author : Ajay D. Desai. 16-Jan-2010.
// strVal : String to be searched
// lookFor: character to be searched in strVal.
// return -1 if lookFor is not found in strVal
// return index value(0 based) of first occurance of lookFor inside strVal.
{
	var firstInd=-1;
	for (var i=0 ; i<strVal.length; i++){
		var charv = strVal.charAt(eval(i));
		if (charv == lookFor)
		{
			firstInd=i;
			break;
		}
	}
	return firstInd;
}
