	var Context_Element_ID = null;
	var Context_Menu_Element_ID = null;
	var Context_Highlight_Element_ID = null;
	var Simple_Menu_Element_ID = null;
	var Windows = new Array();	

/* Event Handlers */

	// Hide open menus or show new context menu.
	function Handle_Document_Click(event)
	{		
		// Hide any displayed simple menu.
		if (Simple_Menu_Element_ID)
			Hide_Simple_Menu();
			
		// Hide any displayed context menu.
		if (Context_Menu_Element_ID)	
			Hide_Context_Menu();
			
		// Hide any displayed context highlight.
		if (Context_Highlight_Element_ID)
			Hide_Context_Highlight();
			
		return true;		
	}

	// Highlight an object if the control key is held, hide the current highlight otherwise.
	var Handle_Hover_Bubble = false;
	function Handle_Hover(event)
	{
		return true; 
		// Handle only front-most event
		if (!Handle_Hover_Bubble)
		{
			Handle_Hover_Bubble = true;
			setTimeout("Handle_Hover_Bubble = false;", 5);
			
			// Show context highlight if control-key is held.
			if (event.ctrlKey)
				Show_Context_Highlight({"Target_Element": this });
				
			// Hide context highlight if control-key is not held and no context menu is displayed.
			else if (!Context_Menu_Element_ID)
				Hide_Context_Highlight();
		}
		
		return true;
	}

	// Open the object's context menu on right or control click.
	var Handle_Context_Click_Bubble = false;
	function Handle_Context_Click(event)
	{	
		// Don't trigger for any other than top level
		if (!Handle_Context_Click_Bubble)
		{		
			Handle_Context_Click_Bubble = true;
			setTimeout("Handle_Context_Click_Bubble = false", 200);

			// TODO: This is the developer key combination to bring up the normal context menu for firebug's inspect element.
			// Maybe the design should allow for this more naturally.			
			if (event.ctrlKey && event.shiftKey)
				return true;
			
			if (event.ctrlKey || event.button == 2)
			{			
				Show_Context_Menu({"Target_Element":this, "Mouse_Event":event});
				return false;
			}
		}
		return true;
	}
	

