/*-------------------------------------------
utility library
--------------------------------------------*/


/*-------------------------------------------

--------------------------------------------*/
function tell(x)
{
var u;
var t;
var h;

u=window.location;
t=document.title;
h="mailto:?subject="+t+"&body=\r\n\r\n  "+t+"\r\n\r\n  "+u;
h=encodeURI(h);

return(h);
}



/*-------------------------------------------
modify link
--------------------------------------------*/
function link(h)
{
var r;

r=h+'?u='+document.location.pathname+'&t='+document.title;

return(r);
}

/*-------------------------------------------
set form values
--------------------------------------------*/
function good(tst,t,c)
{
var f;
var s;
var n;
var z;

z=c.length;


f=document.getElementById('test');
s=f.snd.length;
f.tid.value=t;
f.tst.value=tst;
f.xst.value=c;

for(n=0;n<s;n++)
{
f.snd[n].checked=false;
for(j=0;j<z;j++)
{
if(f.snd[n].value==c[j])
  {
  f.snd[n].checked=true;
  }
}
}

f=document.getElementById('s');
f.style.display='inline';

return(false);
}


/*-------------------------------------------
unset form values
--------------------------------------------*/
function undo()
{
var f;

f=document.getElementById('test');

f.tid.value=0;
f.tst.value="";
f.hst.value="";
f.hst.disabled=false;
f.dup.value="";
f.act.checked=true;

return;
}



/*-----------------------------------------------
adjust tell values
------------------------------------------------*/
function tale()
{
var f;
var c;
var v;
var j;
var n;

v=[];
f=document.getElementById('tell');

while(true)
{
j=f.cb.length;
if(j==undefined)
  {
  s =f.cb.checked==true?'+:':'-:';
  s+=f.cb.value;
  v[0]=s;
  break;
  }
for(n=0;n<j;n++)
{
s =f.cb[n].checked==true?'+:':'-:';
s+=f.cb[n].value;
v.push(s);
}
break;
}

v=v.join('~');
f.ver.value=v;
return;
}


/*-------------------------------------------
set form values
--------------------------------------------*/
function test(rid,tid,nam,dat,typ,how)
{
var f;
var s;
var n;
var z;

f=document.getElementById('test');
f.rid.value=rid;
f.tid.value=tid;
f.nam.value=nam;
f.dat.value=dat;

z=f.tt[0];

for(n=0;n<5;n++)
{
f.tt[n].checked=false;
if(n==0&&typ==0)
  {
  f.tt[n].checked=true;
  z=f.tt[n];
  continue;
  }
if(typ&(1<<(n-1)))
  {
  f.tt[n].checked=true;
  z=f.tt[n];
  }
}

for(n=0;n<2;n++)
{
f.rs[n].checked=false;
if(how&(1<<n))
  {
  f.rs[n].checked=true;
  }
}

f=document.getElementById('s');
f.style.display='inline';
z.focus();

return(false);
}



/*-------------------------------------------
set form values
--------------------------------------------*/
function call(cl,id,xm,wt,rp,ty,cn,cp)
{
var f;
var s;
var n;

f=document.getElementById('add');
f.cid.value=cl;
f.uid.value=id;
f.ovn.value=cp;
f.xmn.value=xm;
f.typ.value=ty;
f.cnum.value=cp;
f.cnam.value=cn;
f.cnum.disabled=(cl&&xm?true:false);

f.hold.value=wt;
f.next.value=rp;

s=f.user.options.length;
f.user.disabled=(cl)?true:false;
f.rst.disabled=(f.xmn.value==1)?true:false;
f.rst.checked=false;

for(n=0;n<s;n++)
{
if(f.user.options[n].value==id)
  {
  f.user.options[n].selected=true;
  }
  else
  {
  f.user.options[n].selected=false;
  }
}

s=f.type.length;
for(n=0;n<s;n++)
{
//f.type[n].disabled=(xm||n==2)?true:false;
f.type[n].disabled=(xm)?true:false;
if(f.type[n].value==ty)
  {
  f.type[n].checked=true;
  }
  else
  {
  f.type[n].checked=false;
  }
}

n=f.cnam;

s=document.getElementById('drst');
s.style.display=(f.rst.disabled==true)?'none':'inline';

f=document.getElementById('s');
f.style.display='inline';

n.focus();

return;
}


/*-------------------------------------------
flip form visibility
--------------------------------------------*/
function form(x)
{
var s;
var v;

v=false;
s=document.getElementById(x);

if(s!=null)
 {
 s.style.display=(s.style.display=='inline')?('none'):('inline');
 v=s.style.display=='inline'?true:false;
 if(x=='dZ') s.style.display='inline';
 }

return(v);
}


/*-------------------------------------------
flip form visibility for records
--------------------------------------------*/
function recs(x,n)
{
var s;
var v;
var f;
var d;

v=false;
d=x.toLowerCase();

s=document.getElementById(d);

if(s!=null)
 {
 if(x=='dZ'||n==false)
   {
   s.style.display='inline';
   }
   else
   {
   s.style.display=(s.style.display=='inline')?('none'):('inline');
   }
 v=s.style.display=='inline'?true:false;
 }

return(v);
}



