	var UTF8_MAX_ONE_BYTE	= 0x0007F;
	var UTF8_MAX_TWO_BYTE	= 0x007FF;
	var UTF8_MAX_THREE_BYTE	= 0x0FFFF;

// Get an element by ID
function getByID(id) {
	if (document.all) {
		return document.all(id);
	}
	else if (document.getElementById) {
		return document.getElementById(id);
	}
	return false;
}
// Get the document object inside an <iframe> in a portable manner
function getIframeDoc(id, doc) {
	if (doc.frames) {
		return doc.frames[id].document;
	}
	var ifrm = doc.getElementById(id);
	if (ifrm.contentDocument) {
		return ifrm.contentDocument;
	} else if (ifrm.contentWindow) {
		return ifrm.contentWindow.document;
	} else if (ifrm.document) {
		return ifrm.document;
	}
}
function isBlankString(strToTest) {
	var blankString = true;
	for (var i=0; i < strToTest.length; i++) {
		if (strToTest.charAt(i) == ' ') {
			continue;
		} else {
			blankString = false;
			break;
		}
	}
 	return blankString;
}
function isQuoteString(strToTest) {
	var quoteString = false;
	for (var i=0; i < strToTest.length; i++) {
		if ((strToTest.charAt(i) == '"') || (strToTest.charAt(i) == "'")) {
			quoteString = true;
			break;
		}
	}
 	return quoteString;
}
function isBackslashString(strToTest) {
	var slashString = false;
	for (var i=0; i < strToTest.length; i++) {
		if (strToTest.charAt(i) == '\\') {
			slashString = true;
			break;
		}
	}
 	return slashString;
}
function isAlphaNumeric(strToTest) {
	var parsed = true;
	var validchars = "abcdefghijklmnopqrstuvwxyz0123456789";
	for (var i=0; i < strToTest.length; i++) {
		var letter = strToTest.charAt(i).toLowerCase();
		if (validchars.indexOf(letter) != -1) {
			continue;
		}
		alert("Invalid character: '" + letter + "'");
		parsed = false;
		break;
	}
 	return parsed;
}
function IsEmpty(anyval) {
	alertMsg = "Please don't leave this field blank!"
	if (anyval == "") {
		alert(alertMsg)
	}
}
function validateUserName(s) {
	if (s.length == 0) {
		alert("You need to give the user a name!");
		return false;
	}
	if (isQuoteString(s)) {
		alert("User name cannot contain quotes!");
		return false;
	}
	if (isBackslashString(s)) {
		alert("User name cannot contain back slashes!");
		return false;
	}
	return true;
}
function isValidPPTPIP(anyval) {
//
	 var bReturn = true;
	 alertMsg = "Please Enter a Valid IP address!"
	 strlen = anyval.length
	 if (anyval == "" || anyval == "0.0.0.0") {
		 bReturn = false;
	 } else {
		 arrayOfStrings = anyval.split(".")
		 if (arrayOfStrings.length !=4) {
			 bReturn = false;
		 } else {
			 for (var i=0; i < 4; i++) {
				 if (arrayOfStrings[i].charAt(0) < '0' || arrayOfStrings[i].charAt(0) > '9'
				  || isNaN(arrayOfStrings[i])
				  || arrayOfStrings[i] < 0 || arrayOfStrings[i] > 255) {
					 bReturn = false;
					 break;
				 }
			 }
		 }
	 }
	 if (bReturn == false)
		alert(alertMsg)
	 return bReturn;
//
}
function isValidIP(anyval) {
	 var bReturn = true;
	 strlen = anyval.length;
	 if (anyval == "") {
		 bReturn = false;
	 } else {
		 arrayOfStrings = anyval.split(".");
		 if (arrayOfStrings.length !=4) {
			 bReturn = false;
		 } else {
			 for (var i=0; i < 4; i++) {
				 if (arrayOfStrings[i].charAt(0) < '0' || arrayOfStrings[i].charAt(0) > '9'
				  || isNaN(arrayOfStrings[i])
				  || arrayOfStrings[i] < 0 || arrayOfStrings[i] > 255) {
					 bReturn = false;
					 break;
				 }
			 }
             if (arrayOfStrings[0] == 0 && (arrayOfStrings[1] != 0
		 		|| arrayOfStrings[2] != 0 || arrayOfStrings[3] != 0))
                 bReturn = false;
		 }
	 }
	 return bReturn;
}
function isGreaterIP(beginVal, endVal) {
	var bGreater = false;
	beginArray = beginVal.split(".");
	endArray   = endVal.split(".");
	for (var i=0; i < 4; i++) {
		bVal = parseInt(beginArray[i]);
		eVal = parseInt(endArray[i]);
		if (bVal > eVal) {
			bGreater = true;
			break;
		}
		else if (eVal > bVal)
			break;
	}
	return bGreater;
}