/* Show and Hide Functions */
	
	// Generate and display contextual information about a target element on the page.
	function Show_Context_Highlight(Parameters)
	{
		Force_Display = Parameters["Force_Display"];		
		Target_Element = Parameters["Target_Element"];
		if (!Target_Element)
			Target_Element = $(Parameters["Target_Element_ID"]);
		if (!Target_Element)
			return;
	
		// If force display hasn't been specified,
		// If the context highlight for the target element is already displayed, don't display highlight.
		// If a context menu is displayed, don't display highlight.
		// If a window has been opened, don't display highlight.		
		if (
			!Force_Display &&
			(
				(Target_Element.id == Context_Element_ID && Context_Highlight_Element_ID) ||
				(Context_Menu_Element_ID) ||
				(Windows.length > 0)
			)
		)
			return;		
		
		// Hide currently displayed context highlight.
		Hide_Context_Highlight();
		
		// Position and display the four borders and flag of the item highlight interface.	
		Highlight_Border_Width = 3;
		var Element_Position = Find_Position(Target_Element);
		var Element_Size = Find_Size(Target_Element, 1);
		Element_Position[0] -= 5;
		Element_Position[1] -= 5;
		Element_Size[0] += 10;
		Element_Size[1] += 10;
		
		// Create highlight elements.
		var Highlight_Parts = [
			{
				"ID": "Container"
			},
			{ 
				"ID": "Top",
				"Parent_ID": "Container",
				"Top": Element_Position[1]  - Highlight_Border_Width + "px", 
				"Left": Element_Position[0]  +  "px",
				"Width": (Element_Size[0] ) + "px",
				"Height": Highlight_Border_Width + "px",
				"Class": "Highlight_Border Highlight_Top"
				
			},
			{
				"ID":"Right",
				"Parent_ID": "Container",
				"Top": Element_Position[1] + "px",
				"Left": Element_Position[0] + Element_Size[0] +"px",
				"Width": Highlight_Border_Width + "px",
				"Height": Element_Size[1] + "px",
				"Class": "Highlight_Border Highlight_Right",
			},
			{
				"ID":"Bottom",
				"Parent_ID": "Container",
				"Top": Element_Position[1]  + Element_Size[1] + "px",
				"Left": Element_Position[0] +"px",
				"Width": (Element_Size[0] ) + "px",
				"Height": Highlight_Border_Width + "px",
				"Class": "Highlight_Border Highlight_Bottom",
			},
			{
				"ID":"Left",
				"Parent_ID": "Container",
				"Top": Element_Position[1] + "px",
				"Left": Element_Position[0] - Highlight_Border_Width  +"px",
				"Width": Highlight_Border_Width + "px",
				"Height": Element_Size[1] + "px",
				"Class": "Highlight_Border Highlight_Left",
			},
			{
				"ID":"Top_Left",
				"Parent_ID": "Container",
				"Top": Element_Position[1] - 5 +  "px",
				"Left": Element_Position[0] - 5  +"px",
				"Class": "Highlight_Border Highlight_Top_Left",
			},
			{
				"ID":"Top_Right",
				"Parent_ID": "Container",
				"Top": Element_Position[1] - 5 +  "px",
				"Left": Element_Position[0] + Element_Size[0] +"px",
				"Class": "Highlight_Border Highlight_Top_Right",
			},
			{
				"ID":"Bottom_Left",
				"Parent_ID": "Container",
				"Top": Element_Position[1]  + Element_Size[1] + "px",
				"Left": Element_Position[0] - 5  +"px",
				"Class": "Highlight_Border Highlight_Bottom_Left",
			},
			{
				"ID":"Bottom_Right",
				"Parent_ID": "Container",
				"Top": Element_Position[1] + Element_Size[1]  + "px",
				"Left": Element_Position[0] + Element_Size[0] +"px",
				"Class": "Highlight_Border Highlight_Bottom_Right",
			},
			{
				"ID":"Flag",
				"Parent_ID": "Container",
				"Top": Math.max(5, (Element_Position[1]  - 30)) + "px",
				"Left": Math.max(5, (Element_Position[0] - 20))+ "px",
				"Class": "Highlight_Flag",
			},
			{
				"ID":"Title", 
				"Parent_ID" : "Flag",
				"Class": "Highlight_Title"
			},
			{
				"ID": "Pointer", 
				"Parent_ID" : "Flag",
				"Class": "Highlight_Pointer",
			}
		];
			
		
		Highlight_Parts.each(
			function(Highlight_Part)
			{
				var Highlight_Part_Element = document.createElement("div");
				
				Highlight_Part_Element.id = Target_Element.id + "_Highlight_" + Highlight_Part["ID"];				
				Highlight_Part_Element.style.top = Highlight_Part["Top"];
				Highlight_Part_Element.style.left = Highlight_Part["Left"];
				Highlight_Part_Element.style.width = Highlight_Part["Width"];
				Highlight_Part_Element.style.height = Highlight_Part["Height"];				
				if (Highlight_Part["Class"])
					Highlight_Part_Element.className = Highlight_Part["Class"];
				
				if (Highlight_Part["Parent_ID"])
					Highlight_Parent_Element = $(Target_Element.id + "_Highlight_" + Highlight_Part["Parent_ID"]);
				else
					Highlight_Parent_Element = $("Body");
				Highlight_Parent_Element.appendChild(Highlight_Part_Element);
			
			}	
		);
		
		// Set the text for the title flag.
		var Dependency = Dependencies_By_Namespace[Target_Element.id];
		var Item_Type = Dependency.Type;
		if (Dependency.Name != "")
			var Item_Label = Dependency.Name;
		else
			var Item_Label = Dependency.ID;
		$(Target_Element.id + "_Highlight_Title").innerHTML =  "<b>" + Item_Label + "</b>	"  + " " + Item_Type;
		
		// Generate a shadow for the title flag.
		Generate_Shadow({"ID":Target_Element.id + "_Highlight_Flag"});
		
		// Register highlight element and target element ids.
		Context_Highlight_Element_ID = Target_Element.id + "_Highlight_Container";
		Context_Element_ID = Target_Element.id;
	}

	// Hide the currently displayed context highlight.
	function Hide_Context_Highlight()
	{
		Hide({'Remove_Element':true, 'ID': Context_Highlight_Element_ID});
		
		// Unregister context highlight element id and context element id.
		Context_Highlight_Element_ID = null;
		Context_Element_ID = null;
	}

	// Show the context menu for the target element.
	function Show_Context_Menu(Parameters)
	{				
		Target_Element = Parameters["Target_Element"];
		if (!Target_Element)
			Target_Element = $(Parameters["Target_Element_ID"]);
		Mouse_Event = Parameters["Mouse_Event"];
		
		// If a window is displayed, do nothing.
		if (Windows.length > 0)
			return;	
		
		// Show the relevant context highlight.
		Show_Context_Highlight(Parameters);
		
		// Hide current context menu.
		Hide_Context_Menu();
		
		// Generate new context menu at mouse position.
		Context_Menu = document.createElement("div");
		Context_Menu.id  = Target_Element.id + "_Context_Menu";
		Context_Menu.style.left = (Mouse_Event.pointerX() - 7) + "px";
		Context_Menu.style.top = (Mouse_Event.pointerY() - 7) + "px";
		Context_Menu.className = "Context_Menu";
		
		// Populate new context menu.
		var Context_Menu_List = document.createElement("ul");
		Dependency = Dependencies_By_Namespace[Target_Element.id];
		
		// Add title
		/*
		Context_Menu_Title = document.createElement("li");
		Context_Menu_Title.className = "Context_Menu_Title";
		Context_Menu_Title.innerHTML = Dependency.Type + " " + "<b>" + Dependency.Name + "</b>";
		Context_Menu_List.appendChild(Context_Menu_Title);
		*/
		
		// Add edit links for target element and each of its containers.
		while (Dependency)
		{
			//console.log(Dependency);
			if (Dependency.Name)
			{		
				var Item_Row = document.createElement("li");
				Item_Row.className = "Context_Menu_Item";
				Item_Row.innerHTML = "<a href=\"#\" class=\"Context_Menu_Item_Link\" onmouseover=\"Show_Context_Highlight({'Target_Element_ID' : '" + Dependency.Namespace + "', 'Force_Display' : true});\" onclick=\"Hide_Context_Menu(); Hide_Context_Highlight(); Show({'Type':'Window','Namespace':'"+ Dependency.Namespace + "_Edit_" + Dependency.Type + "_" + Dependency.ID + "','URL':'" + Directory +  "/Action/Edit/Raw:Namespace=" + Dependency.Namespace + "_Edit_" + Dependency.Type + "_" + Dependency.ID + ",Edit_Item_Type=" + Dependency.Type + ",Edit_Item_ID=" + Dependency.ID + "'}); return false;\">" + "Edit " + Dependency.Type + " " + "<b>&#8220;" + Dependency.Name + "&#8221;</b>" + "</a>"
				
				Context_Menu_List.appendChild(Item_Row);
			}
			Dependency = Dependencies_By_Namespace[Dependency.Parent_Namespace];
		}
		
		// Add context menu to document.
		Context_Menu_Container = document.createElement("div");
		Context_Menu_Container.id  = Target_Element.id + "_Context_Menu_Container";
		Context_Menu.appendChild(Context_Menu_List);
		Context_Menu_Container.appendChild(Context_Menu);
		$("Body").appendChild(Context_Menu_Container);		
				
		// Generate a shadow for the context menu.		
		Generate_Shadow({"Element":Context_Menu});
		
		// Register menu element and target element ids.
		Context_Element_ID = Target_Element.id;
		Context_Menu_Element_ID = Context_Menu_Container.id;
	}

	// Hide current context menu.
	function Hide_Context_Menu()
	{
		Hide({'Remove_Element':true, 'ID':Context_Menu_Element_ID});
		
		// Unregister context menu element id.
		Context_Menu_Element_ID = null;
	}

	// Show an simple menu element that will hide on the next document click.
	function Show_Simple_Menu(Parameters)
	{	
		Show_Element = Parameters["Element"];
		if (!Show_Element)
			Show_Element = $(Parameters["ID"]);
			
		// Make sure the menu displays in the foreground.
		Show_Element.style.zIndex = "1000";
		
		Show({'Element':Show_Element});

		// Register simple menu element id.
		Simple_Menu_Element_ID = Show_Element.id;
	}

	// Hide the element that was last opened as a simple menu.
	function Hide_Simple_Menu()
	{	
		Hide({'ID':Simple_Menu_Element_ID});
	
		//Unregister simple menu element id.
		Simple_Menu_Element_ID = null;
	}

	// Load a URL into a floating window.
	function Show_Window(Parameters)
	{
		Namespace = Parameters["Namespace"];
		URL = Parameters["URL"];
		
		var Window_Item = $(Namespace);
		if (!Window_Item)
		{
			Window_Item = Parse_Element(Controls["Window"].replace(/NAMESPACE/g, Namespace));
			Windows.push(Window_Item);			
			
			Body_Item = $("Body");
			Body_Item.appendChild(Window_Item);
		}
		Window_Item.style.zIndex = 500 + Windows.length * 2 + 1;
		
		Show_Lightbox();		
		
		Fill({"ID": Namespace, "URL": URL});
		Add_Dependency({"ID": "", "Namespace": Namespace, "URL": URL});
	}

	// Hide the window that was last opened.
	function Hide_Window()
	{
		// Remove top window if it exists
		if (Windows.length)
		{
			var Window_Item = Windows.pop();
			Window_Item.parentNode.removeChild(Window_Item);
			
			if (Windows.length)
				Show_Lightbox();
			else
				Hide_Lightbox();
		}
	}
	function Close_Top_Window(){Hide_Window();}

	// Display a translucent lightbox in the highest layer of the site.
	function Show_Lightbox()
	{
		var Lightbox_Item = $("Lightbox");
		
		// Generate lightbox if it doesn't exist.
		if (!Lightbox_Item)
		{
			Lightbox_Item = Generate_Control("Lightbox");
			Body_Item = $("Body");
			Body_Item.appendChild(Lightbox_Item);
		}
	
		// Display lightbox right beneath highest window.
		Lightbox_Item.style.zIndex = 500 + Windows.length * 2;	
		Lightbox_Item.style.display = "block";
	}
	
	// Hide lightbox.
	function Hide_Lightbox()
	{
		$("Lightbox").style.display = "none";
	}
	
	// Show an element or URL in a window or in place.
	function Show(Parameters)
	{		
		console.log(Parameters);
		Type = Parameters["Type"];		
		switch (Type)
		{
			case "Window":
				Show_Window(Parameters);
				break;
				
			case "Inline":
				break;
				
			case "Menu":
				Show_Simple_Menu(Parameters);
				break;
			
			case "Lightbox":
				Show_Lightbox();
				
			default:
				Show_Element = Parameters["Element"];
				if (!Show_Element)
					Show_Element = $(Parameters["ID"]);
				Show_Element.style.display = "block";
				break;
		}
	}

	// Hide an element, remove the element from the document tree if specified.
	function Hide(Parameters)
	{
		Hide_Element = Parameters["Element"];
		if (!Hide_Element)
			Hide_Element = $(Parameters["ID"]);
		if (Hide_Element)
		{
			if (Parameters['Remove_Element'])
				Hide_Element.parentNode.removeChild(Hide_Element);
			else
				Hide_Element.style.display = "none";
		}
	}

	// Generate a faint shadow for an element with a specified width.
	function Generate_Shadow(Parameters)
	{		
		Shadow_Target_Element = Parameters["Element"];
		if (!Shadow_Target_Element)
			Shadow_Target_Element = $(Parameters["ID"]);
			
		var Element_Position = Find_Position(Shadow_Target_Element);
		var Element_Size = Find_Size(Shadow_Target_Element, 1);						
		var Shadow_Width = 4;
		
		// Create shadow elements.		
		var Shadow_Parts = [
			{
				"ID": "Container"			
			},
			{
				"ID":"Right",
				"Parent_ID": "Container",
				"Top": Element_Position[1] + Shadow_Width + "px",
				"Left": Element_Position[0] + Element_Size[0] +"px",
				"Height": Element_Size[1]  - Shadow_Width + "px",
				"Class": "Shadow_Element Shadow_Right",
			},
			{
				"ID":"Bottom",
				"Parent_ID": "Container",
				"Top": Element_Position[1]  + Element_Size[1] + "px",
				"Left": Element_Position[0] + Shadow_Width + "px",
				"Width": (Element_Size[0] )  - Shadow_Width + "px",
				"Class": "Shadow_Element Shadow_Bottom",
			},
			{
				"ID":"Bottom_Right",
				"Parent_ID": "Container",
				"Top": Element_Position[1]  + Element_Size[1] + "px",
				"Left": Element_Position[0] + Element_Size[0] + "px",
				"Class": "Shadow_Element Shadow_Bottom_Right",
			},
		];
			
		
		Shadow_Parts.each(
			function(Shadow_Part)
			{
				var Shadow_Part_Element = document.createElement("div");
				
				Shadow_Part_Element.id = Shadow_Target_Element.id + "_Shadow_" + Shadow_Part["ID"];
				if (Shadow_Part["Class"])
					Shadow_Part_Element.className = Shadow_Part["Class"];
				Shadow_Part_Element.style.top = Shadow_Part["Top"];
				Shadow_Part_Element.style.left = Shadow_Part["Left"];
				Shadow_Part_Element.style.width = Shadow_Part["Width"];
				Shadow_Part_Element.style.height = Shadow_Part["Height"];
				
				if (Shadow_Part["Parent_ID"])
					Shadow_Parent_Element = $(Shadow_Target_Element.id + "_Shadow_" + Shadow_Part["Parent_ID"]);
				else
					Shadow_Parent_Element = Shadow_Target_Element.parentNode;
				Shadow_Parent_Element.appendChild(Shadow_Part_Element);			
			}	
		);

	}
	
