//Copyright 2011 Virtual Interconnect Software, LLC.  All rights reserved.

var initScript = "";
var publicURL = "http://www.data.virtualinterconnect.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 pageScroll = ((document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop);
	var scrollTop = pageScroll-600+64;
	obj.style.top = (curTop*0.75 + scrollTop*0.25) + "px";
	var publishAnimEl = document.getElementById("PublishAnim");
	if(publishAnimEl)
	{
		publishAnimEl.style.top = pageScroll + "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=\"lastPublishMessage = -1; UpdatePublishingMessage(); 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(myPagesButtonEl && myPagesEl)
	{
		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;
}

