function isDigit(allowNeg){return((event.keyCode>=48)&&(event.keyCode<=57)||(allowNeg&&(event.keyCode==45)))}
function getSelectValue(obj){
  if(!obj.multiple)return obj.options[obj.selectedIndex].value
  for(var j=0,value='';j<obj.options.length;j++){value=setVField(value,obj.options[j].value,obj.options[j].selected,',')}
  return value
  }
function getSelectText(obj){return obj.options[obj.selectedIndex].text}
function selectValue(obj,value){
  if(!obj.multiple)return obj.selectedIndex=getSelectIndex(obj,value)
  var ar=value.toString().replace(/ *, */g,',').split(',')
  for(var j=0;j<obj.options.length;j++){obj.options[j].selected=false;for(var i=0;i<ar.length;i++)if(obj.options[j].value.toLowerCase()==ar[i].toLowerCase())obj.options[j].selected=true}
}
function getSelectIndex(obj,value){for(var i=0;i<obj.options.length;i++){if(obj.options[i].value==value)return i}; return 0}
function getRadioValue(obj){if(!obj.length)return(obj.checked?obj.value:null);for(var i=0;i<obj.length;i++){if(obj[i].checked){return obj[i].value}};return null}
function setRadioValue(obj,val){for(var i=0;i<obj.length;i++)if(obj[i].value==val)obj[i].checked=true}

function toggleObj(){var args=toggleObj.arguments;for(var i=0;i<args.length;i++)if(eval(args[i]))eval(args[i]).style.display=(eval(args[i]).style.display=='none')?'inline':'none'}
function hideObj(){var args=hideObj.arguments;for(var i=0;i<args.length;i++)if(eval(args[i]))eval(args[i]).style.display='none'}
function showObj(){var args=showObj.arguments;for(var i=0;i<args.length;i++)if(eval(args[i]))eval(args[i]).style.display='inline'}
function disableObj(){var args=disableObj.arguments;for(var i=1;i<args.length;i++)eval(args[i]).disabled=args[0]}

function getRealElement(el,tag){
  if(!el)return(false)
  while(el.tagName!=tag && el.tagName!='HTML') el=el.parentElement
  return(el.tagName=='HTML'?false:el)
}

function setCheckbox(o,s){ // checkbox, sValue
  for(var i=0; i<o.length; i++) o[i].checked = s.indexOf(o[i].value)>=0
}

function loadImages(){
	if(document.images){
		if(!document.a1) document.a1=new Array()
		var i,j=document.a1.length,argv=loadImages.arguments
		for(i=0;i<argv.length;i++){document.a1[j]=new Image;document.a1[j++].src=argv[i]}
	}
}
//function fi(newSrc,id){var theImage=findImage(document,id,0);if(theImage&&id.search(new RegExp(xFi+'$'))<0){theImage.src=newSrc}}
function fi(newSrc,id){var theImage=findImage(document,id,0);if(theImage){theImage.src=newSrc}}
function fi2(arg1,arg2){fi(arg1,arg2)}
function findImage(doc,name,j2){
	var theImage=false
	if(doc.images){if(doc.images[name])return doc.images[name];}
	if(doc.layers)
		for(var j=0;j<doc.layers.length;j++){
			theImage=findImage(doc.layers[j].document,name,0)
			if(theImage){return(theImage)}
		}
	return(false)
}

function xbtn_init(ar,pth){
  for(var s='',a=['a','b','c'],j=0;j<a.length;j++)
    for(var i=0;i<ar.length;i++){
      eval('xbtn'+ar[i]+a[j]+'="'+pth+'btn'+ar[i]+a[j]+'.gif"') // xbtn50a="/sys/btn50a.gif"
      s+='.xbtn'+ar[i]+'{background=url('+pth+'btn'+ar[i]+'a.gif)}'
    }
  document.write('<style>'+s+'</style>')
}
xbtn_init(['50','70','100'],'/sys/')
/*
var xbtn50a='/sys/btn50a.gif', xbtn50b='/sys/btn50b.gif', xbtn50c='/sys/btn50c.gif'
var xbtn70a='/sys/btn70a.gif', xbtn70b='/sys/btn70b.gif', xbtn70c='/sys/btn70c.gif'
var xbtn100a='/sys/btn100a.gif', xbtn100b='/sys/btn100b.gif', xbtn100c='/sys/btn100c.gif'
*/
// gInitList.add('loadImages(xbtn50b,xbtn50c,xbtn70b,xbtn70c,xbtn100b,xbtn100c)')

document.onmouseevent=new execObj()
if(ie){document.onmouseover=function(){document.onmouseevent.run('over')}
	document.onmouseout=function(){document.onmouseevent.run('out')}
	document.onmousedown=function(){document.onmouseevent.run('down')}
	document.onmouseup=function(){document.onmouseevent.run('up')}
	document.onmousemove=function(){document.onmouseevent.run('move');return !document.onmouseevent.cancelEvent}
	document.onmouseevent.cancelEvent=false }

