if(typeof HAR=="undefined") var HAR={};
if(typeof HAR.Dom=="undefined") HAR.Dom={};
HAR.Dom.version = '2008-06-28 6:50pm';

HAR.Dom.getRef = function(id) {
	var _retObj;
	if(document.all){
		 _retObj = document.all[id];
		 if (_retObj) return _retObj;
		}
	if (document.getElementById) {
		_retObj = document.getElementById(id);
		 if (_retObj) return _retObj;
		}
	/* if still not found, find first named occurence searching through all forms
	   this is a temporary hack until all ids are in place.*/
	if (!_retObj) {
		for(var i=0, df=document.forms; i<df.length; i++) {
			if(df[i][id]) {
				_retObj=df[i][id];
				if (_retObj) return _retObj;
				break;
				}
			}
		}
//	if (!_retObj) {alert('LARS javascript error: ID Not found:' + id }
}

/*-------------------------------------------------------------------
 * this function generates a DHTML progress bar.  Progress bar
 * graphics starts at begging again every 100 seconds.
 * iProgressTimer: global variable needed for timer count
 * Need a <span> or <div> named "ProgressBar" in page
 * MBH 2/3/2004
 *------------------------------------------------------------------*/
HAR.Dom.ProgressTimer = 0;
HAR.Dom.DoProgressBar = function(){
	scroll(0,0);
	var ProgressBar=HAR.Dom.getRef('ProgressBar');
	if(!HAR.Dom.getRef('ProgressBar')) {
		var bd = document.getElementsByTagName('body')[0];
		var ProgressBar=document.createElement('div');
		ProgressBar.setAttribute('id','ProgressBar');
		bd.insertBefore(ProgressBar,bd.firstChild);
		};
	HAR.Dom.ProgressBarTimeout=setTimeout("HAR.Dom.DoProgressBar()", 1000)
	HAR.Dom.ProgressTimer++;
	ProgressBar.innerHTML = '<table class="FormLevel1" width="40%" border="1" cellpadding="4" cellspacing="0">'
	+ '<tr class="title"><td width="50%">Processing...</td></td><td align="right"> ( '
	+ HAR.Dom.FormatMinutes(HAR.Dom.ProgressTimer)
	+' )</td></tr>'
	+ '<tr><td colspan="2"><table width="100%" cellpadding="0" cellspacing="0" border="1"><tr>'
	+ '<td bgcolor="green" width="'
	+ ((HAR.Dom.ProgressTimer % 100) + 1) + '%" >&nbsp;  </td> <td bgcolor="cccccc" width="'
	+ ((100 - (HAR.Dom.ProgressTimer % 100))+1)
	+ '">&nbsp;  </td></tr></table></td></tr></table>'  ;
	}

HAR.Dom.FormatMinutes = function(iSecs) {
  iSecs = parseInt(iSecs);
  var iMin = parseInt(iSecs/60);
  iSecs = iSecs - (iMin * 60)
  return(iMin + ' min, ' + iSecs + ' sec')
	}

//change background color of passed object
//ex: onmouseover="HAR.Dom.changeBgColor(this, 'red')" onmouseout="HAR.Dom.changeBgColor(this, 'white');
HAR.Dom.changeBgColor = function(oElement, sbgColor) {
	if ((sbgColor!=null) && (oElement))
      oElement.style.backgroundColor = sbgColor;
}


// show/hide by id (id must be uniquely assigned to element.  Can be table, span, input box, etc
//not yet cross-browser
HAR.Dom.show = function(sId) {
	var aryIL = sId.split(',');
	var oThis;
		for(i=0;i<aryIL.length;i++) {
			oThis = document.all[aryIL[i]];
			if(oThis!=null) {
				oThis.style.display = "";
			}
		}
	}

HAR.Dom.hide = function(sId) {
	var oThis;
	var aryIL = sId.split(',');
		for(i=0;i<aryIL.length;i++) {
			oThis = HAR.Dom.getRef(aryIL[i]);
			if(oThis!=null) {
				oThis.style.display = "none"
				}
			}
	}

