/* ===========================================================================
 * u-media.js
 * ===========================================================================*/

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function objectDisplay(IDName, value) {
	document.getElementById(IDName).style.display = value;
}

function removeAllOption(selectID) {
	var docTempName, loopCount;
	docTempName = document.getElementById(selectID);
	for (loopCount=docTempName.length; loopCount>=0; loopCount--)
		docTempName.remove(loopCount);
}

function addNewOption(selectID, optionID, optionName, optionValue, optionText) {
	var docTempName, newElement;
	docTempName = document.getElementById(selectID);
	newElement = document.createElement("option");
	newElement.id = optionID;
	newElement.name = optionName;
	newElement.value = optionValue;
	newElement.text = optionText;
	try {
		docTempName.add(newElement, null); //standards compliant
	}
	catch(ex) {
		docTempName.add(newElement); //IE only
	}
}

function style_display_on()
{
	if (window.ActiveXObject) { // IE
		return "block";
	}
	else if (window.XMLHttpRequest) { // Mozilla, Safari,...
		return "table";
	}
	return "block";
}

function style_display_on_tr()
{
	if (window.ActiveXObject) { // IE
		return "block";
	}
	else if (window.XMLHttpRequest) { // Mozilla, Safari,...
		return "table-row";
	}
	return "block";
}

function style_display_on_td()
{
	if (window.ActiveXObject) { // IE
		return "block";
	}
	else if (window.XMLHttpRequest) { // Mozilla, Safari,...
		return "table-cell";
	}
	return "block";
}

function atoi(str, num)
{
    i=1;
    if(num != 1 ){
        while (i != num && str.length != 0){
            if(str.charAt(0) == '.'){
                i++;
            }
            str = str.substring(1);
        }
        if(i != num )
            return -1;
    }

    for(i=0; i<str.length; i++){
        if(str.charAt(i) == '.'){
            str = str.substring(0, i);
            break;
        }
    }
    if(str.length == 0)
        return -1;
    return parseInt(str, 10);
}

function d2b(value)
{
	var num1;
	var num2=null;
	var currnum;
	currnum = 128;

	num1 = eval(value);
	if(num1 >= currnum)
	{
		num2 = "1";
		num1 = num1 - currnum;
		currnum = currnum / 2;
	}
	else
	{
		num2 = "0";
		currnum = currnum / 2;
	}		

	for (p = 1; p <= 7; p++)
	{
		if(num1 >= currnum)
		{
			num2 = num2 + "1";
			num1 = num1 - currnum;
			currnum = currnum / 2;
		}
		else
		{
			num2 = num2 + "0";
			currnum = currnum / 2;
		}
	}
	return num2;
}

function is_number(value)
{
	var str = value + "";
	return str.match(/^-?\d*\.?\d+$/) ? true : false;
}

function checkAllNum(str)
{
	for (var i=0; i<str.length; i++){
		if((str.charAt(i) >= '0' && str.charAt(i) <= '9') || (str.charAt(i) == '.' ))
			continue;
			return false;
		}
	return true;
}

function checkInteger(value)
{
	if (value.indexOf(".") > -1) {
		return false;
	}
	return true;
}

function checkHex(str){
	var len = str.length;

	for (var i=0; i<str.length; i++) {
		if ((str.charAt(i) >= '0' && str.charAt(i) <= '9') ||
			(str.charAt(i) >= 'a' && str.charAt(i) <= 'f') ||
			(str.charAt(i) >= 'A' && str.charAt(i) <= 'F') ){
				continue;
		}else
	        return false;
	}
    return true;
}

function checkInjection(str)
{
	var len = str.length;
	for (var i=0; i<str.length; i++) {
		if ( str.charAt(i) == ';' || str.charAt(i) == ',' ||
			 str.charAt(i) == '\r' || str.charAt(i) == '\n'){
				return false;
		}else
	        continue;
	}
    return true;
}

function is_port_valid(port)
{
	return (is_number(port) && port >= 0 && port < 65536);
}

function checkRange(str, min, max)
{
	if (str > max || str < min)
		return false;
	return true;
}

function checkMaskRange(str)
{
	m = new Array(255,254,252,248,240,224,192,128,0);

	for(i=0;i<9;i++)
		if (str == m[i])
			return true;

	return false;
}

