
function trim(value) 
{
   var temp = value;
   var obj = /^(\s*)([\W\w]*)(\b\s*$)/;
   if (obj.test(temp)) 
   { 
		temp = temp.replace(obj, '$2'); 
	}
   var obj = /  /g;
   while (temp.match(obj)) { temp = temp.replace(obj, " "); }
   if (temp.length == 1 && temp == " ")
   {
		temp="";
   }
   
   return temp;
}

function setfocus(name)
{
	try
	{
		var obj = new getObj(name).obj;
		obj.focus();
	}
	catch(e)
	{
	}
}

function setfocusandselect(name)
{
	try
	{
		var obj = new getObj(name).obj;
		obj.focus();
		obj.select();
	}
	catch(e)
	{
	}
}


var userAgent = window.navigator.userAgent;

//@ determine if this is internet explorer
var isIE =	(userAgent.indexOf("compatible")>-1 &&
			userAgent.indexOf("MSIE") > -1);

//@ determine if this is firefox
var isFireFox = (userAgent.indexOf("Gecko")>-1 && userAgent.indexOf("Firefox")>-1);

//@ determin if this in Netscape
var isNS = (userAgent.indexOf("Mozilla")>-1 && navigator.appName == "Netscape" );

var browserVersion = 0.0;

//@ grab the version if this is IE
var isMinIE4 = isMinIE5 = isMinIE5_5 = isMinIE6=false;
if ( isIE )
{
	var regExpIE = new RegExp("MSIE (\\d+\\.\\d+);");
	regExpIE.test(userAgent);
	try
	{
		browserVersion = parseFloat(RegExp["$1"]);
	}
	catch(e)
	{
		browserVersion = 0.0;
	}
	
	isMinIE4 = browserVersion >= 4;
	isMinIE5 = browserVersion >= 5;
	isMinIE5_5 = browserVersion >= 5.5;
	isMinIE6 = browserVersion >= 6.0;
}
//@ grab the version if this is Firefox
var isMinFF1 = false;
if ( isFireFox )
{
	var regExpFF = new RegExp("Firefox/(\\d+\\.\\d+)");
	regExpFF.test(userAgent);
	try
	{
		browserVersion = parseFloat(RegExp["$1"]);
	}
	catch(e)
	{
		browserVersion = 0.0;
	}
	
	isMinFF1 = browserVersion >= 1.0;
}

//@ grab the version if this is NetScape
var isMinNS4 = isMinNS4_5 = isMinNS4_7 = isMinNS4_8 = false;
if ( isNS && !isIE && !isFireFox )
{	
	try
	{
		browserVersion = parseFloat(navigator.appVersion);
	}
	catch(e)
	{
		browserVersion = 0.0;
	}
	
	isMinNS4 = browserVersion >= 4;
	isMinNS4_5 = browserVersion >= 4.5;
	isMinNS4_7 = browserVersion >= 4.7;
	isMinNS4_8 = browserVersion >= 4.8;
}

//@ disable display functions @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
var gVeilOverlay;
var gVeilDiv;
var Disable__doPostback;
var gDispayDisabled = false;