document.onmouseevent.add('xbtn("ARG")')
function xbtn(e,el){ // el=event.srcElement if not specified
  function getReal(el,className){
    var t=el
    while(t!=null && t.tagName!='BODY'){
      if(t.className==className)return t
      t=t.parentElement
    }
    return el
  }
  if(!el)el=getReal(event.srcElement,'xbtn')
  if(!el||e=='move')return
  if(!el.style)return
	if(el.pressed=='true')e='down'
	var sfx=[]; sfx['out']='a';sfx['over']='b';sfx['down']='c';sfx['up']=sfx['over']
  var bTL=[]; bTL['out']='Face';bTL['over']=bTL['up']='HighLight';bTL['down']='Shadow'
  var bBR=[]; bBR['out']='Face';bBR['over']=bBR['up']='Shadow';bBR['down']='HighLight'
  var sClassName=getMField(0,el.className,' ')
  with(el.style)
	switch(sClassName){
    case 'xbtn':borderTop=borderLeft='1 solid button'+bTL[e];borderBottom=borderRight='1 solid button'+bBR[e];break
    default: if(sClassName.indexOf('xbtn')>=0)backgroundImage='url('+eval(sClassName+sfx[e])+')';break
	}
}

var wnd // allow only 1 global wnd, if name==null, then created as wnd else return reference to it
function openWindow(url,name,w,h,pos,props){
	var _wnd,left=0,top=0
  if(name==null)name='wnd'
	if(!pos||pos=='center'){left=screen.width?(screen.width-w)/2:100; top=screen.height?(screen.height-h-36-30)/2:100} // 36 = taskbar, 30 = popup title bar
	props='width='+w+',height='+h+',top='+top+',left='+left+(props==''?'':','+props)
	_wnd=window.open(url,name,props)
	//props='dialogWidth='+w+'px;dialogHeight='+h+'px;'+(props==''?'':','+props)
	//_wnd=window.showModelessDialog(url,null,props)
  if(pos=='maximize')_wnd.resizeTo(screen.availWidth,screen.availHeight)
  if(name=='wnd'){wnd=_wnd}else{return _wnd}
}
function openModeless(url,w,h,props){//STUPID MICROSOFT - useless, since no window.opener or window.parent to communicate back!!!
  wnd=window.showModelessDialog(url,null,'dialogWidth='+w+'px;dialogHeight='+h+'px;status:1;resizable:1;maximize:1;help:0;'+(props==''?'':';'+props))
}
gKillList.add('try{if(window.wnd&&!wnd.closed)wnd.close()}catch(e){}')

var twInterval
function twClick(obj,inc,limit){
  var sfx = obj.value.indexOf('%')>=0 ? '%' : ''
  obj.value=(isNaN(parseInt(obj.value))||obj.value==''?0:parseInt(obj.value))
  obj.value=(inc>0 ? Math.min(eval(obj.value)+inc,limit) : Math.max(eval(obj.value)+inc,limit) ) + sfx
}
function twMousedown(cmd){eval(cmd);twInterval=setInterval(cmd,200)}
function twMouseup(){clearInterval(twInterval)}

function canModify(u,u2,g,g2){
  if(g==''||u==u2)return true
  if(g2=='')return false
  var ar=g.replace(/(^[|]*)|([|]*$)/g,'').split('|')
  for(var i=0;i<ar.length;i++)if(g2.indexOf('|'+ar[i]+'|')>=0)return true
  return false
}
function accImage(u,u2,g,g2){
  if(u==u2)return('accOwner.gif')
  if(canModify(u,u2,g,g2))return('accWrite.gif')
  return 'accLocked.gif'
}

function grpHas(u,g,f){if(g=='')return f;return g.indexOf('|'+u+'|')>=0}
function grpAdd(u,g){var t=grpDel(u,g); if(t=='')t='|';return t+u+'|'}
function grpDel(u,g){var t=g.replace('\|'+u+'\|','|').replace(/\|\|/g,'|'); return t=='|'?'':t}
function grpFormat(g){return g?g.replace(/^(\|)|(\|)$/g,'').replace(/\|/g,','):'&nbsp;'}

// Format US date format (m/d/y) into another format
// Usage: formatDate('12/1/2000', 'dd/mm/yyyy') returns 01/12/2000
function formatDate(v,f,de,b){ // date_value_string, format {}, delimiter, includeTime
 var o=getMField(0,v,' ')
 if(!f)return o
 var ar=o.split(!de?'/':de)
 if(ar.length!=3)return o
 var m=0,d=0,y=0
 for(var i=0;i<v.length;i++)
  switch (f.charAt(i).toLowerCase()){
   case "m" : m++; break
   case "d" : d++; break
   case "y" : y++; break
  }
 if ( m==2 && ar[0].length==1 ) ar[0] = "0" + ar[0];
 if ( d==2 && ar[1].length==1 ) ar[1] = "0" + ar[1];
 if ( y==4 && ar[2].length==2 ) ar[2] = "20" + ar[2];
 o = f.replace(/m+/i,ar[0])
 o = o.replace(/d+/i,ar[1])
 o = o.replace(/y+/i,ar[2])
 return o + (b ? ' ' + v.replace(/:\d+ /,' ').replace(/^[^ ]*/,'') : '') // remove millisecond & everything before first space
}
function gxDate(a,b,c){return formatDate(a,b,c)} // v3.x legacy support

function getExtension(s){return s.replace(/^.*\./g,'')}
function remapWildcard(s){return s.replace(/\*/g,'%')}