window.sampleLayout = new function() {
	eval(estrada.namespace);
	var layout = null;
	tilt.attachEvent(document, 'layout', function() {
		var content = gel('content');
		var context = gel('context');
		var branding = gel('branding');
		var search = gel('search');
		var feeds = gel('feeds');
		var navigation = gel('navigation');
		var extensions = gel('extensions');
		var bricks = gel('bricks');
		
		var layout = sampleLayout.layout =
		frame('page',
			cols(
				area('branding'),
				area('tools')
			),
			area('global'),
			cols(
				frame('left',
					area('nav'),
					area('ads')
				),
				frame('right',
					area('location'), // breadcrumbs+title
					cols(
						frame('main',
							area('content'),
							cols(
								area('promo'),
								area('extra')
							)
						),
						area('related')
					)
				)
			),
			area('footer')
		).build(document.body);
				
		layout.push({
			tools: 'search'
		});
		layout.push(grab(navigation, {
			breadcrumbs: 'location',
			"children": 'nav'
		}));
		
		layout.push(grab(branding, {
			page: 'content',
			branding: 'branding'
		}));
			
		// push from grab-bucket
		layout.push(grab(content, {
			related: 'related'
		}));
		
		layout.push(grab(feeds, {
			content: 'content',
			promo: 'promo',
			extra: 'extra',
			related: 'related',
			tools: 'tools',
			ads: 'ads'
		}));
		
		layout.push(grab(content, {
			page: 'content',
			main: 'content'
		}));

		layout.push(grab(context, {
			tools: 'tools',
			global: 'global',
			footer: 'footer'
		}));
		layout.push(grab(content, {
			ads: 'left'
		}));

		// push by id
		layout.push({
			content: 'extensions'
		});
		layout.push({
			content: 'bricks'
		});
		if (bricks) {
			bricks.className = "";
		}
		if (extensions) {
			extensions.className = "";
		}
		if (search) {
			search.className = "";
		}
		$.contentQuery();
		// let's bind behaviors to elements
		layout.bind('pretty-search').to(document);
		layout.bind('isolate-submits').to(document);
		layout.bind('date-selector').to(document);
		layout.bind('category-tree').to(document);
		layout.bind('grid-visibility').to(document);
		layout.bind('first-li').to(document);
		layout.bind('tiny-mce').to(document);
		layout.bind("pretty-crumbs").to("location");
		layout.bind("url-highlight").to("global");
		layout.bind("limit-global").to("global");
		layout.bind("last-li").to("global");
		layout.bind("last-div").to("related");
				
		rem(content);
		rem(context);
		rem(feeds);
		rem(navigation);
		rem(branding);
	});

	attachEvent(document, 'layouterror', function(errors) {
		var msg = '';
		foreach(errors, function(error) {
			msg = '\n\t' + error.name + ': ' + error.message;
		});
		alert('layout errors occured:' + msg);
	});
	
	function gel(id) {
		return document.getElementById(id);
	};

	function rem(n) {
		n && n.parentNode.removeChild(n);
	};

};
////////////////////////////////////////////////////////////////////
// change the text of the first link in the breadcrumbs to 'Home'
////////////////////////////////////////////////////////////////////
estrada.behavior("pretty-crumbs").is({
	bind: function(node) {
		var oBreadcrumbs;
		if (oBreadcrumbs = first(getElements(node, "div", "breadcrumbs"))) {
			var oHome = first(oBreadcrumbs.getElementsByTagName("a"));
			if (oHome) {
				oHome.innerHTML = "Home";
				oHome.parentNode.className += " l-home-link";
			}
		}
	}
});
////////////////////////////////////////////////////////////////////
// mark the last list in an unordered list
////////////////////////////////////////////////////////////////////
estrada.behavior('last-li').is({
	bind: function(node) {
		foreach(map(node.getElementsByTagName("ul")), function(oUl) {
			if (oUl.hasChildNodes()) {
				var arrChildren = oUl.childNodes;
				var intLength = arrChildren.length;
				if (intLength > 0) {
					for (var i = (intLength-1); i >= 0; i--) {
						if (arrChildren[i].nodeName.toLowerCase() == 'li') {
							arrChildren[i].className += ' l-last';
							i = -1;
						}
					};
				}
			};		
		});
	}
});
////////////////////////////////////////////////////////////////////
// mark the current global link
////////////////////////////////////////////////////////////////////
estrada.behavior("url-highlight").is({
	bind: function(node) {
		// check current url with global links for match
		if (!foreach(map(node.getElementsByTagName("a")), function(oA) {
			if (window.location.href.indexOf(oA.href) == 0) {
				oA.parentNode.className += " l-current";
				var oNewDiv = document.createElement("div");
				oNewDiv.className = "l-current";
				oNewDiv.innerHTML = oA.innerHTML;
				oA.parentNode.insertBefore(oNewDiv, oA);
				oA.parentNode.removeChild(oA);
				return(true);
			}
		})) {
			// check global links with breadcrum for match
			var oBreadcrumbs;
			if (oBreadcrumbs = first(getElements(document, "div", "breadcrumbs"))) {
				var arrCrumbsA = oBreadcrumbs.getElementsByTagName("a");
				foreach(map(node.getElementsByTagName("a")), function(oGlobalA) {
					return(foreach(map(arrCrumbsA), function(oCrumbA) {
						if (oCrumbA.href.indexOf(oGlobalA.href) == 0) {
							oGlobalA.parentNode.className += " l-current";
							var oNewDiv = document.createElement("div");
							oNewDiv.className = "l-current";
							oNewDiv.innerHTML = oGlobalA.innerHTML;
							oGlobalA.parentNode.insertBefore(oNewDiv, oGlobalA);
							oGlobalA.parentNode.removeChild(oGlobalA);
							return(true);
						}
					}));
				});
			}
		}
	}
});
////////////////////////////////////////////////////////////////////
// limit the number of links to 6
////////////////////////////////////////////////////////////////////
estrada.behavior("limit-global").is({
	bind: function(node) {
		var oLi, arrLi = node.getElementsByTagName("li");
		while (arrLi.length > 6) {
			oLi = arrLi[arrLi.length-1];
			oLi.parentNode.removeChild(oLi);
		}
	}
});
////////////////////////////////////////////////////////////////////
// add some wrapping div's for styling purposes
////////////////////////////////////////////////////////////////////
estrada.behavior("adjust-search").is({
	bind: function(node) {
		var oQuery = document.getElementById("search-query");
		if (oQuery) {
			var oNewDiv1 = document.createElement("div");
			var oNewDiv2 = oNewDiv1.appendChild(document.createElement("div"));
			oNewDiv1.id = "l-search-query-outer";
			oNewDiv2.id = "l-search-query-inner";
			oQuery.parentNode.insertBefore(oNewDiv1, oQuery);
			oNewDiv2 = document.getElementById("l-search-query-inner");
			oNewDiv2.appendChild(oQuery);
		}
	}
});
////////////////////////////////////////////////////////////////////
// mark last feed
////////////////////////////////////////////////////////////////////
estrada.behavior('last-div').is({
	bind: function(node) {
		if (node.hasChildNodes()) {
			var arrChildren = node.childNodes;
			var intLength = arrChildren.length;
			if (intLength > 0) {
				for (var i = (intLength-1); i >= 0; i--) {
					if (arrChildren[i].nodeName.toLowerCase() == 'div') {
						arrChildren[i].className += ' l-last-div';
						i = -1;
					}
				};
			}
		};		
	}
});