function DisableDisplay (zIndex, veilCSS)
{
	if ( Disable__doPostback )
	{
		gDispayDisabled=true;
	}
	else if(typeof(__doPostBack)=="function")
	{
		Disable__doPostback=__doPostBack;
		__doPostBack=function(v1,v2){Disable__doPostback(v1,v2);gDispayDisabled=true;};
	}

	if ( zIndex == null )
		zIndex = 0;
		
	if ( veilCSS == null )
		veilCSS = "Veil";

	if ( typeof(gVeilDiv) == "undefined" )
		gVeilDiv = document.createElement('div');
	if ( typeof(gVeilOverlay) == "undefined" )
	    gVeilOverlay = document.createElement('iframe');

	gVeilDiv.innerHTML = "&nbsp;";
	
    if ( gVeilDiv.style.display != null )
    {
		gVeilDiv.style.display ="block";
    }
    else
    {
		gVeilDiv.style.setAttribute("display","block");
    }

	if ( gVeilDiv.style.zIndex != null )
		gVeilDiv.style.zIndex = zIndex;
	else
		gVeilDiv.style.setAttribute("z-index",zIndex);


 	if ( gVeilOverlay.document != null )
	{
		gVeilOverlay.className = veilCSS;
		gVeilOverlay.setAttribute("src","javascript:''");
		
		
		if ( gVeilOverlay.style.zIndex != null )
			gVeilOverlay.style.zIndex = zIndex;
		else
			gVeilOverlay.style.setAttribute("z-index",zIndex);
			
		document.body.appendChild(gVeilOverlay);

		gVeilOverlay.document.body.appendChild(gVeilDiv);
		gVeilOverlay.style.setAttribute("display","block");

		gVeilDiv.className = veilCSS;
	}		
	else
	{
		gVeilDiv.className = veilCSS;
		document.body.appendChild(gVeilDiv);
	}
	
	setVeilWidth();

	addEventHandler(window, "resize", setVeilWidth);
	addEventHandler(window, "unload", clearVeil);
}

function setVeilWidth ()
{	
	if ( isIE && gVeilOverlay != null )
	{
		gVeilOverlay.style.setAttribute("width",document.body.scrollWidth);
		gVeilOverlay.style.setAttribute("height",document.body.scrollHeight);
    }

	if ( gVeilDiv != null )
	{
		if ( gVeilDiv.style.setAttribute )
		{
			gVeilDiv.style.setAttribute("width",document.body.scrollWidth);
			gVeilDiv.style.setAttribute("height",document.body.scrollHeight);
		}
		else
		{
			gVeilDiv.style.width = document.body.scrollWidth;
			gVeilDiv.style.height = document.body.scrollHeight;
		}
    }
}

function clearVeil ()
{
	
	if ( gVeilOverlay != null )
	{
		gVeilOverlay.style.display="none";
	}
	if ( gVeilDiv != null )
	{
		gVeilDiv.style.display="none";
	}
	
	removeEventHandler(window, "resize", setVeilWidth);
	removeEventHandler(window, "unload", clearVeil);
	
	if ( gDispayDisabled != true )
	{
		gDispayDisabled = false;
	}

}

//@ modal dialog functions @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
var gModalDialog;
function createModalDialog( divToShow, parent, position, veilcss )
{	
	var divSource = new getObj(divToShow).obj;
	var parentObj = new getObj(parent).obj;
	var alignment = new Array();
	
	try
	{
		if ( typeof(veilcss)=="undefined" )
		{
			veilcss = "Veil";
		}

		gModalDialog = divSource;
		
		divSource.style.top = 0;
		divSource.style.left = 0;

		divSource.style.zIndex = 1001;
		divSource.style.position = "absolute";
		divSource.style.display = "Block";
		
		DisableDisplay (1000, veilcss)
		
		//@ parse the alignment
		if ( typeof(position)!="undefined" && position.length > 0 )
		{
			alignment = position.split(",");
		}
		
		//@ if not all of the alignment was specified defaut to center screen
		if ( alignment.length<2 )
		{
			alignment = ["center-left","center-top"];
		}
		
		//@ position the dialog
		if ( alignment[0].toLowerCase() == "center-left" )
		{
			divSource.style.left = getDlgPosOffset(divSource,alignment[0]);	
		}
		else
		{
			divSource.style.left = getDlgPosOffset(parentObj,alignment[0]);		
		}
		if ( alignment[1].toLowerCase() == "center-top" )
		{
			setDialogVPos();
			if (isIE)
			{
				addEventHandler(window, "scroll", setDialogVPos);
				divSource.intervalTimer = setInterval(setDialogVPos,500);
			}
			else
			{
				divSource.intervalTimer = setInterval(setDialogVPos,500);
			}
		}
		else
		{
			divSource.style.top = getDlgPosOffset(parentObj,alignment[1]);	
		}
	}
	catch(e)
	{
		alert("Could not show dialog '"+divToShow+"'.");
	}
}

