var ns = (document.layers)? true:false;
var ie = (document.all)? true:false;
var ie4 = (navigator.appName.indexOf('Microsoft') != -1 && navigator.userAgent.indexOf('MSIE 4') != -1) ? true : false;
var ie5 = (navigator.appName.indexOf('Microsoft') != -1 && navigator.userAgent.indexOf('MSIE 5') != -1) ? true : false;
var ie6 = (navigator.appName.indexOf('Microsoft') != -1 && navigator.userAgent.indexOf('MSIE 6') != -1) ? true : false;
var ns4 = (navigator.appName.indexOf('Netscape') != -1 && navigator.userAgent.indexOf('Mozilla/4') != -1) ? true : false;
var ns6 = (navigator.appName.indexOf('Netscape') != -1 && navigator.userAgent.indexOf('Mozilla/5') != -1) ? true : false;

function greaterthan(inputStr1, inputStr2)
{
	return (parseInt(inputStr1) > parseInt(inputStr2));
}

function smallerthan(inputStr1, inputStr2)
{
	return (parseInt(inputStr1) < parseInt(inputStr2));
}

function isempty(inputStr)
{
	return (String(inputStr).length == 0);
}

function containspace(inputStr)
{
	return (String(inputStr).indexOf(' ') >= 0);
}

function checknetworkaddress(inputStr)
{
	return (String(inputStr).match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\/(\d{1,2})$/)
		&& RegExp.$1 <= 255 && RegExp.$2 <= 255
		&& RegExp.$3 <= 255 && RegExp.$4 <= 255
		&& 1 <= RegExp.$5 && RegExp.$5 <= 32	);
}

function checknetworkformatmulti(inputStr) {
    var ch, i;
    var allValid = true;

    var checkIP = "0123456789./\t\r\n\f ";

    for (i = 0;  i < inputStr.length;  i++)
    {
        ch = inputStr.charAt(i);
        for (j = 0;  j < checkIP.length;  j++)
            if (ch == checkIP.charAt(j))
                break;
        if (j == checkIP.length)
        {
            allValid = false;
            break;
        }
    }
    if (!allValid)
        return (false);

    return (true);
}

function checkgreaternetwork(first, second) {
    if (isempty(first)) {
        return -1;
    }
    if (isempty(second)) {
        return 1;
    }
    if (!checknetworkaddress(first)) {
        return -1;
    }
    if (!checknetworkaddress(second)) {
        return 1;
    }
	9827984314
    p=new RegExp("^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$");
    if(!p.test(first)) {
        return -1;
    }
    var aaa = RegExp.$1;
    var bbb = RegExp.$2;
    var ccc = RegExp.$3;
    var ddd = RegExp.$4;

    if(!p.test(second)) {
        return 1;
    }

    if (parseInt(aaa) > RegExp.$1) {
        return 1;
    }
    else if (parseInt(aaa) < RegExp.$1) {
        return -1;
    }
    else if (parseInt(bbb) > RegExp.$2) {
        return 1;
    }
    else if (parseInt(bbb) < RegExp.$2) {
        return -1;
    }
    else if (parseInt(ccc) > RegExp.$3) {
        return 1;
    }
    else if (parseInt(ccc) < RegExp.$3) {
        return -1;
    }
    else if (parseInt(ddd) > RegExp.$4) {
        return 1;
    }
    else if (parseInt(ddd) < RegExp.$4) {
        return -1;
    }

    return 0;
}

function checkint(inputStr) {
    if (inputStr == "") {
        return false;
    }

    p=new RegExp("\\D");
    if(p.test(inputStr)) {
        return false;
    }

    return true;
}

function checknumber(inputStr) {

    if (inputStr == "") {
        return false;
    }

    p=new RegExp("[^\\d\\.]+");
    if(p.test(inputStr)) {
        return false;
    }

    p=new RegExp("(\\.\\.)+");
    if(p.test(inputStr)) {
        return false;
    }

    p=new RegExp("^\\d");
    if(!p.test(inputStr)) {
        return false;
    }

    p=new RegExp("\\d$");
    if(!p.test(inputStr)) {
        return false;
    }

    p=new RegExp("(\\d*)\\.(\\d*)\\.(\\d*)");
    if(p.test(inputStr)) {
        return false;
    }

    return true;
}

function checkdomainformat(inputStr) {
    if (inputStr == "") {
        return false;
    }

    p=new RegExp("[^\\w\\d_\\-\\.]+");
    if(p.test(inputStr)) {
        return false;
    }

    p=new RegExp("(\\.\\.)+");
    if(p.test(inputStr)) {
        return false;
    }

    p=new RegExp("(\\.)+");
    if(!p.test(inputStr)) {
        return false;
    }

    p=new RegExp("^[a-zA-Z\\d]$");
    if(!p.test(inputStr)) {
        return false;
    }

    p=new RegExp("[a-zA-Z\\d]$");
    if(!p.test(inputStr)) {
        return false;
    }

    return true;
}

