﻿// JavaScript Document
var gItemSepChar = '\011';	//	Horizontal TAB octal code equivalent to '\t'
var gLineSepChar = '\013';	//	Vertical TAB octal code, DON'T USE '\v' (incompatible with IE7)

function XMLExtract(request)
{
	var xmlDoc = request.responseXML;
	if (xmlDoc == null) {
		//	Patch for lighttpd bugfix
		var text = request.responseText;
		var offset = text.indexOf('<');
		if (offset != -1) {
			text = text.substr(offset);
			if (text != '') xmlDoc = (new DOMParser()).parseFromString(text,"text/xml");
		}
	}
	return xmlDoc;
}
function URLParamEncode(string)
{
	if (string == "") return string;
	var result = escape(string);
	
	result = result.replace(/\+/g,'%2B');
	result = result.replace(/\//g,'%2F');
	return result;
}
function FormatStr(text,len)
{
	var result = (text == null) ? "" : text;
	var actualLen = result.length;
	
	if (actualLen <= len) {
		for (var i = 0; i < (len - actualLen); i++) result += " ";
	}
	else {
		if (len > 3) result = result.substr(0,len - 3) + '...';
		else result = result.substr(0,len);
	}
	return result;
}
function InitSelect(inItem,inValue)
{
	var ItemFound = 0;
	for (var Item=0; Item<inItem.length; Item++)
		if (inItem[Item].value == inValue) {
			ItemFound = Item;
			break;
		}
	inItem.selectedIndex = ItemFound;
}
function CheckInteger(inObj,inCouldBeEmpty,inMinValue,inMaxValue)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	if (isNaN(Str)) return false;
	if (inMinValue != -1 && Str < inMinValue) return false;
	if (inMaxValue != -1 && Str > inMaxValue) return false;
	return true;
}
function CheckName(inObj,inCouldBeEmpty,withSpace,inMinLength,inMaxLength)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	if (Str.length < inMinLength) return false;
	if (Str.length > inMaxLength) return false;
	Str = Str.toUpperCase();
	var regExp = new RegExp("^[0-9A-Z" + ((withSpace) ? " " : "") + "]{" + inMinLength + "," + inMaxLength + "}$");
	return regExp.test(Str);
}
function CheckExtendName(inObj,inCouldBeEmpty,inMinLength,inMaxLength)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	if (Str.length < inMinLength) return false;
	if (Str.length > inMaxLength) return false;
	Str = Str.toUpperCase();
	var regExp = new RegExp("^[0-9A-Z&@#$*%=+-_()<> ]{" + inMinLength + "," + inMaxLength + "}$");
	return regExp.test(Str);
}
function CheckNoSpace(inObj,inCouldBeEmpty,inMinLength,inMaxLength)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	if (Str.length < inMinLength) return false;
	if (Str.length > inMaxLength) return false;
	Str = Str.toUpperCase();
	var regExp = new RegExp("^[^ ]{" + inMinLength + "," + inMaxLength + "}$");
	return regExp.test(Str);
}
function CheckString(inObj,inCouldBeEmpty,inMinLength,inMaxLength)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	if (Str.length < inMinLength) return false;
	if (Str.length > inMaxLength) return false;
	return true;
}
function CheckPhone(inObj,inCouldBeEmpty)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	var regExp = new RegExp("^[0-9#*]*$");
	return regExp.test(Str);
}
function CheckDigit(inObj,inCouldBeEmpty)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	var regExp = new RegExp("^[0-9]*$");
	return regExp.test(Str);
}
function CheckHexadecimal(inObj,inCouldBeEmpty,inLength)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	if (Str.length != inLength) return false;
	Str = Str.toUpperCase();
	var regExp = new RegExp("^[0-9A-F]{" + inLength + "}$");
	return regExp.test(Str);
}
function CheckDNS(inObj,inCouldBeEmpty)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	Str = Str.toUpperCase();
	var regExpDNS = new RegExp("^[0-9a-zA-Z][_0-9a-zA-Z-]*(\\.[0-9a-zA-Z][_0-9a-zA-Z-]*)+$");
	if (regExpDNS.test(Str)) return true;
	var regExpIP = new RegExp("^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$");
	if (!regExpIP.test(Str)) return false;
	var ipArray = Str.split(".");
	for (var i = 0; i < 4; i++) {
		if ((Math.floor(ipArray[i]) < 0) || (Math.floor(ipArray[i]) > 255)) return false;
	}
	return true;
}
function CheckFQDN(inObj,inCouldBeEmpty)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	Str = Str.toUpperCase();
	var regExpDNS = new RegExp("^[0-9a-zA-Z][_0-9a-zA-Z-]*(\\.[0-9a-zA-Z][_0-9a-zA-Z-]*)*$");
	if (!regExpDNS.test(Str)) return false;
	return true;
}
function CheckIP(inObj,inCouldBeEmpty)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	var regExpIP = new RegExp("^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$");
	if (!regExpIP.test(Str)) return false;
	var ipArray = Str.split(".");
	for (var i = 0; i < 4; i++) {
		if ((Math.floor(ipArray[i]) < 0) || (Math.floor(ipArray[i]) > 255)) return false;
	}
	if ((Str == "0.0.0.0") || (Str == "255.255.255.255")) return false;
	return true;
}
function CheckPartialIP(inObj,inCouldBeEmpty)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	if (Str == "*") return inCouldBeEmpty;
	var regExpIP = new RegExp("^[0-9]{1,3}\\.(\\*|[0-9]{1,3}\\.(\\*|[0-9]{1,3}\\.(\\*|[0-9]{1,3})))$");
	if (!regExpIP.test(Str)) return false;
	var ipArray = Str.split(".");
	for (var i = 0; i < 4; i++) {
		if ((Math.floor(ipArray[i]) < 0) || (Math.floor(ipArray[i]) > 255)) return false;
	}
	return true;
}
function CheckPortRange(inObj,inCouldBeEmpty)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	var regExp = new RegExp("^[0-9]*(:[0-9]*)?$");
	return regExp.test(Str);
}
function CheckPortRangeList(inObj,inCouldBeEmpty)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	var regExp = new RegExp("^[0-9]*(:[0-9]*)?$");
	var list = Str.split(',');
	var listSize = list.length;
	for (var i = 0; i < listSize; i++) {
		if (!regExp.test(list[i].replace(/ /g,''))) return false;
	}
	return true;
}
function CheckMask(inObj,inCouldBeEmpty)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	if (!CheckIP(inObj,false)) return false;
	var ipArray = Str.split(".");
	var lastByte = 1;
	for (var i = 0; i < 4; i++) {
		var octet = Math.floor(ipArray[i]);
		for (var j = 7; j > 0; j--) {
			if ((octet & (1 << j)) == 0) lastByte = 0;
			else if (lastByte == 0) return false; 
		}
	}
	return true;
}
function CheckMAC(inObj,inCouldBeEmpty)
{
	var Str = inObj.value;
	if (Str == "") return inCouldBeEmpty;
	Str = Str.toUpperCase();
	var regExpMAC = new RegExp("^[0-9A-F]{1,2}:[0-9A-F]{1,2}:[0-9A-F]{1,2}:[0-9A-F]{1,2}:[0-9A-F]{1,2}:[0-9A-F]{1,2}$");
	if (!regExpMAC.test(Str)) {
		regExpMAC = new RegExp("^[0-9A-F]{1,2}\\-[0-9A-F]{1,2}\\-[0-9A-F]{1,2}\\-[0-9A-F]{1,2}\\-[0-9A-F]{1,2}\\-[0-9A-F]{1,2}$");
		if (!regExpMAC.test(Str)) return false;
		inObj.value = Str.replace(/-/g,':');
	}
	return true;
}
function NetworkOfIP(inIP,inMask)
{
	var ipArray = inIP.split(".");
	var maskArray = inMask.split(".");
	var network = 0;
	for (var i = 0; i < 4 ; i++) {
		var ipByte = Math.floor(ipArray[i]);
		var maskByte = Math.floor(maskArray[i]);
		if (maskByte == 0) break;
		network = 256 * network + (ipByte & maskByte);
		if ((ipByte & maskByte) != ipByte) break;
	}
	return network;
}
function MachineOfIP(inIP,inMask)
{
	var ipArray = inIP.split(".");
	var maskArray = inMask.split(".");
	var machine = 0;
	for (var i = 0; i < 4 ; i++) {
		var ipByte = Math.floor(ipArray[i]);
		var maskByte = Math.floor(maskArray[i]);
		machine = 256 * machine + (ipByte & ~maskByte);
	}
	return machine;
}
function IsSimulVar(inStr)
{
	var result = false;
	if (inStr.length >= 2) result = ((inStr.charAt(0) == '<') && (inStr.charAt(1) == '!'));
	return result;
}
function FindObjByID(inID)
{
	if (document.getElementById) return document.getElementById(inID);
	else if (document.all) currentCell = document.all[inID];
	return null;
}
function NumToHex(inNumeric)
{
	if (inNumeric == 10) return "A";
	else if (inNumeric == 11) return "B";
	else if (inNumeric == 12) return "C";
	else if (inNumeric == 13) return "D";
	else if (inNumeric == 14) return "E";
	else if (inNumeric == 15) return "F";
	else return "" + inNumeric;
}
function Hexa2Ascii(inHexa,inSilentMode)
{
	var inHexaLen = inHexa.length;
	var tmpByte;
	var outAscii = "";
	var outAsciiLen;
	
	inHexa = inHexa.toUpperCase();
	if ((inHexaLen % 2) != 0) {
		if (!inSilentMode) alert("The hexadecimal sequence is incomplete.");
		return null;
	}
	for (var i = 0; i < inHexaLen; i++) {
		tmpByte = inHexa.charAt(i);
		if (((tmpByte < '0') || (tmpByte > '9')) && ((tmpByte < 'A') || (tmpByte > 'F'))) {
			if (!inSilentMode) alert("The hexadecimal sequence contains non-hex characters.");
			return null;
		}
		if ((i % 2) == 0) outAscii += '%';
		outAscii += tmpByte;
	}
	outAscii = unescape(outAscii);
	outAsciiLen = outAscii.length;
	
	if (outAsciiLen != Math.floor(inHexaLen / 2)) {
		if (!inSilentMode) alert("The hexadecimal sequence contains non-printing characters.");
		return null;
	}
	for (var i = 0; i < outAsciiLen; i++) {
		tmpByte = outAscii.charCodeAt(i);
		if ((tmpByte < 32) || (tmpByte > 127)) {
			if (!inSilentMode) alert("The hexadecimal sequence contains non-printing characters.");
			return null;
		}
	}
	return outAscii;
}
function Ascii2Hexa(inAscii)
{
	var outHexa = '';
	var inAsciiLen = inAscii.length;
	var ascii;
	var highByte;
	var lowByte;
	
	for (var i = 0; i < inAsciiLen; i++) {
		ascii = inAscii.charCodeAt(i) % 256;
		highByte = Math.floor(ascii / 16);
		lowByte = ascii % 16;
		outHexa += NumToHex(highByte) + NumToHex(lowByte);
	}
	return outHexa;
}
function IsIP(inIP)
{
	var regExpIP = new RegExp("^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$");
	if (!regExpIP.test(inIP)) return false;
	var ipArray = inIP.split(".");
	for (var i = 0; i < 4; i++) {
		if ((Math.floor(ipArray[i]) < 0) || (Math.floor(ipArray[i]) > 255)) return false;
	}
	return true;
}
function IsFQDN(inHostname)
{
	var Str = inHostname.toUpperCase();
	var regExpDNS = new RegExp("^[0-9a-zA-Z][_0-9a-zA-Z-]*(\\.[0-9a-zA-Z][_0-9a-zA-Z-]*)*$");
	return (regExpDNS.test(Str));
}
function IsHostName(inHostname)
{
	var Str = inHostname.toUpperCase();
	var regExpDNS = new RegExp("^[0-9a-zA-Z][_0-9a-zA-Z-]*$");
	return (regExpDNS.test(Str));
}
function IsLocalIP(inIP)
{
	var items = inIP.split('.');
	
	if (items.length != 4) return false;
	if (inIP.substr(0,9) == "10.129.4.") return false;
	if (inIP.substr(0,11) == "192.168.76.") return false;
	if (eval(items[0]) == 10) return true;																																//	10.x.x.x classe A
	if ((eval(items[0]) == 192) && (eval(items[1]) == 168)) return true;																//	192.168.x.x classe C
	if ((eval(items[0]) == 169) && (eval(items[1]) == 254)) return true;																//	169.254.x.x classe C
	if ((eval(items[0]) == 172) && (eval(items[1]) >= 16) && (eval(items[1]) <= 31)) return true;			//	172.16-31.x.x classe B
	return false;
}
function IsDecoderTV(inMAC)
{
	var stbMACs = [	"00:0E:59:",
									"00:15:56:",
									"00:19:4B:",
									"00:1B:BF:",
									"00:1E:74:",
									"00:60:4C:"	];
	var stbMACsSize = stbMACs.length;							
	var stbMAC = inMAC.toUpperCase();
	var result = false;
	
	for (var i = 0; i < stbMACsSize; i++) {
		if (stbMAC.substr(0,9) == stbMACs[i]) {
			result = true;
			break;
		}
	}
	return result;
}
function IsDMA(inMAC)
{
	var dmaMAC = "00:00:00:";
	var dmaMACLen = dmaMAC.length;
	
	return (inMAC.substr(0,dmaMACLen) == dmaMAC);
}
function getRandomNum(mini,maxi)
{
	return (mini + Math.floor(Math.random() * (maxi - mini)));
}
function getRandomChar(lowercase)
{
	var charSet = (lowercase) ? "2345679acefghjkmnpqrstuvwxyz" : "2345679ACEFGHJKLMNPQRSTUVWXYZ";
	
	return charSet.charAt(getRandomNum(0,charSet.length));
}
function getPassword(maxlen,lowercase)
{
	var rc = "";
	
	for (var idx = 0; idx < maxlen; ++idx) rc = rc + getRandomChar(lowercase);
	return rc;
}
function getRadioValue(radioGroup)
{
	for (var i = 0; i < radioGroup.length; i++) if (radioGroup[i].checked) return radioGroup[i].value;
	return "";
}
function getSelectValue(selectObj)
{
	var selection = selectObj.selectedIndex;
	
	if (selection == -1) return "";
	return selectObj[selection].value;
}