function setDialogVPos ( )
{
	if ( gModalDialog != null )
	{
		gModalDialog.style.top = getDlgPosOffset(gModalDialog,"center-top",false);
	}
}

function HideDlg ()
{
	//var divSource = new getObj(divToShow).obj;
	gModalDialog.style.display="none";
	clearVeil();
	if(gModalDialog.intervalTimer)
	{
		clearInterval(gModalDialog.intervalTimer);
		gModalDialog.intervalTimer = null;
	}
	removeEventHandler( window, "scroll", setDialogVPos );
	
	gModalDialog = null;
}

function getDlgPosOffset(what, offsettype, recursive)
{
	if ( typeof(recursive)=="undefined" )
	{
		recursive = false;
	}
	
	offsettype = offsettype.toLowerCase();
	var offset = 0;
	switch(offsettype)
	{
		case "left":
			offset = ((what.offsetParent!=null)?getposOffset(what.offsetParent,offsettype,true):0)+what.offsetLeft;
			break;
		case "top":
			offset = ((what.offsetParent!=null)?getposOffset(what.offsetParent,offsettype,true):0)+what.offsetTop;
			break;
		case "right":
			offset = ((what.offsetParent!=null)?getposOffset(what.offsetParent,offsettype,true):0)+what.offsetLeft;
			if ( recursive != true )
			{
				offset += what.offsetWidth;
			}
			break;
		case "bottom":
			offset = ((what.offsetParent!=null)?getposOffset(what.offsetParent,offsettype,true):0)+what.offsetTop;
			if ( recursive != true )
			{
				offset += what.offsetHeight;
			}
			break;
		case "center-left":
			offset = Math.round((document.body.offsetWidth-what.offsetWidth)/2)
			break;
		case "center-top":
			var pos = 0;
			var bodyHeight = 0;
			if (window.innerHeight)
			{
				pos = window.pageYOffset;
				bodyHeight = window.innerHeight;
			}
			else if (document.documentElement && document.documentElement.scrollTop)
			{
				pos = document.documentElement.scrollTop;
				bodyHeight = document.body.offsetHeight;
			}
			else if (document.body)
			{
				pos = document.body.scrollTop;
				bodyHeight = document.body.offsetHeight;
			}
			
			//alert("BOH: "+document.body.offsetHeight);

			offset = Math.round(((bodyHeight-what.offsetHeight)/2)+pos);
			break;
	}

	return offset;
}

//@ utility functions @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
function getObj(name)
{
  if (document.getElementById)
  {
  	this.obj = document.getElementById(name);
  	if ( this.obj )
		this.style = document.getElementById(name).style;
  }
  else if (document.all)
  {
	this.obj = document.all[name];
  	if ( this.obj )
		this.style = document.all[name].style;
  }
  else if (document.layers)
  {
   	this.obj = document.layers[name];
  	if ( this.obj )
	   	this.style = document.layers[name];
  }
}

function addEventHandler ( oTarget, sEventType, fnHandler )
{
	if ( oTarget.addEventListener )
	{									// for DOM compliant
		oTarget.addEventListener ( sEventType, fnHandler, false );
	}
	else if ( oTarget.attachEvent )
	{									// for IE
		oTarget.attachEvent( "on" + sEventType, fnHandler );
	}
	else
	{									// for all others
		oTarget["on"+sEventType] = fnHandler;
	}
}

function removeEventHandler( oTarget, sEventType, fnHandler )
{
	if ( oTarget.removeEventListener )
	{									// for DOM compliant
		oTarget.removeEventListener ( sEventType, fnHandler, false );
	}
	else if ( oTarget.detachEvent )
	{									// for IE
		oTarget.detachEvent( "on" + sEventType, fnHandler );
	}
	else
	{									// for all others
		oTarget["on"+sEventType] = null;
	}	
}

