/* *********************************** marcel, 08.17.2004
	Function: CheckIpAddr
	Description:
	Input:	ip1, ip2, ip3, ip4
	Output:	
	Return:	true or false
  ************************************ */
function CheckIpAddr( ip1, ip2, ip3, ip4 ) {
	/* marcel, 08.17.2004 
	    ==========================================
	     IPv4 Address Rules
	     Class A: [1...127][1...16777214]; 
	     Class B: [128...191][0...255][1...65534]; 
	     Class C: [192...223][0...255][0...255][1...254]; 
	     Class D: [224...239][0...255][0...255][0...255] 
	    ========================================== */
  var tmp1=parseInt( ip1.value, 10 );
  var tmp2=parseInt( ip2.value, 10 );
  var tmp3=parseInt( ip3.value, 10 );
  var tmp4=parseInt( ip4.value, 10 );
  var tmpTotal=0;

  if (!valid_range( ip1, 1,239, basicset.ipaddr )) {
  	ip1.focus();
	ip1.select();
	return false;
  }
  if ((tmp1>=1) && (tmp1<=127)) { 
      //Class A Subnet
      tmpTotal = ((tmp2<<16) + (tmp3<<8) + tmp4);
      if ((tmpTotal<1) || (tmpTotal>16777214))
          if (!valid_range( ip4, 1,254, basicset.ipaddr )) {
		  	ip4.focus();
			ip4.select();
			return false;
		  }
  }
  else if ((tmp1>=128) && (tmp1<=191)) { 
      //Class B Subnet
      tmpTotal = ((tmp3<<8) + tmp4);
      if (!valid_range( ip2, 0,255, basicset.ipaddr )) {
	  	ip2.focus();
		ip2.select();
		return false;
	  }
      if ((tmpTotal<1) || (tmpTotal>65534)) 
          if (!valid_range( ip4, 1, 254, basicset.ipaddr )) {
		  	ip4.focus();
			ip4.select();
			return false;
		  }
  }
  else if ((tmp1>=192) && (tmp1<=223)) { 
      //Class C Subnet
      if (!valid_range( ip2, 0,255, basicset.ipaddr )) { ip2.focus(); ip2.select(); return false; }
      if (!valid_range( ip3, 0,255, basicset.ipaddr )) { ip3.focus(); ip3.select(); return false; }
      if (!valid_range( ip4, 1,254, basicset.ipaddr )) { ip4.focus(); ip4.select(); return false; }
  }
  else if ((tmp1>=224) && (tmp1<=239)) { 
      //Class D Subnet
      if (!valid_range( ip2, 0,255, basicset.ipaddr )) { ip2.focus(); ip2.select(); return false; }
      if (!valid_range( ip3, 0,255, basicset.ipaddr )) { ip3.focus(); ip3.select(); return false; }
      if (!valid_range( ip4, 0,255, basicset.ipaddr )) { ip4.focus(); ip4.select(); return false; }
  }
  return true;
}

/* ************************************* marcel, 06.21.2005
	Function: CheckNetMaskBit
	Description:
	Input:	iMask
	Output:	
	Return:	true or false
 */
function CheckNetMaskBit(iMask) {
	switch (iMask) {
	  case 0:	// 0000 0000
	  case 128:	// 1000 0000
	  case 192:	// 1100 0000
	  case 224:	// 1110 0000
	  case 240:	// 1111 0000
	  case 248:	// 1111 1000
	  case 252:	// 1111 1100
	  case 254:	// 1111 1110
	  case 255:	// 1111 1111
	  	return true;
		break;

	  default:
		parent.frames.bottom.UpdateTxtStatus( M1+" "+errmsg.err1+' [ 0, 128, 192, 224, 240, 248, 252, 254, 255 ]' );
	  	return false;
	  	break;
	}
}

