framework = new framework();
function framework()
{
	
}

framework.showJsErrors = function()
{
	showPopup("fw_js_errors");
}

framework.showPhpErrors = function()
{
	fwExecAjax("FW_system_cmd","FW_get_last_php_error","","last_php_error_container")
}

function jsfwvars()
{
	this.selectedLineColour = hovercol;
}

function initOnload()
{
	isOnload="loaded";
}

fwonloadCounter = 0;
function fwonload(theFunc)
{
	funcToRun = theFunc
	if(!fwonloadCounter)
		fwonloadCounter = 0;
	fwonloadCounter++;
	if(isOnload == "loaded" && funcToRun != "")
	{
		eval(funcToRun)
	}
	else
	{
		if(fwonloadCounter < 10)
			setTimeout("fwonload(funcToRun)",500)
	}
}

function findCode(value)
{
	value = 'wibble'+value;
	var positionOfLeftCurlyBrace = value.indexOf('{');
	var positionOfRightCurlyBrace = value.indexOf('}');
	var numOfCharInbetweentwoBraces = positionOfRightCurlyBrace - (positionOfLeftCurlyBrace +1);
	var theCode = value.substring((positionOfLeftCurlyBrace + 1),positionOfRightCurlyBrace);
	return theCode;
}

function show ( evt, name ) 
{
	var currentX,   
	currentY,  
	x, 
	y,   
	docWidth,   
	docHeight,  
	layerWidth, 
	layerHeight,
	ele;
	
	ele = document.getElementById(name);
	currentX = evt.clientX;
	currentY = evt.clientY -185;
	docWidth = document.width;
	docHeight = document.height;
	layerWidth = ele.style.width;
	layerHeight = ele.style.height; 
  

	if ( ( currentX + parseInt(layerWidth) ) > docWidth ) 
	{
		x = ( currentX - parseInt(layerWidth) );
	}
	else 
	{
		x = currentX;
	}
	
	if ( ( currentY + parseInt(layerHeight) ) >= docHeight ) 
	{
		y = ( currentY - parseInt(layerHeight) - 20 );
	}
	else 
	{
		y = currentY + 20;
	}
	

	ele.style.left = x+"px";
	ele.style.top = y+"px";
	ele.style.visibility = "visible"; 
}

function hide ( name ) 
{
  
    document.getElementById(name).style.visibility = "hidden";
}

function unhide ( name ) 
{
  
    document.getElementById(name).style.visibility = "visible";  
}

function insert_value(theForm,theElement,theValue,state)
{	
	document.forms[theForm].elements[theElement].value = theValue;
}

//*****************************************************************************
// Do not remove this notice.
//
// Copyright 2001 by Mike Hall.
// See http://www.brainjar.com for terms of use.
//*****************************************************************************

// Determine browser and version.
function Browser() 
{

  var ua, s, i;

  this.isIE    = false;
  this.isNS    = false;
  this.version = null;

  ua = navigator.userAgent;

  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  // Treat any other "Gecko" browser as NS 6.1.

  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }
}

var browser = new Browser();

// Global object to hold drag information.

var dragObj = new Object();
dragObj.zIndex = 0;

//initialise this
maxPopupZindex=25;

function dragStart(event, id) {

  var el;
  var x, y;

   // If an element id was given, find it. Otherwise use the element being
  // clicked on.

  if (id)
    dragObj.elNode = document.getElementById(id);
  else {
    if (browser.isIE)
      dragObj.elNode = window.event.srcElement;
    if (browser.isNS)
      dragObj.elNode = event.target;

    // If this is a text node, use its parent element.

    if (dragObj.elNode.nodeType == 3)
      dragObj.elNode = dragObj.elNode.parentNode;
  }
      
  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Save starting positions of cursor and element.
    
  theWidth = parseInt(dragObj.elNode.style.width.substr(0,dragObj.elNode.style.width.length-2))/2
  theHeight = parseInt(dragObj.elNode.style.height.substr(0,dragObj.elNode.style.height.length-2))/2
  
 var startLeft = theWidth+dragObj.elNode.offsetLeft;
 var startTop = theHeight+dragObj.elNode.offsetTop;
    
  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(startLeft, 10);
  dragObj.elStartTop   = parseInt(startTop,  10);
  
  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

  // Update element's z-index.
  dragObj.elNode.style.zIndex = parseInt(maxPopupZindex)+1;
  //set gobal current highest z-index  
  maxPopupZindex = dragObj.elNode.style.zIndex;
  
  // Capture mousemove and mouseup events on the page.

  if (browser.isIE) {
    document.attachEvent("onmousemove", dragGo);
    document.attachEvent("onmouseup",   dragStop);
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS) {
    document.addEventListener("mousemove", dragGo,   true);
    document.addEventListener("mouseup",   dragStop, true);
    event.preventDefault();
  }
}
function dragGo(event) {

  var x, y;

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Move drag element by the same amount the cursor has moved.

  dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
  dragObj.elNode.style.top  = (dragObj.elStartTop  + y - dragObj.cursorStartY) + "px";

  if (browser.isIE) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS)
    event.preventDefault();
}

function dragStop(event) {

  // Stop capturing mousemove and mouseup events.

  if (browser.isIE) {
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseup",   dragStop);
  }
  if (browser.isNS) {
    document.removeEventListener("mousemove", dragGo,   true);
    document.removeEventListener("mouseup",   dragStop, true);
  }
}