function isMulticastIP(anyVal) {
	var bReturn = false;
       strlen = anyVal.length
	 if (anyVal == "") 
	 {
		 bReturn = false;
	 } 
	 else 
	 {
		arrayOfStrings = anyVal.split(".")
		if (arrayOfStrings.length !=4) 
		{
			 bReturn = false;
		 } 
		else
		{
			var x = parseInt(arrayOfStrings[0]);
			if ( (x & 0xF0) == 0xE0)
			{
				/*alert("Mcast Check SUCCESS");*/
			 	bReturn = true;
			 }
		}
	 }
	return bReturn;
}

function validateSettings(begin, end) {
	var beginWildcard = begin.value == '*';
	var endWildcard   = end.value   == '';
	if (!isValidIP(begin.value) && !(beginWildcard)) {
		alert("Invalid 'IP Address Begin'");
		begin.focus();
		begin.select();
		return  false;
	}
	if (!isValidIP(end.value) && !(endWildcard)) {
		alert("Invalid 'IP Address End'");
		end.focus();
		end.select();
		return false;
	}
	if (isGreaterIP(begin.value, end.value) && !(beginWildcard && endWildcard)) {
		alert("'IP Address Begin' is greater than 'IP Address End'");
		begin.focus();
		begin.select();
		return false;
	}
	if (beginWildcard && !(endWildcard)) {
		alert("You cannot specify 'IP Address End' if 'IP Address Begin' =  * ");
		end.focus();
		end.select();
		return false;
	}
	return true;
}
function netToRangeBegin(net,mask) {
	var beginAddr = (net & mask) + (1 & ~mask);
    return (beginAddr);
}
function netToRangeEnd(net,mask) {
	var endAddr = (net | ~mask) - (1 & ~mask);
    return (endAddr);
}
function netFromRange(begin,end) {
    var mask =  maskFromRange(begin,end);
    net = begin & mask;
    return (net);
}
function maskFromRange(begin,end) {
    var mask;
	if (begin == end) {
		mask = 0xffffffff;
	} else {
		mask = ~((begin-1) ^ (end+1));
	}
    return (mask);
}
function copyRangeToSubnet(rangeBegin, rangeEnd, subnet, subnetmask) {
	/* Change to IKE, range -> subnet */
	var begin = dottedToBinary(rangeBegin.value);
	var end = dottedToBinary(rangeEnd.value);
	var net = netFromRange(begin,end);
	var mask = maskFromRange(begin,end);
	subnet.value = binaryToDotted(net);
	subnetmask.value = binaryToDotted(mask);
}
function copySubnetToRange(subnet, subnetmask, rangeBegin, rangeEnd) {
	/* Change to manual, subnet -> range */
	var net = dottedToBinary(subnet.value);
	var mask = dottedToBinary(subnetmask.value);
	var begin = netToRangeBegin(net,mask);
	var end = netToRangeEnd(net,mask);
	rangeBegin.value = binaryToDotted(begin);
	rangeEnd.value = binaryToDotted(end);
}
function dottedToBinary(dottedIp) {
   var octet;
   var i, j, k;
   var ipbin;
   ipbin = 0;
   for (i = 0, j = dottedIp.indexOf('.', i), k = 0;
	   dottedIp.length != 0 && k < 4;
	   i = j + 1, j = dottedIp.indexOf('.', i), k++)
   {
	   if (j == -1) {
		   octet = dottedIp.substring(i);
	   } else {
		   octet = dottedIp.substring(i, j);
	   }
	   ipbin <<= 8;
	   if (isNaN(parseInt(octet))) {
		   return 0;
	   } else {
		   ipbin += parseInt(octet);
	   }
   }
   return ipbin;
}
function binaryToDotted(ipbin) {
	var mask = 255;
	var dottedIp = new String();
	for(var i=24; i>=0; i-=8) {
		dottedIp += ((ipbin & (mask << i)) >> i) & 0x00ff;
		if(i>0)
			dottedIp += '.';
	}
	return dottedIp;
}
function copyFormValues(srcObj, dstObj) {
   if (srcObj.type == "checkbox")  {
	   dstObj.value = (srcObj.checked)? "on":"off";
   }
   else if (srcObj.type == "select-one") {
	   dstObj.value = srcObj.options[srcObj.selectedIndex].value;
   }
   else {
	   dstObj.value = srcObj.value;
   }
}
function isNumeric(string) {
if (!string) {
	return false;
}
var Chars = "0123456789-";
for (var i = 0; i < string.length; i++) {
 	if (Chars.indexOf(string.charAt(i)) == -1) {
		return false;
	}
}
   return true;
}
function isPositiveInteger(string) {
if (!string) {
	return false;
}
var Chars = "0123456789";
for (var i = 0; i < string.length; i++) {
 	if (Chars.indexOf(string.charAt(i)) == -1) {
		return false;
	}
}
   return true;
}
function addCgiTagToForm(doc,form,type,name,value,recArray) {
	var elem = doc.createElement("input");
	elem.id = name;
	elem.setAttribute("type", type);
	elem.setAttribute("name", name);
	elem.setAttribute("value", value);
	form.appendChild(elem);
	if (recArray) {
		recArray[recArray.length] = elem;
	}
}
function removeAddedCgiTagsFromForm(form,recArray) {
	for (var i = 0; i < recArray.length; i++) {
		form.removeChild(recArray[i]);
	}
	recArray.length = 0;
}
function disableIt(obj) {
obj.disabled = true;
}
function enableIt(obj) {
   obj.disabled = false;
}
function validateSecret(s) {

   if (validateHexChars(s) == false)
   {
   	   window.alert("Encryption key must contain digits (0-9) or hex digits (a-f/A-F) only!");
	   return false;
   }


   	algEspDesHmacMd5 = 4; algEspDesHmacSha1 = 11;
       algEsp3DesHmacMd5 = 7; algEsp3DesHmacSha1 = 9;
	algEspAes128HmacMd5 = 15; algEspAes128HmacSha1 = 16;
	algEspAes256HmacMd5 = 18; algEspAes256HmacSha1 = 19;


	algId = document.thisForm.globalMgtSAalgoName.options[document.thisForm.globalMgtSAalgoName.selectedIndex].value;

	if (algId == algEsp3DesHmacMd5 || algId == algEsp3DesHmacSha1)
	{
        	if (s.length < 48)
        	{
            		window.alert("Encryption key must be 48 digits!");
			return false;
        	}
		else if (s.length > 48)
        	{
            		if (window.confirm('Warning: Encryption key longer than 48 digits - OK to truncate?') == true)
            		{
                		document.thisForm.globalMgtSecretTagName.value = s.substring(0,48);
            		}
            		else
            		{
				return false;
            		}
        	}
    	}
        else if (algId == algEspDesHmacMd5 || algId == algEspDesHmacSha1)
	{
        	if (s.length < 16)
        	{
            		window.alert("Encryption key must be 16 digits!");
			return false;
        	}
		else if (s.length > 16)
        	{
            		if (window.confirm('Warning: Encryption key longer than 16 digits - OK to truncate?') == true)
            		{
                		document.thisForm.globalMgtSecretTagName.value = s.substring(0,16);
            		}
            		else
            		{
				return false;
            		}
        	}
    	}
	else if (algId == algEspAes128HmacMd5 || algId == algEspAes128HmacSha1)
	{
        	if (s.length < 32)
        	{
            		window.alert("Encryption key must be 32 digits!");
			return false;
        	}
		else if (s.length > 32)
        	{
            		if (window.confirm('Warning: Encryption key longer than 32 digits - OK to truncate?') == true)
            		{
                		document.thisForm.globalMgtSecretTagName.value = s.substring(0,32);
            		}
            		else
            		{
				return false;
            		}
        	}
    	 }
        else if (algId == algEspAes256HmacMd5 || algId == algEspAes256HmacSha1)
        {
        	if (s.length < 64)
        	{
			window.alert("Encryption key must be 64 digits!");
			return false;
        	}
		else if (s.length > 64)
        	{
            		if (window.confirm('Warning: Encryption key longer than 64 digits - OK to truncate?') == true)
            		{
                		document.thisForm.globalMgtSecretTagName.value = s.substring(0,64);
            		}
            		else
            		{
				return false;
            		}
        	}
    	}

   return true;
}