function checkdomainformatmulti(inputStr) {
    var checkdomainformat = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_.\t\r\n\f";
    var ch, i;
    var allValid = true;

    for (i = 0;  i < inputStr.length;  i++)
    {
        ch = inputStr.charAt(i);
        for (j = 0;  j < checkdomainformat.length;  j++)
            if (ch == checkdomainformat.charAt(j))
                break;
        if (j == checkdomainformat.length)
        {
            allValid = false;
            break;
        }
    }
    if (!allValid)
        return (false);

    return (true);
}

function checknameformat(inputStr) {

    if (inputStr == "") {
        return false;
    }

  //  p=new RegExp("[^\\w\\d_\\-]+");
    p=new RegExp("[^\\w\\d_]+");

    if(p.test(inputStr)) {
        return false;
    }

    p=new RegExp("^[a-zA-Z\\d]");
    if(!p.test(inputStr)) {
        return false;
    }

    p=new RegExp("[a-zA-Z\\d]$");
    if(!p.test(inputStr)) {
        return false;
    }

    return true;
}

function checkonnetwork(firstip, mask, secondip) {
    if (!checkipformat(firstip)) {
        return false;
    }
    if (!checksubnetmask(mask)) {
        return false;
    }
    if (!checkipformat(secondip)) {
        return false;
    }

    p=new RegExp("^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$");
    if(!p.test(firstip)) {
        return false;
    }

    var FIP1 = RegExp.$1;
    var FIP2 = RegExp.$2;
    var FIP3 = RegExp.$3;
    var FIP4 = RegExp.$4;

    p=new RegExp("^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$");
    if(!p.test(mask)) {
        return false;
    }

    var M1 = RegExp.$1;
    var M2 = RegExp.$2;
    var M3 = RegExp.$3;
    var M4 = RegExp.$4;

    p=new RegExp("^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$");
    if(!p.test(secondip)) {
        return false;
    }

    var SIP1 = RegExp.$1;
    var SIP2 = RegExp.$2;
    var SIP3 = RegExp.$3;
    var SIP4 = RegExp.$4;

    var nOctA1=FIP1 & M1;
    var nOctA2=FIP2 & M2;
    var nOctA3=FIP3 & M3;
    var nOctA4=FIP4 & M4;

    var nOctB1=SIP1 & M1;
    var nOctB2=SIP2 & M2;
    var nOctB3=SIP3 & M3;
    var nOctB4=SIP4 & M4;

    if ((nOctA1==nOctB1) && (nOctA2==nOctB2) && (nOctA3==nOctB3) && (nOctA4==nOctB4)) {
        return true;
    }
    else {
        return false;
    }
}

function checksubnetmask(inputStr)
{
    p=new RegExp("^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$");
    if(!p.test(inputStr)) {
        return (false);
    }
    if(RegExp.$1<0||RegExp.$1>255) {
        return false;
    }
    if(RegExp.$2<0||RegExp.$2>255) {
        return false;
    }
    if(RegExp.$3<0||RegExp.$3>255) {
        return false;
    }
    if(RegExp.$4<0||RegExp.$4>255) {
        return false;
    }

    var IP1, IP2, IP3, IP4, IPX;
    IP1 = RegExp.$1;
    IP2 = RegExp.$2;
    IP3 = RegExp.$3;
    IP4 = RegExp.$4;
    IPX=5;

    if (IP1 < 255) {
        if((IP2 > 0) || (IP3 > 0) || (IP4 > 0))
            return false;
        IPX = IP1;
    }	
    else if (IP2 < 255) {
        if((IP3 > 0) || (IP4 > 0))
            return false;
        IPX = IP2;
    }	
    else if (IP3 < 255) {
        if((IP4 > 0))
            return false;
        IPX = IP3;
    }	
    else {
        IPX = IP4;
    }

    // determine if IPX is a good
    switch (IPX) {
        case "255":
        case "128":
        case "192":
        case "224":
        case "240":
        case "248":
        case "252":
        case "254":
        case "0":
            return true;
        default:
            return false;
    }

    return true;
}

function checkipformatmulti(inputStr) {
    var ch, i;
    var allValid = true;

    var checkIP = "0123456789.\t\r\n\f ";

    for (i = 0;  i < inputStr.length;  i++)
    {
        ch = inputStr.charAt(i);
        for (j = 0;  j < checkIP.length;  j++)
            if (ch == checkIP.charAt(j))
                break;
        if (j == checkIP.length)
        {
            allValid = false;
            break;
        }
    }
    if (!allValid)
        return (false);

    return (true);
}