function setDecimal(decimalplaces,theID)
{
	var dPlaces = decimalplaces;
	var currentValue = document.getElementById(theID).value;
	if (currentValue == "")
		currentValue = 0;
	var i = 0;
	var newValue;
	
	positionOfDecimal = searchfordemicalchar(currentValue);	
	
	newValue = currentValue;
	
	if (positionOfDecimal == -1)
	{
		newValue = newValue+'.';
		for (i = 1; i <= dPlaces; i++)
		{
			newValue = newValue+'0';
		}
		document.getElementById(theID).value = newValue;		
		}
	else
	{
		theLength = newValue.length;  
		result = theLength - positionOfDecimal - 1;
		numOfZerosToAdd = decimalplaces - result;
		if (result > dPlaces)
		{
			positionOfDecimal += 1;
			
			newValue = currentValue.substring(0,positionOfDecimal);	
	
			newDPlaces = parseInt(dPlaces);
			newPositionOfDecimal = parseInt(positionOfDecimal);
	
			newIndex = newDPlaces+newPositionOfDecimal;
	
			newValue += currentValue.substring(positionOfDecimal,newIndex);	
		}
		else
		{
			for (i = 1; i <= numOfZerosToAdd; i++)
			{
			newValue = newValue+'0';
			}
		}
		document.getElementById(theID).value = newValue;		
	}
}


function searchfordemicalchar(theValue)
{
	if(theValue == "")
		return;
	var value;
	var decimalPosition;

	value = theValue;	
	theIndex = value.indexOf('.');
	
	decimalPosition = theIndex;  	

	return decimalPosition;
}
	

function addZero(vNumber)
{ 
	return ((vNumber < 10) ? '0' : '') + vNumber; 
} 
	
function dateautocomplete(format, symbol, theID)
{
	theValue = document.getElementById(theID).value; 
 	theLength = theValue.length; 	
 	var theDate = new Date();	
 		
 	if (theLength == 2 & format.substring(0,2) == 'dd')
 	{
 		if (theValue.substring(0,2) >= 1 & theValue.substring(0,2) <= 31)
 		{
 			presumedInput = 'day';
 			var dayValue = theValue.substring(0,2);
 			var monthValue = addZero(theDate.getMonth()+1); 
 			var yearValue = addZero(theDate.getFullYear()); 
 		}
 		else
 		{	
 			alert('The value ' + theValue.substring(0,2) + ' is not valid with the date format you entered ' + format);
 		} 				
 	}
 	else if (theLength == 2 & format.substring(0,2) == 'MM')
 	{
 		if(theValue.substring(0,2) >= 1 & theValue.substring(0,2) <= 12)
 		{
 			presumedInput = 'month';	
 			var dayValue = addZero(theDate.getDate()); 
 			var monthValue = theValue.substring(0,2);
 			var yearValue = addZero(theDate.getFullYear());
 		}
 		else
 		{
 			alert('The value ' + theValue.substring(0,2) + ' is not valid with the date format you entered ' + format);
 		}
 	}
 	else if ((theLength == 4) & (format.substring(0,4) == 'ddMM' | format.substring(0,4) == 'MMdd'))
 	{
 		if (format.substring(0,2) == 'dd' & format.substring(2,4) == 'MM')
 		{	
 			if (theValue.substring(0,2) >= 1 & theValue.substring(0,2) <= 31)
 			{
 				if (theValue.substring(2,4) >= 1 & theValue.substring(2,4) <= 12)
				{
 					presumedInput = 'day'+'month';
 					var dayValue = theValue.substring(0,2);
 					var monthValue = theValue.substring(2,4);
					var yearValue = theDate.getFullYear(); 
				}
				else
				{	
					alert('The value ' + theValue.substring(0,2) + ' is not valid with the date format you entered ' + format);
				}
			}
			else
			{	
				alert('The value ' + theValue.substring(0,2) + ' is not valid with the date format you entered ' + format);
			}
		}
		else if (format.substring(0,2) == 'MM' & format.substring(2,4) == 'dd')
		{
			if (theValue.substring(0,2) >= 1 & theValue.substring(0,2) <= 12)
			{
				if (theValue.substring(2,4) >= 1 & theValue.substring(2,4) <= 31)
				{
					presumedInput = 'month'+'day';
					var monthValue = theValue.substring(0,2);
					var dayValue= theValue.substring(2,4);
					var yearValue = theDate.getFullYear(); 
				}
				else
				{	
					alert('The value ' + theValue.substring(0,2) + ' is not valid with the date format you entered ' + format);
				}
			}
			else
 			{	
 				alert('The value ' + theValue.substring(0,2) + ' is not valid with the date format you entered ' + format);
 			}
	 	}
  	 } 
 	 else if (theLength == 4 & format.substring(0,4) == 'yyyy')
 	 { 					
		if (theValue < 1970)
 		{
 			document.getElementById(theID).value = '';
 			alert('Pre 1970-01-01 dates are not valid.  Using TODAYS date instead');
 			var dayValue = addZero(theDate.getDate()); 
 			var monthValue = addZero(theDate.getMonth()+1); 
 			var yearValue = theDate.getFullYear(); 
 		}
 		else
		{
			if (theValue.substring(0,1) == 2 | theValue.substring(0,1) == 1)
			{		
				presumedInput = 'year';
				var dayValue = addZero(theDate.getDate()); 
				var monthValue = addZero(theDate.getMonth()+1); 
				var yearValue = theValue.substring(0,4);
			}
		}
 	 }
 	 else if (theLength == 6 & format.substring(0,4) == 'yyyy')
 	 {
 		if (theValue.substring(0,1) == 2 | theValue.substring(0,1) == 1)
 		{		
 			if (theValue.substring(4,6) >= 1 & theValue.substring(4,6) <= 12)
 			{
 				presumedInput = 'year';
// 				var dayValue = addZero(theDate.getDate()); 
 				var monthValue = theValue.substring(4,6);
 				var yearValue = theValue.substring(0,4);
 			}
 		}
 	 }
 	 else if (theLength == 0)
 	 {
 		var dayValue = addZero(theDate.getDate()); 
 		var monthValue = addZero(theDate.getMonth()+1); 
 		var yearValue = theDate.getFullYear(); 
 	}
 	if (format == 'ddMMyyyy')
 	{
 		
 		autoCompletedDate = dayValue+symbol+monthValue+symbol+yearValue;
 	}
 	else if (format == 'MMddyyyy')
 	{
 		autoCompletedDate = monthValue+symbol+dayValue+symbol+yearValue;
 	}
 	else if (format == 'yyyyMMdd')
 	{
 		autoCompletedDate = yearValue+symbol+monthValue+symbol+dayValue;
 	}
 	if (autoCompletedDate.substring(0,9) != 'undefined')
 	{
 		document.getElementById(theID).value = autoCompletedDate;
 	}
}

