var gErrorUrl="";

var gHexArray = ["%00", "%01", "%02", "%03", "%04", "%05", "%06", "%07",
                 "%08", "%09", "%0a", "%0b", "%0c", "%0d", "%0e", "%0f",
                 "%10", "%11", "%12", "%13", "%14", "%15", "%16", "%17",
                 "%18", "%19", "%1a", "%1b", "%1c", "%1d", "%1e", "%1f",
                 "%20", "%21", "%22", "%23", "%24", "%25", "%26", "%27",
                 "%28", "%29", "%2a", "%2b", "%2c", "%2d", "%2e", "%2f",
                 "%30", "%31", "%32", "%33", "%34", "%35", "%36", "%37",
                 "%38", "%39", "%3a", "%3b", "%3c", "%3d", "%3e", "%3f",
                 "%40", "%41", "%42", "%43", "%44", "%45", "%46", "%47",
                 "%48", "%49", "%4a", "%4b", "%4c", "%4d", "%4e", "%4f",
                 "%50", "%51", "%52", "%53", "%54", "%55", "%56", "%57",
                 "%58", "%59", "%5a", "%5b", "%5c", "%5d", "%5e", "%5f",
                 "%60", "%61", "%62", "%63", "%64", "%65", "%66", "%67",
                 "%68", "%69", "%6a", "%6b", "%6c", "%6d", "%6e", "%6f",
                 "%70", "%71", "%72", "%73", "%74", "%75", "%76", "%77",
                 "%78", "%79", "%7a", "%7b", "%7c", "%7d", "%7e", "%7f",
                 "%80", "%81", "%82", "%83", "%84", "%85", "%86", "%87",
                 "%88", "%89", "%8a", "%8b", "%8c", "%8d", "%8e", "%8f",
                 "%90", "%91", "%92", "%93", "%94", "%95", "%96", "%97",
                 "%98", "%99", "%9a", "%9b", "%9c", "%9d", "%9e", "%9f",
                 "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%a7",
                 "%a8", "%a9", "%aa", "%ab", "%ac", "%ad", "%ae", "%af",
                 "%b0", "%b1", "%b2", "%b3", "%b4", "%b5", "%b6", "%b7",
                 "%b8", "%b9", "%ba", "%bb", "%bc", "%bd", "%be", "%bf",
                 "%c0", "%c1", "%c2", "%c3", "%c4", "%c5", "%c6", "%c7",
                 "%c8", "%c9", "%ca", "%cb", "%cc", "%cd", "%ce", "%cf",
                 "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7",
                 "%d8", "%d9", "%da", "%db", "%dc", "%dd", "%de", "%df",
                 "%e0", "%e1", "%e2", "%e3", "%e4", "%e5", "%e6", "%e7",
                 "%e8", "%e9", "%ea", "%eb", "%ec", "%ed", "%ee", "%ef",
                 "%f0", "%f1", "%f2", "%f3", "%f4", "%f5", "%f6", "%f7",
                 "%f8", "%f9", "%fa", "%fb", "%fc", "%fd", "%fe", "%ff" ];

function OpenHelpErrorHandler() 
{
    if (gErrorUrl != "")
    {
        location.href = gErrorUrl;
        return true;
    }
    else
    {
        return false;
    }
}

function OpenHelp(url)
{        
    window.onerror = OpenHelpErrorHandler;
    gErrorUrl = url;
    var hWnd = window.open(url, "NVOHelp", "menubar=yes,toolbar=yes,width=630,height=400,resizable=yes,scrollbars=yes");
	if (!hWnd.opener) hWnd.opener = self;
	if (hWnd.focus != null) hWnd.focus();
    gErrorUrl = "";
}

function LangWiz() 
{
			alert("Your service provider does not support any additional languages at this time.\n\nPlease contact customer support for assistance.")

	
}

function FindElement(elementName)
{
	var i = 0;
    
    for (i = 0; i < document.nvoForm.elements.length; i++)
	{
		if (document.nvoForm.elements[i].name == elementName)
		{
			return document.nvoForm.elements[i];
		}
	}
    return null;
}


function RemoveFocusAll()
{
	if (document.nvoForm)

	{
		var vers = navigator.appVersion;
		if (vers.indexOf("Mac") != -1 && vers.indexOf("IE") != -1)
		{
			var i = 0;

	    	for (i = document.nvoForm.elements.length - 1; i >= 0 ; i--)


			{
				if (document.nvoForm.elements[i].type == "text" || document.nvoForm.elements[i].type == "textarea")
				{
					document.nvoForm.elements[i].blur();
				}
			}
		}
	}
}



var gSaveAndGoURL = "";
var gChanged = false;  // set to true if page has been modified



function DoGoto(url, uid)
{
	CheckForTextChange();

	RemoveFocusAll();
    if (gChanged || uid == "")
    {
        gSaveAndGoURL = url;
        DoSave();
    }
    else
    {
        location.href = ReplaceString(url, "*", uid);
    }
}