function CheckNetMask( inMask1, inMask2, inMask3, inMask4 ) {
	var Mask1=parseInt(inMask1.value, 10), 
		Mask2=parseInt(inMask2.value, 10), 
		Mask3=parseInt(inMask3.value, 10), 
		Mask4=parseInt(inMask4.value, 10);

	if (Mask1<255) {
	  if (!CheckNetMaskBit(Mask1)) { inMask1.focus(); inMask1.select(); return false; }
	  if (Mask2!=0) {
		inMask2.focus(); inMask2.select();
		parent.frames.bottom.UpdateTxtStatus( basicset.mask+" "+errmsg.err1+' [ 0 ]' );
	  	return false;
	  }
	  if (Mask3!=0) {
		inMask3.focus(); inMask3.select();
		parent.frames.bottom.UpdateTxtStatus( basicset.mask+" "+errmsg.err1+' [ 0 ]' );
	  	return false;
	  }
	  if (Mask4!=0) {
		inMask4.focus(); inMask4.select();
		parent.frames.bottom.UpdateTxtStatus( basicset.mask+" "+errmsg.err1+' [ 0 ]' );
	  	return false;
	  }
	}
	else if (Mask2<255) {
	  if (!CheckNetMaskBit(Mask2)) { inMask2.focus(); inMask2.select(); return false; }
	  if (Mask3!=0) {
		inMask3.focus(); inMask3.select();
		parent.frames.bottom.UpdateTxtStatus( basicset.mask+" "+errmsg.err1+' [ 0 ]' );
	  	return false;
	  }
	  if (Mask4!=0) {
		inMask4.focus(); inMask4.select();
		parent.frames.bottom.UpdateTxtStatus( basicset.mask+" "+errmsg.err1+' [ 0 ]' );
	  	return false;
	  }
	}
	else if (Mask3<255) {
	  if (!CheckNetMaskBit(Mask3)) { inMask3.focus(); inMask3.select(); return false; }
	  if (Mask4!=0) {
		inMask4.focus(); inMask4.select();
		parent.frames.bottom.UpdateTxtStatus( basicset.mask+" "+errmsg.err1+' [ 0 ]' );
	  	return false;
	  }
	}
	else if (Mask4<255) {
	  if (!CheckNetMaskBit(Mask4)) { inMask4.focus(); inMask4.select(); return false; }
	}

	return true;
}

/* *********************************** marcel, 08.17.2004
Function: CheckGateway
Description:
Input:	ip1, ip2, ip3, ip4 (maybe 0.0.0.0)
Output:	
Return:	true or false
  ************************************ */
function CheckGateway( ip1, ip2, ip3, ip4 ) {
  var tmp1=parseInt( ip1.value, 10 );
  var tmp2=parseInt( ip2.value, 10 );
  var tmp3=parseInt( ip3.value, 10 );
  var tmp4=parseInt( ip4.value, 10 );

  if ((tmp1==0) && (tmp2==0) && (tmp3==0) && (tmp4==0)) return true;
  else return (CheckIpAddr( ip1, ip2, ip3, ip4 ));
}

function GetCaption(obj){
	document.write(obj);
}	

function CheckForDot(obj,strName,iIndex)
{
  var strValue = obj.value;
	var obj1;
	if(strValue != null)
	{
	    var lastKey;
	    //only accept 0...9 and dot
	  for (;;) {
	    strValue = obj.value; //update "strValue" immediately
	    if (strValue.length>0)
	        lastKey = strValue.substr(strValue.length-1, 1);
	    else { break; }

	    if ((lastKey!='.') && ('0'>lastKey || '9'<lastKey)) {
	        obj1 = eval("document.forms[0]."+strName+iIndex);
	        obj1.value = strValue.substr(0,strValue.length-1);
	        continue;
	    }
	    else { break; }
      }
        //check if input more than 3 char(s)
        if (strValue.length>3) {
	        obj1 = eval("document.forms[0]."+strName+iIndex);
	        obj1.value = strValue.substr(0,strValue.length-1);

            if (iIndex==4) { return false; }
            obj1 = eval("document.forms[0]."+strName+(iIndex+1));
            obj1.select(); obj1.focus();
            return true;
        }

	    if (1<=iIndex && iIndex<4)
	    {
		obj1=eval("document.forms[0]."+strName+(iIndex+1));
        }
        else
        {
            obj1 = eval("document.forms[0]."+strName+iIndex);
        }
		var index = strValue.indexOf('.');
		if (index == 0)
		{
			obj.value="";
		}   
	    else if(index==1 || index==2 || index==3)
	    {
	        obj.value = strValue.substr(0, index);
		  obj1.focus(); 	         
	        obj1.select();
		}   
	}		    
}