function setIndex(ele) 
{
	tagsToProcess = new Array("input","select","textarea");
	currentFocus = '';
	nextFocus = '';
	var nextInputKey = 0;
	var currentInputKey = false;
	var getNextInput = false;
	
	var inputTabindex = new Array();
	var inputDomOrder = new Array();

	for(tag in tagsToProcess)
	{
		var allInputs = document.getElementById('maincontainer').getElementsByTagName(tagsToProcess[tag]);
		keyCounter = 0;
		for(i=0;i < allInputs.length;i++)
		{
			if(!allInputs[i])
				break;
			//build an array of all inputs indexed by the tabindex and an array
			if(allInputs[i].tabIndex && allInputs[i].type != "hidden")
			{
				inputTabindex[allInputs[i].tabIndex] = allInputs[i];
				//build a numerical array of the inputs in dom order
				inputDomOrder[keyCounter] = allInputs[i];
					
				//mark the key for the current element
				if(allInputs[i] == ele && !currentEleKey)
					var currentEleKey = keyCounter;
				keyCounter++;
			}	
		}
	}
	
	//see if next tabindex exists
	if(inputTabindex[parseInt(ele.tabIndex)+1])
	{
		var checkNext = inputTabindex[parseInt(ele.tabIndex)+1];
//		if(checkNext && checkNext.style.display != 'none' && (checkNext.type == 'text' || checkNext.type == 'password' ))
		if(checkNext && checkNext.style.display != 'none')
			nextFocus = inputTabindex[parseInt(ele.tabIndex)+1].id;
	}
	else if(inputDomOrder[parseInt(currentEleKey)+1]) //else see if there is a next input in the dom
	{
		var checkNext = inputDomOrder[parseInt(currentEleKey)+1];
//		if(checkNext && checkNext.style.display != 'none' && (checkNext.type == 'text' || checkNext.type == 'password' ))
		if(checkNext && checkNext.style.display != 'none')
			nextFocus = checkNext.id;
	}
	
	jsfwvars.focus = ele.id;
	jsfwvars.nextfocus = nextFocus;	
	return jsfwvars.nextfocus;
}

var tempX = 0;
var tempY = 0;

function getMouseXY(event) 
{
	tempX = event.clientX;
	tempY = event.clientY;
}

function getMouseX(event)
{
	return event.clientX;	
}

function getMouseY(event)
{
	return event.clientY;	
}


