// retreiving elements, traversing dom, loading xml,table stuff
// w3c compat
function gebid(e,id) {if(id)return e.getElementById(id);else return document.getElementById(e);};
function gebtgs(e,id) {if(id)return e.getElementsByTagName(id);else return document.getElementsByTagName(e);};
function xnV(e){if(e.textContent)return e.textContent; else return e.text;};
// prune all text nodes from doc up to 2nd level
// since some browsers treat spaces as text nodes
function xmlPrune(items,lvl) {
	if(lvl<2)
		for(var i=0; i<items.length; ) {
			if (items[i].nodeType==3)
				items[i].parentNode.removeChild(items[i]);
			else { xmlPrune(items[i].childNodes,lvl+1); i++;}
		}
}
function ft(o,t) {
	for(var i=0;i<o.childNodes.length;i++)
		if(o.childNodes[i].tagName==t) return o.childNodes[i];
	return o;
}
function rc(t,r,c) {
	t = ft(t,"TBODY");
	return t.rows[r].cells[c];
}
function hSelects(showThem) {
  var els=document.getElementsByTagName("SELECT");
	for(var i=0; i< els.length;i++)
			els[i].style.visibility= (showThem ? "visible" : "hidden");
}
function focusTo(c) {
  try {
		window.focus();
		c=gebid(document,c);
	if (c){c.focus();/*c.setActive();*/}
	} catch(e) {	
	};
}
function sWin(url,args,x,y,m) {
	var shd=(document.all!=null);
  if(!m)m=true;
	var dF = "center: yes;help: no;resizable: yes;status: no;";
	args=(args==undefined?"":args);
	x=(x==undefined?"640px":x);
	y=(y==undefined?"400px":y);
	if(shd)dF+="dialogHeight: "+y+";dialogWidth: "+x+";";else dF+="height: "+y+";width: "+x+";";
	if(m)dF+="modal:true;dialog:true;";
	if(!shd)dF=dF.replace(/\;/g,",").replace(/\:/g,"=");
	//if(!shd) netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
	var result = (shd?window.showModalDialog(url,args, dF):window.open(url,"dlg",dF));
	return result;
}
// load given xml
function xmlLoad(xmlsrc,np)
{
	if(!np)np=true;
  var xmlDoc;
	if (window.ActiveXObject){ 
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.setProperty("SelectionLanguage", "XPath")
		xmlDoc.async=false;
		if (!xmlDoc.load(xmlsrc)) {
			status="XML Load Error!:"+xmlsrc;
			xmlDoc=null;
		}
	} else if (document.implementation.createDocument) {
		var req = new XMLHttpRequest();
		if (xmlsrc.substr(0,3)!="pgg")
			req.open("GET", xmlsrc, false);
		else
			req.open("GET", bbpath+xmlsrc, false);
		req.send(null); 
		xmlDoc = req.responseXML;
		xmlDoc.parseError=new Object(); //dummy to full script below
		xmlDoc.parseError.errorCode=0;
  }
  // prune (for mozilla and others
  if(np && xmlDoc)xmlPrune(xmlDoc.documentElement.childNodes,0);
	return xmlDoc;
}