/* *************************************
	Function:        isxdigit
	Description:
	Input:	I={Object}
			M={its Value}
	Output:
	Return:
  ************************************** */
function isxdigit(I,M)
{
	for(i=0 ; i<I.value.length; i++){
		ch = I.value.charAt(i).toLowerCase();
		if(ch >= '0' && ch <= '9' || ch >= 'a' && ch <= 'f') { }
		else{
			/* marcel, 09.08.2004 
			      Bug Fix: When DUT set illegal word in RTS/CTS or Fragmentation or 
			      Number_of_Wireless STA... Ex:"aaa".
			      After apply, DUT would Reboot! */
			//parent.frames.bottom.document.all.txtStatus.value=M+" "+errmsg.err14;
			parent.frames.bottom.UpdateTxtStatus( M+" "+errmsg.err14 );

			I.value = I.defaultValue;	
			return false;
		}
	}
	return true;
}

function isdigit(I,M)
{
	for(i=0 ; i<I.value.length; i++){
		ch = I.value.charAt(i);
		if(ch < '0' || ch > '9'){
			/* marcel, 09.08.2004 
			      Bug Fix: When DUT set illegal word in RTS/CTS or Fragmentation or 
			      Number_of_Wireless STA... Ex:"aaa".
			      After apply, DUT would Reboot! */
			//parent.frames.bottom.document.all.txtStatus.value=M+" "+errmsg.err;
			parent.frames.bottom.UpdateTxtStatus( M+" "+errmsg.err );

			I.value = I.defaultValue;	
			return false;
		}
	}
	return true;
}
function valid_range(I,start,end,M)
{
	//if(I.value == ""){
	//	if(M == "IP" || M == "Port")
	//		I.value = "0";
	//}
	M1 = unescape(M);

	/* marcel, 09.08.2004 
	      Bug Fix: When DUT set illegal word in RTS/CTS or Fragmentation or 
	      Number_of_Wireless STA... Ex:"aaa".
	      After apply, DUT would Reboot! */
	//isdigit(I,M1);
	if (!isdigit(I,M1)) return false;

	d = parseInt(I.value, 10);	
	if ( !(d<=end && d>=start) )		
	{
		/* marcel, 08.30.2004 (bug fix: Incompatible with Netscape, Mozilla...) */
		//parent.frames.bottom.document.all.txtStatus.value=M1+" "+errmsg.err1+' ['+start+' - '+end+']';
		parent.frames.bottom.UpdateTxtStatus( M1+" "+errmsg.err1+' ['+start+' - '+end+']' );

		I.value = I.defaultValue;		
		return false;
	}
	else
		I.value = d;	// strip 0

	return true;
}

function valid_length(I,strName,sLen,eLen)
{
	if(I.value.length< sLen || I.value.length >eLen)
	{
		/* marcel, 09.08.2004 */
		//parent.frames.bottom.document.all.txtStatus.value=strName+" "+errmsg.err2+' ['+sLen+' - '+eLen+']';
		parent.frames.bottom.UpdateTxtStatus( strName+" "+errmsg.err2+' ['+sLen+' - '+eLen+']' );
	I.focus();
	return false ;
	}
	return true;
}