/***********************************************
* The tmware calendar is based on the static 
* Basic Calendar-By Brian Gosselin at 
* http://scriptasylum.com/bgaudiodr/
***********************************************/
function buildCal(theInput,e,yPos,monthPos,y,JSflag)
{
	if(document.getElementById(theInput).disabled == true)
		return;
	xPos = 0;
	yPos = 0;
	
	//get position of input box to position calendar
	var calPosLeft = findPosX(document.getElementById(theInput))
	var calPosTop = findPosY(document.getElementById(theInput))
	//var calPosLeft = document.getElementById(theInput).offsetLeft;
	//var calPosTop = document.getElementById(theInput).offsetTop;
	//Adjust left if too far right.
	if (calPosLeft+120 > document.getElementById('appCont').clientWidth)
		calPosLeft = document.getElementById('appCont').clientWidth - 120;
	//Adjust up if too far down.
	if (calPosTop+210 > document.getElementById('appCont').clientHeight)
		calPosTop = document.getElementById('appCont').clientHeight - 210;
	
	var todaydate=new Date();
	var curmonth=todaydate.getMonth()+1;
	var curyear=todaydate.getFullYear();
	if(y == undefined || y == "")
	{
		var y = curyear;
	}	
	if(monthPos > 0 && monthPos < 13)
		var m = monthPos;
	else
		var m = curmonth;
	var nextM = m+1;
	if(m == 1)
	{
		var prevM = 12;
		var prevY = y-1
	}
	else
	{
		var prevM = m-1;
		var prevY = y;
	}
	if(m == 12)
	{
		var nextY = y+1
		var nextM = 1;
	}
	else
	{
		nextY = y;
	}	
	var cM = "main";
	var cH = "month";
	var cDW = "daysofweek";
	var cD = "days";
	var mn=['January','February','March','April','May','June','July','August','September','October','November','December'];
	var dim=[31,0,31,30,31,30,31,31,30,31,30,31];
	
	var oD = new Date(y, m-1, 1); //DD replaced line to fix date bug when current day is 31st
	oD.od=oD.getDay()+1; //DD replaced line to fix date bug when current day is 31st
	
	var todaydate=new Date() //DD added
	var scanfortoday=(y==todaydate.getFullYear() && m==todaydate.getMonth()+1)? todaydate.getDate() : 0 //DD added
	
	dim[1]=(((oD.getFullYear()%100!=0)&&(oD.getFullYear()%4==0))||(oD.getFullYear()%400==0))?29:28;
	if(!document.getElementById('_cal_'+theInput))
	{
		document.getElementById('calendarContainer').innerHTML += '<div style="position:absolute;visibility:hidden;z-index:30;" id="_cal_'+theInput+'"></div>';
	}
	var t='<div style="z-index:50;position:relative;" class="'+cM+'"><table class="cal_table" cols="7" cellpadding="0" cellspacing="0"><tr align="center" class="'+cH+'">';
	t+='<td style="cursor:pointer" onclick="buildCal(\''+theInput+'\','+xPos+','+yPos+','+prevM+','+prevY+')" colspan="1">&lt;&lt</td>';
	t+='<td colspan="5" align="center">'+mn[m-1]+' - '+y+'</td>';
	t+='<td style="cursor:pointer" onclick="buildCal(\''+theInput+'\','+xPos+','+yPos+','+nextM+','+nextY+')" colspan="1">&gt;&gt</td></tr><tr align="center">';
	for(s=0;s<7;s++)t+='<td class="'+cDW+'">'+"SMTWTFS".substr(s,1)+'</td>';
	t+='</tr><tr align="center">';
	for(i=1;i<=42;i++)
	{
		var actualDay = i-1;
		var x=((i-oD.od>=0)&&(i-oD.od<dim[m-1]))? i-oD.od+1 : '&nbsp;';
		var thisDay = ((i-oD.od>=0)&&(i-oD.od<dim[m-1]))? i-oD.od+1:'';
		var addZero = "";
		var addZeroM = "";
		if(thisDay < 10)
			var addZero = "0";//pad out day
		if(m < 10)			
			var addZeroM = "0";//pad out month
		if (x==scanfortoday) //DD added
		x='<span id="today">'+x+'</span>' //DD added
		t+='<td style="cursor:pointer" onmouseover="this.style.background=\'red\'" onmouseout="this.style.background=\'#ccc\'" ';
		if(thisDay != "" && thisDay != "0")
		{
			if (JSflag == "Y")
			{
				t+="onclick=document.getElementById('_cal_"+theInput+"').style.visibility='hidden';"+theInput+"('"+addZero+thisDay+"-"+addZeroM+m+"-"+y+"') ";
			}
			else
			{
				t+='onclick="document.getElementById(\''+theInput+'\').value = \''+addZero+thisDay+'-'+addZeroM+m+'-'+y+'\'" onmouseup="document.getElementById(\'_cal_'+theInput+'\').style.visibility=\'hidden\';doFocus()"';
			}
		}
		t+= 'class="'+cD+'"><div>'+x+'</div></td>';
		if(((i)%7==0)&&(i<36))t+='</tr><tr align="center">';
	}
	
	t+='</tr><tr><td style="background:#000066;color:white;cursor:pointer" align="center" colspan="7" onclick="buildCal(\''+theInput+'\','+xPos+','+yPos+','+curmonth+','+curyear+')">GO TO TODAY</td></table></div>';
	document.getElementById('_cal_'+theInput).innerHTML = t;
	document.getElementById('_cal_'+theInput).style.position = 'absolute';
	document.getElementById('_cal_'+theInput).style.left = calPosLeft+'px';
	document.getElementById('_cal_'+theInput).style.top = calPosTop+'px';
}

function trimAll(value) 
{
  value = value.replace( /^\s+/g, "" );
  return value.replace( /\s+$/g, "" );
}

function hideNav()
{
	var navbar = document.getElementById('cogwrapper')
	i = 0;
	while(i < navbar.childNodes.length)
	{
		if(navbar.childNodes[i].id && navbar.childNodes[i].id.substr(0,5) == "child")
		{	
			navbar.childNodes[i].style.display = 'none';
		}	
	i++;		
	}	
}

function showNav(ele)
{
	i=0;
	while(i < ele.childNodes.length)
	{
		if(ele.childNodes[i].style)
		{
			ele.childNodes[i].style.display = '';
		}
		i++;		
	}
}

function showDisplay(eleID,type)
{
	if(!type)
		type = 'block'
	if(document.getElementById(eleID))
		document.getElementById(eleID).style.display = type;
}

function hideDisplay(eleID)
{
	if(document.getElementById(eleID))
		document.getElementById(eleID).style.display='none'
}	

