var isNav = ( navigator.appName.indexOf( "Netscape" ) != -1 );
var isIE = ( navigator.appName.indexOf( "Microsoft" ) != -1 );

function chkPwd(_SysOldPass, _w1, _w2, _w3)
{       
 var SysOldPass = _SysOldPass;
 var w1 = _w1;
 var w2 = _w2;
 var w3 = _w3;
// if( w1.value != SysOldPass )
// {
// alert( "old password fail!!" );
// w1.value = w2.value = w3.value = "";
// return false;
// }
// else if( w2.value != w3.value )

 if( w2.value != w3.value )
  {
  //alert( "new password is not equal to repeat password" );
  w1.value = w2.value = w3.value = "";
  return false;
  }
 else
  {
  return true;
  }
}
////////////////// check Ip is valid //////////////
//      control.value == bool --> active all element

function enable0( _control )
 {
  var control = _control;
  //alert(control.checked+"  "+bool);
  if(!(control.checked == true))
   {
    //alert(" 322  ");
    control.focus();
   }
 }

function cpntCtrl( _ctrl, _frm, _fstElmt, _cnt)
{
    var ctrl = _ctrl, frm = _frm, fstElmt = _fstElmt, cnt = _cnt;
    var check;  
        
    /* if ctrl lose right of control */
    if ( ctrl.disabled == true ) {
        return;
    }   

    if ( ctrl == true ||  ctrl == false ) {
        check = ctrl;
        for ( var i = getIdxOfForm(fstElmt); i < cnt + getIdxOfForm(fstElmt); i++ ) {
            frm[i].disabled = !check;  
        }
        return;
    }   
                        
    switch ( ctrl.type ) {                            
        case "radio":                   
        case "checkbox":                        
            check = ctrl.checked;                               
            for ( var i = getIdxOfForm(fstElmt); i < cnt + getIdxOfForm(fstElmt); i++ ) {                                               
                frm[i].disabled = !check;                               
            }                                   
            break;              
    } // switch                 
}

function swapElmt( _elmt1, _elmt2 )
 {
  var elmt1 = _elmt1;
  var elmt2 = _elmt2;
  var temp;
        
  if ( elmt1.type != "text" || elmt1.type != elmt2.type )
  return false;
  temp = elmt1.value;
  elmt1.value = elmt2.value;
  elmt2.value = temp;
 }

function checkPortsRange( _elmt1, _elmt2 )
 {
  var elmt1 = _elmt1;
  var elmt2 = _elmt2;
  var error = false;
  var nElmt1 = elmt1.value;
  var nElmt2 = elmt2.value;
  //alert( isNaN( parseInt(nElmt1) )+ " : "+nElmt1 +" : "+isNaN( parseInt(nElmt2) ) );
                
  if ( ( elmt1.value != "" && !(elmt1.value >= 0 && elmt1.value <= 0xffff) ) )
   {
    elmt1.value = elmt1.value.slice( 0, elmt1.value.length-1 );
    if ( isNav )
    elmt1.select();
    error = true;
   }
  if ( ( elmt2.value != "" && !( elmt2.value >= 0 && elmt2.value <= 0xffff ) ) )
   {
    elmt2.value = elmt2.value.slice( 0, elmt2.value.length-1 );
    if ( isNav )
    elmt2.select();
    error = true;
   }
  //if ( !error )
  //alert( "port error!!" );
 }

function isSwapPorts( _elmt1, _elmt2 )
 {
  var elmt1 = _elmt1;
  var elmt2 = _elmt2;
/*
if ( isNaN( parseInt(elmt1.value) ) || isNaN( parseInt(elmt1.value) ) )
{
//alert( "isSwapPorts() => NaN error!!" );
return false;
}
*/
  if ( elmt1.value == "" )
  elmt1.value = 0;
  if ( elmt2.value == "" )
  elmt2.value = 0;
  elmt1.value = parseInt( elmt1.value, 10 );
  elmt2.value = parseInt( elmt2.value, 10 );
  if ( isNaN(elmt1.value) )
  elmt1.value = "";
  if ( isNaN(elmt2.value) )
  elmt2.value = "";
  if ( parseInt(elmt1.value) > parseInt(elmt2.value) )
  swapElmt( elmt1, elmt2 );
 }

