var isNav = ( navigator.appName.indexOf( "Netscape" ) != -1 );
var isIE = ( navigator.appName.indexOf( "Microsoft" ) != -1 );

var IP_PROTOCOL = "ip_protocol";   
var IP_FMT = "IP";                 

function chkPwd(_SysOldPass, _w1, _w2, _w3)
{       
 var SysOldPass = _SysOldPass;
 var w1 = _w1;
 var w2 = _w2;
 var w3 = _w3;

 if( w2.value != w3.value )
  {
  w1.value = w2.value = w3.value = "";
  return false;
  }
 else
  {
  return true;
  }
}

function enable0( _control )
 {
  var control = _control;
  if(!(control.checked == true))
   {
    control.focus();
   }
 }

function cpntCtrl( _ctrl, _frm, _fstElmt, _cnt)
{
    var ctrl = _ctrl, frm = _frm, fstElmt = _fstElmt, cnt = _cnt;
    var check;  
        
    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":
            check = ctrl.checked;                               
            for ( var i = getIdxOfForm(fstElmt); i < cnt + getIdxOfForm(fstElmt); i++ ) {                                               
                frm[i].disabled = !check;                               
            }                                   
            break;          
        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;
                
  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;
   }
 }

function isSwapPorts( _elmt1, _elmt2 )
 {
  var elmt1 = _elmt1;
  var elmt2 = _elmt2;
  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;
  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 += "";
  
  if(strIp == "")return true;
  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);
   }
  if ( u32Ip >= 0 && u32Ip <= 0xffffffff )
  return true;
  else
  return false;
 }

function isStrDIP( _strIp )//IP or Domain
{
	var strIp = _strIp;
	var urlStyle3 = /^[A-Za-z0-9\-]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
	
	if ( !isStrIp( strIp ) && !urlStyle3.test( strIp ) ){
		return false;
	}

	return true;
}

function inet_addr( _strIp )
 {
  var strIp = _strIp;
  var aryIp = strIp.split(".");
  if( aryIp.length != 4 || aryIp[3] == "" )
   {
    return false;
   }
  else
  for( var i=0, uiIp=0; i<4; i++)
   {
    if( !(aryIp[i] <= 255 && aryIp[i] >= 0) )
     {
      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++ )
   {
    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;
 }

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;
  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":
    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":
    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 = "";      
     }  
    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"://janetsong, add, 2005-01-04
    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 )
     {
      return elmt.options[i].value;
     }
    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");
  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 true;
   }
   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)
{
  if(doc.getElementById != null) {
    return doc.getElementById(idVal);
  }
  if(doc.all != null) {
    return doc.all[idVal];
  }

  alert("getElmtById has problem!");
  return null;
}
  
function isStrMac( _strMac )
{
  var strMac = _strMac;
  var uMac;
  strMac += "";
  
  if(strMac == "")return true;
  var aryMac = strMac.split(":");
  if( aryMac.length != 6 )
    return false;
  else
    for( var i=0; i<6; i++ )
    {
      if( !(aryMac[i].length==2 && aryMac[i].match(/[0-9a-f][0-9a-f]/i)) )
        return false;
    }
  return true;
}
function checkPort(obj)
{
	if (obj.value<0 || obj.value>65535)
	{
		return true;
	}
	else
	{
		return false;	
	}
}
function enableAllElement(obj) {
	var els = obj.elements; 
	for(i=0; i<els.length; i++){
		els[i].disabled = false;
	}
}
function disableAllElement(obj) {
	var els = obj.elements; 
	for(i=0; i<els.length; i++){
		els[i].disabled = true;
	}
}
function setCheckHiden(obj1, obj2) {
	if (obj1.checked == true) {
		obj2.value = obj1.value;
	} else {
		obj2.value = 0;
	}
}
function protocol(i) {
      switch (i) {
        case 0 :
          document.write('TCP');
          break;
        case 1 :
          document.write('UDP');
          break;
        case 2 :
          document.write('All');
          break;
        default : 
          document.write('');
      }
    }
function protocol_port_redirection(i) {
      switch (i) {
        case 0 :
          document.write('TCP');
          break;
        case 1 :
          document.write('UDP');
          break;
        case 2 :
          document.write('TCP/UDP');
          break;
        default : 
          document.write('');
      }
    }
function mask(i) {
      switch (i) {
        case 0 :
          document.write('/24');
          break;
        case 1 :
          document.write('/16');
          break;
        case 2 :
          document.write('/8');
          break;
        case 3 :
          document.write('/25');
          break;
        case 4 :
          document.write('/26');
          break;
        case 5 :
          document.write('/27');
          break;
        case 6 :
          document.write('/28');
          break;
        case 7 :
          document.write('/29');
          break;
        case 8 :
          document.write('/30');
          break;
        case 9 :
          document.write('/31');
          break;
        case 10 :
          document.write('/32');
          break;  
        default : 
          document.write('');
      }
    }
function __interface(i) {
      switch (i) {
        case 0 :
          document.write('LAN');
          break;
        case 1 :
          document.write('WAN1');
          break;
        case 2 :
          document.write('WAN2');
          break;
        case 3 :
          document.write('WAN3');
          break;
        case 4 :
          document.write('WAN4');
          break;  
        default : 
          document.write('');
      }
}
function wan_interface(start, num) {
	for (i = 1 ; i <= num ; i++) {
          document.write('<option value='+(start++)+'>WAN'+i+'</option>');         
        }
}