function findPosX(obj)
{
	var curleft = 0;
	if(obj.offsetParent)
	{
		while(1) 
		{
			curleft += obj.offsetLeft;
			if(obj.offsetParent.id == "innercontainer")
				break;
			obj = obj.offsetParent;
		}
	}
	else if(obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if(obj.offsetParent)
	{
		while(1) 
		{
			curtop += obj.offsetTop;
			if(obj.offsetParent.id == "innercontainer")
				break;
			obj = obj.offsetParent;
		}
	}
	else if(obj.y)
		curtop += obj.y;
	return curtop;
}

function do_uppercase(ele)
{
	ele.value = ele.value.toUpperCase();	
}

function fakeEvent(param1)
{
	this.type = param1;	
}

function checkboxSelect(checkType,param1,checkCount) 
{
	for (var j = 0; j <= checkCount; j++) 
	{		
		if(document.getElementById(param1+j))
		{
			box = document.getElementById(param1+j); 
			switch(checkType)
			{
				case "checkAll" : 
					if (box.checked == false) 
						box.checked = true;
				break;
				case "uncheckAll" :
					if (box.checked == true) 
						box.checked = false;
				break;
				case "switchAll" :
					box.checked = !box.checked;
				break;
			}
		}
   	}
}

framework.selectCheckboxes = function(checkboxName,checkType)
{
	if(!checkType)
		var checkType = "checkAll";
	var allCheckboxes = document.getElementByName(checkboxName);
	for (f in allCheckboxes)
	{
		switch(checkType)
			{
				case "checkAll" : 
					if (allCheckboxes[f].checked == false) 
						allCheckboxes[f].checked = true;
				break;
				case "uncheckAll" :
					if (allCheckboxes[f].checked == true) 
						allCheckboxes[f].checked = false;
				break;
				case "switchAll" :
					allCheckboxes[f].checked = !allCheckboxes[f].checked;
				break;
			}
	}
	
}

function autoCheck(checkId,event)
{
	var keyPressed = event.keyCode;
    if (keyPressed == 0)
		keyPressed = event.which;
    if (event.ctrlKey)
    {
        event.stopPropagation();
        event.preventDefault();
        document.getElementById(checkId).checked=!document.getElementById(checkId).checked
    }	
}

function clickPopupLine(popupId,inputId,inputValue)
{
	globalScanType = "";
	document.getElementById(inputId).title = '';
	document.getElementById(inputId).value=inputValue;
	document.getElementById(inputId).focus();
	closePopup(popupId);
	if(document.getElementById(jsfwvars.nextfocus))
		document.getElementById(jsfwvars.nextfocus).focus();
	else
		document.getElementById(inputId).blur();
}

function fwAmendField(id,display,method)
{
	if(!display)
		display = '';
	if(method == "reverse")
	{
		action1 = display	
		action2 = "none";
	}
	else
	{
		action1 = "none";
		action2 = display;
	}
	
	if(document.getElementById(id+"_orig"))
	{
		orig_ele = document.getElementById(id+"_orig")
		new_ele = document.getElementById(id+"_cont")
		orig_ele.style.display=action1;
		new_ele.style.display=action2;
		if(method != "reverse")
			new_ele.getElementsByTagName('input')[0].focus();
	}
	if(document.getElementById(id+"_edit"))
	{		
		orig_button = document.getElementById(id+"_edit")
		new_button = document.getElementById(id+"_confirm")
		orig_button.style.display = action1;
		new_button.style.display=action2;
	}
}

function selectValue(fakeSelectElementID, hiddenValueElementID, newvalue, newvalue2) {
			
	document.getElementById(fakeSelectElementID).innerHTML = newvalue2;
	document.getElementById('hiddenDIV').className = 'hiddenDIV';
	document.getElementById('selectedvalue').value = newvalue;
}

currentPopupId = '';

function showPopup(id,type)
{
	if(!type)
		type='block';
	if(popupEle)
		document.getElementById(id).style.zIndex = document.getElementById(popupEle).style.zIndex+1;
	var popupEle = document.getElementById(id);
	popupEle.style.display = type;
	if(document.getElementById('TMPpopupScreenCover'))
	{
		
		document.getElementById('popupScreenCover').style.background = "black";
		document.getElementById('popupScreenCover').style.zIndex = "10";
		document.getElementById('popupScreenCover').style.opacity = "0.5";
		document.getElementById('popupScreenCover').style.MozOpacity = "0.5";
		document.getElementById('popupScreenCover').style.filter = "alpha(opacity=50)";
		document.getElementById('popupScreenCover').style.display = "block";
		//document.getElementById('popupScreenCover').style.height = "100%";
	}
	currentPopupId = id;
	var allAtags = document.getElementById(id).getElementsByTagName('a');
	for(a in allAtags)
		if(allAtags[a] && allAtags[a].name == "focus0")
			allAtags[a].focus();
	var popupInputs = popupEle.getElementsByTagName('input');
	if(popupInputs[0] && popupInputs[0].type == 'text' && popupInputs[0].disabled != true)
		popupInputs[0].focus();
	
	
}

function closePopup(id,type)
{	
	if(!document.getElementById(id))
		return;
	var ele = document.getElementById(id);
			
	if(document.getElementById('popupScreenCover'))
	{
		document.getElementById('popupScreenCover').style.display = "none";
		//document.getElementById('popupScreenCover').style.height = "1px";
	}
	if(document.getElementById(id+'_iframe'))
	{
		eleIfrm = document.getElementById(id+'_iframe');
		eleIfrm.parentNode.removeChild(eleIfrm);
	}
	ele = document.getElementById(id)
	if(type == "hide")
		ele.style.display = 'none';
	else if(ele)
		ele.parentNode.removeChild(ele);	
}

function toggleShow(source,target)
{
	targetEle = document.getElementById(target)
	if(targetEle.style.display == "none")	
	{	
		targetEle.style.display  = "";
		source.innerHTML = "Hide";
	}
	else
	{
		targetEle.style.display  = "none";
		source.innerHTML = "Show";
	}
}

function setUserclose(user)
{
	if (window.XMLHttpRequest)
  		var reqobj = new XMLHttpRequest();
  	else if (window.ActiveXObject)
		var reqobj = new ActiveXObject("Microsoft.XMLHTTP")
	
	reqobj.open("POST","/serverscripts/userclose.php?user="+user,true);
	reqobj.setRequestHeader("Content-Type", "text/xml");
	reqobj.send();	
}

function fwOnenter(theFunc)
{
	eval(theFunc);	
}

function showId(id,interval,type)
{
	if(!type)
		type = "block";
	document.getElementById(id).style.display = type;
}

function hideId(id,interval)
{
	if(typeof(interval) == "number")
		return setTimeout("document.getElementById('"+id+"').style.display = 'none';",interval);
	else
		document.getElementById(id).style.display = 'none';
}

function show_topmenu_dropdown(dropdown_num)
{
	var dropdown_id = "topmenu_tab_dropdown"+dropdown_num;
	showId(dropdown_id)
}

function highlightRow(ele,origCol)
{
	if(!origCol)
		var lineCol = hovercol;
	else
		var lineCol = origCol;

	//find parent row
	var nextParent = ele.parentNode;
	var backupCounter = 0;
	while(nextParent)
	{
		if(nextParent.tagName == "tr" || nextParent.tagName == "TR")
		{
			nextParent.style.background = lineCol;
			break;
		}
		nextParent = nextParent.parentNode;
		backupCounter++;
		if(backupCounter > 50)
			break;
	}
	//assign onclick value to the a tag
	if(nextParent.onclick)
		ele.onclick = nextParent.onclick;
}

function hoverHlight(ele)
{
	
}

function ommitChars(myfield, e, type)
{
	var targetEle = e.target;
	if(e.srcElement != undefined)
		var targetEle = e.srcElement;
		
	//e.target.style.background = 'white';
		
	var key;
	var keychar;
	if (type == "numeric" || type == "time")
		var charRange = '0123456789.';
	else if(type == "alpha")
		var charRange = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.';
	else if(type == "alphabetic")
		var charRange = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_0123456789';
	if (window.event && window.event.keyCode)
		key = window.event.keyCode;
	else if (e)
		key = e.which;
	else
		return true;

	
	var keychar = String.fromCharCode(key);
	if ((key==13) || (key==8) || (key==null) || (key==0) ||  (key==9) || (key==27) || (key==32) || (key==40) || (key==38))
	{
		if((type == "numeric" || type == "time") && (keychar != "&" && keychar != "&"))
			return true;		
	}
	if((type == "numeric" || type == "time") && ((key > 47 && key < 58) || (key > 95 && key < 106) || key == 46 || key == 110))
	{
		return true;		
	}
	else if (((charRange).indexOf(keychar) > -1))
	{
		if (type == "time")
		{
			if(myfield.value.length == 2 && myfield.value > 23)
			{
				myfield.value = "";
				return false;
			}
			else if(myfield.value.length == 3 && myfield.value.charAt(2) > 5)
			{
				myfield.value = "";
				return false;
			}
			else if(myfield.value.length == 4 && myfield.value > 2359)
			{
				myfield.value = "";
				return false;
			}
			else
				return true;
		}
		else
			return true;
	}
	else
	{
		targetEle.style.background = 'pink';
		return false;		
	}
}

function timeInput(myfield, e)
{
	var targetEle = e.target;
	if(e.srcElement != undefined)
		var targetEle = e.srcElement;
		
	//e.target.style.background = 'white';
		
	var key;
	var keychar;
	
	var charRange = '0123456789';
	if (window.event && window.event.keyCode)
		key = window.event.keyCode;
	else if (e)
		key = e.which;
	else
		return true;			
	
	var keychar = String.fromCharCode(key);
	if ((key==13) || (key==8) || (key==null) || (key==0) ||  (key==9) || (key==27) || (key==40) || (key==38))
		return true;	
	if (((charRange).indexOf(keychar) > -1))
	{
		return true;
	}
	else
	{
		targetEle.style.background = 'pink';
		return false;		
	}
}

function checkTimeInput(id)
{
	var valid = true;
	var time = document.getElementById(id).value;
	if(time.length < 2)
	{
		document.getElementById(id).style.background = 'pink';
		document.getElementById(id).value = '';
		return;
	}
		
	var timeMins = parseInt(time.substr(time.length-2,2));
	var timeMins2 = parseInt(time.substr(time.length-1,1));
	var timeHr1 = parseInt(time.substr(time.length-3,1));
	var timeHr2 = parseInt(time.substr(time.length-4,1));
	var timeHr3 = parseInt(time.substr(0,2));
	if(time.length == 4)
	{
		if(timeHr2 > 2 || (timeHr2 == 2 && timeHr1 > 3) || timeMins > 59)
			valid = false;
	}	
	if(time.length == 3)
	{
		if(timeHr1 < 24 && timeMins < 60)
			document.getElementById(id).value = '0'+time;
		else if(timeHr1 < 24 && timeMins < 60)
			valid = true
		else
			valid = false;
	}	
	if(time.length == 2)
	{
		if(timeMins < 24)
			document.getElementById(id).value = time+'00';
		else
			valid = false;
	}
	
	if (valid == false)
	{
		document.getElementById(id).style.background = 'pink';
		document.getElementById(id).value = '';
		return false;
	}	
	return true;
	
}


/**
*
* Secure Hash Algorithm (SHA1)
*
**/

function SHA1 (msg) 
{

    function rotate_left(n,s) {
        var t4 = ( n<<s ) | (n>>>(32-s));
        return t4;
    };

    function lsb_hex(val) {
        var str="";
        var i;
        var vh;
        var vl;

        for( i=0; i<=6; i+=2 ) {
            vh = (val>>>(i*4+4))&0x0f;
            vl = (val>>>(i*4))&0x0f;
            str += vh.toString(16) + vl.toString(16);
        }
        return str;
    };

    function cvt_hex(val) {
        var str="";
        var i;
        var v;

        for( i=7; i>=0; i-- ) {
            v = (val>>>(i*4))&0x0f;
            str += v.toString(16);
        }
        return str;
    };


    function Utf8Encode(string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    };

    var blockstart;
    var i, j;
    var W = new Array(80);
    var H0 = 0x67452301;
    var H1 = 0xEFCDAB89;
    var H2 = 0x98BADCFE;
    var H3 = 0x10325476;
    var H4 = 0xC3D2E1F0;
    var A, B, C, D, E;
    var temp;

    msg = Utf8Encode(msg);

    var msg_len = msg.length;

    var word_array = new Array();
    for( i=0; i<msg_len-3; i+=4 ) {
        j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 |
        msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3);
        word_array.push( j );
    }

    switch( msg_len % 4 ) {
        case 0:
            i = 0x080000000;
        break;
        case 1:
            i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000;
        break;

        case 2:
            i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16 | 0x08000;
        break;

        case 3:
            i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16 | msg.charCodeAt(msg_len-1)<<8    | 0x80;
        break;
    }

    word_array.push( i );

    while( (word_array.length % 16) != 14 ) word_array.push( 0 );

    word_array.push( msg_len>>>29 );
    word_array.push( (msg_len<<3)&0x0ffffffff );


    for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) {

        for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i];
        for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);

        A = H0;
        B = H1;
        C = H2;
        D = H3;
        E = H4;

        for( i= 0; i<=19; i++ ) {
            temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        for( i=20; i<=39; i++ ) {
            temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        for( i=40; i<=59; i++ ) {
            temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        for( i=60; i<=79; i++ ) {
            temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        H0 = (H0 + A) & 0x0ffffffff;
        H1 = (H1 + B) & 0x0ffffffff;
        H2 = (H2 + C) & 0x0ffffffff;
        H3 = (H3 + D) & 0x0ffffffff;
        H4 = (H4 + E) & 0x0ffffffff;

    }

    var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);

    return temp.toLowerCase();

}

function listScroll(event,rowNum,eleRef)
{
	var keyPressed = event.keyCode;
	if (keyPressed == 0)
		keyPressed = event.which;

	if(keyPressed == "38" || keyPressed == "40")
	{
		if(event.stopPropagation)
			event.stopPropagation();
		if(event.preventDefault)
			event.preventDefault();
		event.returnValue=false;
		event.cancelBubble=true;
	}		
		
	if(keyPressed == "38")
	{
		var prevLinNum = parseInt(rowNum)-1;
		if(prevLinNum < "0")
		{
			var findLast = 0;
			while(document.getElementById(eleRef+"_"+findLast))
			{
				var findLast = findLast+1;
				if(findLast >3000)
					break;
			}
			lastRowNum = findLast-1;
			if(document.getElementById(eleRef+"_"+lastRowNum))
				document.getElementById(eleRef+"_"+lastRowNum).focus();
		}
		else if(document.getElementById(eleRef+"_"+prevLinNum))
			document.getElementById(eleRef+"_"+prevLinNum).focus();
	}
	
	if(keyPressed == "40")
	{
		var nextLineNum = parseInt(rowNum)+1;
		if(document.getElementById(eleRef+"_"+nextLineNum))
			document.getElementById(eleRef+"_"+nextLineNum).focus();
		else
			document.getElementById(eleRef+"_0").focus();	
	}
	
	return;
	
	
	var getParent = true;
	var currentNode = ele;
	while(getParent)
	{
		currentNode = currentNode.parentNode;			
		if(currentNode.parentNode.tagName == "tr" || currentNode.parentNode.tagName == "TR")
		{
			currentTr =	currentNode.parentNode;
		}
		if(currentNode.parentNode.tagName == "table" || currentNode.parentNode.tagName == "TABLE")
		{
			var allScanRows = currentNode.parentNode.getElementsByTagName('tr');
			break;
		}
	}	
	
	var focusTr = "";
	
	for(row in allScanRows)
	{
		if(allScanRows[row] == currentTr)
		{
			if(keyPressed == "38")

			{
				if(allScanRows[prevRow])
					focusTr = allScanRows[prevRow];
				else if(allScanRows[allScanRows.length-1])
					focusTr = allScanRows[allScanRows.length-1];
			}
			if(keyPressed == "40")
			{
				if(allScanRows[parseInt(row)+1])
					focusTr = allScanRows[parseInt(row)+1];
				else if(allScanRows[0])
					focusTr = allScanRows[0];
			}
			break;
		}
		var prevRow = row;		
	}
	var allAtags = focusTr.getElementsByTagName('a');
	allAtags[0].focus();
}

function detatchApp()
{
	fwExec('detatch');
}


function fadeIn(fadeEle,expire)
{
	var fadeEleObj = document.getElementById(fadeEle);
	
	fadeEleObj.style.opacity = "0.0";
	fadeEleObj.style.MozOpacity = "0";
	fadeEleObj.style.filter = "alpha(opacity=0)";
	fadeEleObj.style.display = "";
	
	fadeEleObj.opac = 0;
	fadeEleObj.intervalEvent = window.clearInterval(fadeEleObj.intervalEvent);
	fadeEleObj.intervalEvent = "";
	fadeEleObj.intervalEvent = setInterval("changeOpac('"+fadeEle+"','in',"+expire+")",100);
}

function fadeOut(fadeEle)
{
	if(document.getElementById(fadeEle).style.display == 'none')
		document.getElementById(fadeEle).style.display = ''
	document.getElementById(fadeEle).opac = 9;
	document.getElementById(fadeEle).intervalEvent = setInterval("changeOpac('"+fadeEle+"','out')",100);
}

function changeOpac(opacId,direction,expire)
{
	var opacEle = document.getElementById(opacId);
	var currentOpac = opacEle.opac;
	
	if(opacEle.style.opacity)
		opacEle.style.opacity = "0."+currentOpac;
	if(opacEle.style.MozOpacity)
		opacEle.style.MozOpacity = '"'+currentOpac+'"';
	if(opacEle.style.filter)
		opacEle.style.filter  = "alpha(opacity="+currentOpac+"0)";

	if(direction == "in")
	{		
		if(opacEle.opac == 9)
		{
			opacEle.intervalEvent = window.clearInterval(opacEle.intervalEvent);
			opacEle.intervalEvent = "";
			expire = expire+0;
			if(expire > 0)
				opacEle.fadeOutEvent = setTimeout("fadeOut('"+opacId+"')",expire);
		}
		else
			opacEle.opac = currentOpac+1;		
	}
	if(direction == "out")
	{
		if(opacEle.opac == 0)
		{
			opacEle.intervalEvent = window.clearInterval(opacEle.intervalEvent);
			opacEle.opac = currentOpac+1
			opacEle.style.display = 'none';
		}
		else
		{
			opacEle.opac = currentOpac-1;
			//opacEle.parentNode.removeChild(opacEle);
		}
	}
		 
}

function removeEle(removeId)
{
	document.getElementById(removeId).parentNode.removeChild(document.getElementById(removeId));
}

document.onkeydown = setKeyPress;
document.onkeyup = cancelSetKeyPress;
var fwKeyPressed = '';
function setKeyPress(e)
{
   var KeyID = (window.event) ? event.keyCode : e.keyCode;
   switch(KeyID)
   {
      case 16:fwKeyPressed = "shift";break; 

      case 17:fwKeyPressed = "ctrl";break;

      case 18:fwKeyPressed = "alt";break;

      case 19:fwKeyPressed = "pause";break;

      case 37:fwKeyPressed = "arrowleft";break;

      case 38:fwKeyPressed = "arrowup"; break;

      case 39:fwKeyPressed = "arrowright"; break;

      case 40: fwKeyPressed = "arrowdown"; break;
   }
	framework.fwKeyPressed = fwKeyPressed;
}

function cancelSetKeyPress(e)
{
	fwKeyPressed = '';
	framework.fwKeyPressed = fwKeyPressed;
}


startCheckbox = '';
function ctrlSelect(commonName,rowNum)
{	
	if(startCheckbox == parseInt(rowNum))
	{
		return;
	}
	
	if(fwKeyPressed != "ctrl")
	{
		startCheckbox = "";
		return;
	}
	
	if(startCheckbox == "" && fwKeyPressed == "ctrl")
	{
		startCheckbox = parseInt(rowNum);
		return;
	}
	
	if (fwKeyPressed == "ctrl" && startCheckbox != "")
    {	
		var counter = parseInt(rowNum);
		if(counter > startCheckbox)
		{
			while (counter >= startCheckbox)
			{	
				if(document.getElementById(commonName+counter))
					document.getElementById(commonName+counter).checked = true;
				counter = counter-1;
			}
			startCheckbox = '';
		}
		else if(counter < startCheckbox)
		{
			while (counter <= startCheckbox)
			{	
				if(document.getElementById(commonName+counter))
					document.getElementById(commonName+counter).checked = true;
				counter = counter+1;
			}
			startCheckbox = '';
		}
    }
}

function inputMaxLength(obj,chars)
{
	if(obj.value.length >= chars)
		obj.value = obj.value.substr(0,chars-1)
	
}


fwselector = new Object();
fwselector.addrow = function(ele,listname,value,e)
{	
	if(e.target)
	{	
		var targetType = e.target.type;
		var target = e.target;
	}
	if(e.srcElement != undefined)
	{
		var targetType = e.srcElement.type;
		var target = e.srcElement;
	}
	if(targetType == "text" || targetType == "select-one" || targetType == "select")
		return;
	if(target.tagName != "TR" && target.tagName != "tr" && target.tagName != "td" && target.tagName != "TD")
		return;
		
	if(!jsfwvars[listname])
	jsfwvars[listname] = new Array;

	var currRow;
	if(framework.fwKeyPressed == "shift" && (fwselector.firstclick != "" || fwselector.firstclick === 0))
	{
		var commonName = '';
		split = ele.id.split("_");
		currRow = split[split.length-1];
		currRow = parseInt(currRow);
		var count = 0;
		while(count <= split.length-2)
		{
			commonName += split[count]+"_";
			count++;
		}
		commonName = commonName.substr(0,commonName.length-1);
	}
	
	if(currRow < fwselector.firstclick || currRow > fwselector.firstclick)
	{
		if(currRow < fwselector.firstclick)
		{
			var start = currRow;
			var end = fwselector.firstclick;
		}
		else
		{
			var start = fwselector.firstclick;
			var end = currRow;
		}
		while (start <= end)
		{
			loopEle = document.getElementById(commonName+"_"+start);
			jsfwvars[listname][commonName+"_"+start] = value;
			loopEle.style.backgroundColor = 'lime';
			loopEle.title = "selected";
			start++;
		}
		fwselector.firstclick = false;
	}
	else
	{
		if(!jsfwvars[listname][ele.id])
		{
			jsfwvars[listname][ele.id] = value;
			ele.style.backgroundColor = 'lime';
			ele.title = "selected";
		}
		else
		{
			delete jsfwvars[listname][ele.id];
			ele.style.backgroundColor = ele.bgColor;
			ele.title = "";
		}
	}
	
	if(!fwselector.firstclick || framework.fwKeyPressed != "shift")
	{
		var commonName = '';
		split = ele.id.split("_");
		currRow = split[split.length-1];
		currRow = parseInt(currRow);
		fwselector.firstclick = currRow;
	}
}

fwselector.changerow = function(ele,listname,value,e)
{	
	if(e.target)
	{	
		var targetType = e.target.type;
		var target = e.target;
	}
	if(e.srcElement != undefined)
	{
		var targetType = e.srcElement.type;
		var target = e.srcElement;
	}
	if(targetType == "text" || targetType == "select-one" || targetType == "select")
		return;
	if(target.tagName != "TR" && target.tagName != "tr" && target.tagName != "td" && target.tagName != "TD")
		return;
			
	if(!jsfwvars[listname])
	{
		jsfwvars[listname] = new Array;
		jsfwvars[listname][ele.id] = value;
		ele.style.backgroundColor = 'lime';
		ele.title = "selected";
		
	}
	else
	{
		for (f in jsfwvars[listname])
		{
			oldele = document.getElementById(f);
			oldele.style.backgroundColor = oldele.bgColor;
			oldele.title = "";		
		}
		delete jsfwvars[listname];
		
		jsfwvars[listname] = new Array;
		jsfwvars[listname][ele.id] = value;
		ele.style.backgroundColor = 'lime';
		ele.title = "selected";
	}
	
}

framework.checkmessages = function()
{
	fwExecAjax('FW_system_cmd','get_tmmsgm','panel_messgaes');
}

