// active computing javascript library -------------------------------------------------------------

var jsAt,jsCurs,jsIE=(document.all),jsSpawn=false,jsTab=Array();
var VARS='&'; DATA='|'; KEYS='*';

function jsBannerAd(adv,sit,pag) {
	var pag=jsIO('BannerAd',adv,sit,pag);	
	window.open(pag,'preview','toolbar,status,resizable,scrollbars,width=760,height=600');
}

function jsButton(btt,val) {
  var sbs,tmp,typ,wrk;
  if (!btt) {btt='-Update,-Delete,-Copy,-Paste,-Search,-Recall,+New';}
  if (typeof(btt)=='object') {
    if (btt.attributes.file) {jsButton('+Search',btt.attributes.file.value);} else {jsButton('-Search');} 
    if (btt.className=='key') {jsButton('-Update,-Delete,-Copy,+New,-Paste'); return;}
    if (document.getElementById('mnuPaste')) {if (jsGet(mnuPaste).length>8) {jsButton('+Paste');}}
    jsButton('+Update,-New'); wrk=document.getElementById('dCrtd'); if (wrk) {if (wrk.value>'') {jsButton('+Delete,+Copy,-New');}}
    return;
  }
  wrk=btt.split(','); if (wrk.length>1) {for (sbs in wrk) {jsButton(wrk[sbs]);} return;} 
  typ=btt.substr(0,1); btt=btt.substr(1);
  if (val) {
    tmp=document.getElementById('mnu'+btt); 
    if (tmp) {wrk=tmp.firstChild.nodeValue; sbs=(wrk+'=').indexOf('='); wrk=wrk.substring(0,sbs)+'='+val; tmp.firstChild.nodeValue=wrk;}
  }
  if (typ=='+') {
    tmp=document.getElementById('tbm'+btt); if (tmp!=null) {tmp.style.visibility='visible';} 
    tmp=document.getElementById('mnu'+btt); if (tmp!=null) {tmp.className='mn'+tmp.className.substr(2,1);}
  }
  if (typ=='-') {
    tmp=document.getElementById('tbm'+btt); if (tmp!=null) {tmp.style.visibility='hidden';} 
    tmp=document.getElementById('mnu'+btt); if (tmp!=null) {tmp.className='of'+tmp.className.substr(2,1);}
  }
}     
 
function jsClear() {
  var FRM,obj,sbs;
  if (jsSpawn==true) {jsTask(mnuExit);} FRM=document.getElementById('Form').getElementsByTagName('*');
  for (var i=0; i<FRM.length; i++) {
    obj=FRM[i];
    if (obj.id) {
      if (obj.tabIndex>0) {jsTab[obj.tabIndex]=obj;}
      switch (obj.className) {
        case 'bar': case 'but': case 'hid': case 'mn1': case 'mn2': case 'mn3': 
          case 'of1': case 'of2': case 'of3': case 'rad': case 'tbm': case '': break;
        case 'dis': obj.value=(obj.attributes.def)?obj.attributes.def.value:''; break;
        case 'chk': obj.checked=(obj.attributes.def)?obj.attributes.def.value:''; break;
        case 'flg': obj.src='img/menu/chk-n.gif'; break;
        case 'img': obj.src=(obj.attributes.def)?obj.attributes.def.value:''; 
          if (!obj.attributes.mask) {obj.style.visibility='hidden';} break;
        case 'key': case 'mlt': case 'que': case 'txt': case 'sel': case 'val': case 'ph1': case 'ph2': case 'ph3': case 'ph4': 
          case 'ph5': case 'ph6': case 'pht': obj.value=(obj.attributes.def)?obj.attributes.def.value:''; break;
        case 'pwd': obj.value=''; break;
        default: alert('jsClear - Unknown field class ['+obj.className+'] in '+obj.id); break;
      }
    }
  }
  if (jsTab.length>0) {jsAt=1; jsTab[1].focus();}
}