// event handling
function evAt(el,ev,fn) {
  if(document.all)
		el.attachEvent(ev,fn);
	else {//remove on for mozilla based bw 
	  el.addEventListener(ev.substr(2),fn,false);
	};
}
function evDt(el,ev,fn) {
  if(document.all)
		el.detachEvent(ev,fn);
	else {//remove on for mozilla based bw 
	  el.removeEventListener(ev.substr(2),fn,false);
	};
}
// common event class instance
function evObj(e){
	if(window.event)this.e=window.event;else this.e=e;
	if(window.event)
	 with (window.event) {
		this.keyCode = keyCode;
		this.target = srcElement;
		this.type = type;
		this.X = clientX;
		this.Y = clientY;
		this.ctrlKey = ctrlKey;
		this.altKey = altKey;
		this.shiftKey = shiftKey;
		this.from = fromElement;
		this.to = toElement;
	 }
	else if(e)
	 with(e) {
		this.keyCode = (e.keyCode?e.keyCode:0);
		this.target = target;
		this.type = type;
		this.X = clientX;
		this.Y = clientY;
		this.ctrlKey = ctrlKey;
		this.altKey = altKey;
		this.shiftKey = shiftKey;
		this.from = relatedTarget;
		this.to = currentTarget;
	 };
  if (typeof(_evObj_prototype_called) == 'undefined')
  {
     _evObj_prototype_called = true;
     evObj.prototype.stopPropagation = _stopPropagation;
     evObj.prototype.preventDefault = _preventDefault;
  }
	// func proto
	function _stopPropagation() {
	  if (window.event) window.event.cancelBubble=true; else if(this.e)this.e.stopPropagation();
	}
	function _preventDefault() {
	  if (window.event) window.event.returnValue=false; else if(this.e)this.e.preventDefault();
	}
	return this;
}
//
// emulate execScript on different browsers
//
function execEmul(s) {
	return eval(s);
}
function execAsync(s) {
  window.setTimeout("eval("+s+")",10);
}
function wpexec(v) {
	if (window.parent!=window)window.parent.execAsync(v);
}
function wpexecd(v,ret) {
	if (window.parent!=window) return window.parent.execEmul(v); else return null;
}
// url of our root site
var bbpath="/bloodbank/";
var bbroot="bloodbank";
// alg for implemlementing htc func...
// - hook to focusin(which sets element to the one that has input foucs
// - examine properties of the control we are attaching and call xInit with element
// - the rest works fine if compatible...
//------------------------------------
// swc starts (no more htc's for compatibility reasons)
//------------------------------------
function lkuI(element){
	XmlElement=null;
	evAt(element,"onkeydown", lkuKd);
	evAt(element,"onkeypress", lkuKp);
	evAt(element,"onfocus", lkuF);
	if(master!=undefined) {
	  element.mastercontrol=gebid(document,master);
	  element.mastercontrol.evAt("onchange",lkuPs);
	  element.mastercontrol.detail=element;
	}
	if (element.xmlid!=null) XmlElement=gebid(document,element.xmlid);
	if (XmlElement!=null){
		if (XmlElement.length>1) XmlElement=XmlElement(0);
		XmlElement = XmlElement.XMLDocument;
		XmlElement.onreadystatechange=CheckXmlState;
		CheckXmlState();
	}
}
function lkuM(lookup,key) {
	var keyseq=(lookup.keyseq==undefined?'':lookup.keyseq);
	if(key==8) keyseq=keyseq.substr(0, keyseq.length-1); 
	else keyseq+=String.fromCharCode(key).toUpperCase();
	for(i=0; i<lookup.options.length; i++) 
		if(lookup.options(i).text.substr(0, keyseq.length).replace(/i/g, String.fromCharCode(304)).toUpperCase()==keyseq){
			lookup.selectedIndex = i;
			lookup.keyseq=keyseq;
			ShowHint(keyseq);
			break;
		} 
}
function lkuPs(e) {
  ev=new evObj(e);
	var lookup = ev.target;
	if(lookup==undefined || lookup==null) return;
	LookupFilter(XmlElement,lookup.options[lookup.selectedIndex].value,element);
}
function lkuKd(e){
  var ev=new evObj(e);
	var key = ev.keyCode;
	var lookup = ev.target;
	if(lookup==undefined || lookup==null) return;
	if(lookup.keyseq==undefined) 
	  lookup.keyseq='';
	else if(key==8)
		LookupMatch(lookup,key);
	else if(key==13) {
		element.fireEvent("onchange");
	  smartPopup.hide();
	  if(element.detail)detail.focus();
	}
	if(key=8)ev.stopPropagation();
	return (key!=8);
}
function lkuKp(e){
  var ev=new evObj(e);
	var key = ev.keyCode;
	var lookup = ev.target;
	if(lookup==undefined || lookup==null) return;
	if(key==105) key=304; // uppercase i
	if(key==27) lookup.keyseq = '';
	else LookupMatch(lookup,key);
	ev.stopPropagation();
}
function lkuF(e){
  var ev=new evObj(e);
	var lookup = ev.target;
	if(lookup!=undefined && lookup!=null) lookup.keyseq='';
}
function CheckXmlState(){
  var xmlDoc = XmlElement;
  var State=xmlDoc.readyState;
  if (State==4){
    var err = xmlDoc.parseError;
    if (err.errorCode != 0) {
      window.status = "XML load error: "+err.reason;
      xmlDoc = null;
    }
    else {
    xmlDoc.setProperty("SelectionLanguage", "XPath");
		FillFromXml(element,xmlDoc);
    //if we have master then adjust lookup
			if(master!=undefined) {
				var mc=element.mastercontrol;
				LookupFilter(XmlElement,mc.options[mc.selectedIndex].value,element);
			}
    }
  }
}
function FillFromXml(Sel1,xmlDoc){
var i, opt, x;
	if (!xmlDoc) return;
	var doc = document; 
	var val = eval(lookupvalue);
	var ival= tmpIdx; //intermediate value. if set evaluated first
	var Items = xmlDoc.documentElement.childNodes;
	for(i=0; i<Items.length; i++) {
		x = Items(i);
		opt = doc.createElement('OPTION');
		opt = Sel1.insertBefore(opt);
		opt.text = x.childNodes(0).text;
		if (x.childNodes.length>1) opt.value = x.childNodes(1).text;
		else opt.value = x.childNodes(0).text;

		if (ival) opt.selected=opt.value==ival
		else opt.selected = (val==i);
	}
}
function LookupClear(ddlXml) {
  if(ddlXml) {
    var hn=false;
    if(ddlXml.options.length>=0) hn=ddlXml.options[0].value=="";
   ddlXml.innerHTML="";
   if (hn) lxmlAdd(ddlXml, '','');
  }
}
function LookupFilter(xml, s, ddlXml)
{
  var o;
  if (s=="") {
    LookupClear(ddlXml);
  } else if (ddlXml && xml)
  {
    LookupClear(ddlXml);
   var xpath = xml.selectNodes('NewDataSet/I[P = "'+s+'"]');
   var node;
   while ((node = xpath.nextNode()) != null)
     lxmlAdd(ddlXml, node.childNodes(0).text, node.childNodes(1).text);
  }
}
//evAt(document,"onclick",pickAllForms);
function pickAllForms() {
		// get forms
		var coll = gebtgs(document,"state");
		if (coll!=null)
		{
				for (i=0; i<coll.length; i++) {
					var s=coll[i].id;
					var e=gebid(document,s.substr(0,s.length-1));
					if(e) {
						e.style.borderColor="Red";
					}
				}
		}
		// get page
		coll = gebtgs(document,"form");
		if (coll!=null)
		{
				for (i=0; i<coll.length; i++) {
					var s=coll[i].action;
					if(s) {
						s.replace(/.aspx/,"");
					}
				}
		};		
}