function check4Ip( _elmt )
 {
  var elmt = _elmt;
  var idx = getIdxOfForm( elmt );
  chword( elmt.form[idx], elmt.form[idx+1] );
  chword( elmt.form[idx+1], elmt.form[idx+2] );
  chword( elmt.form[idx+2], elmt.form[idx+3] );
  chword( elmt.form[idx+3], elmt.form[idx+3] );
 }

function chword( _f1, _f2 )
 {
  var f1 = _f1;
  var f2 = _f2;
  //alert( f1.value +" : "+f1.value.indexOf(".") );
  if ( f1.value.indexOf(".") >= 0 )
   {
    f1.value = f1.value.slice( 0, f1.value.length-1 );
    if ( f1 != f2 )
     {
      f2.focus();
     }
    return;
   }
  if( !(f1.value <= 255 && f1.value >= 0) )
   {
    f1.value = f1.value.slice( 0, f1.value.length-1 );
    if ( isNav )
     {
      f1.select();
     }
   }
 }

//

function raisePower( _x, _y )
 {
  var x = _x;
  var y = _y;
  return Math.pow( x, y )
 }

function isStrIp( _strIp )
 {
  var strIp = _strIp;
  strIp += "";
  var aryIp = strIp.split(".");
  if( aryIp.length != 4 )
  return false;
  else
  for( var i=0, u32Ip=0; i<4; i++ )
   {
    if( !(aryIp[i] <= 255 && aryIp[i] >= 0) )
    return false;
    u32Ip += parseInt(aryIp[i])*raisePower(256, 3-i);
   }
  //alert( "isStrIp() => u32Ip:"+u32Ip );
  //if ( u32Ip > 0 && u32Ip < 0xffffffff )
  if ( u32Ip > 0 && u32Ip <= 0xffffffff ) //shirley,2004-11-03,tmp
  return true;
  else
  return false;
 }

function inet_addr( _strIp )
 {
  var strIp = _strIp;
  var aryIp = strIp.split(".");
  if( aryIp.length != 4 || aryIp[3] == "" )
   {
    //alert("fail:inet_addr ---> not enough ip number: "+strIp);
    return false;
   }
  else
  for( var i=0, uiIp=0; i<4; i++)
   {
    if( !(aryIp[i] <= 255 && aryIp[i] >= 0) )
     {
      //alert("fail:inet_addr ---> number error: "+strIp);
      return false;
     }
    uiIp += aryIp[i]*raisePower(256, 3-i);
   }
  return uiIp;
 }

function inet_ntoa( _uiIp )
 {
  var uiIp = _uiIp;
  var strIp = new String();
  var aryIp = new Array();
  if ( uiIp == 0 || uiIp == 0xffffffff )
   {
    strIp = "";
    return strIp;
   }
  for ( i=0; i<4; i++ )
   {
    aryIp[3-i] = uiIp % 256;
    uiIp = (uiIp - aryIp[3-i])/256;
   }
//for ( i=0; i<4; i++ )
//{
//aryIp[3-i] = uiIp & 0x000000ff;
//uiIp >>>= 8;
//
//}      
  for ( i=0; i<4; i++ )
   {
    if( i < 3 )
    strIp += aryIp[i]+".";
    else
    strIp += aryIp[i];
   }     
  return strIp;
 }

//

function isEqualLan( _ip1, _mask1, _ip2 )
 {
  var ip1 = _ip1;
  var mask1 = _mask1;
  var ip2 = _ip2;
  var uiIp1 = inet_addr( ip1 );
  var uiMsk1 = inet_addr( mask1 );
  var uiIp2 = inet_addr( ip2 );
  if( ((Math.floor(uiIp1/0x10000) & Math.floor(uiMsk1/0x10000)) == (Math.floor(uiIp2/0x10000) & Math.floor(uiMsk1/0x10000))) && 
      ((Math.floor(uiIp1%0x10000) & Math.floor(uiMsk1%0x10000)) == (Math.floor(uiIp2%0x10000) & Math.floor(uiMsk1%0x10000))) )
  return true;
  else
  return false;
 }