/* Design Editor Functions */

	// Toggle between and Design and HTML modes in the design editor.
	function Select_Design_Editor_Mode(Mode, Namespace)
	{
		Synchronize_Design_Editor(Namespace);
		if (Mode == "Design")
		{
			$(Namespace + "_Design_Tab").className = "Active_Tab Last_Tab";
			$(Namespace + "_HTML_Tab").className = "Inactive_Tab";
			$(Namespace + "_Design_Editor").style.display = "block";
			$(Namespace + "_HTML_Editor").style.display = "none";
		}
		else
		{
			$(Namespace + "_HTML_Tab").className = "Active_Tab";
			$(Namespace + "_Design_Tab").className = "Inactive_Tab Last_Tab";
			$(Namespace + "_HTML_Editor").style.display = "block";
			$(Namespace + "_Design_Editor").style.display = "none";
		}		
	}

	// Synchronize data between Design and HTML modes in the design editor.
	function Synchronize_Design_Editor(Namespace)
	{	
		// Copy from Design mode to HTML mode.
		if ($(Namespace + "_HTML_Tab").className == "Active_Tab")
			$(Namespace + "_Design").innerHTML = $(Namespace).value;
			
		// Copy from HTML mode to Design mode.
		else
			$(Namespace).value = Clean_HTML($(Namespace + "_Design").innerHTML);
			
	}

	// Sets the size of the currently selected text in the design editor, hides the size menu.
	function Set_Design_Editor_Size(Namespace, Size)
	{
		var Size_Value;
		switch(Size)
		{
			case "huge":
				Size_Value = 7;
				break;
			case "large":
				Size_Value = 5;
				break;
			case "normal":
				Size_Value = 2;
				break;
			case "small":
				Size_Value = 1;
				break;
			default:
				break;
		}
		Set_Design_Editor_Style(Namespace, "fontsize", Size_Value);
		Hide_Simple_Menu();
	}

	// Sets the font of the currently selected text in the design editor, hides the font menu.
	function Set_Design_Editor_Font(Namespace, Font)
	{
		Set_Design_Editor_Style(Namespace, "fontname", Font);
		Hide_Simple_Menu();
	}
	
	function Set_Design_Editor_Style(Namespace, Style, Value)
	{	
		document.execCommand(Style, null, Value);
		Synchronize_Design_Editor(Namespace);
	}

/* Video Functions */