//mbh
//button must be named btn_[id name], toggles between "+" and "-" and hides element [sId]
HAR.Dom.ShowHideButton = function(sId) {
	var aryIL = sId.split(',');
		for(i=0;i<aryIL.length;i++) {
			var oEbtn = HAR.Dom.getRef('btn_' + aryIL[i]);
			if(oEbtn!==null) {
				var sEbtnVal = oEbtn.value;
				(sEbtnVal=='-') ? HAR.Dom.hide(aryIL[i]):HAR.Dom.show(aryIL[i]);
				oEbtn.value = (sEbtnVal=='-' ? '+':'-');
			}
		}
}


//mbh
//button must be named btn_[id name], toggles between "+" and "-" and hides element [sId]
HAR.Dom.ShowHideButton = function(sId) {
	var aryIL = sId.split(',');
		for(i=0;i<aryIL.length;i++) {
			var oEbtn = document.getElementById('btn_' + aryIL[i]);
			try {
				var sEbtnVal = oEbtn.value;
				(sEbtnVal=='-') ? HAR.Dom.hide(aryIL[i]):HAR.Dom.show(aryIL[i]);
				oEbtn.value = (sEbtnVal=='-' ? '+':'-');
				}
			catch(err) {
				alert('LARS Javascript Error\nCannot find "' + aryIL[i] + '" section.');
				}
		}
}

//-------------------------------------------------------------------
//tabbed panel functionality
//only supports 1 panel per screen
//needs element 'panelCurrent' in HTML
// panel tabs must be named panelTab_ + panel name, need:
//    onclick = "panelTabSelect(this);"
//    onmouseover="HAR.Dom.changeBgColor(this, 'yellow');"
//      onmouseout="HAR.Dom.panelTabSetState(this)"


//returns base panel name if tab name/object or panel name/object passed
HAR.Dom.panelFindName = function(oObj) {
	var sObjName = ((typeof oObj)=='string')?oObj:oObj.id;
	sObjName = sObjName.replace("panel_","");
	sObjName = sObjName.replace("panelTab_","")
	return(sObjName);
}

HAR.Dom.panelCurrent = function(sPanel) {
	if (sPanel == null)
		return(HAR.Dom.getRef('panelCurrent').value)
	else
		HAR.Dom.getRef('panelCurrent').value = sPanel
	return false;
	}


HAR.Dom.panelShow = function(sPanelName) {
	//hide visible panel, show selected panel,
	//set panelTab
	sPanelName = HAR.Dom.panelFindName(sPanelName);
	/* workaround for ie misusing "block" to show tr, if switched to div code should be updated. */
	var trShow=(navigator.appName.indexOf("Microsoft") > -1)?'block':'table-row';
	if (HAR.Dom.panelCurrent() != '') {
		HAR.Dom.PanelHide();
		}
	HAR.Dom.getRef('panel_'+sPanelName).style.display = trShow;
	HAR.Dom.panelCurrent(sPanelName);
	HAR.Dom.panelTabSetState(sPanelName);
	}

HAR.Dom.PanelHide = function() {
	//hide visible panel, unhilite panelTab
	HAR.Dom.getRef('panel_'+HAR.Dom.panelCurrent()).style.display='none';
	$('.panel').hide();
	HAR.Dom.getRef('panelTab_'+HAR.Dom.panelCurrent()).style.backgroundColor='#ffffff';
	HAR.Dom.getRef('panelTab_'+HAR.Dom.panelCurrent()).style.color = '#000066';
	}

HAR.Dom.panelTabSetState = function(sTabName) {
	sTabName = HAR.Dom.panelFindName(sTabName);
	var oTab=HAR.Dom.getRef('panelTab_'+sTabName);
	if (sTabName==HAR.Dom.panelCurrent()) {
		oTab.style.backgroundColor = '#99ff99';
		oTab.style.color = '#000000';
		}
	else {
		oTab.style.backgroundColor='#ffffff';
		oTab.style.color = '#000066';
		}
	}

HAR.Dom.panelTabHover = function(sTabName) {
	sTabName = HAR.Dom.panelFindName(sTabName);
	var oTab=HAR.Dom.getRef('panelTab_'+sTabName);
	oTab.style.backgroundColor='#FFFF66';
	}


/* Author: Mike Harwitz
   Notes: RowType = "<rowtype>" must be in TR, row must have at least class="" */
