tilt.attachEvent(document, "contentreceived", LayoutEngine);

function LayoutEngine(isInvalidStructure)
{
	var PROFILES_ROTATION_INTERVAL = 8000;
	var PROFILES_MAX_COUNT = 5;
	var PROFILES_FADE_INTERVAL = 40;
	
	var form = document.getElementById("form");
	
	var header = document.getElementById("Header");
	var content = document.getElementById("Content");
	var footer = document.getElementById("Footer");
	
	var body = document.getElementById("body");
	var pageType = body.className;
	
	form.appendChild(tilt.createTable(
	{
		Header: header,
		Content: content,
		Footer: footer,
		Shim: tilt.createDiv(" ", "Shim")
	}, "Main"));
	
	CreateSiteToolsLayout();

	switch(pageType)
	{
		case "InternetHome":
			CreateInternetHomeLayout();
			break;
		case "IntranetInner":
		case "InternetInner":
			CreateInnerLayout();
			break;
		case "IntranetHome":
			CreateIntranetHomeLayout();
			break;
		default:
			break;
	}
	
	function CreateSiteToolsLayout()
	{
		// move tools to top
		var headerItems = header && tilt.createClassNameBag(header);
		// hack the SiteSearch Submit button
		var submit = document.getElementById("searchSubmit");

		if (headerItems)
		{
			RemoveSearch();
		}
		
		if (submit)
		{
			var submitParent = submit.parentNode;
			var submitImage = document.createElement("div");
			submitImage.className = "searchSubmitImage";
			submitParent.appendChild(submitImage);
			tilt.attachEvent(submitImage, "click", function()
			{
				submit.click();
			});
		}
		
		var query = document.getElementById("searchQuery");
		if (query)
		{
			query.value = "Search";
			tilt.attachEvent(query, "focus", Query_OnFocus);
			tilt.attachEvent(query, "blur", Query_OnBlur);
			tilt.attachEvent(form, "submit", Form_OnSubmit);
			tilt.attachEvent(window, "unload", Query_OnUnload);
		}
		
		if (headerItems)
		{
			if (headerItems.SiteTools)
			{
				header.appendChild(
					tilt.createTable(
					{
						r1 : {c1 : " ", c2 : headerItems.SiteTools}
					},
					"SiteTools"));
				header.appendChild(tilt.createTable(
					{
						r1 : {c1 : headerItems.Title, c2 : headerItems.SiteSearch}
					},
					"Title"));
			}
		}
		
		function RemoveSearch()
		{
			// remove Search if other inputs are found
			var inputs = form.getElementsByTagName("input");
			var siteSearch = headerItems.SiteSearch;
			if (inputs.length > 0 && siteSearch)
			{
				var counter = 0;
				for(var i = 0; i < inputs.length; i++)
				{
					var input = inputs[i];
					if (input.type == "submit")
					{
						counter++;
					}
					if (counter > 1)
					{
						siteSearch.parentNode.removeChild(siteSearch);
						headerItems.SiteSearch = null;
						return;
					}
				}
			}
		}

		function Form_OnSubmit()
		{
			if (query.value == "Search")
			{
//				event.returnValue = false;
//				event.cancelBubble = true;
				return false;
			}
			return true;
		}

		function Query_OnFocus()
		{
			if (query.value == "Search")
			{
				query.value = "";		
			}
		}
		
		function Query_OnBlur()
		{
			if (query.value.length == 0)
			{
				query.value = "Search";
			}
		}
		
		function Query_OnUnload()
		{
			if (window.detachEvent)
			{
				query.detachEvent(Query_OnFocus);
				query.detachEvent(Query_OnBlur);
				window.detachEvent(Query_OnUnload);	
				form.detachEvent(Form_OnSubmit);
			}		
		}
	}
	
	function CreateInternetHomeLayout()
	{
		// add layout tables	
		var content = document.getElementById("Content");
		if (content)
		{
			var contentItems = tilt.createClassNameBag(content);
			
			var staticContent = contentItems.Static;
			if (staticContent) 
			{
				var staticContentItems = tilt.createClassNameBag(staticContent);
				staticContent.appendChild(tilt.createTable(
					{
						r1 : { WhyShrp : tilt.createDiv(staticContentItems.WhyShrp, "BackgroundRotator"), c2 : staticContentItems.ChooseCareer }
					},
					"StaticContent"));

				CreateProfilesRotator(staticContentItems.WhyShrp);
				CreateCareersRotator(staticContentItems.ChooseCareer);
			}
			
			var siteSections = contentItems.SiteSections;
			if (siteSections)
			{
				var dd = GetFirstElementByTagName(siteSections, "dd");
				if (dd)
				{
					var ul = GetFirstElementByTagName(dd, "ul");
					if (ul)
					{
						var siteSectionsItems = GetSiteSectionsItems(ul);
						dd.appendChild(tilt.createTable(
							{
								r1 : siteSectionsItems
							},
							"SiteSections"));
						dd.removeChild(ul);
					}
				}
			}
			
			var dynamicContent = contentItems.Dynamic;
			if (dynamicContent)
			{
				var dynamicContentItems = tilt.createClassNameBag(dynamicContent);
				dynamicContent.appendChild(tilt.createTable(
					{
						r1 : { 
							c1 : dynamicContentItems.NewsAndEvents,
							c2 : dynamicContentItems.ImageGallery,
							c3 : dynamicContentItems.QuickLinks
						}
					},
					"DynamicContent"));
			}
			
		}
		
		function GetFirstElementByTagName(node, tagName)
		{
			var elements = node.getElementsByTagName(tagName)
			return elements.length > 0 ? elements[0] : null;
		}
		
		function GetSiteSectionsItems(ul)
		{
			var result = {};
			var listItems = ul.getElementsByTagName("li");
			for(var i = 0; i < listItems.length; i++)
			{
				result["c" + i] = GetFirstElementByTagName(listItems[i], "a");						
			}
			return result;
		}
		
		function CreateProfilesRotator(node)
		{
			var count = 1;
			var timerId;
			if (node)
			{
				setBackgroundImage(node);
				timerId = window.setInterval(function()
					{
						var parentNode = node.parentNode;
						// bring image back
						setBackgroundImage(parentNode);
						setOpacity(node, 0);
						if (++count > PROFILES_MAX_COUNT)
						{
							count = 1;
						}
						setBackgroundImage(node);
						fadeIn(node, 10);
					},
					PROFILES_ROTATION_INTERVAL);
			}
			
			function setBackgroundImage(node)
			{
				node.style.backgroundImage = "url(Assets/Images/Profiles/" + count + ".jpg)";
			}
			
			function setOpacity(node, percent)
			{
				node.style.opacity = percent/100;
				node.style.filter = "alpha(opacity=" + percent + ")";
			}
			
			function fadeIn(node, increment)
			{
				var opacity = 0;
				var fadeTimerId = window.setInterval(function()
				{
					opacity += increment;
					if (opacity > 100)
					{
						window.clearInterval(fadeTimerId);						
					}
					else
					{
						setOpacity(node, opacity);
					}
				},
				PROFILES_FADE_INTERVAL);
			}
		}
		
		function CreateCareersRotator(node)
		{
			if (node)
			{
				var list = GetFirstElementByTagName(node, "UL");
				if (list)
				{
					var items = node.getElementsByTagName("LI");
					var itemCount = items.length;
					if (itemCount > 0)
					{
						var index = parseInt(Math.floor(new Date().getMinutes() * itemCount / 60));
						if (index > itemCount - 3)
						{
							for(var i = 0; i < 3; i++)
							{
								list.appendChild(items[i].cloneNode(true));
							}
							itemCount += 3;
						}
						for(var i = 0; i < itemCount; i++)
						{
							if (i < index || i > index + 2)
							{
								items[i].style.display = "none";
							}
						}
					}
				}
			}
		}
	}
	
	function CreateInnerLayout()
	{
		var content = document.getElementById("Content");
		if (content)
		{
			var contentItems = tilt.createClassNameBag(content);
			content.appendChild(tilt.createTable({
				r1: {
					LeftColumn: [contentItems.SiteContents, tilt.createDiv(tilt.createDiv(" ", "Inner"), "SiteContentsBottom")],
					c2: tilt.createTable({
						r1: {
							c1: contentItems.Body,
							c2: contentItems.ItemList
						}
					}, "Columns")
				}
			}, "Inner"));
		}
	}
	
	function CreateIntranetHomeLayout()
	{
		var content = document.getElementById("Content");
		if (content)
		{
			var contentItems = tilt.createClassNameBag(content);
			var leftColumn;
			var rightColumn;
			if (contentItems.ItemList && contentItems.ItemList.length && contentItems.ItemList.length > 0)
			{
				leftColumn = contentItems.ItemList[0];
				rightColumn = contentItems.ItemList[1];
			}
			content.appendChild(tilt.createTable({
				r1: {
					c1: contentItems.SiteContents,
					c2: tilt.createTable({
						r1: {
							c1: leftColumn,
							c2: rightColumn
						}
					}, "Portal")
				}
			}, "Inner"));
			
/*			var contentTable = new LayoutTable(2, 1, "Inner");
			contentTable.appendChild(1, 1, contentItems.SiteContents);

			var bodyTable = new LayoutTable(2, 1, "Portal");
				
			bodyTable.appendChild(1, 1, leftColumn);
			bodyTable.appendChild(2, 1, rightColumn);

			contentTable.appendChild(2, 1, bodyTable.node);

			content.appendChild(contentTable.node); */
		}
	}
	
}