function validateHexChars(s) {
   for (var i = 0; i < s.length; i++) {
	   var c = s.substring(i, i + 1);
	   switch (c) {
	   case '0':
	   case '1':
	   case '2':
	   case '3':
	   case '4':
	   case '5':
	   case '6':
	   case '7':
	   case '8':
	   case '9':
	   case 'a':
	   case 'A':
	   case 'b':
	   case 'B':
	   case 'c':
	   case 'C':
	   case 'd':
	   case 'D':
	   case 'e':
	   case 'E':
	   case 'f':
	   case 'F':
		   continue;
	   default:
		   return false;
	   }
   }
   return true;
}

function isValidMACFormat(mac) {
	var pos = 0;
	var s = new String("");

	if (mac.length != 17)
		return false;

	for (var i = 0; i < mac.length; i++) {
		s = mac.substring(i, i+1);
		if (pos == 2) {
			if (s != ":")
				return false;
			else
				pos = 0;
		} else if (!validateHexChars(s)) {
			return false;
		} else {
			pos++;
		}			
	}		
	return true;
}

function validateAuthKey(s) {

	if (validateHexChars(s) == false)
	{
		window.alert("Authentication key must contain digits (0-9) or hex digits (a-f/A-F) only!");
		return false;
	}

	algEspDesHmacMd5 = 4; algEspDesHmacSha1 = 11;
       algEsp3DesHmacMd5 = 7; algEsp3DesHmacSha1 = 9;


	algId = document.thisForm.globalMgtSAalgoName.options[document.thisForm.globalMgtSAalgoName.selectedIndex].value;

	if (algId == algEsp3DesHmacMd5 || algId == algEspDesHmacMd5)
	{
        	if (s.length < 32)
        	{
            		window.alert("Authentication key must be 32 digits!");
			return false;
        	}
		else if (s.length > 32)
		{
			if (window.confirm('Warning: Authentication key longer than 32 digits - OK to truncate?') == true)
            		{
                		document.thisForm.globalMgtAuthKeyTagName.value = s.substring(0,32);
            		}
            		else
            		{
				return false;
            		}

		}
    	}
        else if (algId == algEsp3DesHmacSha1 || algId == algEspDesHmacSha1)
        {
        	if (s.length < 40)
        	{
            		window.alert("Authentication key must be 40 digits!");
			return false;
        	}
		else if (s.length > 40)
        	{
            		if (window.confirm('Warning: Authentication key longer than 40 digits - OK to truncate?') == true)
            		{
                		document.thisForm.globalMgtAuthKeyTagName.value = s.substring(0,40);
            		}
            		else
            		{
				return false;
            		}
        	}
    	}

	return true;

}
function insertTabs(numTabs) {
   var i;
   var strTabs = new String();
   for (i=0; i<numTabs ;i++) {
	   strTabs = strTabs + "\t";
   }
   return strTabs;
}
function chgButtColor(color) {
   var el = event.srcElement;
   if (null == el) {
	   return;
   }
   if (el.tagName == "INPUT" && (el.type == "submit" || el.type == "button" || el.type == "reset")) {
	   event.srcElement.style.backgroundColor=color;
   }
}
function setOptionByValue(dstSelObj, inValue)
{
	if(dstSelObj == null || dstSelObj.type != "select-one")
		return;

	for(var i=0; i < dstSelObj.length;i++)
	{
		if(dstSelObj.options[i].value == inValue)
		{
			dstSelObj.selectedIndex = i;
			dstSelObj.options[i].selected = true;
			break;
		}
	}
}
function openMgmtWin(page) {
	var mgmtWin = window.open(page, "swMgmnt_0006B12E8B38",
		"menubar,toolbar,personalbar,status,location,scrollbars,resizable,width=800,height=500");
	return(mgmtWin);
}
function doLogout() {
	if (top.opener && !top.opener.closed && top.opener.closeMe) {
		if (top.opener.name == "loginStatus_0006B12E8B38") {
			top.opener.closeMe();
			top.opener = null;
		}
	}
	top.location.href="logout.html";
}
function utf8Length(s)
{
	var i;
	var n = 0;

	for( i = 0; i < s.length; i++ )
	{
		if( s.charCodeAt(i) <= UTF8_MAX_ONE_BYTE )
			n += 1;
		else
		if( s.charCodeAt(i) <= UTF8_MAX_TWO_BYTE )
			n += 2;
		else
		if( s.charCodeAt(i) <= UTF8_MAX_THREE_BYTE )
			n += 3;
		else
			n += 4;
	}
	return n;
}
/* * * * * * * * * */
function	toHexStr( src )
{
		var z;
		var	res = "";
		for( z = 0; z < src.length; z++ )
		{
			var y = src.charCodeAt(z);
			var	_res = Number(y).toString(16);
			res += _res + " ";
		}
	return res;
}
/* * * * * * * * * */
function validateLength( ctl )
{
	if( utf8Length(ctl.value) > ctl.maxLength )
	{
/*
		alert( "data exeeds maximum length " + ctl.maxLength );
		ctl.focus();
*/
		return false;
	}
	return true;
}
function htmlEsc(chr, escStr) {
	this.chr = chr;
	this.escStr = escStr;
}
var htmlEscapes = new Array
(
	new htmlEsc('&', '&amp;'),
	new htmlEsc('<', '&lt;'),
	new htmlEsc('>', '&gt;'),
	new htmlEsc('\"', '&quot;'),
	new htmlEsc('/', '&sol;')
);
function isHtmlEsc(str) {
	if (str.charAt(0) == '&') {
		for (var j = 0; j < htmlEscapes.length; j++) {
			var l = htmlEscapes[j].escStr.length;
			if (str.substr(0, l) == htmlEscapes[j].escStr) {
				return true;
			}
		}
	}
	return false;
}
function htmlEscape(str) {
	var encStr = "";
	for (var i = 0; i < str.length; i++) {
		for (j = 0; j < htmlEscapes.length; j++) {
			if (str.charAt(i) == htmlEscapes[j].chr) {
				encStr += str.substring(0, i);
				encStr += htmlEscapes[j].escStr;
				str = str.substr(i+1);
				i = 0;
				break;
			}
		}
	}
	encStr += str;
	return encStr;
}
function htmlUnescape(encStr) {
	var str = "";
	for (var i = 0; i < encStr.length; i++) {
		if (encStr.charAt(i) == '&') {
			var c;
			for (j = 0; j < htmlEscapes.length; j++) {
				var l = htmlEscapes[j].escStr.length;
				if (encStr.substr(i, l) == htmlEscapes[j].escStr) {
					str += encStr.substring(0, i);
					str += htmlEscapes[j].chr;
					encStr = encStr.substr(i+l);
					i = 0;
					break;
				}
			}
		}
	}
	str += encStr;
	return str;
}
function isValidNonZeroIp(anyval) {
	 var bReturn = true;
	 alertMsg = "Please Enter a Valid IP address!"
	 strlen = anyval.length
	 if (anyval == "" || anyval == "0.0.0.0") {
		 bReturn = false;
	 } else {
		 arrayOfStrings = anyval.split(".")
		 if (arrayOfStrings.length !=4) {
			 bReturn = false;
		 } else {
			 for (var i=0; i < 4; i++) {
				 if (arrayOfStrings[i].charAt(0) < '0' || arrayOfStrings[i].charAt(0) > '9'
				  || isNaN(arrayOfStrings[i])
				  || arrayOfStrings[i] < 0 || arrayOfStrings[i] > 255) {
					 bReturn = false;
					 break;
				 }
			 }
		 }
	 }
	 if (bReturn == false)
		alert(alertMsg)
	 return bReturn;

}
function changeImage(imgField,newImg) {
	if (document.images) {
		document.images[imgField].src = newImg.src;
	}
}