function valid_macs_12(I){
	var m,m3,str;
	if(I.value == "")
		return true;
//	if(I.value.length<2)
//		I.value=0;
	else if(I.value.length==12){
		for(i=0;i<12;i++){
			m=parseInt(I.value.charAt(i), 16);
			if( isNaN(m) )
				break;
		}
		if( i!=12 ){	/* marcel, 09.08.2004 */
			//parent.frames.bottom.document.all.txtStatus.value=errmsg.err3;
			parent.frames.bottom.UpdateTxtStatus( errmsg.err3 );
			I.value = I.defaultValue;		
			return false;
		}
	}
	else{	/* marcel, 09.08.2004 */
		//parent.frames.bottom.document.all.txtStatus.value=errmsg.err4;
		parent.frames.bottom.UpdateTxtStatus( errmsg.err4 );
		I.value = I.defaultValue;
		return false;
	}
	I.value = I.value.toUpperCase();
	if(I.value == "FFFFFFFFFFFF"){	/* marcel, 09.08.2004 */
		//parent.frames.bottom.document.all.txtStatus.value=errmsg.err5;
		parent.frames.bottom.UpdateTxtStatus( errmsg.err5 );
		I.value = I.defaultValue;	
		return false;
	}
	m3 = I.value.charAt(1);
	if((m3 & 1) == 1){	/* marcel, 09.08.2004 */
		//parent.frames.bottom.document.all.txtStatus.value=errmsg.err6;
		parent.frames.bottom.UpdateTxtStatus( errmsg.err6 );
		I.value = I.defaultValue;    
		return false;                   
	}             
	str=I.value.substr(0,2)+":"+I.value.substr(2,2)+":"+I.value.substr(4,2)+":"+I.value.substr(6,2)+":"+I.value.substr(8,2)+":"+I.value.substr(10,2);
	I.value=str;
	return true;
}
function valid_macs_17(I)
{
	oldmac = I.value;
	var mac = ignoreSpaces(oldmac);
	if (mac == "") 
	{
		return true;
		//alert("Enter MAC Address in (xx:xx:xx:xx:xx:xx) format");
		//return false;
	}
	var m = mac.split(":");
	if (m.length != 6) 
	{	/* marcel, 09.08.2004 */
		//parent.frames.bottom.document.all.txtStatus.value=errmsg.err7;
		parent.frames.bottom.UpdateTxtStatus( errmsg.err7 );
		I.value = I.defaultValue;		
		return false;
	}
	var idx = oldmac.indexOf(':');
	if (idx != -1) {
		var pairs = oldmac.substring(0, oldmac.length).split(':');
		for (var i=0; i<pairs.length; i++) {
			nameVal = pairs[i];
			len = nameVal.length;
			if (len < 1 || len > 2) {	/* marcel, 09.08.2004 */
				//parent.frames.bottom.document.all.txtStatus.value=errmsg.err8;
				parent.frames.bottom.UpdateTxtStatus( errmsg.err8 );
				I.value = I.defaultValue;		
				return false;
			}
			for(iln = 0; iln < len; iln++) {
				ch = nameVal.charAt(iln).toLowerCase();
				if (ch >= '0' && ch <= '9' || ch >= 'a' && ch <= 'f') {
				}
				else {	/* marcel, 09.08.2004 */
					//parent.frames.bottom.document.all.txtStatus.value=errmsg.err9+" "+nameVal+" "+errmsg.err10+" "+oldmac;
					parent.frames.bottom.UpdateTxtStatus( errmsg.err9+" "+nameVal+" "+errmsg.err10+" "+oldmac );
					I.value = I.defaultValue;		
					return false;
				}
			}	
		}
	}
	I.value = I.value.toUpperCase();
	if(I.value == "FF:FF:FF:FF:FF:FF"){	/* marcel, 09.08.2004 */
		//parent.frames.bottom.document.all.txtStatus.value=errmsg.err5;
		parent.frames.bottom.UpdateTxtStatus( errmsg.err5 );
		I.value = I.defaultValue;	
		return false;
	}
	m3 = I.value.charAt(1);
	if((m3 & 1) == 1){	/* marcel, 09.08.2004 */
		//parent.frames.bottom.document.all.txtStatus.value=errmsg.err6;
		parent.frames.bottom.UpdateTxtStatus( errmsg.err6 );
		I.value = I.defaultValue;                       
		return false;
	}                                                       
	return true;
}
function ignoreSpaces(string) {
  var temp = "";

  string = '' + string;
  splitstring = string.split(" ");
  for(i = 0; i < splitstring.length; i++)
    temp += splitstring[i];
  return temp;
}

  function WriteHelp( strUrl ) {
	/* marcel, 08.19.2004 
	     Bug Fix: The WEB is not compatible with Netscape for Linux 
	     ===============================
	parent.frames[0].document.all.hUrl.value=strUrl; */

	//alert( strUrl );
	/*Peggy 2004/11/04 start
	parent.hUrl = strUrl.toString( );*/
	parent.frames.top.top.hUrl = strUrl.toString( );
	/* Peggy 2004/11/04 */
  }

function closeWin(var_win){
	if ( ((var_win != null) && (var_win.close)) || ((var_win != null) && (var_win.closed==false)) )
		var_win.close();
}