HAR.Dom.ShowHideRows = function(sTableID, sRowType, sShowHide, blnToggleRest) {
	/* workaround for ie misusing "block" to show tr, if switched to div code should be updated. */
	var trShow=(navigator.appName.indexOf("Microsoft") > -1)?'block':'table-row';
	var table=HAR.Dom.getRef(sTableID);
	var rows=table.getElementsByTagName('tr');
	for(var thisRow, i=rows.length-1;i>=0;i--) {
		thisRow=rows[i];
		if(thisRow.getAttribute("RowType")=="_special_") continue;
		if (thisRow.getAttribute("RowType")==sRowType||(sRowType=="*")) {
			thisRow.style.display=(sShowHide=="show")?trShow:'none';
			}
		else if(blnToggleRest)
			thisRow.style.display=(sShowHide=="show")?'none':trShow;			
		}
	//return true;
	}


HAR.Dom.WindowResize = function(w,h) {
	if (parseInt(navigator.appVersion)>3) {
		if (navigator.appName=="Netscape") {
			top.outerWidth=w;
			top.outerHeight=h;
		}
		else top.resizeTo(w,h);
		}
	}

/* by mike harwitz */
HAR.Dom.HTMLWrite = function(sid, stxt) {
	var oSection=HAR.Dom.getRef(sid);
	oSection.innerHTML = '';
	oSection.innerHTML = stxt;
	}

HAR.Dom.HTMLRead = function(sid) {
	var oSection=HAR.Dom.getRef(sid);
	return (oSection.innerHTML);
	}


/*
HAR.Dom.FreezeScreen = function() {
	scroll(0,0);
	var newDiv = document.createElement("div");
	newDiv.className = "FreezePaneOn";
	//newDiv.style.visibility = "hidden";
	newDiv.id="FreezePane";
	newDiv.align="center";
	var newDivChild = document.createElement("div");
	newDivChild.id="InnerFreezePane";
	newDivChild.className="FreezePaneMessage";
	newDivChild.align="center";
	newDivChild.innerHTML="Processing...";
	newDiv.appendChild(newDivChild);
	document.body.appendChild(newDiv);
	//      var outerPane = document.getElementById('FreezePane');
	//      var innerPane = document.getElementById('InnerFreezePane');
	//      if (outerPane) outerPane.className = 'FreezePaneOn';
	}
*/

/* dynamically load javascript to page */
/*
HAR.Dom.scriptLoad = function(_url) {
   var e = document.createElement("script");
   e.src = _url;
   e.type="text/javascript";
   document.getElementsByTagName("head")[0].appendChild(e);
}
*/

/*
HAR.Dom.onloadAdd = function(_func) {
  var old_onload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = _func;
  } else {
    window.onload = function() {
      old_onload();
      func();
    }
  }
}
*/

HAR.Dom.iframeLoad =function (frameID, url) {
   var oIfrm=frameID;
   if(typeof(oIfrm)!='object') oIfrm=HAR.Dom.getRef(frameID);
   oIfrm.src=url;
}

/*
HAR.Dom.addEvent = function(_element, _eventtype, _fn, usecapture) {
	//check if all required variables are defined
	if (!(_element&&_eventtype&&_fn)) {
		alert('Incorrect number of parameters for addEvent function\n'+_element+'\n'+_eventtype+'\n'+_fn);
		return false;
		}
	if (typeof _element == "string") {
		//the id was supplied, get the object reference
		_element = HAR.Dom.getRef(_element);
		}
	//add listener
	if (_element.addEventListener) {
		_element.addEventListener(_eventtype, _fn, usecapture);
		return true;
		}
	else if (_element.attachEvent) {
		var r = _element.attachEvent("on" + _eventtype, _fn);
		return r;
		}
	else {
		_element["on" + _eventtype] = _fn;
		}
		return false;
	}
*/

/*
HAR.Dom.getElementsByClass = function(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp('(^|\\\\s)'+searchClass+'(\\\\s|$)');
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}
*/

/*
HAR.Dom.removeById = function (id) {
	var node=document.getElementById(id);
	if(node) {
		node.parentNode.removeChild(node);
		node=null;
	}
}
*/