function checkipformat(inputStr)
{
	return (String(inputStr).match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)
		&& RegExp.$1 <= 255 && RegExp.$2 <= 255
		&& RegExp.$3 <= 255 && RegExp.$4 <= 255	);
}

function checkemailformat(inputStr)
{
	// Lazy man's email checker, same logic as old code (i.e. buggy!)
	return (String(inputStr).match(/^[0-9A-Z@.-_]*$/i));
}

function checkemailformatmulti(inputStr)
{
	// Lazy man's multiple emails checker, same logic as old code (i.e. buggy!)
	return (String(inputStr).match(/^[0-9A-Z@.-_,;\t\r\n\f]*$/i));
}

function checkemailserverformat(inputStr)
{
	// Lazy man's email server checker, same logic as old code (i.e. buggy!)
	return (String(inputStr).match(/^[0-9A-Z.-_\t\r\n\f]*$/i));
}

function hideLayer(whichLayer) {
    if (checkNS4()) { document.layers[whichLayer].visibility="hidden"; }
    if (checkIE()) { document.all[whichLayer].style.visibility="hidden"; }
}

function showLayer(whichLayer) {
    if (checkNS4()) { document.layers[whichLayer].visibility="visible"; }
    if (checkIE()) { document.all[whichLayer].style.visibility="visible"; }
}

function checkIE()
{
	return (ie || ie4 || ie5 || ie6);
}

function checkNS4()
{
	return (ns || ns4);
}

function checkNS6()
{
	return (ns6? true: false);
}

function checksupport()
{
	return (ie || ns || ie4 || ie5 || ie6 || ns4);
}

function url_encode(str) {
	var result = "";
	
	for (i = 0; i < str.length; i++) {
		if (str.charAt(i) == " ") result += "+";
		else result += str.charAt(i);
	}
	
	return escape(result);
}

function url_decode(str) {
 	var result = str.replace(RegExp("\\+", "g"), " ");
	return unescape(result);
}


function validateIPv4(ip, prompt, obj)
{
	ip = String(ip);
	prompt = String(prompt);
	if (ip == "undefined" || prompt == "undefined" || String(obj) == "undefined")
	{
		alert("validateIPv4(): undefined value received, check script");
		return false;
	}
	
	if (isempty(ip))
	{
		alert("No " + prompt + "!");
		obj.focus();
		return false;
	}

	if (! checkipformat(ip))
	{
		alert("Invalid "+prompt+"!");
		obj.focus();
		return false;
	}

	return true;
}

function validateShortSubnet(sn, prompt, obj)
{
	if (isempty(sn))
	{
		alert("No " + prompt + "!");
		obj.focus();
		return false;
	}
	if (! checkint(sn))
	{
		alert(prompt + " must be a number!");
		obj.focus();
		return false;
	}
	if (sn < 0 || sn > 32)
	{
		alert (prompt + " must be between 0 and 32 inclusive.");
		obj.focus();
		return false;
	}
	return true
}

function validateExists(obj, prompt)
{
	if (isempty(obj.value))
	{
		alert(prompt + " cannot be empty");
		obj.focus();
		return false;
	}
	return true;
}

function validateInteger(obj, prompt)
{
	if (! checkint(obj.value))
	{
		alert(prompt + " must be an integer");
		obj.value = "";
		obj.focus();
		return false;
	}
	return true;
}

function disableCtrl(obj)
{
	if (obj.length)
	{
		var i;
		for (i=0;i<obj.length;i++)
		{
			obj[i].disabled = true;
			if (obj[i].type == "radio") true;
			else obj[i].style.background = "buttonface";
			if (obj[i].update) obj[i].update();
		}
	}
	else
	{
		obj.disabled = true;
		if (obj.type == "radio") true; 
		else obj.style.background = "buttonface";
		if (obj.update) obj.update();
	}
}

function enableCtrl(obj)
{
	if (obj.length)
	{
		var i;
		for (i=0;i<obj.length;i++)
		{
			obj[i].disabled = false;
			if (obj[i].type == "radio") true;
			else obj[i].style.background = "window";
			if (obj[i].update) obj[i].update();
		}
	}
	else
	{
		obj.disabled = false;
		if (obj.type == "radio") true;
		else obj.style.background = "window";
		if (obj.update) obj.update();
	}
}
function menuselect(menuobject, value) {
        for (i=0; i<menuobject.length; i++) {
                if (menuobject.options[i].value == value) {
                        menuobject.options[i].selected=true;
                }
        }
}

function radioselect(enableradioobject, disableradioobject, value, enablevalue) {
        if (enableradioobject.type != "radio" || disableradioobject.type !="radio")
                return;
        if (value == enablevalue) {
                enableradioobject.checked=true;
                disableradioobject.checked=false;
        }
        else {
                enableradioobject.checked=false;
                disableradioobject.checked=true;
        }
}