//disable for bug 26183, it seems NS 6.02 doesn't support this kind of prototype define
//if(self.Node&&self.Node.prototype) {
//	// Add IE specific method replaceNode() to NS browser
//	Node.prototype.replaceNode=replace_Node;
//}
//function replace_Node(a1) {
//	return this.parentNode.replaceChild(a1,this)
//}

function changeText(id,text){
	var obj = getByID(id);
	if (obj) {
		var tNode = document.createTextNode(text);
		var span = document.createElement("SPAN");
		span.setAttribute("id", id);
		span.appendChild(tNode);
		obj.parentNode.replaceChild(span,obj);
	}
}
if (!Array.prototype.push) {
	// Add Array.push function to IE5
	Array.prototype.push =
		function()
		{
			var i=0, b=this.length, a=arguments;
			while(i<a.length)
			this[b+i]=a[i++];
			return this.length
		};
}
function setSelect(sel, val) {
	for(var i=0; i<sel.length; i++) {
		if(sel.options[i].value == val) {
			 sel.selectedIndex = i;
		}
	}
}
function isAuthViaRadius() {
	return (("" == "CHECKED") ? false : true);
}

function fetchGetParam(key) {
	var url = ' ' + htmlUnescape(document.location.href);
	var start = url.indexOf(key + '=');
	if (start == -1)
		return null;
	var end = url.indexOf("&", start);
	if (end == -1) end = url.length;
	end -= start;
	var value = url.substr(start,end);
	return unescape(value.substr(value.indexOf('=') + 1, value.length - value.indexOf('=') + 1));
}

