var initScript = "";
var publicURL = "http://www.data.jumpwebspot.com/";
var editorURL = "editor/edit.php";
var chooseFileURL = "editor/choosefile.php";

function MoveBanner()
{
    //move the menu banner to the top of the screen
    var obj = document.getElementById("menuBanner");
    //get the current top value
    if(obj.style.top == "")
    {
        obj.style.top = "-800px";
    }
    var curTop = obj.style.top.substring(0, obj.style.top.length-2) * 1;
    var scrollTop = ((document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop)-600+64;
    obj.style.top = (curTop*0.75 + scrollTop*0.25) + "px";
    setTimeout("MoveBanner()", 40);
}

function RegisterInit(initCode)
{
    initScript += initCode;
}

function Init()
{
    eval(initScript);
}

var lastPublishMessage = -1;
var numPublishingMessages = 0;

function UpdatePublishingMessage()
{
    var newText = "&nbsp;";
    var newPublishMessage = -1;
    
    while((newPublishMessage = Math.floor(Math.random() * 6)) == lastPublishMessage)
    {
    }
    if(lastPublishMessage != -1)
    {
        switch(lastPublishMessage)
        {
            case 0:
            {
                newText = "Working on it...";
            } break;
            case 1:
            {
                newText = "Any minute now...";
            } break;
            case 2:
            {
                newText = "Just about there...";
            } break;
            case 3:
            {
                newText = "Still trying to connect to the server...";
            } break;
            case 4:
            {
                newText = "Getting there...";
            } break;
            case 5:
            {
                newText = "Just a second...";
            } break;
        }
    }
    else
    {
        numPublishingMessages = 0;
    }
    
    if(numPublishingMessages >= 5)
    {
        newText = "This is taking a longer than it should - your internet connection could be down right now.  You've got a few options:<br />";
        newText += "<a class=\"EditButton\" href=\"javascript: void(0);\" onclick=\"lastPublishMessage = -1; UpdatePublishingMessage(); return false;\">keep&nbsp;waiting</a>&nbsp;<a class=\"EditButton\" href=\"javascript: void(0);\" onclick=\"EditCancelPublish(); return false;\">keep&nbsp;my&nbsp;changes,&nbsp;go&nbsp;back&nbsp;to&nbsp;my&nbsp;site,&nbsp;and&nbsp;publish&nbsp;later</a>&nbsp;<a class=\"EditButton\" href=\"javascript: void(0);\" onclick=\"EditCancelPublish(); SubmitTo(''); return false;\">try&nbsp;publishing&nbsp;again&nbsp;now</a>";
        //newText += "<a class=\"EditButton\" href=\"javascript: void(0);\" onclick=\"lastPublishMessage = -1; UpdatePublishingMessage(); return false;\">keep&nbsp;waiting</a>&nbsp;<a class=\"EditButton\" href=\"javascript: void(0);\" onclick=\"document.getElementById('PublishAnim').style.display='none'; return false;\">keep&nbsp;my&nbsp;changes,&nbsp;go&nbsp;back&nbsp;to&nbsp;my&nbsp;site,&nbsp;and&nbsp;publish&nbsp;later</a>&nbsp;<a class=\"EditButton\" href=\"javascript: void(0);\" onclick=\"SubmitTo(''); return false;\">try&nbsp;publishing&nbsp;again&nbsp;now</a>";
    }
    else
    {
        lastPublishMessage = newPublishMessage;
        setTimeout(UpdatePublishingMessage, 3000);
        ++numPublishingMessages;
    }
    document.getElementById("EditPublishingMessage").innerHTML = newText;
}

function EditCancelPublish()
{
    //stop the submission process, if possible
    if(window.stop)
    {
        window.stop();
    }
    if(document.execCommand)
    {
        document.execCommand("Stop");
    }
    document.getElementById("PublishAnim").style.display = "none";
}

function SubmitTo(url)
{
    if(url != "")
    {
        document.getElementById('PublishForm').action = url;
    }
    else
    {
        if(document.getElementById("PublishAnim"))
        {
            document.getElementById("PublishAnim").parentNode.removeChild(document.getElementById("PublishAnim"));
        }
        var publishingScreen = document.createElement("div");
    
        publishingScreen.innerHTML = "<table style=\"width: 100%; height: 100%;\"><tr><td style=\"text-align: center; vertical-align: middle;\"><h1>Publishing...</h1><br /><span id=\"EditPublishingMessage\">&nbsp;</span></td></tr></table>";
        publishingScreen.id = "PublishAnim";
        publishingScreen.style.position = "absolute";
        publishingScreen.style.top = "0px";
        publishingScreen.style.left = "0px";
        publishingScreen.style.width = "100%";
        publishingScreen.style.height = "100%";
        publishingScreen.style.backgroundColor = "#000";
        publishingScreen.style.zIndex = 10000;
        publishingScreen.style.color = "#fff";
    
        document.getElementsByTagName("body")[0].insertBefore(publishingScreen, null);
        
        lastPublishMessage = -1;
        UpdatePublishingMessage();
    }
    document.getElementById('PublishForm').submit();
    return false;
}

function EditHTMLSpecialChars(inStr)
{
    var cur,outStr = "";
    
    for(var i=0; i<inStr.length; ++i)
    {
        cur = inStr.charAt(i);
        if(cur=="'") cur = "&#39;";
        if(cur=="\"") cur = "&quot;";
        if(cur=="&") cur = "&amp;";
        if(cur=="<") cur = "&lt;";
        if(cur==">") cur = "&gt;";
        outStr += cur;
    }
    
    return outStr;
}

function EditHTMLUnspecialChars(inStr)
{
    var cur,outStr = "";
    for(var i=0; i<inStr.length; ++i)
    {
        if(inStr.substring(i, i+("&lt;").length) == "&lt;")
        {
            outStr += "<";
            i+=("&lt;").length-1;
        }
        else if(inStr.substring(i, i+("&gt;").length) == "&gt;")
        {
            outStr += ">";
            i+=("&gt;").length-1;
        }
        else if(inStr.substring(i, i+("&amp;").length) == "&amp;")
        {
            outStr += "&";
            i+=("&amp;").length-1;
        }
        else if(inStr.substring(i, i+("&quot;").length) == "&quot;")
        {
            outStr += "\"";
            i+=("&quot;").length-1;
        }
        else if(inStr.substring(i, i+("&#39;").length) == "&#39;")
        {
            outStr += "'";
            i+=("&#39;").length-1;
        }
        else
        {
            outStr += inStr.charAt(i);
        }
    }
    return outStr;
}

function EditJavascriptEscape(inStr)
{
    var cur,outStr = "";
    
    for(var i=0; i<inStr.length; ++i)
    {
        cur = inStr.charAt(i);
        if(cur=="'") cur = "\\\'";
        if(cur=="\"") cur = "\\\"";
        outStr += cur;
    }
    
    return outStr;
}

function EditDecodeAMP(inStr)
{
    var cur,outStr="";
    
    for(var i=0; i<inStr.length; ++i)
    {
        if(i < inStr.length - 5 && inStr.substring(i, i+5) == "&amp;")
        {
            outStr += "&";
            i+=4;
        }
        else
        {
            outStr += inStr.charAt(i);
        }
    }
    return outStr;
}

function EditGetAllLinkLists()
{
    var allInputs = document.getElementsByTagName("input");
    var allLinkLists = new Array();
    
    //narrow down the linklists inputs
    for(var i=0; i<allInputs.length; ++i)
    {
        if(allInputs[i].id.indexOf("LinkList_") >= 0 && allInputs[i].id.indexOf("_Links") >= 0)
        {
            allLinkLists[allLinkLists.length] = allInputs[i];
        }
    }
    
    return allLinkLists;
}

function EditUpdateMyPages()
{
    var myPagesSourceEl = document.getElementById("EditAllMyPages");
    var myPagesOutputEl = document.getElementById("EditMyPages");
    var sharedPagesEl = document.getElementById("Site_SharedPages");
    var linkListEl = document.getElementById("LinkList_toplinklist__DOT__xml_Links");
    var xmlPageStart, xmlPageEnd, xmlPage;
    var xmlPageTitleStart, xmlPageTitleEnd, xmlPageTitle;
    var xmlPageFilenameStart, xmlPageFilenameEnd, xmlPageFilename;
    var linkVisible = true, linkShared = false;
    var linkHTML = "", sharedLinkHTML = "", visibleHTML = "", hiddenHTML = "", sharedHTML = "";
    var untitledNumber = 1;
    var allLinkLists = EditGetAllLinkLists();
    
    if(!myPagesSourceEl || !linkListEl)
    {
        myPagesOutputEl.innerHTML = "There was a problem getting the list of your pages.  Please try again later.";
        return;
    }
    
    visibleHTML = "<h2>Visible pages</h2><ol>";
    hiddenHTML = "<h2>Hidden pages</h2><ol>";
    sharedHTML = "<h2>Shared pages</h2><ol>";
    xmlPageStart = -1;
    while((xmlPageStart = myPagesSourceEl.value.indexOf("<page>", xmlPageStart + 1)) >= 0)
    {
        xmlPageStart += ("<page>").length;
        xmlPageEnd = myPagesSourceEl.value.indexOf("</page>", xmlPageStart);
        xmlPage = myPagesSourceEl.value.substring(xmlPageStart, xmlPageEnd);
        xmlPageTitle = "";
        xmlPageFilename = "";
        if((xmlPageTitleStart = xmlPage.indexOf("<title>")) >= 0 && (xmlPageTitleEnd = xmlPage.indexOf("</title>", xmlPageTitleStart)) >= 0)
        {
            xmlPageTitleStart += ("<title>").length;
            xmlPageTitle = xmlPage.substring(xmlPageTitleStart, xmlPageTitleEnd);
        }
        if((xmlPageFilenameStart = xmlPage.indexOf("<filename>")) >= 0 && (xmlPageFilenameEnd = xmlPage.indexOf("</filename>", xmlPageFilenameStart)) >= 0)
        {
            xmlPageFilenameStart += ("<filename>").length;
            xmlPageFilename = xmlPage.substring(xmlPageFilenameStart, xmlPageFilenameEnd);
        }
        if(xmlPageFilename != "")
        {
            if(xmlPageTitle == "")
            {
                xmlPageTitle = "Untitled " + untitledNumber;
                untitledNumber++;
            }
            //see if it's in the main menu
            linkVisible = false;
            for(var i=0; i<allLinkLists.length; ++i)
            {
                if(allLinkLists[i].value.indexOf("<href>" + xmlPageFilename + "</href>") >= 0)
                {
                    //visible
                    linkVisible = true;
                    break;
                }
            }
            linkShared = false;
            sharedLinkHTML = "";
            
            xmlPageTitle = EditDecodeAMP(xmlPageTitle);
            
            linkHTML = "<li>";
            linkHTML += "<h3><a href=\"javascript: void(0);\" onclick=\"return SubmitTo('" + xmlPageFilename + "');\">" + xmlPageTitle + "</a></h3>";
            linkHTML += "<div class=\"EditMyPagesOptions\"><h4>options</h4><ol>";
            linkHTML += "<li><a href=\"javascript: void(0);\" onclick=\"return SubmitTo('" + xmlPageFilename + "');\">edit</a></li>";
            linkHTML += "<li><a href=\"javascript: void(0);\" onclick=\"LinkListRenameLink('toplinklist__DOT__xml', '" + xmlPageFilename + "', '" + EditHTMLSpecialChars(EditJavascriptEscape(xmlPageTitle)) + "'); EditToggleMyPages(); return false;\">rename</a></li>";
            linkHTML += "<li><a href=\"javascript: void(0);\" onclick=\"LinkListDeletePage('toplinklist__DOT__xml', '" + xmlPageFilename + "', '" + EditHTMLSpecialChars(EditJavascriptEscape(xmlPageTitle)) + "'); EditToggleMyPages(); return false;\">delete</a></li>";
            if(sharedPagesEl)
            {
                if(sharedPagesEl.value.indexOf("<filename>" + xmlPageFilename + "</filename>") >= 0)
                {
                    //it's shared
                    linkShared = true;
                    sharedLinkHTML = "<li><h3>" + xmlPageTitle + "</h3><div class=\"EditMyPagesOptions\"><h4>options</h4><ol>";
                    linkHTML += "<li><a href=\"javascript: void(0);\" onclick=\"EditUnsharePage('" + xmlPageFilename + "'); return false;\"><img src=\"" + publicURL + "images/icons/checkboxchecked.gif\" alt=\"Checked checkbox\" />&nbsp;share</a></li>";
                    sharedLinkHTML += "<li><a href=\"javascript: void(0);\" onclick=\"EditUnsharePage('" + xmlPageFilename + "'); return false;\"><img src=\"" + publicURL + "images/icons/checkboxchecked.gif\" alt=\"Checked checkbox\" />&nbsp;share</a></li>";
                    sharedLinkHTML += "</ol></div></li>";
                }
                else
                {
                    //it's not shared
                    linkHTML += "<li><a href=\"javascript: void(0);\" onclick=\"EditSharePage('" + xmlPageFilename + "'); return false;\"><img src=\"" + publicURL + "images/icons/checkboxunchecked.gif\" alt=\"Unchecked checkbox\" />&nbsp;share</a></li>";
                }
            }
            if(linkVisible)
            {
                linkHTML += "<li><a href=\"javascript: void(0);\" onclick=\"EditHidePage('" + xmlPageFilename + "'); return false;\"><img src=\"" + publicURL + "images/icons/checkboxunchecked.gif\" alt=\"Unchecked checkbox\" />&nbsp;hide</a></li>";
            }
            else
            {
                linkHTML += "<li><a href=\"javascript: void(0);\" onclick=\"EditUnhidePage('" + EditHTMLSpecialChars(EditHTMLSpecialChars(xmlPageTitle)) + "', '" + xmlPageFilename + "'); return false;\"><img src=\"" + publicURL + "images/icons/checkboxchecked.gif\" alt=\"Checked checkbox\" />&nbsp;hide</a></li>";
            }
            linkHTML += "</ol></div>";
            linkHTML += "</li>";
            
            if(linkVisible)
            {
                visibleHTML += linkHTML;
            }
            else
            {
                hiddenHTML += linkHTML;
            }
            if(linkShared)
            {
                sharedHTML += sharedLinkHTML;
            }
        }
    }
    visibleHTML += "<li><a class=\"EditMyPagesAddPage\" href=\"javascript: void(0);\" onclick=\"LinkListPopupAddPage('toplinklist__DOT__xml'); return false;\">add page</a></li></ol>";
    hiddenHTML += "</ol>";
    sharedHTML += "</ol>";
    myPagesOutputEl.innerHTML = "<h1>my page archive</h1>" + visibleHTML + hiddenHTML + (sharedPagesEl ? sharedHTML : "") + "<a id=\"EditMyPagesClose\" href=\"javascript: void(0);\" onclick=\"EditToggleMyPages(); return false;\">X</a>";
}

function EditToggleMyPages(turnOff)
{
    var myPagesButtonEl = document.getElementById('EditMyPagesButton');
    var myPagesEl = document.getElementById('EditMyPages');
    
    if(!turnOff && (!myPagesEl.style.display || myPagesEl.style.display == "none"))
    {
        EditToggleHelpMenu(true);
        EditToggleSettingsMenu(true);
        EditToggleToolsMenu(true);
        EditUpdateMyPages();
        myPagesButtonEl.style.backgroundColor = '#999';
        myPagesEl.style.display = 'block';
    }
    else
    {
        myPagesButtonEl.style.backgroundColor = '#000';
        myPagesEl.style.display = 'none';
    }
}

function EditHidePage(pageFilename)
{
    var allLinkLists = EditGetAllLinkLists();
    var linkStart, linkEnd;
    var updateList = false;
    
    //look for this page in the main link list and remove it if it's there
    EditToggleMyPages(true);
    for(var i=0; i<allLinkLists.length; ++i)
    {
        updateList = false;
        while((linkStart = allLinkLists[i].value.indexOf("<href>" + pageFilename + "</href>")) >= 0)
        {
            linkStart = allLinkLists[i].value.lastIndexOf("<link>", linkStart);
            linkEnd = allLinkLists[i].value.indexOf("</link>", linkStart);
            if(linkStart >= 0 && linkEnd >= 0)
            {
                linkEnd += ("</link>").length;
                allLinkLists[i].value = allLinkLists[i].value.substring(0, linkStart) + allLinkLists[i].value.substring(linkEnd, allLinkLists[i].value.length);
                updateList = true;
            }
        }
        if(updateList)
        {
            UpdateLinkListDisplay(allLinkLists[i].id.substring(("LinkList_").length, allLinkLists[i].id.length - ("_Links").length));
        }
    }
    EditMarkChanges();
}

function EditUnhidePage(pageTitle, pageFilename)
{
    var linkListEl = document.getElementById("LinkList_toplinklist__DOT__xml_Links");
    var linkStart, linkEnd;
    
    //look for this page in the main link list and remove it if it's there
    if(linkListEl)
    {
        EditToggleMyPages();
        linkListEl.value += "<link><text>" + EditDecodeAMP(pageTitle) + "</text><href>" + pageFilename + "</href></link>";
        UpdateLinkListDisplay("toplinklist__DOT__xml");
        EditMarkChanges();
    }
    else
    {
        alert("Unable to remove link.  Please try again later.");
    }
}

function EditSharePage(pageFilename)
{
    var sharedPagesEl = document.getElementById("Site_SharedPages");
    
    if(sharedPagesEl)
    {
        //EditToggleMyPages();
        sharedPagesEl.value += "<page><filename>" + pageFilename + "</filename></page>";
        EditUpdateMyPages();
        EditMarkChanges();
    }
}

function EditUnsharePage(pageFilename)
{
    var sharedPagesEl = document.getElementById("Site_SharedPages");
    var shareStart, shareEnd;
    
    if(sharedPagesEl)
    {
        while((shareStart = sharedPagesEl.value.indexOf("<filename>" + pageFilename + "</filename>")) >= 0)
        {
            shareStart = sharedPagesEl.value.lastIndexOf("<page>", shareStart);
            shareEnd = sharedPagesEl.value.indexOf("</page>", shareStart);
            if(shareStart >= 0 && shareEnd >= 0)
            {
                shareEnd += ("</page>").length;
                sharedPagesEl.value = sharedPagesEl.value.substring(0, shareStart) + sharedPagesEl.value.substring(shareEnd, sharedPagesEl.value.length);
                //EditToggleMyPages();
                EditUpdateMyPages();
                EditMarkChanges();
            }
        }
    }
}

function DescShow(ft,fn)
{
    document.getElementById(ft+"_"+fn+"_Description").style.display="block";
}

function DescHide(ft,fn)
{
    document.getElementById(ft+"_"+fn+"_Description").style.display="none";
}

function MemberListCountChars(fieldName, maxChars)
{
    var fieldEl = document.getElementById("MemberList_" + fieldName + "_MemberDescription");
    var charCountEl = document.getElementById("MemberList_" + fieldName + "_MemberDescriptionLength");
    
    if(fieldEl && charCountEl)
    {
        charCountEl.innerHTML = "Current length: " + fieldEl.value.length + " characters (" + maxChars + " characters maximum)";
        if(fieldEl.value.length > maxChars)
        {
            charCountEl.style.color = "#900";
        }
        else
        {
            charCountEl.style.color = "#000";
        }
    }
}

function EditToggleHelpMenu(turnOff)
{
    var helpMenuButtonEl = document.getElementById('EditHelpMenuButton');
    var helpMenuEl = document.getElementById('EditHelpMenu');
    
    if(helpMenuButtonEl && helpMenuEl)
    {
        if(!turnOff && (!helpMenuEl.style.display || helpMenuEl.style.display == "none"))
        {
            EditToggleMyPages(true);
            EditToggleSettingsMenu(true);
            EditToggleToolsMenu(true);
            helpMenuButtonEl.style.backgroundColor = '#999';
            helpMenuEl.style.display = 'block';
        }
        else
        {
            helpMenuButtonEl.style.backgroundColor = '#000';
            helpMenuEl.style.display = 'none';
        }
    }
}

function EditAddParamTo(playerEl, paramName, paramValue)
{
    var paramEl;
    
    paramEl = document.createElement("param");
    paramEl.setAttribute("name", paramName);
    paramEl.setAttribute("value", paramValue);
    playerEl.appendChild(paramEl);
}

function EditPlayTutorial(tutorialLink)
{
    var playerContainer, playerElement;
    var paramHTML = "";
    
    EditToggleHelpMenu(true);
    
    playerContainer = document.createElement("div");
    playerContainer.id = "EditVideoTutorialContainer";
    playerElement = document.createElement("div");
    playerElement.id = "EditVideoTutorialElement";
    document.body.appendChild(playerContainer);
    playerContainer.appendChild(playerElement);
    switch(tutorialLink.substring(tutorialLink.length - 3, tutorialLink.length).toLowerCase())
    {
        case "swf":
        {
            ActivateSWF("http://www.data.jumpwebspot.com/tutorials/" + tutorialLink, "100%", "100%", "EditVideoTutorialElement");
        } break;
    }
    playerContainer.innerHTML += "<a href=\"javascript: void(0);\" onclick=\"EditHideTutorial(); return false;\">Close tutorial</a>";
}

function EditHideTutorial()
{
    var el = document.getElementById("EditVideoTutorialContainer");
    
    if(el)
    {
        el.parentNode.removeChild(el);
    }
}

function EditElementIsParentOf(childEl, parentEl)
{
    while(childEl)
    {
        if(childEl == parentEl)
        {
            return true;
        }
        childEl = childEl.parentNode;
    };
    
    return false;
}

function EditGetOffsetXBetween(el1, el2)
{
    var el1DX = 0, el1DY = 0;
    var el2DX = 0, el2DY = 0;
    
    while(el1)
    {
        if(isNaN(el1.offsetLeft))
        {
            break;
        }
        el1DX += el1.offsetLeft;
        el1DY += el1.offsetTop;
        el1 = el1.parentNode;
    }
    while(el2)
    {
        if(isNaN(el2.offsetLeft))
        {
            break;
        }
        el2DX += el2.offsetLeft;
        el2DY += el2.offsetTop;
        el2 = el2.parentNode;
    }
    
    return el1DX - el2DX;
}

function EditGetOffsetYBetween(el1, el2)
{
    var el1DX = 0, el1DY = 0;
    var el2DX = 0, el2DY = 0;
    
    while(el1)
    {
        if(isNaN(el1.offsetLeft))
        {
            break;
        }
        el1DX += el1.offsetLeft;
        el1DY += el1.offsetTop;
        el1 = el1.parentNode;
    }
    while(el2)
    {
        if(isNaN(el2.offsetLeft))
        {
            break;
        }
        el2DX += el2.offsetLeft;
        el2DY += el2.offsetTop;
        el2 = el2.parentNode;
    }
    
    return el1DY - el2DY;
}

function EditGetMouseXRelativeTo(el, eventObj)
{
    var elX;
    var retX;
    
    elX = 0;
    do
    {
        elX += el.offsetLeft;
    } while(el = el.offsetParent);
    
    if(eventObj.pageX)
    {
        retX = eventObj.pageX - elX;
    }
    else
    {
        retX = document.documentElement.scrollLeft + document.body.scrollLeft + eventObj.clientX - elX;
    }
    
    return retX;
}

function EditGetMouseYRelativeTo(el, eventObj)
{
    var elY;
    var retY;
    
    elY = 0;
    do
    {
        elY += el.offsetTop;
    } while(el = el.offsetParent);
    
    if(eventObj.pageX)
    {
        retY = eventObj.pageY - elY;
    }
    else
    {
        retY = document.documentElement.scrollTop + document.body.scrollTop + eventObj.clientY - elY;
    }
    
    return retY;
}

function EditConfirmLogOut()
{
    if(document.getElementById("ChangesMade").value == "yes")
    {
        return confirm("By logging out, you will lose any changes you've made since the last time you clicked 'Publish'.  Click 'OK' to log out, or 'Cancel' to return to edit mode.");
    }
    return true;
}

function EditConfirmClose(e)
{
    var message = "By closing the site now, you will lose any changes you've made since the last time you clicked 'Publish'.  Click 'OK' to close the window, or 'Cancel' to return to edit mode.";
    if(!e) e = window.event;
    if(document.getElementById("ChangesMade").value == "yes" && e.clientY < 0)
    {
        e.returnValue = message;
        return message;
    }
    return;
}

function EditMarkChanges()
{
    var el = document.getElementById("ChangesMade");
    
    if(el)
    {
        el.value = "yes";
    }
    
    //make the publish button pulsate
    if(el = document.getElementById("EditPublishButton"))
    {
        el.className = "PublishChanged";
    }
}

function EditToggleSettingsMenu(turnOff)
{
    var settingsMenuButtonEl = document.getElementById('EditSettingsMenuButton');
    var settingsMenuEl = document.getElementById('EditSettingsMenu');
    
    if(settingsMenuButtonEl && settingsMenuEl)
    {
        if(!turnOff && (!settingsMenuEl.style.display || settingsMenuEl.style.display == "none"))
        {
            EditToggleHelpMenu(true);
            EditToggleMyPages(true);
            EditToggleToolsMenu(true);
            settingsMenuButtonEl.style.backgroundColor = '#999';
            settingsMenuEl.style.display = 'block';
        }
        else
        {
            settingsMenuButtonEl.style.backgroundColor = '#000';
            settingsMenuEl.style.display = 'none';
        }
    }
}

function EditToggleToolsMenu(turnOff)
{
    var toolsMenuButtonEl = document.getElementById('EditToolsMenuButton');
    var toolsMenuEl = document.getElementById('EditToolsMenu');
    
    if(toolsMenuButtonEl && toolsMenuEl)
    {
        if(!turnOff && (!toolsMenuEl.style.display || toolsMenuEl.style.display == "none"))
        {
            EditToggleHelpMenu(true);
            EditToggleMyPages(true);
            EditToggleSettingsMenu(true);
            toolsMenuButtonEl.style.backgroundColor = '#999';
            toolsMenuEl.style.display = 'block';
        }
        else
        {
            toolsMenuButtonEl.style.backgroundColor = '#000';
            toolsMenuEl.style.display = 'none';
        }
    }
}

function ProductListProcessAddToCart(fn)
{
    var aEl = document.getElementById("ProductList_" + fn + "_Link");
    var newLink = "";
    var selectEls;
    
    //go through and open up a window to the cart, but make sure the options are in there
    if(!aEl)
    {
        alert("Add to cart on this item is not currently working.  Please refresh the page.");
        return false;
    }
    newLink = aEl.href;
    selectEls = aEl.parentNode.getElementsByTagName("select");
    
    //add the options on
    for(var i=0; i<selectEls.length; ++i)
    {
        if(selectEls[i].className.indexOf("FormRequired") >= 0 && selectEls[i].selectedIndex <= 0)
        {
            alert("Please choose an option for the " + selectEls[i].options[0].text + " field");
            return false;
        }
        newLink += "&Option" + selectEls[i].id.substring(("ProductList_" + fn + "_Option").length, selectEls[i].id.length) + "=" + encodeURIComponent(selectEls[i].options[selectEls[i].selectedIndex].value);
    }
    
    //pop up the window
    window.open(newLink, "JWSCart");
    return false;
}

function EditGetParentByTagName(el, tagName)
{
    var parentEl = el;
    while(parentEl && parentEl.tagName.toLowerCase() != tagName.toLowerCase())
    {
        parentEl = parentEl.parentNode;
    }
    return parentEl;
}

function EditUpdateDisplayOrderList(listInputID, callback)
{
    //update a display order list
    var listInputEl = document.getElementById(listInputID);
    
    //first, get the containing table
    var tableEl = EditGetParentByTagName(listInputEl, "table");
    if(!tableEl)
    {
        alert("Could not activate one of the display order lists.  Some of the options on this page may not work.");
        return;
    }
    
    //find all <li>'s
    var allLIs = tableEl.getElementsByTagName("li");
    for(var i = 0; i < allLIs.length; ++i)
    {
        //activate it for dragging
        allLIs[i].onmousedown = EditGetDisplayOrderMouseDownClosure(allLIs[i], listInputID, callback);
    }
    
    //move the ones that should be displayed (in order) to the left side
    EditRefreshDisplayOrderList(listInputID, callback);
}

function EditRefreshDisplayOrderList(listInputID, callback)
{
    //alert("Test");
    
    //update the actual displayed items to match the display order list
    var listInputEl = document.getElementById(listInputID);
    var tableEl = EditGetParentByTagName(listInputEl, "table");
    var currentEl = tableEl.getElementsByTagName("ol")[0];
    var availableEl = tableEl.getElementsByTagName("ol")[1];
    var availableLIs = null;
    var liEl = null;
    var liTitle = "";
    var liContent = "";
    var displayList = listInputEl.value.split("<li>");
    var foundOption = false;
    
    //take out the blank at the start
    displayList.shift();
    
    //take out the </li>'s at the ends of each element
    for(var h = 0; h < displayList.length; ++h)
    {
        displayList[h] = displayList[h].split("</li>")[0];
    }
    
    //put all of the items back into the "available items" list
    while(currentEl.getElementsByTagName("li").length > 0)
    {
        liEl = currentEl.removeChild(currentEl.getElementsByTagName("li")[0]);
        availableEl.appendChild(liEl);
    }
    
    //give other chunks of code a way to run a refresh
    currentEl.onclick = EditGetDisplayOrderMouseDownClosure(null, listInputID, callback);
    
    //now, go through the display list and put them back
    for(var i = 0; i < displayList.length; ++i)
    {
        availableLIs = availableEl.getElementsByTagName("li");
        foundOption = false;
        for(var j = 0; j < availableLIs.length; ++j)
        {
            if(availableLIs[j].title.toLowerCase() == displayList[i].toLowerCase())
            {
                liEl = availableLIs[j].parentNode.removeChild(availableLIs[j]);
                currentEl.appendChild(liEl);
                foundOption = true;
                break;
            }
        }
        if(!foundOption)
        {
            var optionName = "(Unknown component)";
            var parameterPos;
            
            /*-----TO-DO-----
            //check to see if there's a parameter-less version of it that could be found for the name
            ---------------*/
            //alert(displayList[i].toLowerCase());
            if((parameterPos = displayList[i].toLowerCase().indexOf("(")) >= 0)
            {
                var noParameters = displayList[i].toLowerCase().substring(0, parameterPos);
                //alert(noParameters);
                for(j = 0; j < availableLIs.length; ++j)
                {
                    if(availableLIs[j].title.toLowerCase() == noParameters)
                    {
                        optionName = availableLIs[j].title + " (variation)";
                    }
                }
            }
            
            //add the option to the "in use" list
            var newLI = document.createElement("li");
            newLI.title = displayList[i].toLowerCase();
            newLI.appendChild(document.createTextNode(optionName));
            newLI.onclick = EditGetDisplayOrderMouseDownClosure(newLI, listInputID, callback);
            currentEl.appendChild(newLI);
        }
    }
    
    //sort the "available items" list by name
    availableLIs = availableEl.getElementsByTagName("li");
    for(var x = 0; x < availableLIs.length - 1; ++x)
    {
        for(var y = x + 1; y < availableLIs.length; ++y)
        {
            if((availableLIs[x].textContent ? availableLIs[x].textContent : availableLIs[x].innerHTML).toLowerCase() > (availableLIs[y].textContent ? availableLIs[x].textContent : availableLIs[y].innerHTML).toLowerCase())
            {
                liTitle = availableLIs[x].title;
                availableLIs[x].title = availableLIs[y].title;
                availableLIs[y].title = liTitle;
                
                if(availableLIs[x].textContent)
                {
                    liContent = availableLIs[x].textContent;
                    availableLIs[x].textContent = availableLIs[y].textContent;
                    availableLIs[y].textContent = liContent;
                }
                else
                {
                    liContent = availableLIs[x].innerHTML;
                    availableLIs[x].innerHTML = availableLIs[y].innerHTML;
                    availableLIs[y].innerHTML = liContent;
                }
            }
        }
    }
}

function EditGetDisplayOrderMouseDownClosure(el, listInputID, callback)
{
    return function(e) { EditDisplayOrderMouseDown(e, el, listInputID, callback); }
}

function EditDisplayOrderMouseDown(e, el, listInputID, callback)
{
    if(!e)
    {
        e = window.event;
    }
    
    /*-----TO-DO-----
    Support drag-n-drop
    ---------------*/
    
    //for now, just toggle it back and forth between the two boxes
    if(el)
    {
        var listInputEl = document.getElementById(listInputID);
        var liString = "<li>" + el.title.toLowerCase() + "</li>";
        var liPos = listInputEl.value.toLowerCase().indexOf(liString);
        if(liPos >= 0)
        {
            //it will need to be removed
            listInputEl.value = listInputEl.value.substring(0, liPos) + listInputEl.value.substring(liPos + liString.length, listInputEl.value.length);
        }
        else
        {
            //it needs to be added
            listInputEl.value += "<li>" + el.title + "</li>";
        }
    }
    
    EditRefreshDisplayOrderList(listInputID, callback);
    
    callback(listInputID);
    
    return false;
}