function getEventTarget()
{
	var e = event || window.event;
	var tgt = e.target || e.srcElement;	
	
	return tgt;
}

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


function setField(eventTarget, eventArgument)
{
	var target = new getObj (eventTarget.split("$").join("_"));
	target.obj.value = eventArgument;
}

function appendField(eventTarget, eventArgument)
{
	var target = new getObj (eventTarget);
	target.obj.value = target.obj.value + "x";
}

function removeCheck(target)
{
	var targetObj = new getObj (target);
	targetObj.obj.checked = false;
}

function setAndClick(eventTarget, eventArgument, buttonTarget)
{
	if (typeof(DMI_ValidatePage)=="function")
	{
		if (DMI_ValidatePage(true, true) == false)
		{
			return;
		}
	}

	var target = new getObj (eventTarget);
	target.obj.value = eventArgument;
	var btn = new getObj (buttonTarget);
	try
	{
		btn.obj.click();
	}
	catch (e) {}
	//eval(btn.getAttribute("onclick"));
}

function toggleView(name)
{
	var allCtrls = name.split(",");
	var index;
	for (index = 0; index < allCtrls.length; index++)
	{
		var ctrl = new getObj(allCtrls[index]);
		
		if (ctrl.obj.style.display == "none")
		{
			ctrl.obj.style.display = "block";
		}
		else
		{
			ctrl.obj.style.display = "none";
		}
	}
}

function toggleViewOnCheck(source,target,makeDisappear)
{
	var allCtrls = target.split(",");
	var srcObj = new getObj(source);
	var srcEnabled = srcObj.obj.checked;
	var index;	
	var howToDisplay;
	
	if (srcEnabled)
	{
		howToDisplay = "";
	}
	else
	{
		howToDisplay = "none";
	}
	
	for (index = 0; index < allCtrls.length; index++)
	{
		var ctrl = new getObj(allCtrls[index]);
		if (makeDisappear == "1")
		{
			ctrl.obj.style.display = howToDisplay;			
		}
		else
		{
			ctrl.obj.disabled = !srcEnabled;
		}
		
		/* here we make sure the span is never disabled or invisible */
		if (ctrl.obj.parentNode.tagName == "SPAN")
		{
			if (makeDisappear == "1")
			{
				ctrl.obj.parentNode.style.display = "";			
			}
			else
			{
				ctrl.obj.parentNode.disabled = false;
			}				
		}			
	}
}

function toggleViewCheck(name, cbname)
{
	toggleView(name);
	var allCtrls = name.split(",");
	var ctrl = new getObj(allCtrls[0]);
	var cbCtrl = new getObj(cbname);
	if (ctrl.obj.style.display == "none")
	{
		cbCtrl.obj.checked = false;
	}
	else
	{
		cbCtrl.obj.checked = true;
	}	
}

function doValidationIfRequired()
{
	if (typeof(DMI_ValidatePage)=="function")
	{
		if (DMI_ValidatePage(true, true) == false)
		{
			return;
		}
	}
}

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


var showAlert = true;
var lastVal;