// save the form data and goto the specified url

var hitreturn = false;

function DoDefault()
{
	if (!hitreturn) 
	{
 		hitreturn = true;
 		DoSave();
  	}
    return true;
}


function SaveAndGo(url)
{
	CheckForTextChange();

    RemoveFocusAll();
    if (gChanged)
    {
        gSaveAndGoURL = url;
        DoSave();
    }
    else
    {
        location.href = url;
    }
}


function Changed(url)
{
	gChanged = true;
}


function IsNetscape()
{
	return (navigator.appName.substring(0, 8) == "Netscape");
}


function WarnIfUsingOldBrowser()
{
	if (parseInt(navigator.appVersion) < 4)
	{
		if (IsNetscape())
			alert("Editing your Web site requires a newer version of Netscape Communicator. Visit Netscape's Web site at www.netscape.com to obtain the newest version. Failure to do so may result in unreliable behavior.");
		else
			alert("Editing your Web site requires a newer version of Internet Explorer. Visit Microsoft's Web site at www.microsoft.com to obtain the newest version. Failure to do so may result in unreliable behavior.");
	}
} 


function DoButton(buttonAction)
{
	if ((document.nvoForm.PageName) && (document.nvoForm.PageName.value == ""))
    {
    	alert("The Page Name is required and cannot be left blank. Please enter a valid name.");
    	document.nvoForm.PageName.focus();
    	document.nvoForm.PageName.select();
    	location.href = "#pagename";
    	return;
    }
    
	if (gSaveAndGoURL != "")
    {
        document.nvoForm.NVORedirect.value = gSaveAndGoURL;
    }
    
    document.nvoForm.NVOAction.value = buttonAction;
	document.nvoForm.submit();
}


window.errorLoadingApplet = false;



// This script is called when the user clicks on the client link before 
// the browser has had time to launch the applet

function AppletErrorHandler() 
{
    alert("Please wait for the page to complete loading and then try again.");
    return true;
}


// This javascript is used launch a helper app

function StartHelper(host, service, hostAddress, extra)
{

    if (navigator.appVersion.indexOf("Macintosh") != -1)
    {
		if (navigator.mimeTypes)
		{
            mimetype = navigator.mimeTypes["application/netopia"];
            if (mimetype && mimetype.enabledPlugin)
			{
	            location.href = "http://" + hostAddress + "/pages/common/" + host + ".nhtml?service=" + service + "&back=" + Escape(location.href) + "&extra=" + Escape(extra);
    		}
			else
			{
				alert("You must have the FREE Visitor Software in order to use this feature. Please download and install the Visitor Software.");
				location.href = "http://" + hostAddress + "/bin/download.nhtml";
			}
		} // if we can check for mimeTypes supported
		else
		{
            location.href = "http://" + hostAddress + "/pages/common/" + host + ".nhtml?service=" + service + "&back=" + Escape(location.href) + "&extra=" + Escape(extra);
		} // else go to plugin start page 
    }
	else
	{
	    if (window.errorLoadingApplet)
	    {
	        alert("You must have Java enabled in your browser in order to use this feature.");
	    }
	    else
	    {
	        window.onerror = AppletErrorHandler;
	        
	        installed = document.cc.isClassInstalled("com.netopia.ns.version.client.VisitorClient");
	        if (installed)
	        {
	            location.href = "http://" + hostAddress + "/pages/common/" + host + ".netopia?service=" + service + "&extra=" + Escape(extra);
	        }
	        else
	        {
	            alert("You must have the FREE Visitor Software in order to use this feature. Please download and install the Visitor Software.");
	            location.href = "http://" + hostAddress + "/bin/download.nhtml";
	        }
	    }
    } // else it's Windows
}



function GetField(rec, fieldindex)
{
    var     i;
    var     istart = 0;
    var     iend = 0;

    for (i = 0; i < fieldindex; i++)
    {
        istart = rec.indexOf(",", istart) + 1;
    }

    iend = rec.indexOf(",", istart);
    if (iend < 0)
    {
        iend = rec.length;
    }
    
    var temp = rec.substring(istart, iend);
    return temp;
}

function GetFieldBySep(rec, fieldindex, sep)
{
    var     i;
    var     istart = 0;
    var     iend = 0;
    var     iseplength = sep.length;

    for (i = 0; i < fieldindex; i++)
    {
        istart = rec.indexOf(sep, istart) + iseplength;
    }

    iend = rec.indexOf(sep, istart);
    if (iend < 0)
    {
        iend = rec.length;
    }
    
    var temp = rec.substring(istart, iend);
    return temp;
}

function ReplaceString(org, match, replace)
{
    var     dst = "";
    var     starti = 0;
    var     endi = 0;

    while ((endi = org.indexOf(match, starti)) >= 0)
    {
        dst += org.substring(starti, endi) + replace;
        starti = endi + match.length;
    }

    dst += org.substring(starti, org.length);

    return dst;
}