function checkIpAddr(field, ismask)
{
	if (field.value == "") {
		alert("Error. IP address is empty.");
		return false;
	}

	if (checkAllNum(field.value) == 0) {
		alert('It should be a [0-9] number.');
		return false;
	}

	var reg = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
	if(reg.test(field.value) == false) {
		alert('IP address format error.');
		return false;
	}

	v = new Array(atoi(field.value, 1), atoi(field.value, 2), atoi(field.value, 3), atoi(field.value, 4) );
	if (ismask) {
//		if ((!checkRange(field.value, 1, 0, 256)) ||
//				(!checkRange(field.value, 2, 0, 256)) ||
//				(!checkRange(field.value, 3, 0, 256)) ||
//				(!checkRange(field.value, 4, 0, 256)))
		if (!checkMaskRange(v[0]) || !checkMaskRange(v[1]) || !checkMaskRange(v[2]) || !checkMaskRange(v[3]) ||
			(v[0] < 255 && v[1]+v[2]+v[3] > 0) ||
			(v[0] == 255 && v[1] < 255 && v[2]+v[3] > 0) ||
			(v[0] == 255 && v[1] == 255 && v[2] < 255 && v[3] > 0) ||
			field.value == "0.0.0.0" || field.value == "255.255.255.254" || field.value == "255.255.255.255")
		{
			alert('Mask address format error.');
			return false;
		}
	}
	else {
//		if ((!checkRange(field.value, 1, 0, 255)) ||
//				(!checkRange(field.value, 2, 0, 255)) ||
//				(!checkRange(field.value, 3, 0, 255)) ||
//				(!checkRange(field.value, 4, 1, 254)))
		if ((!checkRange(v[0], 0, 255)) ||
				(!checkRange(v[1], 0, 255)) ||
				(!checkRange(v[2], 0, 255)) ||
				(!checkRange(v[3], 0, 255)))
		{
			alert('IP address number must in range 0~255.');
			return false;
		}
		if ( v[0] == "0" || v[0] == "127") { // Local IP
			alert(field.value+' is a local IP address.');
			return false;
		} else if ( v[0] == 255 && v[1] == 255 && v[2] == 255 && v[3] == 255) {
			alert(field.value+' is a broadcast IP address.');
			return false;
		} else if ( v[0] >= 1 && v[0] <= 126) { // Class A
			if ( v[1]== 0 && v[2]== 0 && v[3]== 0 ) {
				alert(field.value+' is a Class A network address.');
				return false;
			} else if ( v[1]== 255 && v[2]== 255 && v[3]== 255 ) {
				alert(field.value+' is a Class A broadcast address.');
				return false;
			}
		} else if ( v[0] >= 128 && v[0] <= 191) { // Class B
			if ( v[2]== 0 && v[3]== 0 ) {
				alert(field.value+' is a Class B network address.');
				return false;
			} else if (v[2]== 255 && v[3]== 255) {
				alert(field.value+' is a Class B broadcast address.');
				return false;
			}
		} else if ( v[0] >= 192 && v[0] <= 223) { // Class C
			if ( v[3]== 0 ) {
				alert(field.value+' is a Class C network address.');
				return false;
			} else if ( v[3]== 255 ) {
				alert(field.value+' is a Class C broadcast address.');
				return false;
			}
		} else if ( v[0] >= 224 && v[0] <= 239) { // Class D
				alert(field.value+' is a Class D IP address.');
				return false;
		} else if ( v[0] >= 240 && v[0] <= 255) { // Class E
				alert(field.value+' is a Class E IP address.');
				return false;
		}
	}
	return true;
}