function sortTable(sTableID, iCol, sDataType, bSkipFirstRow, strSortExp)
{	
	var oTable = new getObj(sTableID).obj;
	var oTBody = oTable.tBodies[0];
	var colDataRows = oTBody.rows;
	
	var aTemp = sTableID.split("_");
	
	aTemp[aTemp.length-1] = "htbSortInfo";
	
	var srtInfo = new getObj(aTemp.join("_")).obj;

	var aTRs = new Array;
	var aStyles = new Array;
		
	showAlert = true;
		
	for(var i=0, nCol=(bSkipFirstRow)?1:0; nCol<colDataRows.length; i++,nCol++)
	{
		aTRs[i] = colDataRows[nCol];
		try//@ this fails when in fire fox
		{
			aStyles[i] = colDataRows[nCol].currentStyle.backgroundColor;
		}
		catch(e)
		{
		}
	}

	var aStrs = new Array();
	
	if ( srtInfo )
		aStrs = srtInfo.value.split(",");

	if ((aStrs.length > 0 && parseInt(aStrs[0])==iCol) || iCol == oTable.sortCol )
	{
		aTRs.reverse();
		
		if ( aStrs.length > 0 )
		{
			if ( aStrs[aStrs.length-1]=="Asc" )
			{
				aStrs[aStrs.length-1] = "Desc";
			}
			else
			{
				aStrs[aStrs.length-1] = "Asc";
			}
			
			srtInfo.value = aStrs.join(",");
		}
	}
	else
	{
		aTRs.sort(generateCompareTRs(iCol, sDataType));
		if ( srtInfo )
			srtInfo.value = iCol+","+sDataType+","+bSkipFirstRow+","+strSortExp+",Asc";
	}
	
	var oFragment = document.createDocumentFragment();
	for(var i=0;i<aTRs.length;i++)
	{
		aTRs[i].style.backgroundColor = aStyles[i];
		oFragment.appendChild(aTRs[i]);
	}
	
	oTBody.appendChild(oFragment);
	oTable.sortCol=iCol;
}

function convert ( sValue, sDataType )
{
	switch(sDataType)
	{
		case "int":
			if ( sValue )
				return parseInt(sValue.nodeValue);
			else
				return 2147483648;
		case "float":
			if ( sValue )
				return parseFloat(sValue.nodeValue);
			else
				return 1.17549e+038;
		case "date":
			if ( sValue )
				return new Date(Date.parse(sValue.nodeValue));
			else
				return new Date();
		case "hours:mins":
			if ( sValue )
			{
				var arrHours = sValue.nodeValue.split(":");
				return parseFloat(arrHours[0]) + parseFloat(arrHours[1])/60;
			}
			else
				return 1.17549e+038;		
		case "val-desc":
			
			if ( sValue )
			{
				var arrVal = sValue.nodeValue.split("-");			
				if ( arrVal.length>0 && arrVal[0] )
					return parseFloat(arrVal[0]);
			}
		
			return 1.17549e+038;		
		default:
			if (sValue && sValue.nodeValue)
				return sValue.nodeValue.toString();
			else
				return "";
	}
}

function generateCompareTRs(iCol, sDataType)
{
	return function compareTRs(oTR1,oTR2)
		{
			var vValue1, vValue2;
			
			if ( oTR1.cells[iCol].getAttribute("value"))
			{
				vValue1 = convert(oTR1.cells[iCol].getAttribute("value"),sDataType);
				vValue2 = convert(oTR2.cells[iCol].getAttribute("value"),sDataType);
			}
			else
			{				
				//if (showAlert && oTR1.cells[iCol].firstChild.nodeValue != lastVal && !confirm(oTR1.cells[iCol].firstChild.nodeValue) )
				//{
				//	lastVal = oTR1.cells[iCol].firstChild.nodeValue;
				//	showAlert = false;
				//}
				
				if(oTR1.cells[iCol].firstChild != null && oTR1.cells[iCol].firstChild.nodeValue == null && oTR1.cells[iCol].firstChild.firstChild != null )
				{
					vValue1 = convert(oTR1.cells[iCol].firstChild.firstChild,sDataType);
				}
				else
				{
					vValue1 = convert(oTR1.cells[iCol].firstChild,sDataType);
				}
				if(oTR2.cells[iCol].firstChild != null && oTR2.cells[iCol].firstChild.nodeValue == null && oTR2.cells[iCol].firstChild.firstChild != null )
				{
					vValue2 = convert(oTR2.cells[iCol].firstChild.firstChild,sDataType);
				}
				else
				{
					vValue2 = convert(oTR2.cells[iCol].firstChild,sDataType);				
				}
				
				if (vValue1 < vValue2)
				{
					return -1;
				}
				else if ( vValue1 > vValue2 )
				{
					return 1;
				}
				else
				{
					return 0;
				}
			};
		}
}


