//DEFAULTS
String.prototype.trim = function() {return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');}
String.prototype.ltrim = function() {return this.replace(/^\s+/,"");}
String.prototype.rtrim = function() {return this.replace(/\s+$/,"");}

function trim(s) {return s.replace(/^\s\s*/, '').replace(/\s\s*$/, '');}


function $() {
 var elements = new Array();
 for (var i = 0; i < arguments.length; i++) {
  var element = arguments[i];
  if (typeof element == 'string') element = document.getElementById(element);
  if (arguments.length == 1) return element;
  elements.push(element);
 }
 return elements;
}

function setvis(objectid,vis) {
 var disp=""; if (vis==0) {disp="none"}; 
 if (document.getElementById && $(objectid) != null) $(objectid).style.display=disp;
 else if (document.layers && document.layers[objectid] != null) document.layers[objectid].display=disp;
 else if (document.all) document.all[objectid].style.display=disp;}

// Remove existing content of an element
function clearChildNodes(elemID) {var elem = $(elemID); while (elem.childNodes.length > 0) {elem.removeChild(elem.firstChild);}}

function makepostrequest(url, parameters, callbackfunc) {
 var async = true; var xmlhttp = null;  var usercallback = null; var success = false;
 var MSXMLPROGIDS = new Array('MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP');
 for (var i = 0; i < MSXMLPROGIDS.length && !success; i++) {
  try { xmlhttp = new ActiveXObject(MSXMLPROGIDS[i]); success = true} catch (e) {xmlhttp = null;}}
 if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
  try {xmlhttp = new XMLHttpRequest();} catch(e) {xmlhttp = null;}}
 if (xmlhttp) { 
  if (callbackfunc) {
    usercallback = callbackfunc; async=true;
    xmlhttp.onreadystatechange = function () {if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {usercallback(xmlhttp)}}
  } else {async=false;}  
  xmlhttp.open('POST',url,async);
  xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xmlhttp.setRequestHeader("Content-length", parameters.length);
  xmlhttp.setRequestHeader("Connection", "close");
  xmlhttp.send(parameters);
  return xmlhttp;
 } else {return null;}
}

