/*common javascript routines*/
var agt=navigator.userAgent.toLowerCase();
var isFirefox=(agt.indexOf('firefox')!=-1);
var isIE=(agt.indexOf('msie')!=-1);
var isNetscape=(agt.indexOf('netscape')!=-1);
/* Define document.getElementById for Internet Explorer 4 */
if (typeof(document.getElementById) == "undefined")
	document.getElementById = function (id)
	{
		// Just return the corresponding index of all.
		return document.all[id];
	}
/* Code so that insertAdjacentHTML works in Mozilla Browsers*/
if(typeof HTMLElement!="undefined" && !HTMLElement.prototype.insertAdjacentElement){
	HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode){
		switch (where){
			case 'beforeBegin':
				this.parentNode.insertBefore(parsedNode,this)
				break;
			case 'afterBegin':
				this.insertBefore(parsedNode,this.firstChild);
				break;
			case 'beforeEnd':
				this.appendChild(parsedNode);
				break;
			case 'afterEnd':
				if (this.nextSibling){
					this.parentNode.insertBefore(parsedNode,this.nextSibling);
					}
				else{this.parentNode.appendChild(parsedNode);}
				break;
			}
		}
	HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr){
		var r = this.ownerDocument.createRange();
		r.setStartBefore(this);
		var parsedHTML = r.createContextualFragment(htmlStr);
		this.insertAdjacentElement(where,parsedHTML)
		}
	HTMLElement.prototype.insertAdjacentText = function(where,txtStr){
		var parsedText = document.createTextNode(txtStr)
		this.insertAdjacentElement(where,parsedText)
		}
	}
/* abort - shows alert msg and returns false */
function abort(msg){
	alert(msg);
	return false;
	}
//apendText(fld,$val)
function appendText(obj,val,lf){
	var cObj=getObject(obj);
	if(undefined == cObj){return abort("undefined object passed to getHeight");}
	var cval=trim(getText(obj));
	var newval = cval + val;
	if(lf){
		newval += "\r\n";
		}
	setText(obj,newval);
	}
// fixE - Fix event object
function fixE(e){
	if (typeof e == 'undefined'){e = window.event;}
	if (typeof e.layerX == 'undefined'){e.layerX = e.offsetX;}
	if (typeof e.layerY == 'undefined'){e.layerY = e.offsetY;}
	return e;
	}
//get Cookie with said name
function getCookie(name){
	name = trim(name);
	var cookies = document.cookie.split(";");
	var tmp;
	for (var i=0; i<cookies.length; i++){
		tmp = cookies[i].split("=");
		var cname=trim(tmp[0]);
		var cval=trim(tmp[1]);
		//alert('Looking for ['+name+']\nName: ['+cname+']\nValue: ['+cval+']');
		if (cname == name){return unescape(cval);}
		}
	return null;
	}
// GetElementsByAttribute - returns an array of tags that have an attribute of value.
function GetElementsByAttribute(tag, att, val){
        //GetElementsByAttribute(tagname, attributename,stringtomatch)
        var a, list, found = new Array(), re = new RegExp(val, 'i');
        //if(undefined != document.getElementsByTagName(tag)){return found;}
        list = document.getElementsByTagName(tag);
        //alert("Found "+list.length+" tags with name of "+tag+" ,checking for "+att+" with a val of "+val);
        for (var i = 0; i < list.length; ++i) {
            a = list[i].getAttribute(att);
            if (undefined == a){a = list[i][att];}
            //alert(i+", a="+a+" type="+typeof(a));
            if (typeof(a)=='string' && (val.length==0 || a.search(re) != -1)) {
               found[found.length] = list[i];
               //alert("Found a match");
               }
            }
        return found;
        }
// GetElementsByAttribute - returns an array of tags that have an attribute of value.
function jsDocs(id){
        list = document.getElementsByTagName('script');
        //alert("Found "+list.length+" tags with name of "+tag+" ,checking for "+att+" with a val of "+val);
        for (var i = 0; i < list.length; ++i) {
			var cObj=list[i];
			var txt=getText(cObj);
			if(txt.length){}
			else{
				var vals;
				for(name in cObj){
					var type=typeof(cObj[name]);
					vals += name+' = '+type+'<br>\n';
                    if(type == 'function'){}
                    else if(type == 'string'){vals += name+' = ['+getText(cObj[name])+']<hr>\n';}
                    else if(type == 'object'){vals += name+' = '+cObj[name]+'<hr>\n';}
                	}
                if(id){setText(id,vals);}
                else{alert(vals);}
            	}
            }
        return;
        }
// getHeight - height of object. defaults to window object
function getHeight(obj) {
	var cObj=getObject(obj);
	if(undefined == cObj){return abort("undefined object passed to getHeight");}
	if(undefined != cObj.innerHeight){return cObj.innerHeight;}
	else if(undefined != cObj.offsetHeight){return cObj.offsetHeight;}
	}
//getText - returns object text
function getObject(obj){
	if(typeof(obj)=='object'){
		return obj;
    	}
    else if(typeof(obj)=='string'){
		if(undefined != document.getElementById(obj)){return document.getElementById(obj);}
		else if(undefined != document.getElementsByName(obj)){
			var els=document.getElementsByName(obj);
			if(els.length ==1){return els[0];}
			//else{return abort(els.length+" elements found in getObject for "+obj);}
        	}
		else if(undefined != document.all[obj]){return document.all[obj];}
		else{
			//alert('unable to getObject on string object '+obj);
			return null;
			}
    	}
    else{
		//alert('unable to getObject on object type '+typeof(obj)+' obj='+obj);
    	}
    return null;
	}