function wan_status(str_value, w_index, num) {
	if (w_index <= num) {
		document.write(str_value);
        }else {
        	if (w_index-1 == num) {
        	document.write("&nbsp;");
        	}
        }         
}
function doEdit()
{
	document.frm.table_action.value = "Edit";
}
function doDelete( _sSet )
{
	//Janetsong >> 2005-01-04
	var ack = confirm(TR("Are you sure you want to delete this item?"));
	if( ack == 0 ) return;

        var f = document.frm;
        var setvalue = (_sSet == null)?"table_form":_sSet;
	var tableindex = getVleFromElmt( f.table_index[0], 0 );
	var tablepage = getVleFromElmt( f.table_page, 0 );
	var tablename = getVleFromElmt( f.table_name, 0 );

	location = "../cgi-bin/mainfunction.cgi?set="+setvalue+"&table_action=Delete&table_name="+tablename+"&table_index="+tableindex+"&table_page="+tablepage;
}

function doDeleteAll(_sSet){
	var ack = confirm(TR("Are you sure you want to delete all items?"));
	if( ack == 0 ) return;
	var f = document.frm;
	var setvalue = (_sSet == null)?"table_reset":_sSet;
	var tablename = getVleFromElmt( f.table_name, 0 );

	location = "../cgi-bin/mainfunction.cgi?set="+setvalue+"&table_name="+tablename;	
}	


function doUpload()
{
	document.frm.table_action.value = "Upload";
}

//Janet, 2004-11-25
function isPublicIp( _strIp )
{
  if(!isStrIp( _strIp )){
  	alert("Not an IP String!");
  	return false;
  }

  var strIp = _strIp;
  strIp += "";
  if(strIp == "")return true;

  var aryIp = strIp.split(".");
  
   if(aryIp[0] == 10){
   		alert("10.0.0.0 - 10.255.255.255* is Private IP Range!");
   		return false;
   	}		
   if(aryIp[0] == 172 && aryIp[1]>=16 && aryIp[1]<=31){
   		alert("172.16.0.0 - 172.31.255.255* is Private IP Range!");
   		return false;
   	}	
   if(aryIp[0] == 192 && aryIp[1] ==168){
   		alert(" 192.168.0.0 - 192.168.255.255* is Private IP Range!");
   		return false;
   	}
   return true;  
}

//Eric Hsiao, 2004-12-29
function timeClock() {
  var hours, minutes, seconds;
  var intHours, intMinutes, intSeconds;
  var today;

  today = new Date();

  intHours = today.getHours();
  intMinutes = today.getMinutes();
  intSeconds = today.getSeconds();
  hours = intHours+":";
  
  if (intMinutes < 10) {
     minutes = "0"+intMinutes+":";
  } else {
     minutes = intMinutes+":";
  }

  if (intSeconds < 10) {
     seconds = "0"+intSeconds;
  } else {
     seconds = intSeconds;
  } 

  timeString = hours+minutes+seconds+"&nbsp&nbsp&nbsp&nbsp&nbsp";

  Clock.innerHTML = timeString;

  window.setTimeout("timeClock();", 1000);
}


function isDHCP( _str ){
	var i,c,d;
	var strDHCP = _str;
	strDHCP += "";
  	if(strDHCP.length == 0){
		return false;
  	}
	for(i=0;i<strDHCP.length;i++){
		c = parseInt( strDHCP.charAt(i),16 );
		if( isNaN(c) ){	return false;}	
	}
	d = parseInt( strDHCP,16 );
	if( isNaN(d) ){	return false;}
	if ( ( d >= 256 ) || ( d <= 0 ) ){return false;}
	return true;
}

//Janet, 2004-12-23
function TR(val)
{
	return val;
}

//Yukino, 2005/01/20
function HttpCheck(__string) {
	var urlStyle1 = /^http:\/\/[A-Za-z0-9\-]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
	var urlStyle2 = /^Http:\/\/[A-Za-z0-9\-]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
	var urlStyle3 = /^[A-Za-z0-9\-]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
	
	if (!urlStyle1.test(__string) && !urlStyle2.test(__string) && !urlStyle3.test(__string)){
		return false;
	}
	return true;
}

function DomainCheck(__string) {
	var DomainStyle = /^[A-Za-z0-9\-]+\.[A-Za-z0-9\-]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
	
	if (!DomainStyle.test(__string)){
		return false;
	}
	return true;
}


function isStrNum(str) {
   var b,c,d;	
   var strByte = str;
   strByte += "";
   if( strByte.length == 0){
   	return false;
   }
   for( b = 0; b <  strByte.length ; b++){
     c = parseInt( strByte.charAt(b),10 );
     if( isNaN(c) ){
    	return false;
     }
   }
   d = parseInt( strByte ,10 );
   if ( isNaN(d) ){
    	return false;
   } 
   return true;
}

function isStrRng(str, min, max) {
   var b,c,d;	
   var strByte = str;
   strByte += "";
   if( strByte.length == 0){
   	return false;
   }
   for( b = 0; b <  strByte.length ; b++){
     c = parseInt( strByte.charAt(b),10 );
     if( isNaN(c) ){
    	return false;
     }
   }
   d = parseInt( strByte ,10 );
   if ( isNaN(d) ){
    	return false;
   } 
   if ( ( d > max ) || ( d < min ) ){
        return false;
   }     
   return true;
}

function showtime(__isNav){

    var now 	= new Date();
    var hours 	= now.getHours();
    var minutes = now.getMinutes();
    var seconds = now.getSeconds();
    var years;
    var months	= now.getMonth() + 1; //getMonth return 0-11
    var dates	= now.getDate();
    if(__isNav){
    	years = now.getYear() + 1900;
    }else{
    	years = now.getYear();
    }
    var timeValue = years + "." + months + "." +  dates +  "-" + hours;
    timeValue  += ((minutes < 10) ? ":0" : ":") + minutes;
    timeValue  += ((seconds < 10) ? ":0" : ":") + seconds ;
    return	timeValue;
}

