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( 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;
	var tt = getIdxOfForm(fstElmt);

	/* if ctrl lose right of control */
	if ( ctrl.disabled == true ) {
		return;
	}

	if ( ctrl == true ||  ctrl == false ) {
		check = ctrl;
		for ( var i = tt; i < cnt + tt; i++ ) {
			frm[i].disabled = !check;
		}
		return;
	}

	switch ( ctrl.type ) {
		case "radio":
		case "checkbox":
			check = ctrl.checked;
			for ( var i = tt; i < cnt + tt; 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 ) return true;  //shirley,20050804,Mantis 2283
	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.name!="" && elmt.form[i].name!=""){
				if( elmt.name == elmt.form[i].name) return i;
			}else{
				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":
			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;
					elmt.options[i].selected = true;  //shirley,20050701,for mnatdmz.htm and inetdual.sht
					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":
			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)
{
	if(doc.getElementById != null) {
		return doc.getElementById(idVal);
	}
	if(doc.all != null) {
		return doc.all[idVal];
	}
	
	alert("getElmtById has problem!");
	return null;
}

function showElmtByClass(_doc, _tag, _el)
{
	var doc = _doc;
	var tag = _tag;
	var el = _el;
	var showit = (doc.layers) ? "show" : "inline";
	var hideit = (doc.layers) ? "hide" : "none";
	if (doc.getElementsByTagName) {
		var nodes = doc.getElementsByTagName(tag);
		var max = nodes.length;
		for (var i = 0; i < max; i++) {
			var node = nodes.item(i);
			if (node.className == el) { node.style.display = showit; }
		}
	}
}

function hideElmtByClass(_doc, _tag, _el)
{
	var doc = _doc;
	var tag = _tag;
	var el = _el;
	var showit = (doc.layers) ? "show" : "inline";
	var hideit = (doc.layers) ? "hide" : "none";
	if (doc.getElementsByTagName) {
		var nodes = doc.getElementsByTagName(tag);
		var max = nodes.length;
		for (var i = 0; i < max; i++) {
			var node = nodes.item(i);
			if (node.className == el) { node.style.display = hideit; }
		}
	}
}

function showElmtById(_doc, _el)
{
	var doc = _doc;
	var el = _el;
	var showit = (doc.layers) ? "show" : "inline";
	var hideit = (doc.layers) ? "hide" : "none";
	getElmtById(doc, el).style.display = showit; 
}

function hideElmtById(_doc, _el)
{
	var doc = _doc;
	var el = _el;
	var showit = (doc.layers) ? "show" : "inline";
	var hideit = (doc.layers) ? "hide" : "none";
	getElmtById(doc, el).style.display = hideit; 
}

