$.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;
    }();
    
	var body = document.body;
	if (body) {

		var areas = objectize(
			[
				"titling",
				"navigation",
				"content",
				"extensions",
				"feeds",
				"menu",
				"drop-menu",
				"search",
				"legacy",
				"tools",
				"contact-info",
				"link-back",
				"drop-links",
				"share",
				"footer",
				"left-border",
				"spacer"
			]
		);
		
		var content = distribute(areas["content"], 
			[
				"main",
				"lead",
				"page-links",
				"extended-page",
				"content",
				"page"
			]
		);

		if (content.page_links) {
			$(content.page_links).prepend('<h3>Quick Links</h4>');
		}

		
		var feeds = distribute(areas.feeds, 
			[
				"news",
				"events",
				"announcements",
				"feed-left",
				"feed-right",
				"others"
			]
		);
		
		var navigation = distribute(areas.navigation, 
			[
				"children",
				"breadcrumbs"
			]
		);
	
		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;
        				});
				}
			}
		}

		// Add formatting to breadcrumbs
		$('div.breadcrumbs li').each(function(idx) {
		  if (idx > 0) {
		    $(this).prepend('<span>' +String.fromCharCode(187) + '</span>');
		  }
		});

    var div = $(document.body).div().addClass('l-main-layout');
		// now build the layout
		//body.appendChild(tilt.createTable({
		div.append(tilt.createTable({
			"l-main": {
				"l-main" : [ tilt.createTable({
					"l-header": {
						"header-cell": [
							tilt.createTable({
								"l-header": {
									"l-drop-menu": (first(areas["drop-menu"])) ? areas["drop-menu"] : null
								}
							}, "l-header")
						]
					},
					"l-main-content": tilt.createTable({
						"l-top-border": {
							"l-top-left": tilt.createDiv([
								], "l-top-left"),
							"l-top-col2": tilt.createDiv([
								], "l-top-col2"),
							"l-top-col3": tilt.createDiv([
									tilt.createTable({
										"l-breadcrumbs": {
											"l-breadcrumbs": navigation.breadcrumbs ? [ navigation.breadcrumbs ] : null
										}
									}, "l-breadcrumbs")
								], "l-top-col3"),
							"l-top-right": tilt.createDiv([
								], "l-top-right")
						},
						"l-main-content": {
							"l-left-border": {
								"l-left-spacer": (first(areas.spacer)) ? areas.spacer : null
							},
							"l-left": [
								((first(areas.titling) || navigation.children || areas.search || areas["link-back"] || content.page_links || areas.tools) ?
									tilt.createDiv(tilt.createTable({
										"l-left-logo": {
											"l-left-logo": (first(areas.titling)) ? tilt.createDiv([ areas.titling ], "l-left-logo") : null
										},
										"l-left-nav": {
											"l-left-nav": (navigation.children) ? tilt.createDiv([ navigation.children ], "l-left-nav") : null
										},
										"l-search": areas["search"],
										"l-link-back": {
											"l-link-back": (areas["link-back"]) ? tilt.createDiv([ areas["link-back"] ], "l-link-back") : null
										},
										"l-quick-links": {
											"l-quick-links": (content.page_links) ? tilt.createDiv([ content.page_links ], "l-quick-links") : null
										},
										"l-drop-links": {
											"l-drop-links": (areas["drop-links"]) ? tilt.createDiv([ areas["drop-links"] ], "l-drop-links") : null
										},
										"l-tool": areas["tools"]
									}), "l-left") : null), 
								/* this inserts a div.l-shim if there is no other content for l-content */
								((first(areas.titling) || navigation.children || areas.search || areas["link-back"] || content.page_links || areas.tools)
									? null
									: function() {
										var oShim = document.createElement("div");
										oShim.className = "l-shim";
										return oShim;
									}()
								)
							],
							"l-content": [
								((content.page_links || content.lead || content.main || content.content || content.extended_page || areas.legacy || areas.extensions || areas.share || areas.feeds || feeds.news || feeds.events || feeds.announcements || feeds.feed_left || feeds.feed_right) ?
									tilt.createTable({
										"l-page-title": {
											"l-page-title": oPageTitle
										},
										"l-lead": {
											"l-lead": (content.lead) ? tilt.createDiv([ content.lead ], "l-lead") : null
										},
										"l-real-content": {
											"l-feed-content": (content.main || content.content || areas.legacy) ? tilt.createDiv([ content.main, content.content, areas.legacy ], "l-feed-content") : null,
											// feed-content includes lead and content containers
											"l-page-links": (content.page_links) ? tilt.createDiv([ content.page_links ], "l-page-links") : null
										},
										"l-extended-page": {
											"l-extended-page": (content.extended_page) ? tilt.createDiv([ content.extended_page ], "l-extended-page") : null
										},
										"l-extensions": {
											"l-extensions": (areas.extensions) ? tilt.createDiv([ areas.extensions ], "l-extensions") : null
										},
										"l-feeds": [
											((areas.feeds || feeds.news || feeds.events || feeds.announcements || feeds.feed_left || feeds.feed_right) ?
											tilt.createDiv(tilt.createTable({
												"l-news": {
													"l-news": (feeds.news) ? tilt.createDiv([ feeds.news ], "l-news") : null
												},
												"l-events": {
													"l-events": (feeds.events) ? tilt.createDiv([ feeds.events ], "l-events") : null
												},
//												"l-announcements": {
//													"l-announcements": (feeds.announcements) ? tilt.createDiv[ feeds.announcements ], "l-announcements") : null
//												},
												"l-feed-left": {
													"l-feed-left": (feeds.feed_left) ? [ feeds.feed_left ] : null
												},
												"l-feed-right": {
													"l-feed-right": (feeds.feed_right) ? [ feeds.feed_right ] : null
												}
											}), "l-feeds") : null),
											/* this inserts a div.l-shim if there is no other content for l-content */
											((areas.feeds || feeds.news || feeds.events || feeds.announcements || feeds.feed_left || feeds.feed_right)
												? null
												: function() {
													var oShim = document.createElement("div");
													oShim.className = "l-shim";
													return oShim;
												}()
											),
										],
										"l-share": {
											"l-share": (areas.share) ? tilt.createDiv([ areas.share ], "l-share") : null
										}
									}) : null), 
								/* this inserts a div.l-shim if there is no other content for l-content */
								((content.page_links || content.lead || content.main || areas.legacy || content.extended_page || areas.extensions || areas.share || areas.feeds || feeds.news || feeds.events || feeds.announcements || feeds.feed_left || feeds.feed_right)
									? null
									: function() {
										var oShim = document.createElement("div");
										oShim.className = "l-shim";
										return oShim;
									}()
								),
							],
						"l-right-border": tilt.createDiv([
							], "right-border")
						},
						"l-bottom-border": {
							"l-bottom-left": tilt.createDiv([
								], "l-bottom-left"),
							"l-bottom-col2": tilt.createDiv([
								], "l-bottom-col2"),
							"l-bottom-col3": tilt.createDiv([
									tilt.createTable({
										"l-contact-info": {
											"l-contact-info": (areas["contact-info"]) ? tilt.createDiv([ areas["contact-info"] ], "l-contact-info") : null
										}
									}, "l-contact-info")
								], "l-bottom-col3"),
							"l-bottom-right": tilt.createDiv([
								], "l-bottom-right")
						}
					}, "l-main-content"),
					"l-footer": (areas.footer) ? [ areas.footer ] : null
				}, "l-primary")
				]
			}
		} , "l-main"));
		
		//$.contentQuery();
		$('textarea.rich-text').tinyMceExt();

		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 (content.main) {
			
			if (foreach(content.main.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() {
		//rem(content);
	});
	function distribute(col, classNames, defaultClassName) {
		var result = {};
		foreach(col, function(node) {
			push(getClassName());
			
			function push(className) {
				if (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;
	}
});