/*-----------------------------------------------
handle edit forms
------------------------------------------------*/
function edit(typ,rid,nam,ttl,dat,hot)
{
var d;
var f;
var c;
var v;
var n;

n=(rid==0&&dat=='')?true:false;
d='d'+typ;
f='f'+typ;
v=recs(d,n);
f=document.getElementById(f);

if(f!=null)
  {
  f.rid.value=rid;
  f.nam.value=nam;
  f.ttl.value=ttl;
  f.dat.value=dat;
  if(v) f.nam.focus();
  if(d=='da'&&f.hot)
    {
    f.hot.checked=hot>0?true:false;
    }
  }

return(false);
}



/*-----------------------------------------------
confirmation
------------------------------------------------*/
function kill()
{
return(confirm('are you absolutely sure?'));
}


/*-----------------------------------------------
check for arpa name
------------------------------------------------*/
function arpa(h)
{
var rg=/^[0-9]{1,3}$/i;
var rc;

rc=rg.test(h);
return(rc);
}



/*-----------------------------------------------
check for host name
------------------------------------------------*/
function host(h,t,z)
{
var rg=/^[a-z0-9]{1,1}(?:[a-z0-9]|[\x2e](?![\x2d])|[\x2d](?![\x2e]))*[\x2e]{1,1}[a-z\x2e]{2,}$/i;
var rc;
var n;

while(true)
{
rc=rg.test(h);
if(!rc) break;
if(!t)  break;
n=h.length-z.length;
if(n<0) break;
n=h.substr(n);
rc=n==z?true:false;
break;
}

return(rc);
}


/*-----------------------------------------------
validate input
------------------------------------------------*/
function chck(frm,typ)
{
var r;
var n;
var nam;
var ttl;
var dat;
var msg;
var zlz;

msg="at least one field was blank";

r=false;

nam=frm.nam.value;
ttl=frm.ttl.value;
dat=frm.dat.value;
zlz=frm.zlz.value;

while(!r)
{
if(nam=='') break;
if(ttl=='') break;
if(dat=='') break;
if(zlz=='') break;
msg="ttl is not a valid number";
n=Math.round(ttl);
if(n!=ttl)  break;
msg="ttl too small";
if(n<1)     break;
msg="invalid host name";
n=host(nam,1,zlz);
if(!n&&typ!='CNAME'&&typ!='PTR'&&typ!='SRV') break;
msg='';
switch(typ)
{
case 'A':       n=dat.search(/^\d{1,3}\.{1}\d{1,3}\.{1}\d{1,3}\.{1}\d{1,3}$/);
                if(n<0)
                  {
                  msg="invalid ip address";
                  }
                break;
case 'PTR':     n=arpa(nam);
                if(!n)
                  {
                  msg='the address value must be 1 to 3 digits only';
                  break;
                  }
                n=host(dat,0,'');
                if(!n)
                  {
                  msg='invalid host name';
                  break;
                  }
                break;

case 'CNAME':   n=nam.substr(0,2);
                n=(n=='*.')?nam.substr(2):nam;
                n=host(n,1,zlz);
                if(!n)
                  {
                  msg="invalid host name";
                  break;
                  }
                n=host(dat,0,'');
                if(!n)
                  {
                  msg="invalid host name";
                  }
                if(nam==zlz)
                  {
                  msg="illegal cname data";
                  }
                break;

case 'MX':      n=dat.search(/^\d+\:{1,1}/);
                if(n<0)
                  {
                  msg='mail exchanger input format';
                  break;
                  }
                n=dat.search(/\:/);
                if(n<0)
                  {
                  msg="missing <:> separator";
                  break;
                  }
                n=dat.substr(n+1);
                n=host(n,0,'');
                if(!n)
                  {
                  msg="invalid host name for mail exchanger";
                  }
                break;
case 'SRV':
case 'TXT':    
default:        break;
}
r=msg==''?true:false;
break;
}

if(!r)
  {
  msg='problem:\r\n'+msg+'\r\nplease correct and try again';
  alert(msg);
  }

return(r);
}


/*-------------------------------------------
self submit
--------------------------------------------*/
function post()
{
var t;

t=window.location.search;
t=t.replace(/^\?/,'');
t=unescape(t);
stst.term.value=t;
stst.submit();
return;
}





/*-------------------------------------------
tags
--------------------------------------------*/
function tags(x,n)
{
var t=
[
"http://technorati.com/tag/uptime+monitor",
"http://digg.com/submit?phase=2&url=http://edgedirector.com/",
"http://del.icio.us/post?url=http://edgedirector.com/",
"http://www.blinklist.com/index.php?Action=Blink/addblink.php&Description=free+web+site+uptime+monitor&Url=http://edgedirector.com/&Title=free+web+site+uptime+monitor&Tag=uptime+monitor"
];

x.href=t[n];
return(true);
}


/*-------------------------------------------

--------------------------------------------*/
function mail(x) 
{
var sld=window.location.hostname; 
var win;

win="mailto:mail@"+sld+"?subject="+sld.toUpperCase();
x.href=win;
return(true);
}

/*-------------------------------------------

--------------------------------------------*/
function resize()
{
if(document.layers) self.location.reload();
}


/*-----------------------------------------------

------------------------------------------------*/
function calc(x)
{
var q;
var t;
var f;
var r;

f=document.frm;
q=f.quantity.value;
q=Math.floor(q);
t=Math.ceil(x*100);
t=(q*t)/100;
f.junk.value=t.toFixed(2);
f.quantity.value=q;

r=(q<1||t<x)?false:true;

return(r);
}


/*-------------------------------------------
EOF
--------------------------------------------*/