function Load_Video(Container_ID, URL)
{
	$(Container_ID + "_Player").Load_Video(URL);
}

function Play_Video(Container_ID)
{
	$(Container_ID + "_Player").Play_Video();
}

function Stop_Video(Container_ID)
{
	$(Container_ID + "_Player").Stop_Video();
}

function Create_Video_Player(Container_ID, Width, Height)
{
	var Jelly_Flash_Video_Player_Writer = new SWFObject("/jelly/Flash/Jelly_Flash_Video_Player.swf", Container_ID + "_Player", Width, Height, "9");
	Jelly_Flash_Video_Player_Writer.addVariable("wmode", "transparent");
	Jelly_Flash_Video_Player_Writer.write(Container_ID);
}

function Video_Update(Player_ID, Update_Type, Update_Description, Bytes_Loaded, Bytes_Total)
{
	switch (Update_Type)
	{
		case "Play":
			break;
		case "Stop":
			break;
		case "Complete":
			break;
		case "Progress":
			break;
		case "Error":
			document.title = "Player error: " + Update_Description;
			break;
	}
}
	
	
/* Miscellaneous Functions */
	
	function Scope_Visible_Properties(Namespace)
	{
		var Simple_Types = new Array("Boolean", "Data", "Date", "DateTime", "Number", "Password", "String", "Time");
		if (Simple_Types.indexOf($(Namespace + "_Value_Type").value) < 0)
		{
			// Complex types	
			$(Namespace + "_Multiple_Row").style.opacity = "1";
			$(Namespace + "_Inline_Row").style.opacity = "1";
			Ramp_Value({"Command": "$(Namespace + \"_Multiple_Row\").style.opacity = VALUE / 10", "Start_Value": 3, "End_Value": 10});
			Ramp_Value({"Command": "$(Namespace + \"_Inline_Row\").style.opacity = VALUE / 10", "Start_Value": 3, "End_Value": 10});
			
			$(Namespace + "_Multiple").enabled = true;
			$(Namespace + "_Inline").enabled = true;
			
			if ($(Namespace + "_Multiple").checked)
			{
				//Multiple	
				$(Namespace + "_Bidirectional_Row").style.opacity = "1";
				$(Namespace + "_Commutative_Row").style.opacity = "1";
				
				$(Namespace + "_Bidirectional").enabled = true;
				$(Namespace + "_Commutative").enabled = true;
			}
			else
			{
				//Single
				$(Namespace + "_Bidirectional_Row").style.opacity = ".3";
				$(Namespace + "_Commutative_Row").style.opacity = ".3";

				$(Namespace + "_Bidirectional").checked = false;
				$(Namespace + "_Commutative").checked = false;
				
				$(Namespace + "_Bidirectional").enabled = false;
				$(Namespace + "_Commutative").enabled = false;
			}
		}
		else
		{
			//Simple types
			$(Namespace + "_Multiple_Row").style.opacity = ".3";
			$(Namespace + "_Inline_Row").style.opacity = ".3";
			$(Namespace + "_Bidirectional_Row").style.opacity = ".3";
			$(Namespace + "_Commutative_Row").style.opacity = ".3";
			
			$(Namespace + "_Commutative_Row").style.height = "0px";

			$(Namespace + "_Multiple").checked = false;
			$(Namespace + "_Inline").checked = true;
			$(Namespace + "_Bidirectional").enabled = false;
			$(Namespace + "_Commutative").enabled = false;
			
			$(Namespace + "_Multiple").enabled = false;
			$(Namespace + "_Inline").enabled = false;
			$(Namespace + "_Bidirectional").enabled = false;
			$(Namespace + "_Commutative").enabled = false;
		}

	}
	
/* Search Box Functions */

	var Search_Box_Items = new Object();
	
	// Show a dropdown list of selectable items for this search box that match the new query
	function Search_Box_Changed(Namespace, Query)
	{
		var Search_List_Element = document.getElementById(Namespace + "_Search_List");
		Search_List_Element.innerHTML = "";
		
		// For each item belonging to this search box, populate the dropdown list if it matches the query.
		for (var Search_Item_Index in Search_Box_Items[Namespace])
		{
			Search_Item_Key = Search_Box_Items[Namespace][Search_Item_Index][0];
			//TODO: Escape parantheses from query...
			Query_Expression = new RegExp("(" + Query + ")",'ig');
			
			// Prototype extension compatibility.
			if (typeof(Search_Item_Key) != "string")
				continue;
			
			// Show this item only if it matches the query, or if the query is blank			
			if (!(Query == "" || (Query_Expression.test(Search_Item_Key))))
				continue;
			
			// Highlight the matched text
			if (Query.length > 0)
				Search_Item_HTML = Search_Item_Key.replace(Query_Expression, "<span class=\"Search_List_Item_Highlight\">$1</span>");
			else
				Search_Item_HTML = Search_Item_Key;
			
			// Create a selectable list item element for this item and append it to the dropdown.
			Search_List_Item_Element = document.createElement("li");
			Search_List_Item_Element.innerHTML = "<a href=\"javascript:Search_Box_Item_Selected('" + Namespace+ "'," + Search_Item_Index + ");\">" + Search_Item_HTML + "</a>";
			Search_List_Element.appendChild(Search_List_Item_Element);
		}
		
		Show({"Type":"Menu", "Element":Search_List_Element});
	}
	
	// Populate the id and search box when an item is selected from the search box drop down.
	function Search_Box_Item_Selected(Namespace, Index)
	{
		Search_Item_Key = Search_Box_Items[Namespace][Index][0];
		Search_Item_Value = Search_Box_Items[Namespace][Index][1];
		
		document.getElementById(Namespace).value = Search_Item_Value;
		document.getElementById(Namespace + "_Search_Box").value = Search_Item_Key;
	}
	
	// Clear the array of search items for a namespace.
	function Search_Box_Register_Namespace(Namespace)
	{	
		Search_Box_Items[Namespace] = new Array();
	}
	
	// Store a search item in the array for a namespace.	
	function Search_Box_Register_Item(Namespace, Name, ID)
	{
		if (!Name)
			Name = "(" + ID + ")";
		Search_Box_Items[Namespace].push([Name, ID]);
	}
	
	// TODO:Hide search box list... maybe.
	function Search_Box_Blur(Namespace)
	{
	}	
	

