﻿$.tilt.ready(function(layoutHelper) {
	var pB = $.presentationHelper.behaviors;
	var meta = function() {
      var result = {};
      $('meta').each(function() {
        var name = this.name;
        if (name != 'robots') {
          result[this.name] = this.content;
        }
      });
      return result;
    }();
    
// Build layout
		var body = document.body;
		var areas = objectize(
			[
				"titling",
				"search",
				"navigation",
				"banner-left",
				"banner",
				"content",
				"site-context",
				"extensions",
				"legacy",
				"content-feeds",
				"cascade-links",
				"related-links",
				"feed-top",
				"feeds",
				"share",
				"footer",
				"login",
				"properties"
			]
		);
		
		var content = distribute(areas["content"], 
			[
				"main",
				"right",
				"footer-section",
				"page-links",
				"content",
				"page",
				"home-links"
			]
		);

		var context = distribute(areas["site-context"], 
			[
				"task-nav"
			]
		);
	
		var content_feeds = distribute(areas["content-feeds"], 
			[
				"banner-right",
				"feed-bottom",
				"events"
			]
		);
		
		var navigation = distribute(areas["navigation"], 
			[
				"children",
				"breadcrumbs"
			]
		);
		if (content_feeds.events) {
		  $(content_feeds.events).attr('className', 'cbb');
		}
		
		var feeds = distribute(areas["feeds"], 
			[
				"right-sidebar",
				"others"
			]
		);
			
		var safari = document.childNodes && !document.all && !navigator.taintEnabled;
		if (safari) {
			document.body.className = document.body.className + " l-safari"
		}

		var oPageTitle = null;
		foreach(map(areas["titling"]), function(oChild) {
			var oClass = oChild.className;
			if (oChild.getElementsByTagName("img").Length > 0) {
				if (oClass.indexOf("Site") >= 0) {
					var oNewDiv = document.createElement("div");
					oNewDiv.className = "Site";
					oChild.parentNode.replaceChild(oNewDiv, oChild);
				}
			} else {
				if (oClass.indexOf("page") >= 0) {
					oPageTitle = oChild;
				} else if (oClass.indexOf("Site") >= 0) {
					var oImg = first(getElements(oChild, "img", "*"));
					if (oImg) {
						oImg.parentNode.removeChild(oImg);
					}
				}
			}

		});
		if (!oPageTitle && content.page) {
			oPageTitle = $(content.page).text();
		}

		// format site-search area
		if (areas.search) {
			var searchBox;
			var searchSubmit;
			var otherSearch;
			foreach(areas.search.getElementsByTagName("input"), function(input, i) {
				if (input.type == 'text') {
					searchBox = input;
				}
				else if (input.type == 'submit') {
					searchSubmit = input;
					return;
				}
			});
			
			foreach(document.getElementsByTagName("input"), function(input, i) {
				if (input.value == "Search" && input.id != "search-submit") {
					otherSearch = true;
					return;
				}
			});

			if (otherSearch) {
				areas.search.innerHTML = "";
			}
			else {
				if (searchBox) {
					var defaultValue = " Search";
					var defaultClassName = searchBox.className;
					searchBox.value = defaultValue;
					tilt.attachEvent(searchBox, "focus", function(box) {
						if (searchBox.value == defaultValue) {
							searchBox.value = "";
							searchBox.className = defaultClassName + " active";
						}
					});
					tilt.attachEvent(searchBox, "blur", function(box) {
						if (searchBox.value.length === 0) {
							searchBox.value = defaultValue;
							searchBox.className = defaultClassName;
						}
					});
					// modify search box for Safari
					if (safari) {
						searchBox.type = "search";
					}
				}
				if (searchSubmit) {
					searchSubmit.value = "Go";
					if (safari) {
						searchSubmit.type = "image";
					}
				}
				if (searchBox && searchSubmit) {
					tilt.attachEvent(searchBox, "keydown", function(searchBox, e) {
          					if (e.keyCode == 13) {
            						window.setTimeout(function() {
              							searchSubmit.click()
            						}, 0);
            						return false;
          					}
          					return true;
        				});
				}
			}
		}
		
		var isHome = false;
	
		if (meta['page-type'] && meta['page-type'] == 'home') {
			document.body.className = document.body.className + " l-home";
			isHome = true;
		}
		else {
			document.body.className = document.body.className + " l-inner";
		}
		
		if (content.page_links) {
			$(content.page_links).prepend('<h3>Quick Links</h3>');
		}
		
		// Breadcrumbs
/*
		var oHome, oHomea, oAncestors, oBreadcrumbs=null, oNav, oCurrent, oLi, oElement;
		if (oNav = areas["navigation"] && first(getElements(areas["navigation"], "ul", "*"))) {
			//document.body.className = document.body.className + " l-inner";
			if (oHome = first(getElements(oNav, "li", "*"))) {
				oHomea = first(getElements(oHome,"a","*"));
				if (!oHomea || oHomea.rel != "Home") {
					oHome = null;
				}
				if (oHome) {
					// add home link to the breadcrumb	
					oBreadcrumbs = document.createElement("ul");
					oBreadcrumbs.className = "l-breadcrumbs";
					oLi = oBreadcrumbs.appendChild(document.createElement("li"));
					oLi.className = "first";
					oLi.appendChild(oHomea);
					// add the crumb links
					foreach(getElements(oNav, "a", "crumb"), function(node) {
						oLi = oBreadcrumbs.appendChild(document.createElement("li"));
						oBreadcrumbs.appendChild(document.createTextNode("»"));
						oLi = oBreadcrumbs.appendChild(document.createElement("li"));
						oLi.appendChild(node.cloneNode(true));
					});
					// add the ancestors
					if (oAncestors = first(getElements(oNav, "ul", "Ancestors"))) {
						foreach(getElements(oAncestors, "a", "*"), function(oLink) {
							oLi = oBreadcrumbs.appendChild(document.createElement("li"));
							oBreadcrumbs.appendChild(document.createTextNode("»"));
							oLi = oBreadcrumbs.appendChild(document.createElement("li"));
							oLi.appendChild(oLink.cloneNode(true));
						});
					}
					// add a div for the current page
					if (oCurrent = first(getElements(areas["navigation"], "div", "current"))) {
						oLi = oBreadcrumbs.appendChild(document.createElement("li"));
						oBreadcrumbs.appendChild(document.createTextNode("»"));
						oLi = oBreadcrumbs.appendChild(document.createElement("li"));
						oLi.appendChild(oCurrent.cloneNode(true));
					} else	if (oCurrent = first(getElements(areas["navigation"], "a", "current"))) {
						oLi = oBreadcrumbs.appendChild(document.createElement("li"));
						oBreadcrumbs.appendChild(document.createTextNode("»"));
						oLi = oBreadcrumbs.appendChild(document.createElement("li"));
						oElement = document.createElement("div");
						oElement.innerHTML = oCurrent.innerHTML;
						oLi.appendChild(oElement);
					}
				}
			}
			var oCrumb = first(getElements(oNav, "li", "crumb"));
			if (!oCrumb) {
				oCrumb = first(getElements(oNav, "a", "current"));
				if (oCrumb) {
					oCrumb = oCrumb.parentNode;
				}
			}
			if (oCrumb) {
				var oInnerCrumb = first(getElements(oCrumb, "li", "crumb"));
				if (oInnerCrumb) {
					oCrumb = oInnerCrumb;
				}
				var oNewNav = document.createElement("ul");
				oNewNav.className = oNav.className + " l-top";
				var oParent = oNav.parentNode;
				oNewNav.appendChild(oCrumb.cloneNode(true));
//				oParent.removeChild(oNav);
//				oParent.appendChild(oNewNav);
			}
		} else {
			document.body.className = document.body.className + " l-home";
		}
*/

 
	// initiate Banner Ads
		var intBannerAdCount;
		try {
			intBannerAdCount = intBannerAdCount;
		} catch (err) {
			intBannerAdCount = 0;
		}

		// now build the layout for the Home page
		if (isHome) {
		body.appendChild(tilt.createTable({
			"l-main": {
				"l-main" : [ tilt.createTable({
					"l-header": {
						"header-cell": [
							tilt.createTable({
								"l-header": {
								"l-task-nav": context.task_nav ? context.task_nav : null,
								"l-search": areas["search"]
								}
							}, "l-header")
						]
					},
				"l-breadcrumbs": navigation.breadcrumbs ? [ navigation.breadcrumbs ] : null,
				"l-main-content": tilt.createTable({
					"l-banner-row": {
						"l-banner-left": (areas["banner-left"] ? areas["banner-left"] : null),
						"l-banner": (areas.banner ? areas.banner : null),
						"l-banner-right": (content_feeds.banner_right ? content_feeds.banner_right : null)
					},
					"l-main-content": {
						"l-left": [
							((first(navigation.children) || content_feeds.events) ?
								tilt.createTable({
									"l-navigation": {
										"l-navigation": (navigation.children) ? tilt.createDiv([ navigation.children ], "l-navigation") : null
									},
									"l-home-feeds": {
									"l-home-feeds": (content_feeds.events) ? tilt.createDiv([ content_feeds.events ], "l-home-feeds") : null
									}
								}) : null),
							/* this inserts a div.l-shim if there is no other content for l-left */
							((first(areas.navigation) || content_feeds.events)
								? null
								: function() {
									var oShim = document.createElement("div");
									oShim.className = "l-shim";
									return oShim;
								}()
							)
						],
						"l-content": [
							((content.main || content.content || areas.share || content.footer_section ) ?
								tilt.createTable({
									"l-home-content": {
										"l-home-content": (content.main || content.content || areas.share) ? tilt.createDiv([ content.main, content.content, areas.share], "l-home-content") : null
									},
									"l-footer-section": {
										"l-footer-section": (content.footer_section) ? tilt.createDiv([ content.footer_section  ], "l-footer-section") : null
									}
								}) : null),
								
							/* this inserts a div.l-shim if there is no other content for l-content */
							((((content.main || areas.share || areas.extensions) && isHome) || content.footer_section )
								? null
								: function() {
									var oShim = document.createElement("div");
									oShim.className = "l-shim";
									return oShim;
								}()
							),
							((first(areas["feed-top"]) || areas.content || areas.extensions || content_feeds.feed_bottom ) ?
								tilt.createDiv(tilt.createTable({
									"l-feed-top": {
										"l-feed-top": (areas["feed-top"]) ? tilt.createDiv([ areas["feed-top"] ], "l-feed-top") : null
									},
									"l-real-content": {
										"l-real-content": (areas.content || areas.extensions) ? tilt.createDiv([ areas.content, areas.extensions ], "l-real-content") : null
									},
									"l-feed-bottom": {
										"l-feed-bottom": (content_feeds.feed_bottom) ? tilt.createDiv([ content_feeds.feed_bottom ], "l-feed-bottom") : null
									}
								}), "l-content-no-wrapper") : null),

							/* this inserts a div.l-shim if there is no other content for l-content */
							((first(areas["feed-top"]) || areas.content || areas.extensions || content_feeds.feed_bottom )
								? null
								: function() {
									var oShim = document.createElement("div");
									oShim.className = "l-shim";
									return oShim;
								}()
							)
						],
						"l-right": [
							((first(content.home_links) || content.page_links || areas["cascade-links"] || areas["related-links"] || content.right || feeds.others) ?
								tilt.createTable({
									"l-home-links": {
										"l-home-links": (content.home_links ) ? tilt.createDiv([ content.home_links ], "l-home-links") : null
									},
									"l-page-links": {
										"l-page-links": (content.page_links ) ? tilt.createDiv([ content.page_links ], "l-page-links") : null
									},
									"l-cascade-links": {
										"l-cascade-links": (areas["cascade-links"] ) ? tilt.createDiv([ areas["cascade-links"] ], "l-cascade-links") : null
									},
									"l-related-links": {
										"l-related-links": (areas["related-links"] ) ? tilt.createDiv([ areas["related-links"] ], "l-related-links") : null
									},
									"l-content-right": {
										"l-content-right": (content.right) ? tilt.createDiv([ content.right  ], "l-content-right") : null
									}
								}) : null),
							/* this inserts a div.l-shim if there is no other content for l-right */
							((first(content.home_links) || content.page_links || areas["cascade-links"] || areas["related-links"] || content.right || feeds.others)
								? null
								: function() {
									var oShim = document.createElement("div");
									oShim.className = "l-shim";
									return oShim;
								}()
							)
						]
					}
				}, "l-main-content"),
					"l-footer": (areas.footer  ? [ areas.footer ] : null)
				}, "l-primary")
				]
			}
		} , "l-main"));
		}
		else
		{
		// layout for inner pages
		body.appendChild(tilt.createTable({
			"l-main": {
				"l-main" : [ tilt.createTable({
					"l-header": {
						"header-cell": [
							tilt.createTable({
								"l-header": {
								"l-task-nav": context.task_nav ? context.task_nav : null,
								"l-search": areas["search"]
								}
							}, "l-header")
						]
					},
				"l-breadcrumbs": navigation.breadcrumbs ? [ navigation.breadcrumbs ] : null,
				"l-main-content": tilt.createTable({
					"l-banner-row": {
						"l-banner-left": (areas["banner-left"] ? areas["banner-left"] : null),
						"l-banner": (areas.banner ? areas.banner : null),
						"l-banner-right": (content_feeds.banner_right ? content_feeds.banner_right : null)
					},
					"l-main-content": {
						"l-left": [
							((first(areas.navigation) || content_feeds.events) ?
								tilt.createTable({
									"l-navigation": {
										"l-navigation": (areas.navigation) ? tilt.createDiv([ areas.navigation ], "l-navigation") : null
									},
									"l-home-feeds": {
									"l-home-feeds": (content_feeds.events) ? tilt.createDiv([ content_feeds.events ], "l-home-feeds") : null
									}
								}) : null),
							/* this inserts a div.l-shim if there is no other content for l-left */
							((first(areas.navigation) || content_feeds.events)
								? null
								: function() {
									var oShim = document.createElement("div");
									oShim.className = "l-shim";
									return oShim;
								}()
							)
						],
						"l-content": [
							(((content.main && isHome) || areas.footer_section ) ?
								tilt.createTable({
									"l-home-content": {
										"l-home-content": (content.main) ? tilt.createDiv([ content.main  ], "l-home-content") : null
									},
									"l-footer-section": {
										"l-footer-section": (content.footer_section ) ? tilt.createDiv([ content.footer_section  ], "l-footer-section") : null
									}
								}) : null),
								
							/* this inserts a div.l-shim if there is no other content for l-content */
							((content.main || content.footer_section )
								? null
								: function() {
									var oShim = document.createElement("div");
									oShim.className = "l-shim";
									return oShim;
								}()
							),
							((first(areas["feed-top"]) || areas.content || areas.share || areas.extensions||  areas.legacy || content_feeds.feed_bottom ) ?
								tilt.createDiv(tilt.createTable({
									"l-feed-top": {
										"l-feed-top": (areas["feed-top"]) ? tilt.createDiv([ areas["feed-top"] ], "l-feed-top") : null
									},
									"l-real-content": {
										"l-real-content": (areas.content || areas.share || areas.legacy || areas.extensions) ? tilt.createDiv([ areas.content, areas.share, areas.legacy, areas.extensions ], "l-real-content") : null
									},
									"l-feed-bottom": {
										"l-feed-bottom": (content_feeds.feed_bottom) ? tilt.createDiv([ content_feeds.feed_bottom ], "l-feed-bottom") : null
									}
								}), "l-content-wrapper") : null),

							/* this inserts a div.l-shim if there is no other content for l-content */
							((first(areas["feed-top"]) || areas.content || areas.share || areas.extensions || areas.legacy || content_feeds.feed_bottom )
								? null
								: function() {
									var oShim = document.createElement("div");
									oShim.className = "l-shim";
									return oShim;
								}()
							)
						],
						"l-right": [
							((first(areas["home-links"]) || content.page_links || areas["cascade-links"] || areas["related-links"] || content.right || feeds.others) ?
								tilt.createTable({
									"l-home-links": {
										"l-home-links": (areas["home-links"] ) ? tilt.createDiv([ areas["home-links"] ], "l-home-links") : null
									},
									"l-page-links": {
										"l-page-links": (content.page_links ) ? tilt.createDiv([ content.page_links ], "l-page-links") : null
									},
									"l-cascade-links": {
										"l-cascade-links": (areas["cascade-links"] ) ? tilt.createDiv([ areas["cascade-links"] ], "l-cascade-links") : null
									},
									"l-related-links": {
										"l-related-links": (areas["related-links"] ) ? tilt.createDiv([ areas["related-links"] ], "l-related-links") : null
									},
									"l-content-right": {
										"l-content-right": (content.right) ? tilt.createDiv([ content.right  ], "l-content-right") : null
									}
								}) : null),
							/* this inserts a div.l-shim if there is no other content for l-right */
							((first(areas["home-links"]) || content.page_links || areas["cascade-links"] || areas["related-links"] || content.right || feeds.others)
								? null
								: function() {
									var oShim = document.createElement("div");
									oShim.className = "l-shim";
									return oShim;
								}()
							)
						]
					}
				}, "l-main-content"),
					"l-footer": (areas.footer  ? [ areas.footer ] : null)
				}, "l-primary")
				]
			}
		} , "l-main"));

		$('textarea.rich-text').tinyMceExt();

		// display Banner Ads
		if (intBannerAdCount > 0) {
			if (oBannerDiv) {
				oBannerDiv.className = oBannerDiv.className + " banner-rotator";
				rotategraphics(oBannerDiv, intBannerAdCount);
			}	
		}

		if (areas.feeds && areas.feeds.parentNode) {
			areas.feeds.parentNode.removeChild(areas.feeds);
		}
		
		// mark first li as "first"
		foreach(body.getElementsByTagName("ul"), function(ul) {
			var items = ul.getElementsByTagName("li");
			if (items.length > 0) {
				var li = items[0];
				li.className = li.className + " first";
			}
		});
/*
		// include script for datetime picker, if needed
		if (filter(document.getElementsByTagName("input"), function(input) {
			return input.className.indexOf("date") >= 0;
		}).length > 0) {
			tilt.addScript("datetime.js");	
		}
		if (areas.content) {
			if (foreach(areas.content.getElementsByTagName("div"), function(div) {
				if (div.className == "visibility") {
					div.id = "grid-visibility";
					return true;
				}
			})) {
				tilt.addScript("grid.js");
			}
		}
		// include script for category-editor, if needed
		if (filter(document.getElementsByTagName("div"), function(div) {
			return div.className.indexOf("category-editor") >= 0;
		}).length > 0) {
			tilt.addScript("dynamictree.js");	
		}
*/

	}
	pB.googleAnalytics();
	layoutHelper.complete(function() {

	});	
	
	function distribute(col, classNames, defaultClassName) {
		var result = {};
		foreach(col, function(node) {
			push(getClassName());
			
			function push(className) {
				className = className.replace('-', '_');
				var items = result[className];
				if (!items) {
					items = [];
					result[className] = items;
				}
				items.push(node);
			}
			
			function getClassName() {
				var result = defaultClassName;
				foreach(classNames, function(className) {
					if (foreach(node.className.split(" "), function(nodeClassName) {
						return nodeClassName == className;
					})) {
						result = className;
						return true;
					}
				});
				return result;
			}

		});
		return result;
	}
	
	function htabulate(o) {
		var cells = {};
		foreach(o.getElementsByTagName("li"), function(li, i) {
			cells["l-cell-" + i] = first(li);
		});
		if (cells) {
			var firstChild = o.firstChild;
			var child = o.firstChild;
			while(child) {
				o.removeChild(child);
				child = o.firstChild;
			}
			o.appendChild(tilt.createTable({ "l-htable" : cells }, "l-htable"), o.firstChild);
		}
		return o;
	}
	
	function getElements(oElm, strTagName, strClassName)
	{
		var oElement;
		var arrReturnElements = [ ];
		var arrElements = (strTagName == "*" && oElm.all) ? oElm.all : oElm.getElementsByTagName(strTagName);
		for(var i=0;i<arrElements.length;i++) {
			oElement = arrElements[i];
			if((oElement.className && (oElement.className.indexOf(strClassName) >= 0)) || strClassName == "*") {
				arrReturnElements.push(oElement);
			}   
		}
		return (arrReturnElements)
	}

	function objectize(arrayOfIds)	{
		var result = {};
		foreach(arrayOfIds, function(item) {
			var o = document.getElementById(item);
			if (o) {
				result[item] = o;
			}
			else {
				result.complete = true;
			}
		})
		result.complete = !result.complete;
		result.contains = function(matches) {
			return foreach(matches, function(match) {
				if (result[match]) {
					return true;
				}
			});
		}
		return result;
	}
});