function jsError(obj) {
  var col,err,ret=Array(),sav,siz;
  if (obj==form) {for (col=1; col<jsTab.length; col++) {if (jsError(jsTab[col])) {jsAt=col; return true;}} return false;}
  rep=jsGet(obj); sav=rep; err=''; glf='';
  siz=0; if (obj.attributes.maxLength) {siz=obj.attributes.maxLength.value;}
  if (obj.atts.indexOf('A')>-1) {rep=rep.replace(/[0-9?]/g,'');}
  if (obj.atts.indexOf('M')>-1) {if (rep=='') {err='field is compulsory';}} 
  if (obj.atts.indexOf('F')>-1) {if (siz>0&&rep.length>0) {
	  if (rep.length<siz&&obj.className!='chk') {err='a '+siz*1+' character answer is required';}}
	}
  if (obj.atts.indexOf('P')>-1) {rep=rep.replace(/\b([a-z])/g,function(w){return w.toUpperCase()}); 
    rep=rep.replace(/(['])([A-Z])\b/g,function(w){return w.toLowerCase()}); 
    rep=rep.replace(/(['])([A-Z])([a-z])\b/g,function(w){return w.toLowerCase()});}
  if (obj.atts.indexOf('L')>-1) {rep=rep.toLowerCase();}
  if (obj.atts.indexOf('U')>-1) {rep=rep.toUpperCase();}
//        case 'C': case 'Q': case 'R': break;
//        case 'E': if (rep!='') {alert('jsError - Test Email');} break;
//        case 'N': if (rep!='') {rep=rep.match(/[0-9.]/g).join('');} break;
//        case 'S': rep=rep.replace(/[ ]/g,''); break;
//        case 'Z': if (rep=='') {rep='0';} break;
//  if (obj.className=='sel'&&(rep==''||rep=='?')&&obj.flags.indexOf('M')>-1) {err='selection is required';} 
	if (sav!=rep) {jsPut(rep,obj);} 
  if (err!='') {alert('Invalid reply, '+err); obj.focus(); return true;}
  return false;
}

function jsGet(obj) {
  if (typeof(obj)=='string') {obj=document.getElementById(obj);}
  switch (obj.className) {
    case 'bar': case 'mn1': case 'of1': case 'tbm': case '': return '';
    case 'but': case 'mn2': case 'of2':  case 'mn3': case 'of3': return obj.firstChild.nodeValue;
    case 'chk': return (obj.checked==true)?"Y":"N"; 
    case 'flg': return (obj.src.indexOf('chk1')>0)?"Y":"N";
    case 'dis': case 'hid': case 'key': case 'mlt': case 'que': case 'ph1': case 'ph2': case 'ph3': case 'ph4': case 'ph5': 
      case 'ph6': case 'pht': case 'pwd': case 'rad': case 'sel': case 'txt': return obj.value;
    case 'img': return obj.src;
    case 'val': var tmp=obj.options.split(','); for (sbs in tmp) {if (obj.value==tmp[sbs]) {return tmp[0].substr(sbs-1,1);}} return '';
    default: alert('jsGet - Invalid class in '+obj.id + ' ['+obj.className+']'); return '';
  }
}

function jsGetAll(opt) {
	var ans,FRM,sbs;
  if (!document.getElementById('Form')) {alert('jsGetAll - No Body Form declared'); return;}
  FRM=document.getElementById('Form').getElementsByTagName('*'); ans='';
  for (sbs=0; sbs<FRM.length; sbs++) {
	  if (FRM[sbs].id) {
  	  if (opt==KEYS&&FRM[sbs].className=='key') {ans+='|'+jsGet(FRM[sbs]);}
      if (opt!=KEYS&&FRM[sbs].attributes.data) {ans+=opt+FRM[sbs].id+'='+jsGet(FRM[sbs]);}
    }
  } if (opt!=VARS) {return ans.substr(1);} return ans;
}

function jsIO(act,map,key,dat) {
  var ans,req,sbs,tmp=Array(),url,wrk=Array(); if (dat==undefined) {dat='';}
  url=hSrvr.value+'?&IOAct='+act+'&IOMap='+map+'&IOKey='+edit(key,'&')+'&IODat='+edit(dat,'&'); //alert('jsIO<- '+url);
  try {req=new ActiveXObject('Msxml2.XMLHTTP')
    } catch (e) {try {req=new ActiveXObject('Microsoft.XMLHTTP')
      } catch (e) {try {req=new XMLHttpRequest();
        } catch (e) {alert ('jsIO - Browser does not support XMLHttpRequest'); return null;}}}
  req.open('POST',url,false,null,null); 
  req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); req.send(url);
  if (req.status!=200) {alert('jsIO - URL not found ('+url+')'); return null;}  
  ans=req.responseText; //alert('jsIO-> '+ans);
  if (ans.substr(0,1)=='?'||ans.substr(0,5)=='Array'||ans.indexOf('<b>Fatal')>0
    ||ans.indexOf('<b>Warning')>0||ans.indexOf('<b>Parse error')>0) {alert(ans); return null;} 
  if (ans.indexOf('=')<0||ans.indexOf('|')<0) {return ans;}
  ans=ans.split('|'); for (sbs in ans) {tmp=ans[sbs].split('='); wrk[tmp[0]]=tmp[1];} return wrk;
}

function jsKeyed(evt) {
  var err,key='',OBJ=Array(),sbs; var chr=0;
  if (typeof(evt)=='string') {
    if (evt.substr(0,1)=='^') {key='^'; chr=evt.substr(1);}
    if (evt.substr(0,1)=='F') {key='F'; chr=evt.substr(1).valueOf();}
  } else {
    chr=evt.keyCode; key=='';
    if (evt.ctrlKey) {key='^'+unescape('%'+evt.keyCode.toString(16));}
    if (chr>111&&chr<124) {key='F'+(chr-111);}
    if (key!='') {
      OBJ=document.getElementById('mn1').getElementsByTagName('A');
      for (i=0; i<OBJ.length; i++) {
        if (OBJ[i].firstChild.nodeValue.indexOf(key)>-1) {
          evt.returnValue=false; evt.cancelBubble=true; evt.keyCode=0; window.location.href=OBJ[i].href; return false;
        }
      }     
    }
    if (chr!=13&&chr!=9) {return;}
    if (chr==13) {
      if (jsTab[jsAt].className=='but') {jsTab[jsAt].click(); jsAt-=1;} else {if (jsError(jsTab[jsAt])) {return;} doTask(jsTab[jsAt]);} 
      if (jsAt<jsTab.length-1) {jsAt+=1; jsTab[jsAt].focus();}
    }
    if (chr==9&&evt.shiftKey) {if (jsAt>1) {jsAt-=1; jsTab[jsAt].focus();}}
    if (chr==9&&!evt.shiftKey) {if (jsError(jsTab[jsAt])) {return;} doTask(jsTab[jsAt]); 
    if (jsAt<jsTab.length-1) {jsAt+=1; jsTab[jsAt].focus();}}
    if (jsIE) {evt.returnValue=false; evt.cancelBubble=true; evt.keyCode=0; return;}
    evt.stopPropagation(); evt.preventDefault();
  }
}  

function jsMenuHide(itm) {document.getElementById('mnu'+itm).style.visibility='hidden';}
 
function jsMenuShow(itm) {document.getElementById('mnu'+itm).style.visibility='visible';}

function jsMouse(icn) {if (jsCurs!=icn) {for (var i=0; i<document.all.length; i++) {document.all(i).style.cursor=icn;}} jsCurs=icn;}

function jsPage(pag) {
  var err,par,url,win,wrk;
  if ((pag.indexOf('http:')>-1||pag.indexOf('www.')>-1)&&(pag.indexOf('hSrvr')==-1)) {
	  window.open(pag,'preview','toolbar,status,resizable,scrollbars,width=640,height=480'); return;
	}
  ext=mid(pag,'&',''); pag=mid(pag+'&','','&'); if (ext!='') {ext='&'+ext;}
  anc=mid(pag,':',''); pag=mid(pag+':','',':'); if (anc!='') {anc=':'+anc;}
  win=jsIO('window',pag); 
  if (win.indexOf('P')>=0) {
	  err=jsIO('login',hUser.value,hPass.value,pag); 
	  if (err!='OK') {
		  if (err!='Login') {alert(err);}
		  url=hSrvr.value+'?&Page=Login&Targ='+pag; win=jsIO('window','Login'); 
		  wrk=win.split('x'); par=''; par+='height='+(wrk[1]*16+98)+',width='+(wrk[0]*8+9);
		  var login=window.open(url,'Login',par); login.focus(); return;
		}
	}
  if (typeof(hUser)!='undefined') {ext+='&hUser='+hUser.value+'&hPass='+hPass.value;}
  url=hSrvr.value+'?&Page='+pag+anc+ext;
  if (win==''||win=='xP') {window.location.href=url; return;}
  wrk=win.split('x'); par='';
  if (win.indexOf('L')>=0) {par+='location,';}
  if (win.indexOf('T')>=0) {par+='toolbar,';}
  if (win.indexOf('S')>=0) {par+='scrollbars,'; wrk[0]=wrk[0]*1+2;} 
  if (win.indexOf('R')>=0) {par+='resizable,';}
  par+='height='+(wrk[1]*16+98)+',width='+(wrk[0]*8+9);
  preview=window.open(url,pag,par); preview.focus();
}

function jsPut(val,obj,err) {
  var frm,msk,rep,sav; if (val==undefined) {return;} sav=obj;
  if (typeof(obj)=='string') {obj=document.getElementById(obj);}
  if (obj==null) {if (err==null) {alert('jsPut - Screen destination not declared ['+sav+']');} return;}
  if (obj.atts.indexOf('.')>-1) {val=edit(val,obj.atts+'S');}
  switch (obj.className) {
    case 'but': obj.firstChild.nodeValue=val; break;
    case 'chk': obj.checked=(val=='Y'); break;
    case 'dis': obj.value=val; break;
    case 'flg': if (val=='Y') {obj.src='img/menu/chk-y.gif';} else {obj.src='img/menu/chk-n.gif';} break;
    case 'img': msk=obj.attributes.mask.value; if (msk=='') {msk='*';} rep=val.toLowerCase(); 
      obj.src=msk.replace(/\*/gi,rep); obj.style.visibility='hidden'; if (val!='') {obj.style.visibility='visible';} break;
    case 'key': obj.value=(val)?val:((obj.def)?obj.def:''); break;
    case 'mlt': case 'que': obj.value=(val)?val:((obj.def)?obj.def:''); break;
    case 'ph1': case 'ph2': case 'ph3': case 'ph4': case 'ph5': case 'ph6': case 'pht': obj.value=val; break;
    case 'pwd': obj.value=val; break;
    case 'rad': obj.checked=val; break;
    case 'sel': obj.value=(val)?val:obj.def; break;
    case 'txt': val=(val)?val:((obj.def)?obj.def:''); obj.value=val; break;
    case 'val': obj.value=coded(val,obj.attributes.options.value); break;
    default: alert('jsPut - Invalid class in '+obj.id + ' ['+obj.className+']');
  }
}

function jsRecall(ans,fld) {
  var err,key,sbs,wrk;
  if (fld) {jsTab[fld].value=ans; err=doTask(jsTab[fld]); if (err) {alert(err);} jsTab[fld].focus(); return;}
  if (!ans) {return;} key=ans.split(','); jsClear(); 
  for (sbs=1; sbs<=key.length; sbs++) {jsTab[sbs].value=key[sbs-1]; err=doTask(jsTab[sbs]); if (err) {alert(err); jsTab[sbs].focus(); return;}}
  jsTab[sbs].focus();
}

function jsSound(fnam,cmnd) {
  var tmp='<EMBED src="'+fnam+'"';
  tmp+=(cmnd==undefined)?' width="1" height="1"':' width="376" height="44"';
  tmp+=' type="application/x-mplayer2" autostart="true"<\/EMBED>';
  document.getElementById('Sound').innerHTML=tmp;
}

function jsTask(act) {
  if (act.className.substr(0,2)=='of') {return;}
  switch (act.id) {
    case 'mnuPrint': window.print(); break;
    case 'mnuClear': jsClear(); break;
    case 'mnuExit': window.opener=null; window.open('','_parent',''); window.close(); break;  
    case 'mnuCopy': jsButton('+Paste',jsGetAll(KEYS)); jsClear(); break;
    case 'mnuSearch': jsPage('Search&List='+mid(jsGet(mnuSearch),'=','')+'&Back='+jsAt); break;
    case 'mnuFirst': jsRecall(jsIO('first',hData.value)); break;
    case 'mnuPrevious': jsRecall(jsIO('previous',hData.value,jsGetAll(KEYS))); break;
    case 'mnuNew': jsRecall(jsIO('new',hData.value,'')); break;
    case 'mnuNext': jsRecall(jsIO('next',hData.value,jsGetAll(KEYS))); break;
    case 'mnuLast': jsRecall(jsIO('last',hData.value)); break;
    case 'mnuRecall': jsRecall(mid(jsGet(mnuRecall),'=','')); break;
    case 'mnuGuide': jsPage('Guide:'+hPage.value); break;
    case 'mnuAbout': jsPage('About'); break;
  }
}

function jsVideo(url,wid,hig) {
  var prp,prv,txt;
  prp='width='+wid+',height='+hig;
  txt='<HTML><HEAD>\n';
  txt+='  <TITLE>Video ('+url+')</TITLE>\n';
  txt+='</HEAD>\n';
  txt+='<BODY topmargin=0 leftmargin=0 bgcolor=white alt="Click to close" onclick="javascript:window.opener=null; window.close();">\n';
  txt+='  <DIV style="background:#000; background-image:url('+"'"+mid(url,'','.')+".jpg'"+'); background-repeat:no-repeat; background-position:top 50%; width:'+wid+'; height:'+hig+';">\n';
  txt+='    <OBJECT ID="video" width='+wid+' height='+hig+' classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" type="application/x-oleobject" VIEWASTEXT align="left">\n';
  txt+='      <PARAM name="FileName" value="'+url+'">\n';
  txt+='      <PARAM name="ShowControls" value=1>\n';
  txt+='      <PARAM name="ShowStatusBar" value=1>\n';
  txt+='      <PARAM name="TransparentAtStart" value=1>\n';
  txt+='      <PARAM name="AutoStart" value=1>\n';
  txt+='      <PARAM name="autoSize" value=0>\n';
  txt+='      <PARAM name="displaySize" value=0>\n';
  txt+='      <PARAM name="enableContextMenu" value=0>\n';
  txt+='      <PARAM name="uiMode" value="invisible">\n';
  txt+='      <EMBED type="application/x-mplayer2" pluginspage="http://www.microsoft.com/Windows/Downloads/Contents/Products/MediaPlayer/"\n';
  txt+='        src="'+url+'" name="video-x" width='+wid+' height='+hig+' autoStart=1 transparentAtStart=1 animationAtStart=0 autoSize=0 \n';
  txt+='        ShowStatusBar=0 ShowControls=1 displaySize=0 enableContextMenu=0 uiMode="invisible" align="center">\n';
  txt+='    </OBJECT>\n';
  txt+='  </DIV>\n';     
  txt+='</BODY></HTML>\n';
  prv=window.open('','video',prp); prv.document.open(); prv.document.write(txt); prv.document.close();
}

function jsViewer(url,wid,hig) {
  var prp,prv,txt;
  prp='width='+wid+',height='+hig;
  txt='<HTML><HEAD>\n';
  txt+='  <TITLE>Viewer ('+url+')</TITLE>\n';
  txt+='</HEAD>\n';
  txt+='<BODY topmargin=0 leftmargin=0 bgcolor=white>\n';
  txt+='  <IMG src="'+url+'" alt="Click to close" onclick="javascript:window.opener=null; window.close();" width='+wid+' height='+hig+'>\n'; 
  txt+='</BODY></HTML>\n';
  prv=window.open('','viewer',prp); prv.document.open(); prv.document.write(txt); prv.document.close();
}

// js equivalent commands --------------------------------------------------------------------------

function coded(cval,ctxt) {var opt=ctxt.split(","); var sbs=opt[0].indexOf(cval); if (sbs<0||cval=='') {return '';} return opt[sbs+1];}

function cvt(val,frm) {
  var mns,scs,tmp; val=String(val);
  if (frm.indexOf('T')>-1) {
	  scs=Math.floor(val/1000); tmp=val-scs*1000; tmp=Math.floor(tmp/10); mns=Math.floor(scs/60);
    scs=scs-mns*60; val=mns+':'; if (scs<10) {val+='0';} val+=scs+'.'; if (tmp<10) {val+='0';} val+=tmp;
  }  
  return val;
}

function edit(val,frm) {
  var col,mnt,tmp; val=String(val);
  if (frm.indexOf('A')>-1) {val=val.replace(/[0-9]/g,'');}
  if (frm.indexOf('L')>-1) {val=val.toLowerCase();}
  if (frm.indexOf('U')>-1) {val=val.toUpperCase();}
  if (frm.indexOf('N')>-1) {val=val.replace(/[A-Za-z]/g,'');}
  if (frm.match(/[0-9.]/g)) {tmp=frm.match(/[0-9.]/g).join(''); col=Math.floor(tmp); mnt=(tmp*10)%10;}
  if (mnt>0) {
    val=String(parseInt(val*Math.pow(10,mnt))); tmp=val.length; while (tmp<mnt+1) {val='0'+val; tmp++;}
    val=val.substr(0,tmp-mnt)+'.'+val.substr(tmp-mnt);
  }
  if (val!=undefined) {if (frm.indexOf('&')>-1) {tmp=val.split('&'); val=tmp.join('%26');}}
  if (frm.indexOf('N')>-1) {if (val==0&&frm.indexOf('-')>-1) {val='-';} if (val==0&&frm.indexOf('Z')<0) {val='';}}
  if (col>0) {
	  val=val.substr(0,col); tmp=''; for (sbs=val.length; sbs<col; sbs++) {tmp+=' ';} val=(frm.indexOf('R')>-1)?tmp:val+tmp;
  }
  if (frm.indexOf('S')>-1) {val=val.replace(/ /g,'');}
  return val;
}

function mid(dat,lhs,rhs) {
  var sbs=dat.indexOf(lhs); if (sbs<0) {return '';}
  dat=dat.substr(sbs+lhs.length); if (rhs=='') {return dat;}
  sbs=dat.indexOf(rhs); return dat.substr(0,sbs);
}