/* Utility Functions */

	// Parse HTML text into a DOM element.
	function Parse_Element(HTML_Text)
	{
		HTML_Element = document.createElement("span");
		HTML_Element.innerHTML = HTML_Text;
		
		// Return a collection of elements if necessary, otherwise return a single element.
		if (HTML_Element.childNodes.length > 1)
			return HTML_Element.childNodes;
		else
			return HTML_Element.firstChild;
	}
	
	function Generate_Control(Control_ID)
	{
		return Parse_Element(Controls[Control_ID]);
	}

	function Clean_HTML(Text)
	{	
		// Clean webkit garbage.
		Text = Text.replace(/<br class\="webkit-block-placeholder">/gi, "<br />");
		Text = Text.replace(/<span class="Apple-style-span">(.*)<\/span>/gi, '$1');
		Text = Text.replace(/ class="Apple-style-span"/gi, '');
		Text = Text.replace(/<span style="">/gi, '');
		return Text;
	}

	function Ramp_Value(Parameters)
	{// Parameters: Command, Start_Value (default: 0), End_Value (default: 1), Duration (milliseconds, default: 500), Start_Time (default: now)
		
		var d = new Date();
		var Current_Time = d.getTime();
		if (!Parameters["Duration"])
			Parameters["Duration"] = 500;
		if (!Parameters["Start_Time"])
			Parameters["Start_Time"] = Current_Time;
		if (!Parameters["Start_Value"])
			Parameters["Start_Value"] = 0;
		if (!Parameters["End_Value"])
			Parameters["End_Value"] = 1;
		
		var Ramp_Value_Recursive = function()
		{
			var d = new Date();
			var Current_Time = d.getTime();
			
			var Partial = (Current_Time - Parameters["Start_Time"]) / Parameters["Duration"];
			if (Partial > 1)
				Partial = 1;
			Partial = (1 - Math.pow((1 - Partial), 4));
			
			var Value = Parameters["Start_Value"] + (Parameters["End_Value"] - Parameters["Start_Value"]) * Partial;
			
			var Command = Parameters["Command"];
			Command = Command.replace(/VALUE/g, Value);
			try
			{
				eval(Command);
			}
			catch(Error)
			{
			}
			
			if (Partial < 1)
				setTimeout(Ramp_Value_Recursive, 0);
			else
				if (Parameters["On_Complete"])
					Parameters["On_Complete"]();
		}
		
		setTimeout(Ramp_Value_Recursive, 0);
	}

	function Find_Scroll_Position()
	{
		Scroll_Left = 0;
		Scroll_Top = 0;
		if (pageXOffset)
		{
			Scroll_Left = pageXOffset;
			Scroll_Top = pageYOffset;
		}	
		else if (document.documentElement)
		{
			Scroll_Left = document.documentElement.scrollLeft;
			Scroll_Top = document.documentElement.scrollTop;
		}
		else if (document.body)
		{
			Scroll_Left = document.body.scrollLeft;
			Scroll_Top = document.body.scrollTop;
		}
		
		return [Scroll_Left, Scroll_Top];
	}

	function Find_Position(Current_Object)
	{
		var Current_Left = 0;
		var Current_Top = 0;
		if (Current_Object.offsetParent)
		{
			do
			{
				Current_Left += Current_Object.offsetLeft;
				Current_Top += Current_Object.offsetTop;
			}
			while (Current_Object = Current_Object.offsetParent);
		}
		return [Current_Left, Current_Top];
	}

	// TODO: Test, make work reliably
	function Find_Size(Current_Element, Levels)
	{
		var Current_Width = 0;
		var Current_Height = 0;
		Current_Width = Current_Element.offsetWidth;
		console.log("WID: " + Current_Width);
		Current_Height = Current_Element.offsetHeight;
		
		if (Levels > 0 && Current_Element.style.display != "block")
		{
			for (Child_Index = 0; Child_Index < Current_Element.childNodes.length; Child_Index++)
			{
				var Current_Child = Current_Element.childNodes[Child_Index];
				
				if (Current_Child.nodeType == 1)
				{
					var Child_Size = Find_Size(Current_Child, Levels - 1);
					if (Child_Size[0])
						Current_Width = Math.max(Current_Width, Current_Child.offsetLeft - Current_Element.offsetLeft + Child_Size[0]);
					if (Child_Size[1])
						Current_Height = Math.max(Current_Height, Current_Child.offsetTop - Current_Element.offsetTop + Child_Size[1]);
				}
				
			}
		}
		return [Current_Width, Current_Height];
	}