function makegetrequest(url, callbackfunc) {
 var async = true; var xmlhttp = null;  var usercallback = null;
 if (window.XMLHttpRequest) 
  {xmlhttp = new XMLHttpRequest()}
 else if (window.ActiveXObject)
  {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")}
 if (xmlhttp) { 
  if (callbackfunc) {
    usercallback = callbackfunc; async=true;
    xmlhttp.onreadystatechange = function () {if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {usercallback(xmlhttp)}}
  } else {async=false;}  
  xmlhttp.open('GET',url,async);
  xmlhttp.send(null);
  return xmlhttp;
 } else {return null;}
}

//tabdelim to array[ln0..n,fld0..n]
function loadarray(a,txt) {
 a.length=0;
 lns=txt.split('\n');
 for (n=0; n<lns.length-1; n++) {
  flds=lns[n].split('\t');
  a[n]=new Array();
  for (i=0; i<flds.length; i++) {a[n][i]=flds[i]}
 }
}

function getfvalues(fobj,changed) {
 var str=''; var v='';
 for(var i = 0;i < fobj.elements.length;i++) {
  v=''; current=fobj.elements[i];
  if ((changed==0)||(current.style.color=="red")) {
   try {
    v=current.id;
    switch(current.type) { 
     case "text": case "hidden": case "password": case "textarea": v += '='+escape(current.value); break; 
     case "select-one": v += '='+escape(current.options[current.selectedIndex].value); break;
     case "select-multiple": break; //for (var j=0; j<el.options.length; j++) {if (el.options[j].selected) {this.addField(el.name,el.options[j].value);}}	break;
     case "button": case "submit": break;
     case "checkbox": case "radio": if (current.checked) {v += '=1';} else {v += '=0';}  break;
     default: alert('?GetElementType:'+v+':'+current.type); break;
    }
   } catch(e) {alert('?GetElement '+v);} 
   if (v) {str += v + '&'};
  }
 } 
 str = str.substr(0,(str.length - 1));
 return str;
}

function setfvalues(fobj,vals) {
 var x=vals.split("`"); var v='';
 for (i=0; i<x.length; i++) {
  v=''; current=fobj.elements[i];
  try {
   v=current.id;
   switch(current.type) {
    case "text": case "hidden": case "password": case "textarea": current.value=x[i]; break;
    case "checkbox": current.checked=((x[i]=='1')||(x[i]=='True'))?true:false; break;
    case "select-one": current.selectedIndex=0;for (var n = 0; n < current.length; ++n) if (current[n].value == x[i]) current.selectedIndex = n; break;
    default: alert('?SetElementType:'+v+':'+current.type+':'+x[i]); break;
   }
  } catch(e) {alert('?SetElement '+v);}
 }
}

function tmint(intime) {
 var d='0123456789:';
 intime=intime.toUpperCase();
 if (intime.indexOf('P')>0) {p=1;} else {p=0;}
 var s='';
 for (n=0; n<intime.length; n++) {if (d.indexOf(intime.charAt(n))>=0) {s=s+intime.charAt(n);}}
 s=s+':0:0';
 s=s.split(':');
 t=(1*s[0]);
 if ((p==1)&&(t<12)) {t=t+12;}
 if ((p==0)&&(t==12)) {t=0;}
 s=(1*t)*100+(1*s[1]);
 return s;
}
function tmstr(intime) {
 h=Math.floor(intime/100);
 if (h>11) {p=1; if (h>12) {h=h-12;}} else {p=0; if (h==0) {h=12;}}
 h=10000+(h*100)+(intime%100); h=''+h;
 t=h.substr(1,2)+':'+h.substr(3,2);
 if (p==1) {t=t+' PM';} else {t=t+' AM';}
 return t
}
function dateint(indate) {
 if (indate=='') {
  var today=new Date();
  return (today.getFullYear()*10000)+((today.getMonth()+1)*100)+today.getDate();
 } else { 
  var d=indate.split('/');
  if ((d[2]*1)<50) {d[2]=2000+(d[2]*1);}
  if ((d[2]*1)<100) {d[2]=1900+(d[2]*1);}
  return (d[2]*10000)+(d[0]*100)+(d[1]*1);
 }
}
function datefmt(indate) {
 if (indate!='')  {
  da=indate.split('/');
  m=da[0]*1; d=da[1]*1; y=da[2]*1; 
  if (y==0) {y=2007;}
  if (y<50) {y=y+2000}; if (y<100) {y=y+1900};
  if ((da.length!=3)||(m<1)||(m>12)||(d<1)||(d>31)||(y<1900)||(y>2010)) {alert(indate+' is not a valid date');}
  return ""+m+"/"+d+"/"+y;
 } else {return "";}
}
/*
function formatNumber(num,dec,thou,pnt,curr1,curr2,n1,n2) {
 var x = Math.round(num * 1 * Math.pow(10,dec));
 if (x >= 0) n1=n2='';
 var y = (''+Math.abs(x)).split('');
 var z = y.length - dec; 
 if (z<0) z--; 
 for(var i = z; i < 0; i++) y.unshift('0');
 y.splice(z, 0, pnt); 
 while (z > 3) {z-=3; y.splice(z,0,thou);}
 var r = curr1+n1+y.join('')+n2+curr2;
 return r;
}
*/
function fillselect(s,vals) {
 s.options.length=0; var c=vals.split(',');
 for (var n=0; n<c.length; n++) {
   var v=c[n].split(':'); 
   if (v.length<2) {v[1]=v[0]};
   s.options[s.length] = new Option(v[1],v[0]);
 }
}
function setselect(s,desc) {
 var l=s.options.length; var found=false;
 for (var n=0; n<l; n++) {
  if ((s.options[n].text==desc)||(s.options[n].value==desc)||((n==0)&&(desc==''))) {
   s.options[n].selected=true; found=true;
  }
 }
 if (found==false) {
  s.options[s.length] = new Option(desc,desc);
  s.options[s.length-1].selected=true;
 }
// s.value=s.options[s.selectedIndex].text;
}

function qoverrow(e) {var sender; if (window.event) {sender=window.event.srcElement} else {sender=e.target}; sender.parentNode.style.backgroundColor='yellow';}
function qoutrow(e) {var sender; if (window.event) {sender=window.event.srcElement} else {sender=e.target}; sender.parentNode.style.backgroundColor='';}
function qovercell(e) {var sender; if (window.event) {sender=window.event.srcElement} else {sender=e.target}; sender.parentNode.style.backgroundColor='yellow'; sender.style.backgroundColor='orange';}
function qoutcell(e) {var sender; if (window.event) {sender=window.event.srcElement} else {sender=e.target}; sender.parentNode.style.backgroundColor=''; sender.style.backgroundColor='';}
function qclickrow(e) {
 var sender; if (window.event) {sender=window.event.srcElement} else {sender=e.target};
 if (sender.tagName=='TH') {} else {sender=sender.parentNode; qclick(sender.rowIndex);}
}
function qclickcell(e) {
 var sender; if (window.event) {sender=window.event.srcElement} else {sender=e.target};
 var c=sender.cellIndex; var r=sender.parentNode.rowIndex;
 qclick(c,r);
// alert('click '+sender.name+ ' '+c+' '+r);
}

function qinit(tblid,startrow,startcol) { 
//must define a function qclick(colnum,rownum)
//leave off startcol to just highlight rows - then define qclick(rownum)
 t=$(tblid); t.style.cursor="pointer"; t.style.tableLayout="fixed";
 for (rw=startrow; rw<t.rows.length; rw++) {
  var r=t.rows[rw];
  if (startcol) {
   for (var c=startcol; c<r.cells.length; c++) {r.cells[c].onmouseover=qovercell; r.cells[c].onmouseout=qoutcell; r.cells[c].onclick=qclickcell;}
  } else {
   r.onmouseover=qoverrow; r.onmouseout=qoutrow; r.onclick=qclickrow;
  }
 }
}

function qinitrows(tblid) { //must define a function clickfunc(rownum)
 t=$(tblid); t.style.cursor="pointer"; t.style.tableLayout="fixed"; 
 for (n=1; n<t.rows.length; n++) {t.rows[n].onmouseover=qoverrow; t.rows[n].onmouseout=qoutrow; t.rows[n].onclick=qclickrow;}
}
function qinitcells(tblid,startcol) { //must define a function clickfunc(cellnum,rownum)
 t=$(tblid); t.style.cursor="pointer"; t.style.tableLayout="fixed";
 for (n=1; n<t.rows.length; n++) {
  var r=t.rows[n]; for (var c=startcol; c<r.cells.length; c++) {r.cells[c].onmouseover=qovercell; r.cells[c].onmouseout=qoutcell; r.cells[c].onclick=qclickcell;}
 }
}


function activatetab(tab) {
 if (tab.tagName=='A') {
  var t=tab.parentNode.parentNode.getElementsByTagName('A');
  for (var n=0; n<t.length; n++) {t[n].className="";}
  tab.className="active";
 }
}

function getCookie( name ) {
	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;
	if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
		return null;
	}
	if ( start == -1 ) return null;
	var end = document.cookie.indexOf( ';', len );
	if ( end == -1 ) end = document.cookie.length;
	return unescape( document.cookie.substring( len, end ) );
}