function IsTrue(value)
{
	upperCaseValue = value.toUpperCase();
	return (upperCaseValue    != ""
			&& upperCaseValue != "NO" 
			&& upperCaseValue != "FALSE"
			&& upperCaseValue != "OFF"
			&& upperCaseValue != "0");
}



function setStatusBar(msg)
{
	window.status = msg;
	return true;
}


function FindSelectedElement(name, buttonName, action, messageNone, messageTooMany)
{
	sel = null;

	numsel = 0;
	for (var i = 0; i < document.nvoForm.elements.length; i++)
	{
		el = document.nvoForm.elements[i];
		if (el.name == name && el.checked)
		{
			numsel++;
			sel = el;
		}
	}

	if (numsel == 0)
	{
		
		alert(ReplaceString(messageNone, "^^^buttonName^^^", buttonName));
	}
	else if (numsel > 1)
	{
		alert(ReplaceString(messageTooMany, "^^^action^^^", action));
		sel = null;
	}

	return sel;
}


function CheckURL(urlElement)
{
	if (urlElement.value.length > 0 && urlElement.value.indexOf("://") == -1)
	{
		urlElement.value = "http://" + urlElement.value;
	}
	urlElement.value = ReplaceString(urlElement.value, " ", "%20");
	Changed();
}


function OpenSetupWiz(theURL) {
  var wzWnd = window.open(theURL,'wizard','width=630,height=400,resizable=yes');
    if (!wzWnd.opener) wzWnd.opener = self;
    if (wzWnd.focus != null) wzWnd.focus();
}


function AppendQuery(url, query)
{
	if (query != "")
	{
		if (url.indexOf("?") != -1) // if has ?
			url += "&";
		else
			url += "?";
		url += query;
	}
	return url;
}


function NibbleToHexDigit (nibble)
{
    return "0123456789ABCDEF".charAt(nibble);
}

function EncodeURI(name)
{

    var newName = "" 

    for (var i = 0; i < name.length; i++) 
    {
        ch = name.charAt(i);
        c  = name.charCodeAt(i);
        if (('A' <= ch && ch <= 'Z') || ('a' <= ch && ch <= 'z') || ('0' <= ch && ch <= '9'))
        {
		    newName += ch;
		}
		else if (ch == ' ') 
        {
            newName += '+';
        }
        else if (ch == '-' || ch == '_'
              || ch == '.' || ch == '!'
              || ch == '~' || ch == '*'
              || ch == '\'' || ch == '('
              || ch == ')') 
        {
		    newName += ch;
        } 
        else if (c <= 0x007f) 
        {
            newName += gHexArray[c];
        }
        else if (c <= 0x07FF) 
        {
            newName += gHexArray[0xc0 | (c >> 6)];
            newName += gHexArray[0x80 | (c & 0x3F)];
        } 
        else 
        {
            newName += gHexArray[0xe0 | (c >> 12)];
            newName += gHexArray[0x80 | ((c >> 6) & 0x3F)];
            newName += gHexArray[0x80 | (c & 0x3F)];
        }
    }
    return newName;
}

function Escape (name)
{
    var c;
	var	newName = "";

	for (var i = 0; i < name.length; i++)
	{
		c = name.charCodeAt(i);
        if (c == 10 || c == 13 || c == 32 || c == 33 || c == 34 || c == 35 ||
            c == 36 || c == 37 || c == 38 || c == 39 || c == 40 || c == 41 || 
			c == 43 || c == 44 || c == 58 || c == 59 || c == 60 || c == 61 || 
			c == 62 || c == 63 || c == 91 || c == 92 || c == 93 || c == 94 || 
			c == 96 || c == 123 || c == 124 || c == 125 || c == 126 || c == 174)
        {
            newName += "%";
            newName += NibbleToHexDigit((c & 0xf0) >> 4);
            newName += NibbleToHexDigit( c & 0x0f);
        }
        else
            newName += name.charAt(i);
    }
		
	return newName;
}

function EscapeForPost (name)
{
	// Can be used to escape only ampersands and semicolons for nHTML post actions
    var c;
    var newName = "";
    var nameLength = name.length;

    for (var i = 0; i < nameLength; i++)
    {
        c = name.charCodeAt(i);
        if (c == 32 || c == 34 || c == 38 || c == 39 || c == 43 ||
			c == 59 || c == 60 || c == 61 || c == 62 || c == 92)
        {
            if ( c != 37 || 
                (i+4 >= nameLength) ||
                (name.charCodeAt(i+1) != 48) ||
                (name.charCodeAt(i+2) != 68) ||
                (name.charCodeAt(i+3) != 48) ||
                (name.charCodeAt(i+4) != 65)  )
            {
                newName += "%";
                newName += NibbleToHexDigit((c & 0xf0) >> 4);
                newName += NibbleToHexDigit( c & 0x0f);
            }
            else
                newName += name.charAt(i);
        }
        else
            newName += name.charAt(i);
    }
        
    return newName;
}