function checkIPwithSubnetMask(ip,subnet)
{
	var i,j,vi=0,vj=0,zero=0,one=0;
	var ip_b=new Array(d2b(atoi(ip,1)), d2b(atoi(ip,2)), d2b(atoi(ip,3)), d2b(atoi(ip,4)));
	var subnet_b=new Array(d2b(atoi(subnet,1)), d2b(atoi(subnet,2)), d2b(atoi(subnet,3)), d2b(atoi(subnet,4)));

	for(i=0;i<4;i++) {
		for(j=0;j<8;j++) {
			if(subnet_b[i].charAt(j) == "0") {
				vi = i;
				vj = j;
				break;
			}
		}
	}

	for(i=vi;i<4;i++) {
		if (i==vi) {
			for(j=vj;j<8;j++) {
				if(ip_b[i].charAt(j) == "0")
					zero++;
				else if(ip_b[i].charAt(j) == "1")
					one++;
				else 
					return false;
			}
		} else {
			for(j=0;j<8;j++) {
				if(ip_b[i].charAt(j) == "0")
					zero++;
				else if(ip_b[i].charAt(j) == "1")
					one++;
				else 
					return false;
			}
		}
	}

	if (zero == 0 && one != 0)	{
		alert("Incorrect IP address and subnet mask setting. All host id are 1.");
		return false;
	} else if (zero != 0 && one == 0) {
		alert("Incorrect IP address and subnet mask setting. All host id are 0.");
		return false;
	} else if (zero == 0 && one == 0) {
		return false;
	}

	return true;
}

function checkSameSubnet(ipa,ipb,gateway) {
	var i,j;
	var a= new Array(d2b(atoi(ipa,1)),d2b(atoi(ipa,2)),d2b(atoi(ipa,3)),d2b(atoi(ipa,4)));
	var b= new Array(d2b(atoi(ipb,1)),d2b(atoi(ipb,2)),d2b(atoi(ipb,3)),d2b(atoi(ipb,4)));
	var gw = new Array(d2b(atoi(gateway,1)),d2b(atoi(gateway,2)),d2b(atoi(gateway,3)),d2b(atoi(gateway,4)));

	for(i=0;i<4;i++) {
		for(j=0;j<8;j++) {
			if(gw[i].charAt(j) == "1")
				if(a[i].charAt(j) != b[i].charAt(j))
					return false;
		}
	}
	return true;
}

function checkMac(str){
	var len = str.length;
	if(len!=17)
		return false;

	for (var i=0; i<str.length; i++) {
		if((i%3) == 2){
			if(str.charAt(i) == ':')
				continue;
		}else{
			if (	(str.charAt(i) >= '0' && str.charAt(i) <= '9') ||
					(str.charAt(i) >= 'a' && str.charAt(i) <= 'f') ||
					(str.charAt(i) >= 'A' && str.charAt(i) <= 'F') )
			continue;
		}
		return false;
	}
	return true;
}

function checkMACAddr(field)
{
	if(field.value == ""){
		alert("Error. MAC address is empty.");
		field.value = field.defaultValue;
		return false;
	}

	return checkMac(field.value);
}

function checkPSK(keyvalue)
{
	var checkValue, flag=0;
	//var keyvalue = document.security_form.passphrase.value;

	if (keyvalue.length == 0) {
		alert('Please input wpapsk key!');
		return false;
	}
	
	for (loopCount=0; loopCount<64; loopCount++)
	{
		checkValue = keyvalue.substr(loopCount, 1);
		if (!(parseInt(checkValue, 16) >= 0) && !(parseInt(checkValue, 16) <= 15)) {
			flag = 1;
			loopCount = 65;
		}
	}
	
	if (keyvalue.length == 64) //Hex
	{
		if (flag != 0){
			alert('Please input 8~63 ASCII or 64 Hex characters of wpapsk key!');
			return false;
		}
	}
	else	//ASCII
	{
		if (keyvalue.length < 8 || keyvalue.length >= 64){
			alert('Please input 8~63 ASCII or 64 Hex characters of wpapsk key!');
			return false;
		}
	}

	if(checkInjection(keyvalue) == false){
		alert('Invalid characters in Pass Phrase.');
		return false;
	}
	
	return true;
}

function checkThreshold(value,min,max)
{
	if (value.indexOf(".") > -1 )
	{
		alert("The RTS and Fragement Threshold value must be the integer!");
		return false;
	}
	if (value > max || value < min)
	{
		alert("The RTS and Fragement Threshold value must in the range!");
		return false;
	}
	return true;
}

function transSSID(SSID)
{
	var loopCount=0;
	var origSSID="";
	var tempChar;
	
	for (loopCount=0; loopCount<SSID.length; loopCount=loopCount+2) {
		tempChar = String.fromCharCode(parseInt(SSID.substr(loopCount, 2), 16));
		if (tempChar == '"')
			origSSID = origSSID + "\"";
		else
			origSSID = origSSID + tempChar;
	}
	return origSSID;
}