/* getParent - gets parent object or its parent if parent is P or FORM */
function getParent(obj){
	var cObj=getObject(obj);
	if(undefined == cObj){return abort("undefined object passed to getParent");}
	if(undefined == cObj.parentNode){return cObj;}
	var pobj=cObj.parentNode;
	if(typeof(cObj.parentNode) == "object"){return cObj.parentNode;}
	else{return getParent(pobj);}
	}
//getText - returns object text
function getText(obj){
	var cObj=getObject(obj);
	if(undefined == cObj){return '';}
	if(undefined != cObj.value){return cObj.value;}
    else if(undefined != cObj.innerHTML){return cObj.innerHTML;}
    else if(undefined != cObj.innerText){return cObj.innerText;}
    else{
		//alert('unable to getText on '+cObj);
    	}
    return '';
	}
// getWidth - width of object. defaults to window object
function getWidth(obj) {
	var cObj=getObject(obj);
	if(undefined == cObj){return abort("undefined object passed to getWidth");}
	if(undefined != cObj.innerWidth){return cObj.innerWidth;}
	else if(undefined != cObj.offsetWidth){return cObj.offsetWidth;}
	}
//Replace text in a
function replaceText(obj,s,r,i){
	var cObj=getObject(obj);
	if(undefined == obj){return abort("undefined object passed to replaceText");}
	var opt = 'ig';
	if(i){opt = 'g';}
	var regexp = new RegExp(s,opt);
	var txt=getText(obj);
	var newval = txt.replace(regexp,r);
	setText(obj,newval);
	}
//setText - returns object text
function setText(obj,txt){
	var cObj=getObject(obj);
    if(undefined == cObj){return null;}
    //alert(cObj+'\n'+txt);
    if(undefined != cObj.value){cObj.value=txt;}
    else if(undefined != cObj.innerHTML){cObj.innerHTML=txt;}
    else if(undefined != cObj.innerText){cObj.innerText=txt;}
    else{
		return null;
    	}
	}
//setText - returns object text
function setStyle(obj,s,v){
	var cObj=getObject(obj);
    if(undefined == cObj){return abort("undefined object passed to setStyle:"+obj);}
    if(v.length==0){return;}
    if(s.length==0){return;}
    var str="cObj.style."+s+"='"+v+"';";
    eval(str);
	}
//setClassName - returns object text
function setClassName(obj,v){
	var cObj=getObject(obj);
    if(undefined == cObj){return abort("undefined object passed to setClassName");}
    var current=cObj.className;
    if(!v){return;}
    if(v.length==0){return;}
    if(current==v){return;}

    var str="cObj.className='"+v+"';";
    eval(str);
	}
function showId(id){
    if(undefined == document.getElementById(id)){
		alert('Error in showId\n"'+id+'" is not defined as a valid object');
		return;
    	}
	var formObj=document.getElementById(id);
	formObj.style.position='absolute';
    formObj.style.top=MouseY+"px";
    formObj.style.left=MouseX+"px";
    formObj.style.display='inline';
    //
	//alert(formObj.style.display);
    return true;
    }
/* showDrop */
function showDrop(oid,h){
	var navEls = GetElementsByAttribute('div','id',oid);
	for (var i=0; i<navEls.length; i++) {
          if(undefined != h){
			if(h==1){navEls[i].style.display='none';}
			}
          else if(navEls[i].style.display=='block'){navEls[i].style.display='none';}
          else{navEls[i].style.display='block';}
	     }
     return false;
	}
/* showHide */
function showHide(id){
	var cObj=getObject(id);
    if(undefined == cObj){return abort("undefined object passed to showHide:"+id);}
    if(cObj.style.display=='none'){cObj.style.display='block';}
    else{cObj.style.display='none';}
	}
// showProperties - shows the properties of any element
function showProperties(obj,id,v){
	var cObj=getObject(obj);
    if(undefined == cObj){return abort("undefined object passed to showProperties");}
	var str="Properties that have values for :" + cObj + "\n";
	var namestr='';
	for(name in cObj){
		if(cObj[name]){
			//typeof returns "number" "string" "boolean" "function" "undefined" "object"
			var type=typeof(cObj[name]);
			if(type != "object" && type != "function"){
				var val=cObj[name];
				str += "[" + name + "]["+type+"]";
				if(v || type == 'number'){str += val;}
				str += "<br>\r\n";
				}

			}
		namestr += name + ", ";
		}
	if(!id){
		alert(str);
		}
	else{
		setText(id,str);
    	}
  	}
//trim - remove beginning and ending spaces, tabs, and line returns
function trim(value){
	if (null != value && undefined != value && "" != value){
		var rval=value.replace(/^[\s\0\r\n\t]*/g,"");
		rval.replace(/[\s\0\r\n\t]*$/g,"");
	    return rval;
		}
	else{return "";}
	}
// urlEncode
function urlEncode(text) {
	text=text.replace(/\//g,"%2F");
	text=text.replace(/\?/g,"%3F");
	text=text.replace(/\</g,"%3C");
	text=text.replace(/\>/g,"%3E");
	text=text.replace(/\"/g,"%22");
	text=text.replace(/=/g,"%3D");
	text=text.replace(/&/g,"%26");
	//text=text.replace(/\s/g,"+");
    return text;
	}