function setEqualLan( _ip1, _mask1, _ip2 )
 {
  var ip1 = _ip1;
  var mask1 = _mask1;
  var ip2 = _ip2;
  if( isEqualLan( ip1, mask1, ip2 ) == false )
   {
    var uiIp1 = inet_addr( ip1 );
    var uiMsk1 = inet_addr( mask1 );
    var uiIp2 = inet_addr( ip2 );
    uiIp2 = (uiIp1 & uiMsk1) | (uiIp2 & ~uiMsk1);
    return  inet_ntoa( uiIp2 );
   }
  return true;
 }

//////////////////////////
//   date : 23Nov2000   //
//////////////////////////

//      get index of element of form : getIdxOfForm( _elmt )
function getIdxOfForm( _elmt )
 {
  var elmt = _elmt;
  if ( elmt.type )
   {
    for ( var i=0; i<elmt.form.length; i++ )
     {
      if ( elmt == elmt.form[i] )
      return i;
     }
   }
  return false;
 } // getIdxOfForm()

// spare ULONG IP or Address IP to 4 IP of text
// the kind of vle is 'string ip' or 'U32 ip' or ''
function spareIp( _elmt, _vle )
 {
  var elmt = _elmt;
  var vle = _vle;
  var aryIp = new Array(4);
  var idx = getIdxOfForm( elmt );
  if ( "" == vle )
  aryIp[0] = aryIp[1] = aryIp[2] = aryIp[3] = "";
  else if ( isStrIp( vle ) )
  aryIp = vle.split(".");
  else if ( vle > 0 && vle < 0xffffffff )
   {
    aryIp = inet_ntoa( vle ).split(".");
   }
  else
  return false;
  for ( var i=0; i<4; i++ )
  elmt.form[idx+i].value = aryIp[i];
 } // spareIp()

// mix 4 ip of number to IP address
function mixIp( _elmt )
 {
  var elmt = _elmt;
  var idx = getIdxOfForm( elmt );
  var strIp = "";
  strIp = elmt.form[idx+0].value + "." + elmt.form[idx+1].value + "." + elmt.form[idx+2].value + "." + elmt.form[idx+3].value;
  //alert ( "mixIp() => strIP:"+strIp );
  if ( isStrIp( strIp ) )
  return strIp;
  else if ( "..." == strIp )
   {
    strIp = "";
    return strIp;
   }
  else
  return false;
 }

// set value to element
function setVle2Elmt( _elmt, _vle, _fmt )
 {
  // for IE 4 that we have to do it
  var elmt = _elmt;
  var vle = _vle;
  var fmt = _fmt;
  switch( elmt.type )
   {
    case "button":
    break;
    case "checkbox":
    if ( vle > 0 || true == vle || "true" == vle || "1" == vle || "on" == vle )
    elmt.checked = true;
    else
    elmt.checked = false;
    break;
    case "radio": // Feb 20 2001, Tony
    for ( var i=0; i<elmt.form.length; i++ )
    if ( elmt.name == elmt.form[i].name && ( vle == elmt.form[i].value ) )
    elmt.form[i].checked = true;
    break;
    case "submit":
    break;
    case "text":
    case "hidden":  //shirley,2004-10-20
    if ( fmt == IP_FMT )
    spareIp( elmt, vle );
    else
    elmt.value = vle;
    break;
    case "password":
	elmt.value = vle;
    break;
    case "select-one":
    if ( fmt == IP_PROTOCOL )
     {
      if ( vle == IPPROTO_TCP )
      vle = "TCP";
      else if ( vle == IPPROTO_UDP )
      vle = "UDP";
      else
      vle = "";      
     }  
    //alert(elmt.options.length);
	/*
    if (elmt.options.length == 1 && elmt.options[0].text != "NTP (RFC-1305)")
     {
      //elmt.options[0] = new Option(vle, vle);
      elmt.options[0].text = elmt.options[0].value = vle; 
      //alert(elmt.selectedIndex+"::"+elmt.options.length);
      elmt.selectedIndex = 0;
      return;
     }
    */
    for ( var i=0; i<elmt.options.length; i++ )
     {
      if ( elmt.options[i].value == vle )
       {
        elmt.selectedIndex = i;
        return;
       }
     }
    elmt.selectedIndex  = vle;
    break;
    case "textarea":
    elmt.value=vle;
    break;
    //case "hidden":
    //break;
   }       
  return;
 } // setVle2Elmt()

