// WARNING! This file is not parsed on every request, so you
// cannot use nHTML within this file.  --res 6/1/00
var gErrorUrl="";


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 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;
}


// This is needed for IE 4.5 which doesn't run the onChange scripts
// until submit time (or unload time).  (SN 12/7/99)
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
}


// pulls a parameter out of a comma delimeted string
// For example, given the string "a,b,c", passing
// index 0 would return "a", 1 would return "b", etc...

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 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 Escape (name)
{
    var c;
	var	newName = "";

	for (var i = 0; i < name.length; i++)
	{
		c = name.charCodeAt(i);
		// Escape: <lf> <cr> <space> ! " # % & ' ( ) + ' : ; < = >
		// ? [ \ ] ^  { | } ~
        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);
        // Escape: space " & ' + ; = \ < >
        if (c == 32 || c == 34 || c == 38 || c == 39 || c == 43 ||
			c == 59 || c == 60 || c == 61 || c == 62 || c == 92)
        {
            // Only escape percent sign when not part of %0D0A
            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;
}