/* The next two functions validate domainnames */
function isDomainnameLabel(str)
{
	var letters = "abcdefghijklmnopqrstuvwxyz";
	var numbers = "0123456789";
	var c;
	var i;

	if (str.length == 0 || str.length > 63) return false;
		
	for (i = 0; i < str.length; i++) {
		c = str.charAt(i).toLowerCase();
		switch (i) {
		case 0:
			if (letters.indexOf(c) == -1) return false;
			break;
		default:
			if (c != '-' && letters.indexOf(c) == -1 && numbers.indexOf(c) == -1)
				return false;
			break;
		}
	}
	return true;
}
function isDomainname(str)
{
	var i, j, k;
		
	if (str.length == 0) return false;
		
	for (i = 0, j = str.indexOf('.', i), k = 0;
		true;
		i = j + 1, j = str.indexOf('.', i), k++)
	{
		if (j == -1) {
			if (!isDomainnameLabel(str.substring(i))) return false;
			return true;
		} else {
			if (!isDomainnameLabel(str.substring(i, j))) return false;
		}
	}
		
	return (k > 0) ? true : false;
}

/* Function to validate email addresses */
function isEmailAddress(str)
{
	var i;
	var m;
	var d;
		
	i = str.indexOf('@');
	if (i == -1) return false;
		
	m = str.substring(0, i);
	d = str.substring(i + 1);

	if (m.length == 0 || isBlankString(str.substring(0, i))) return false;

	if (d.length == 0 || !isDomainname(d)) return false;
		
	return true;
}

function isValidURL(url) {
  var urlRegExpr = /\w+:\/\/\w+/;    
  return  (url.match(urlRegExpr));
}
