// Edgar Tooley 09/29/99
// global.js
// Copyright (C) 1997-2000 Big Planet, Inc.
// All rights reserved.

var gErrorUrl="";


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


function OpenHelp(url)
{
    // special case for folders
    qindex=location.href.indexOf("?");
    folderindex = location.href.indexOf("/nss-folder/");
    if (folderindex >= 0 && folderindex < qindex)
    {
        objectendindex = location.href.indexOf("/", folderindex + 12);
        url = location.href.substring(0, folderindex) + "/" + location.href.substring(folderindex + 12, objectendindex) + "/" + url;
    }
    
    window.onerror = OpenHelpErrorHandler;
    gErrorUrl = url;
    var hWnd = window.open(url, "NVOHelp", "menubar=yes,toolbar=yes,width=595,height=400,resizable=yes,scrollbars=yes,location=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 the action string that is used to save the standard items on a page

function GetStdAction()
{
	var hidePage = document.nvoForm.hidePage.checked ? "ON" : "OFF";

	if (hidePage == "ON") // if hidden page, go back home
	{
		document.nvoForm.NVORedirect.value = document.nvoForm.hostAddressForHiddenPage.value;
	}
	
    return "Set(.Sitemap.Name." + document.nvoForm.ObjectUID.value + "=" + escape(document.nvoForm.PageName.value) 
    			+ "&.Sitemap.Title." + document.nvoForm.ObjectUID.value + "=" + escape(document.nvoForm.PageTitle.value) 
    			+ "&.Sitemap.Hide." + document.nvoForm.ObjectUID.value + "=" + hidePage +");";
}

function DoStdCancel()
{
	if (document.nvoForm.hidePage.checked) // if hidden page, go back home
	{
		window.open(document.nvoForm.hostAddressForHiddenPage.value, "_top");
	}
	else // page is visible
	{
		var	loc = location.href;
		
		startPos = loc.indexOf("/edit.nhtml");
		if (startPos >= 0)
			loc = loc.substring(0, startPos+1);
		else
			alert("ASSERT: DoStdCancel in global.js");

	    window.open(loc, "_top");
	}
}


var gSaveAndGoURL = "";
var gChanged = false;

// save the form data and goto the specified url

function SaveAndGo(url)
{
    if (gChanged && confirm("Would you like to save the change you made to this page?"))
    {
        gSaveAndGoURL = url;
        DoSave();
    }
    else
    {
        location.href = url;
    }
}


function Changed(url)
{
    gChanged = true;
}


function DoButton(buttonAction)
{
	if (gSaveAndGoURL != "")
    {
        document.nvoForm.NVORedirect.value = gSaveAndGoURL;
    }
    document.nvoForm.NVOAction.value = buttonAction;
	document.nvoForm.submit();
}


function DoMoveItem(where, uid)
{
    DoButton("MoveRecord(List=Sitemap&uid=" + uid + "&Where=" + where + ")");
}


window.errorLoadingApplet = false;


function WarnIfUsingOldBrowser()
{
	if (parseInt(navigator.appVersion) < 4)

	{
		alert("To take full advantage of your web site's features, we highly recommend you upgrade your browser to the latest version. Some features may not be supported by your browser.");
	}
} 



// 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("You must have the FREE Software in order to use this feature. Please download and install the FREE Software.");
    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 = 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 = hostAddress + "/bin/download.nhtml";
			}
		} // if we can check for mimeTypes supported
		else
		{
            location.href = 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 = 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 = 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;
    }
    
    return rec.substring(istart, iend);
}

// Sets the hide value for an item in the sitemap list
var hidePage="";

function SetHide(status,uid)
{
	hidePage=status;
	DoButton("Set(.Sitemap.Hide." + uid + "=" + hidePage + ");Save()");
} 

function StdMove(name, moveurl, helpurl, profile, list, field, doneurl, query)
{
    var     startuid = "";
    var     enduid = "";

    for (i = 0; i < document.nvoForm.elements.length; i++)
    {
		el = document.nvoForm.elements[i];
		if (el.name == "cb" && el.checked)
        {
            if (startuid.length == 0)
                startuid = GetField(el.value, 0);
            else
                enduid = GetField(el.value, 0);
        }
    }

    if (startuid.length > 0)
    {
        if (enduid.length == 0)
            enduid = startuid;
        SaveAndGo(moveurl + "?UID=" + startuid + "&enduid=" + enduid + "&profile=" + profile + "&list=" + list + "&field=" + field + 
				  "&name=" + escape(name) + "&doneurl=" + doneurl + "&helpurl=" + helpurl + query);
    }
    else
    {
        alert("Please use the check boxes to select the " + name + " and then click move.");
    }
}


function StdEdit(name, editurl, editlisturl, query)
{
    var     uidlist = ",";
    var     count = 0;
        
    for (i = 0; i < document.nvoForm.elements.length; i++)
    {
		el = document.nvoForm.elements[i];
		if (el.name == "cb" && el.checked)
        {
            uid = GetField(el.value, 0);
            uidlist += uid + ",";
            count++;
        }
    }

    if (count > 0)
    {
        if (count == 1)
            SaveAndGo(editurl + "?uid=" + uid + query);
        else
        {
            if (editlisturl == "")
                alert("Please select just one item to edit.")
            else
                SaveAndGo(editlisturl + "?count=" + count + "&uidlist=" + uidlist + query);
        }
    }
    else
    {
        alert("Please use the check boxes to select the " + name + " and then click edit.");
    }
}


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 DoSelectAll(elementName, cbName)
{

	var originalElementName = "FALSE";
	
	// If both are null then this was an original single list
	// this requires both params: elementName & cbName if this is a 2nd list
	if (elementName == null && cbName == null)
	{	
		originalElementName = "TRUE";		
		cbName = "cb";
		elementName = document.nvoForm.allSelected.value;
	}
	
	for (i = 0; i < document.nvoForm.elements.length; i++)
	{

		el = document.nvoForm.elements[i];
		
		if (el.name == cbName)
			el.checked = (elementName == "check");
			
	}

	/* toggle values */

	if (originalElementName == "TRUE")
	{
		if (document.nvoForm.allSelected.value == "check")
			document.nvoForm.allSelected.value = "uncheck";
		else
			document.nvoForm.allSelected.value = "check";
	}
	else
	{
		// This is returned and stored in the element name for 2nd or 3rd list.
		if (elementName == "check")
			return "uncheck";
		else
			return "check";
	}
}

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

	numsel = 0;
	for (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 IsTrue(value)
{
	upperCaseValue = value.toUpperCase();
	return ((upperCaseValue == "")
			|| (upperCaseValue != "NO" 
				&& upperCaseValue != "FALSE"
				&& upperCaseValue != "OFF"
				&& upperCaseValue != "0"));
}