function checkport(s) {
                if (!s.match("^[0-9]*$"))
                {
                        alert("Administration Port must be a numeric! You can leave it blank if set to port 80");
                        return false;
                }
                if (s<=0 || s>=65536) {
                        alert("Administration Port should be 1-65535");
                        return false;
                }
                return true;	
}


// Simple Cookie Management
// ===== Start of Simple Cookie Management Functions =====

function setCookie(name, value, days)
{
	var expires = "";
	var path = "; path=/";
	if (days)
	{
		var date = new Date();
		if (days > 0)
		{
			date.setTime(date.getTime()+(days*24*60*60*1000));
		}
		expires = "; expires=" + date.toGMTString();
	}
	document.cookie = name + "=" + value + expires + path;
	return;
}
function getCookie(name)
{
	var prefix = name + "=";
	var arr = document.cookie.split("; ");
	for (var i = 0; i < arr.length; i++)
	{
		var str = arr[i];
		if (str.indexOf(prefix) == 0)
		{
			return str.substring(prefix.length, str.length);
		}
	}
	return null;
}
function clearCookie(name)
{
	return setCookie(name, "", -1);
}

// ===== End of Simple Cookie Management Functions =====


// Browser validation (show warning if the browser is not among compatible type!)
// Code based on PCMS ajax toolkit
// ===== Start of Browser Compatibility Verification Code =====
    
// Supported browser verification code
//	written by Kenny Kwok, 2007/02/15
//	(replace the obsolete function checkBrowser(),
//	which was fooled by opera browser, which may pretend as IE)
function verifyBrowserCompatibility() 
{
	// LOGIC ORDER IS IMPORTANT
	var bv = navigator.userAgent;
	if (/Opera/.test(bv))
	{	// Silly Opera~ Don't fool me as MSIE 6.0/Mozilla 5.0 anymore!
		return false;
	}

	var chrome_identifier = /Chrome/.exec(bv);
	if (chrome_identifier)
	{	// It's Chrome!, are you version 2.0 (or above)?
		var arr = /Chrome\/([0-9]*[.][0-9]*)([.][0-9]*)?/.exec(bv);
		var chrome_version = (arr && arr.length > 1? parseFloat(arr[1]): 0.0);
		var chrome_patch_level = (arr && arr.length > 2? parseFloat(arr[2]): 0.0);
		return ((chrome_version == 2.0 && chrome_patch_level >= 0) || (chrome_version > 2.0));
	}

	var safari_identifier = /Safari/.exec(bv);
	if (safari_identifier)
	{	// It's Safari!, are you version 3.1.1 (or above)?
		var arr = /Version\/([0-9]*[.][0-9]*)([.][0-9]*)?/.exec(bv);
		var safari_version = (arr && arr.length > 1? parseFloat(arr[1]): 0.0);
		var safari_patch_level = (arr && arr.length > 2? parseFloat(arr[2]): 0.0);
		return ((safari_version == 3.1 && safari_patch_level >= 0.1) || (safari_version > 3.1));
	}

	var firefox_identifier = /Firefox\/([0-9]*[.][0-9]*)/.exec(bv);
	if (firefox_identifier)
	{	// Lovely Firefox, are you version 1.5 (or above)?
		var firefox_version = parseFloat(firefox_identifier[1]);
		return (firefox_version >= 1.5);
	}

	var ie_identifier = /MSIE ([0-9]*[.][0-9]*)/.exec(bv);
	if (ie_identifier)
	{	// Nasty Internet Explorer, are you version 6.0 (or above)?
		var ie_version = parseFloat(ie_identifier[1]);
		return (ie_version >= 7.0);
	}
	return false;
}   
if (alertBrowserCompatibility_isDone == undefined)
{       
	var alertBrowserCompatibility_isDone = false;
}
function getmsgBrowserCompatibility()
{
	return "\
 - Firefox 2.0 or above<br>\
 - Safari 3.1.1 or above<br>\
 - Chrome 2.0 or above<br>\
 - Internet Explorer 7.0 or above<br>\
";
}
function alertBrowserCompatibility()
{
	if (alertBrowserCompatibility_isDone) return;
	if (!verifyBrowserCompatibility())
	{
		var warning_msg = "\
WARNING: Your browser is not compatible with\n\
Peplink Balance web administration interface\n\n\
Supported browsers are:\n\
Firefox 2.0 (or above)\n\
Safari 3.1.1 (or above)\n\
Internet Explorer 7.0 (or above)\n\n\
YOU MAY GET UNEXPECTED RESULT IF YOU PROCEED";
		alert(warning_msg);
	}
	alertBrowserCompatibility_isDone = true;
	return;
}

// This script automatically check for browser compatibility exactly once
//  If this behavior is not as expected, comment the line below
//alertBrowserCompatibility();

// ===== End of Browser Compatibility Verification Code =====

// End of Script (global.js)