function setCookie( name, value, expires, path, domain, secure ) {
	var today = new Date();
	today.setTime( today.getTime() );
	if ( expires ) {
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	document.cookie = name+'='+escape( value ) +
		( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
		( ( path ) ? ';path=' + path : '' ) +
		( ( domain ) ? ';domain=' + domain : '' ) +
		( ( secure ) ? ';secure' : '' );
}

function deleteCookie( name, path, domain ) {
	if ( getCookie( name ) ) document.cookie = name + '=' +
			( ( path ) ? ';path=' + path : '') +
			( ( domain ) ? ';domain=' + domain : '' ) +
			';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}

function setleft(object,pos) {
 if (document.getElementById && document.getElementById(object) != null) node = document.getElementById(object).style.left=pos;
 else if (document.layers && document.layers[object] != null) document.layers[object].left=pos;
 else if (document.all) document.all[object].style.left=pos;}

var divxpos="0px";
function showdiv(divid) {
 var l=divid.length-1;
 var dv=document.getElementsByTagName('div');
 for (var i = 0; i < dv.length; i++) {
  var d=dv[i];
  if (d.id==divid) {setleft(divid,divxpos);} else {
   if (d.id.substring(0,l) == divid.substring(0,l)) {setleft(d.id,"-5000px")}
  }
 }
}

function popopen(popdiv) {
 if (!document.getElementById('popshim')) {
  var d=document.createElement("div");
  d.id='popshim';
  document.body.appendChild(d);
 }
 $(popdiv).style.zIndex="1000";
 showdiv(popdiv);
 setleft(popdiv,'10px');
 setleft('popshim','0px');
 e=$(popdiv).getElementsByTagName('FORM');
 if (e) {e=e[0];} 
 if (e) {
   try {e.elements[0].focus();} catch(err) {}
 }
}

function popclose() {
 if (!document.getElementById('popshim')) {
  var d=document.createElement("div");
  d.id='popshim';
  document.body.appendChild(d);
 }
 showdiv('popz');
 setleft('popshim','-5000px');
}


function st(msg) {
 if (!document.getElementById('stdiv')) {
  var d=document.createElement("div");
  d.id='stdiv';
  document.body.appendChild(d);
 }
 $('stdiv').innerHTML=msg;
}