function enableControls (names)
{
	var allCtrls = names.split(",");
	var index;
	for (index = 0; index < allCtrls.length; index++)
	{
		var ctrl = new getObj(allCtrls[index]);
		if (ctrl.obj != null)
		{
			ctrl.obj.disabled = false;
		}
	}
}

function mail (addr)
{
	var ctrl = new getObj(addr);
	window.location.href="mailto:" + ctrl.obj.value;
}

//@ List Box Filtering @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
function DMI_HookupFiltering ( ListToFilter, TextBox, RegularExp )
{
	var oList = new getObj ( ListToFilter ).obj;
	var oTextBox = new getObj ( TextBox ).obj;
	
	var listArray = new Array;
	
	//@ copy the array of options to a backup array
	for ( var x =oList.options.length-1; x >=0 ; x-- )
	{
		listArray.push(new Array(oList.options[x],oList.options[x].text));
	}
	
	oTextBox.Filter = DMI_FilterList;
		
	oTextBox.ListItems = listArray;
	oTextBox.RegExp = RegularExp;
	oTextBox.FilterField = ListToFilter;
		
	addEventHandler( oTextBox,"keyup",oTextBox.Filter);
	
	if ( oTextBox.getAttribute("FilterBy")=="text")
	{
		oList.setAttribute("FilterBy","text");
	}
	else
	{
		oList.setAttribute("FilterBy","value");
	}
	
	//@ filter the list since the textbox is not null
	if ( oTextBox.value != "" )
	{
		oTextBox.Filter();	
	}	
}

function DMI_FilterList (  )
{
	var evntTarget = getEventTarget();

	if ( evntTarget.getAttribute("FilterField") == null)
	{
		evntTarget == this;	
	}
	
	var oList = new getObj(evntTarget.getAttribute("FilterField")).obj;
	
	//@ Remove all of the original options
	//@ copy the array of options to a backup array
	for ( var x =oList.options.length-1; x >=0 ; x-- )
	{
		oList.remove(x);
	}
	
	var RE = new RegExp ("^"+evntTarget.value);
	var index = 0;
	//@ Add all of the items that match the criteria back into the list
	for ( var i =evntTarget.ListItems.length-1; i>=0; i-- )
	{
		if ( evntTarget.getAttribute("FilterBy")=="text" )
		{
			if ( RE.exec(evntTarget.ListItems[i][1]) )
			{
				var option = evntTarget.ListItems[i][0];
				option.appendChild(document.createTextNode(evntTarget.ListItems[i][1]));
				oList.options.appendChild(option);
				index++;
			}
		}
		else
		{
			if ( RE.exec(evntTarget.ListItems[i][0].value) )
			{
				var option = evntTarget.ListItems[i][0];
				option.appendChild(document.createTextNode(evntTarget.ListItems[i][1]));
				oList.options.appendChild(option);
				index++;
			}			
		}
	}
	oList.options.length=index+1;
}


function KPBody(oEvent,SubmitBtn)
{
	if ( (oEvent && oEvent.which == 13) || (window.event && window.event.keyCode==13) )
	{
		var btnSubmit = new getObj(SubmitBtn).obj;
		if ( btnSubmit != null )
			btnSubmit.click();
		if ( oEvent!=null )
		{
			oEvent.returnValue=false;
			oEvent.cancelBubble=true;
		}
		else
		{
			event.returnValue=false;
			event.cancelBubble=true;
		}
		return false;
	}
}

function KPElement(e, SubmitBtn)
{
	if (( e && e.which == 13) || window.event && window.event.keyCode==13)
	{
		var btnSubmit = new getObj(SubmitBtn).obj;
		if ( btnSubmit != null )
		btnSubmit.click();
		if ( e!=null )
		{
			e.returnValue=false;
			e.cancelBubble=true;
		}
		else
		{
			event.returnValue=false;
			event.cancelBubble=true;
		}
		return false;
	}
}