// get value from element
function getVleFromElmt( _elmt, _fmt )
 {
  // for IE 4 that we have to do it
  var elmt = _elmt;
  var fmt = _fmt;
  var idx = getIdxOfForm( elmt );
  switch( elmt.type )
   {
    case "button":
    break;
    case "checkbox":
    if ( elmt.checked == true )
    return "1";
    else
    return "0";
    break;
    case "radio":
    for ( var i=0; i<elmt.form.length; i++ )
    if ( elmt.name == elmt.form[i].name && (true == elmt.form[i].checked ) )
    return elmt.form[i].value;
    break;
    case "submit":
    break;
    case "text":
    case "hidden":  //shirley,2004-10-20
    if ( fmt == IP_FMT )
    if ( mixIp( elmt ) != false )
    return mixIp( elmt );
    else
    return "";
    else
    return elmt.value;
    break;
    case "password":
	return elmt.value;
    break;
    case "select-one":
    for ( var i=0; i<elmt.options.length; i++ )
    if ( elmt.options[i].selected == true )
     {
      //alert( "getVleFromElmt() => i:"+i+" value:"+elmt.options[i].value );
      return elmt.options[i].value;
     }
    //alert( "getVleFromElmt() => select-one error" );
    break;
    //case "hidden":
    //break;
   }
 } // setVle2Elmt()

// choosePc()
 var _choosePc_ip;
 var _choosePc_elmt;
 var _choosePc_aryIp;
function choosePc( elmt, aryIp )
 {
  _choosePc_elmt = elmt;    
  if ( aryIp == null ) {
    _choosePc_aryIp = new Array();
  }
  else {  
    _choosePc_aryIp = aryIp;
  }  
  _choosePc_ip = 0;
  aWindow = window.open("../cgi-bin/func.cgi?fid="+FUNC_FID_CHOOSE_PC,"pcWindow","toolbars=no,width=150px,height=200px,status=no,scrollbars=no,resize=yes,menubar=no");
  //window.open( "test.htm" );
  cycle();
 }

function cycle()
 {
  if( _choosePc_ip != 0 )
  setVle2Elmt( _choosePc_elmt, _choosePc_ip, IP_FMT );
  else
  window.setTimeout( "cycle()",500 );
 } // choosePc()

function escapeUrl(str) {
  str = escape(str);
  str = str.replace(/\+/, "%2b");
  str = str.replace(/%20/, "+");
  return str;
}

function isStrPort(str) {
   var b,c,d;
   var strPort = str;
   strPort += "";
   if( strPort.length == 0){
   	return false;
   }
   for( b = 0; b <  strPort.length ; b++){
     c = parseInt( strPort.charAt(b),10 );
     if( isNaN(c) ){
    	return false;
     }
   }
   d = parseInt( strPort ,10 );
   if ( isNaN(d) ){
    	return false;
   } 
   if ( ( d >= 65536 ) || ( d <= 0 ) )
        return false;
        
   return true;
}

function getElmtById(doc, idVal)  //shirley,2004-10-27
{
  if(doc.getElementById != null) {
    return doc.getElementById(idVal);
  }
  if(doc.all != null) {
    return doc.all[idVal];
  }

  alert("getElmtById has problem!");
  return null;
}