/* COMMENTED NOMANS LAND

	

	Interface_Mode = false;

	function Open_Interface(Key_Event)
	{
		if (Key_Event.ctrlKey)
		{
			Interface_Mode = true;
	//		document.addEventListener("keyup", Close_Interface, true);
			document.removeEventListener("keydown", Open_Interface, true);
	//		console.log("Open");
			
	//		Show_Toolbar();
		}
	}

	function Close_Interface(Key_Event)
	{
		if (!Key_Event.ctrlKey)
		{
			Interface_Mode = false;
			document.removeEventListener("keyup", Close_Interface, true);
	//		console.log("Close");
			
	//		Hide_Toolbar();
			
			Remove_Highlight()
		}
	}

	function Show_Toolbar()
	{
		Ramp_Value({"Command": "$('Jelly_Toolbar').style.top = VALUE + 'px';", "Start_Value": -50, "End_Value": 0});
	}

	function Hide_Toolbar()
	{
		//Ramp_Value({"Command": "$('Jelly_Toolbar').style.top = VALUE + 'px';", "Start_Value": 0, "End_Value": -50});
	}


	Edit_Item = null;
	Edit_Item_Style = null;
	Edit_Item_Display = null;
	Editable_Item = null;
	Select_Item_Handled = false;
	Inline_Menu_Element = null; 
	function Select_Item(Parameters /* (Event, Target, Hover_Title, Menu_Title, Item_Title, Item_Namespace, Item_URL, Property_Title, Property_Namespace, Property_URL, Template_Title, Template_Namespace, Template_URL)   ) 
	{
	//	Remove_Highlight();
		Mouse_Event = Parameters["Event"];	
		
		if (!Select_Item_Handled && !(Edit_Item))
		{
			Highlight_Item(Parameters["Target"], Parameters["Hover_Title"]);
			
			// Cross browser event bubbling!!!
			Select_Item_Handled = true;
			setTimeout("Select_Item_Handled = false", 200);
		
			// Generate Inline Menu
			Inline_Offset = new Array(Mouse_Event.pointerX(), Mouse_Event.pointerY());
			
			// Remove previous inline menu.
			if (Inline_Menu_Element)
				Inline_Menu_Element.parentNode.removeChild(Inline_Menu_Element);
			
			Inline_Menu_Element = document.createElement("div");
			Inline_Menu_Element.className = "Inline_Menu";
			
			
			Inline_Menu_Element_HTML = "<ul>";
			
			Inline_Menu_Element_HTML += "<li class=\"Inline_Menu_Title\">" + Parameters["Menu_Title"] +"</li>";
			
			if (Parameters['Property_Title'])
			{	
				Property_Click = "Open_URL_Inline({'Target_ID':'" + Parameters["Target"].id + "', 'Namespace': '" + Parameters["Property_Namespace"] + "', 'URL': '" + Parameters["Property_URL"]+ "'});";
				Property_Title = "Edit " + Parameters["Property_Title"] + "...";
				Inline_Menu_Element_HTML += "<li><a href=\"#\" onclick=\"" + Property_Click +"return false;\">" + Property_Title+ "</a></li>";
			}		
			if (Parameters['Item_Title'])
			{	
				Item_Click = "Open_URL_In_Window({'Target_ID':'" + Parameters["Target"].id + "', 'Namespace': '" + Parameters["Item_Namespace"] + "', 'URL': '" + Parameters["Item_URL"]+ "'});";
				Item_Title = "Edit " + Parameters["Item_Title"] + "...";
				Inline_Menu_Element_HTML += "<li><a href=\"#\" onclick=\"" + Item_Click +"return false;\">" + Item_Title+ "</a></li>";
			}
			if (Parameters['Template_Title'])
			{	
				Template_Click = "Open_URL_In_Window({'Target_ID':'" + Parameters["Target"].id + "', 'Namespace': '" + Parameters["Template_Namespace"] + "', 'URL': '" + Parameters["Template_URL"]+ "'});";
				Template_Title = "Edit Template...";
				Inline_Menu_Element_HTML += "<li><a href=\"#\" onclick=\"" + Template_Click +"return false;\">" + Template_Title+ "</a></li>";
			}
			Inline_Menu_Element_HTML  += "</ul>";
			Inline_Menu_Element.innerHTML = Inline_Menu_Element_HTML;

			document.body.appendChild(Inline_Menu_Element);
		}
		
		return false;
	}



	// Inline data edit window
	function Open_URL_Inline(Parameters /* (Target_ID,  URL)  )
	{
		if (Inline_Menu_Element)
		{
			Inline_Menu_Element.parentNode.removeChild(Inline_Menu_Element);
			Inline_Menu_Element = null;
		}
		
		Edit_Item = $(Parameters["Target_ID"]);

		//Add a lightbox.
		Light_Box( Edit_Item );
		
		// Move title above lightbox.
		$('Item_Title').style.zIndex = $('Lightbox_Left').style.zIndex + 1;
		
		// Remove borders
		$('Item_Border_Left').style.display = "none";
		$('Item_Border_Right').style.display = "none";
		$('Item_Border_Top').style.display = "none";
		$('Item_Border_Bottom').style.display = "none";
		
		// Hide Edit Item
		Edit_Item_Size = Find_Size(Edit_Item, 1);
		Edit_Item_Style = document.defaultView.getComputedStyle(Edit_Item, "");
		Edit_Item_Display = "" + Edit_Item_Style.display;
		Edit_Item.style.display = "none";
		
		// Make Editable Item
		Editable_Item = document.createElement("div");
		Editable_Item.id = Edit_Item.id + "_Editable";
		Editable_Item  = Edit_Item.parentNode.insertBefore(Editable_Item, Edit_Item);
		Editable_Item.style.width = Edit_Item_Size[0] + "px";
		Editable_Item.style.height = Edit_Item_Size[1] + "px";
		Fill({"ID":Editable_Item.id, "URL": Parameters["URL"], "Transition": "None"});
	}


	// TODO: Don't know what the fuck this shit is 
	Design_Mode_Timeout = 0;
	function Design_Mode(Namespace)
	{
		if (!$(Namespace + "_Design"))
		{
			if (Design_Mode_Timeout < 10)
			{
				setTimeout(function () {
					Design_Mode(Namespace);
				}, 25);
				Design_Mode_Timeout ++;
			}
			else
				Design_Mode_Timeout = 0;
		}
		{
			// yo
			Design_Mode_Timeout = 0;
			
			// Copy values
			Edit_Namespace = Namespace;
			$(Edit_Namespace + "_Design").contentWindow.document.designMode = "on";
			$(Edit_Namespace + "_Design").contentWindow.document.body.innerHTML =  $(Edit_Namespace).value;
		
			// Set font
			$(Edit_Namespace + "_Design").contentWindow.document.body.style.fontSize = Edit_Item_Style.fontSize;
			$(Edit_Namespace + "_Design").contentWindow.document.body.style.color = Edit_Item_Style.color;
			$(Edit_Namespace + "_Design").contentWindow.document.body.style.fontFamily = Edit_Item_Style.fontFamily;
			// weird move by me, tristan cuz it was always so dark
			$(Edit_Namespace + "_Design").contentWindow.document.body.style.backgroundColor = "white";//Edit_Item_Style.fontFamily;
			
			// Set font
			
			
			
			// Set size
			Editable_Item_Size = Find_Size(Editable_Item, 1);
			$(Edit_Namespace + "_Design").style.height = Editable_Item_Size[1] + "px";
			$(Edit_Namespace + "_Design").style.width = Editable_Item_Size[0] + "px";
			$(Edit_Namespace + "_Design").contentWindow.document.body.style.overflow = "hidden";
			Design_Mode_Resize(true);
			
			// Set event handlers
			$(Edit_Namespace + "_Design").contentWindow.document.addEventListener("keyup", Design_Mode_Resize, true);
		}
	}

	function Design_Mode_Resize()
	{
		if ($(Edit_Namespace + "_Design").contentWindow.document.body.scrollHeight >= $(Edit_Namespace + "_Design").offsetHeight)
		{
			$(Edit_Namespace + '_Design').style.height =  $(Edit_Namespace + "_Design").contentWindow.document.body.scrollHeight + 'px';
			Editable_Item.style.height =  $(Edit_Namespace + "_Design").contentWindow.document.body.scrollHeight + 'px';
			Light_Box($(Edit_Namespace + '_Design'));
		}
	}

	// TODO: This was clearly a test hack.  Clean up.
	function Copy_From_Design_And_Save(Action_Namespace, Property_Name)
	{
		// Copy html from design div into hidden input
		$(Action_Namespace + "_Property_" + Property_Name).value =  $(Action_Namespace + "_Property_" + Property_Name + "_Design").contentWindow.document.body.innerHTML; 	
		
		//Wtf copy into edit item too
		Edit_Item.innerHTML =  $(Action_Namespace + "_Property_" + Property_Name + "_Design").contentWindow.document.body.innerHTML; 	
		
		// Submit edit action
		Execute_Action(Action_Namespace);
	}



	/* Menus : None of this shit is used yet.

	var Menus = new Array;
	var Keep_Menus = new Array;
	var Lightbox_Clicked = false;
	var Windows = new Array;
	function Handle_Click(e)
	{
		if (!e) var e = window.event;

		// For all the registered menus	
		for (var i = 0; i < Menus.length; i++)
		{
			var Found = false;
			for (var j = 0; j < Keep_Menus.length; j++)
			{
				// For each menu to keep
				var Current_Keep = Keep_Menus[j];
				while (Current_Keep)
				{
					
					// If I found this registered menu in the either the list of menus to keep or one of the parents of the list of menus to keep, then don't do anything.
					if (Current_Keep.Current == Menus[i].Current)
						Found = true;
					Current_Keep = Current_Keep.Parent;
				}
			}
			if (!Found)
			{
				// Otherwise fade this menu a bit.
				var Menu_Object = $(Menus[i].Current);
				Menu_Object.style.display ="none";
			}
		}
		
		Keep_Menus.clear();
	}

	function Register_Menu(ID, Parent_ID)
	{
		// Create a new menu object and link it to the specified parent menu.
		var Menu_Object = new Object;
		
		Menu_Object.Current = ID;
		
		for (var i = 0; i < Menus.length; i++)
			if (Menus[i].Current == Parent_ID)
				Menu_Object.Parent = Menus[i];
		
		Menus.push(Menu_Object);
		
	}

	function Register_Window(ID, URL)
	{
		Windows.push({"ID": ID, "URL": URL});
	}

	function Keep_Menu()
	{
		//Looks through all Menus for this Menu , adds it to the list of Menus to keep.
		var ID = this.id;
		for (var i = 0; i < Menus.length; i++)
			if (Menus[i].Current == ID)
				Keep_Menus.push(Menus[i]);
	}


	var Clear_Menus_Handled = false;
	function Clear_Menus()
	{
		if (!Clear_Menus_Handled)
		{
			Clear_Menus_Handled = true;
			setTimeout("Clear_Menus_Handled = false;", 5);
		
			var ID = this.id;
			Current_Level = 0;
			for (var i = 0; i < Menus.length; i++)
			{	
				if (Menus[i].Element_ID == ID)
				{
					Current_Level = Menus[i].Level;
					break;
				}
			}
			

			
			for (var i = 0; i < Menus.length; i++)
			{
				if (Menus[i].Level >= Current_Level && Menus[i].Element_ID != ID)
				{
					Menu_Object = $(Menus[i].Element_ID);
					Menu_Object.style.display = "none";	
				}
			}
		}
	}

	function Registerr_Menu(Menu_ID, Parent_ID)
	{
		Menu = new Object;
		Menu.Element_ID = Menu_ID;
	//	Menu.Parent_ID = Parent_ID;
		

		
		for (var i = 0; i < Menus.length; i++)
		{
			if (Menus[i].Element_ID == Parent_ID)
			{
				Menu.Level = Menus[i].Level + 1;
				break;
			}
		}
		
		if (!Menu.Level)
			Menu.Level = 1;
			
		Menus.push(Menu);
	}

	var Menus = new Array();
	var Last_Menu_Index = 0;
	function Show_Menu(Parameters)
	{
		var Attach_Object = $(Parameters["Attach_ID"]);
		var Menu_Object = $(Parameters["Menu_ID"]);
		
		Last_Menu_Index++;
		
		if (!Menu_Object)
		{
			Menu_Object = document.createElement("div");
			Menu_Object.id = Parameters["Menu_ID"];
			Menu_Object.className = "Browse_Menu";
			Menu_Object.style.backgroundColor = "white";
			Menu_Object.style.borderStyle = "solid";
			Menu_Object.style.borderWidth = "1px";
			Menu_Object.style.borderColor = "#AAAAAA";
			Menu_Object.style.borderLeftWidth = "5px";
			Menu_Object.style.borderLeftColor = "#CCCCCC";
			Menu_Object.style.position = "absolute";
			Menu_Object.style.left = "0px";
			Menu_Object.style.top = "0px";
			Menu_Object.style.overflow = "auto";
			Menu_Object.style.opacity = "0";
			Menu_Object.onclick = Clear_Menus;
			
			Menu_Object.innerHTML = "Loading...";
			$("Body").appendChild(Menu_Object);
		 
		 	Registerr_Menu(Parameters["Menu_ID"], Parameters["Parent_ID"]);
	/*		
			if (Parameters["Lightbox"])
				Register_Window(Parameters["Menu_ID"], Parameters["URL"]);
			else
				Register_Menu(Parameters["Menu_ID"], Parameters["Attach_ID"]);
	8/

			Fill( { "ID": Parameters["Menu_ID"], "URL": Parameters["URL"], "Response": function()
				{
					Attach({"New_Object": Menu_Object, "Parent_Object": Attach_Object, "Horizontal_Position": Parameters["Horizontal_Position"], "Vertical_Position": Parameters["Vertical_Position"], "Position": Parameters["Position"]});
				}
			});
		}
		
		Menu_Object.style.opacity = "0";
		Menu_Object.style.display = "block";
		
		if (Parameters["Lightbox"])
		{
			var Lightbox_Object = DynamicSite_Lightbox();
			Lightbox_Object.style.display = "block";
			Lightbox_Object.style.zIndex = 100 + Windows.length * 2;
			Menu_Object.style.zIndex = 100 + Windows.length * 2 + 1;
		}
		else
		{
			Menu_Object.style.zIndex = 200 + Last_Menu_Index;
		}
		
		Attach({"New_Object": Menu_Object, "Parent_Object": Attach_Object, "Horizontal_Position": Parameters["Horizontal_Position"], "Vertical_Position": Parameters["Vertical_Position"], "Position": Parameters["Position"]});
		
		Ramp_Value({"Command": "$('" + Parameters["Menu_ID"] + "').style.opacity = 'VALUE';"});
		
		Menu_Object.onclick();
	}


	function Attach(Parameters)
	{
		var New_Object = Parameters["New_Object"];
		
		var Parent_Object = Parameters["Parent_Object"];
		if (Parent_Object)
			var Current_Position = Find_Position(Parameters["Parent_Object"]);
		
		New_Object.style.position = "absolute";
		New_Object.style.left = "0px";
		New_Object.style.top = "-5000px";
		
		
		if (Parameters["Position"] == "Center")
		{
			var Current_Position = new Array($("Body").offsetWidth / 2 - New_Object.offsetWidth / 2, $("Body").offsetHeight / 2 - New_Object.offsetHeight / 2);
		}
		else
		{
			if (Parameters["Horizontal_Position"] == "Left")
				Current_Position[0] -= New_Object.offsetWidth;
			else if (Parameters["Horizontal_Position"] == "Right")
				Current_Position[0] += Parent_Object.scrollWidth + 1;
				
			if (Parameters["Vertical_Position"] == "Top")
				Current_Position[1] -= New_Object.offsetHeight;
			else if (Parameters["Vertical_Position"] == "Bottom")
				Current_Position[1] += Parent_Object.offsetHeight + 5;
			else
				Current_Position[1] += 1;
		}
		
		// Resize if too big
		if (Current_Position[0] + New_Object.offsetWidth > $("Body").offsetWidth - 20)
			Current_Position[0] = $("Body").offsetWidth - New_Object.offsetWidth - 20;
		if (Current_Position[1] + New_Object.offsetHeight > $("Body").offsetHeight - 20)
			Current_Position[1] = $("Body").offsetHeight - New_Object.offsetHeight - 20;
		if (Current_Position[0] < 5)
		{
			Current_Position[0] = 5;
	//		New_Object.style.width = ($("Body").offsetWidth - 5 - 20) + "px";
		}
		if (Current_Position[1] < 5)
		{
			Current_Position[1] = 5;
	//		New_Object.style.height = ($("Body").offsetHeight - 5 - 20) + "px";
		}
		
		New_Object.style.position = "absolute";
		New_Object.style.left = Current_Position[0] + "px";
		New_Object.style.top = Current_Position[1] + "px";
	}

	function Refresh_Sharing_Links()
	{
		URL = Link_URL();
		if ($("URL_Field"))
			$("URL_Field").innerHTML = "Link: <a href=\"" + URL + "\">" + URL + "</a>";
	}

	function Refresh_Email_Link()
	{
		URL = Link_URL();
		if ($("Email_Link-URL"))
			$("Email_Link-URL").value = URL;
	}

	function Toggle_Input(Prefix)
	{
		if ($(Prefix + "_Input").style.display == "block")
		{
			$(Prefix + "_Input").style.opacity = ".3";
			$(Prefix + "_Value").style.display = "block";
		}
		else
		{
			$(Prefix + "_Input").style.display = "block";
			$(Prefix + "_Value").style.opacity = ".3";
		}
	}

	function Link_URL()
	{
		var URL = document.location.toString();
		URL = URL.replace('#', '');
		return URL;
	}


	function Share_Page(Parameters)
	{
		URL = Link_URL();
		switch (Parameters["Target"])
		{
			case "del.icio.us":
				document.location = "http://del.icio.us/tristanperich?url=" + URL + "&title=" + document.title + "&v=4";
				break;
			case "Facebook":
				document.location = "http://www.facebook.com/share.php?u=" + URL + "&t=" + document.title;
				break;
			case "reddit":
				document.location = "http://reddit.com/submit?url="+encodeURIComponent(URL)+"&title="+encodeURIComponent(document.title);
				break;
			case "digg":
				document.location = "http://digg.com/submit?phase=2&url=" + URL;
				break;
			case "Email":
				Show_Menu({'URL': '/Action/Email_Link/Raw', 'Menu_ID': 'Sharing_Email_Link_Menu', 'Parent_ID': 'Toolbar_Sharing_Links_Menu', 'Attach_ID': 'Sharing_Email_Link', 'Vertical_Position': 'Bottom'});
				break;
		}
	}


	// Open URL in a floating window with lightbox.
	function Open_URL_In_Window(Parameters /* (Target,  Namespace, URL) 8/)
	{
	/*
		if (Inline_Menu_Element)
		{
			Inline_Menu_Element.parentNode.removeChild(Inline_Menu_Element);
			Inline_Menu_Element = null;
		}
		
		Hide_Context_Highlight();
		
		Edit_Item = $(Parameters["Target_ID"]);
	8/
		
		Add_Window(Parameters["Namespace"], Parameters["URL"]);
	}
	
		/8
		function Light_Box(Target_Element)
		{

			// Lightbox around the element
			if (Target_Element)
			{
					Target_Size = Find_Size(Target_Element, 1);
					Target_Position = Find_Position(Target_Element);
					
					// Generate lightbox elements, if they don't exist.
					Lightbox_Left_Item = $('Lightbox_Left');
					Lightbox_Right_Item = $('Lightbox_Right');
					Lightbox_Top_Item = $('Lightbox_Top');
					Lightbox_Bottom_Item = $('Lightbox_Bottom');
					if (!Lightbox_Left_Item)
					{		
						Lightbox_Left_Item = document.createElement("div");
						Lightbox_Left_Item.id = "Lightbox_Left";
						Lightbox_Left_Item.className = "Lightbox";	
						$('Body').appendChild(Lightbox_Left_Item);
				
					
						Lightbox_Right_Item = document.createElement("div");
						Lightbox_Right_Item.id = "Lightbox_Right";
						Lightbox_Right_Item.className = "Lightbox";	
						$('Body').appendChild(Lightbox_Right_Item);
					
						Lightbox_Top_Item = document.createElement("div");
						Lightbox_Top_Item.id = "Lightbox_Top";
						Lightbox_Top_Item.className = "Lightbox";	
						$('Body').appendChild(Lightbox_Top_Item);
					
						Lightbox_Bottom_Item = document.createElement("div");
						Lightbox_Bottom_Item.id = "Lightbox_Bottom";
						Lightbox_Bottom_Item.className = "Lightbox";	
						$('Body').appendChild(Lightbox_Bottom_Item);
					}
					
					// Position lightbox 
					Lightbox_Left_Item.style.top = (Target_Position[1] - Highlight_Border_Width) + "px";
					Lightbox_Left_Item.style.left = "0px";
					Lightbox_Left_Item.style.height = Math.max(0, (Target_Size[1] + 2 * Highlight_Border_Width)) + "px";
					Lightbox_Left_Item.style.width = Math.max(0, (Target_Position[0] - Highlight_Border_Width)) + "px";
					Lightbox_Left_Item.style.display = "block";
					
					Lightbox_Right_Item.style.top = (Target_Position[1] - Highlight_Border_Width) + "px";
					Lightbox_Right_Item.style.left = (Target_Position[0] + Target_Size[0] + Highlight_Border_Width) +"px";
					Lightbox_Right_Item.style.height = Math.max(0, (Target_Size[1] + 2 * Highlight_Border_Width)) + "px";
					Lightbox_Right_Item.style.width = "100%";
					Lightbox_Right_Item.style.display = "block";
				
					Lightbox_Top_Item.style.top = "0px";
					Lightbox_Top_Item.style.left = "0px";
					Lightbox_Top_Item.style.height = Math.max(0, (Target_Position[1] - Highlight_Border_Width)) + "px";
					Lightbox_Top_Item.style.width =  "100%";
					Lightbox_Top_Item.style.display = "block";
				
					Lightbox_Bottom_Item.style.top = (Target_Position[1] + Target_Size[1]  + Highlight_Border_Width) + "px";
					Lightbox_Bottom_Item.style.left = "0px";
					Lightbox_Bottom_Item.style.height = "100%";
					Lightbox_Bottom_Item.style.width =  "100%";
					Lightbox_Bottom_Item.style.display = "block";
			}
			
			//  Simple lightbox
			else

			{
				
			}
		}
	8/	
	
			/8
		function Hide_Window
		//Or remove inline property windows
		else
		{
			Editable_Item.parentNode.removeChild(Editable_Item);
			Edit_Item.style.display = Edit_Item_Display;
			Edit_Item = null;
			Editable_Item = null;
			Edit_Item_Style = null;
			Edit_Item_Display = null;
			
			$("Lightbox_Left").style.display = "none";
			$("Lightbox_Right").style.display = "none";
			$("Lightbox_Top").style.display = "none";
			$("Lightbox_Bottom").style.display = "none";
			
			Remove_Highlight();
		}
		8/


	*/