﻿
window.commonLayout = new function() {
	
	eval(estrada.namespace);

	//estrada.layoutView.set(true);
	
	attachEvent(document, "layout", function() {

		var layout = frame("page",
			cols(
				area("logo"),
				frame("header",
					area("search"),
					area("tools")
				)
			),
			layoutSpecific.flash,
			frame("globalNavigation",
				area("globalNavAlignment")
			),
			layoutSpecific.layout,
			area("footer")
		).build(document.getElementById("form"));		

		if (layoutSpecific.contentAreas) {
			layout.push(layoutSpecific.contentAreas);
		}

		layout.push(grab(document.getElementById("context"), {
			"site-title": "logo",
			footer: "footer"
		}));
		
		layout.push(grab(document.getElementById("feeds"), {
			tools: "tools",
			sections: "globalNavAlignment"
		}));
		
		layout.push({
			search: "search"
		});
		
		foreach(layoutSpecific.toBind, function(arr) {
			layout.bind(arr[0]).to(arr[1]);
		});
		
		var pageclassifier = document.getElementById("pageclassifier");
		if (pageclassifier) {
			layout.bind("pageclassifier").to(pageclassifier);
		}
		
		var oSections = commonLayout.getElements(document, "div", "sections");
		if (oSections) {
			foreach(map(oSections), function(oSection) {
				layout.bind("section-toggler").to(oSection);
			});
		}
		
		foreach(document.getElementsByTagName("ul"), function(ul) {
			foreach(ul.getElementsByTagName("li"), function(li) {
				li.className += " l-first";
				return true;
			});
		});
		
		var searchQuery = document.getElementById("search-query");
		if (searchQuery) {
			var defaultText = "Search";
			var blurClassName = "text l-blur";
			searchQuery.value = defaultText;
			searchQuery.className = blurClassName;
			attachEvent(searchQuery, "focus", function() {
				if (searchQuery.value == defaultText) {
					searchQuery.value = "";
					searchQuery.className = "text";
				}
			});
			attachEvent(searchQuery, "blur", function() {
				if (searchQuery.value.length == 0) {
					searchQuery.value = defaultText;
					searchQuery.className = blurClassName;
				}
			});
			attachEvent(searchQuery, "keydown", function(searchQuery, e) {
                if (e.keyCode == 13) {
                    window.setTimeout("document.getElementById(\"search-submit\").click()", 0);
                    return false;
                }
                return true;
			});
		}
		
		var searchSubmit = document.getElementById("search-submit");
		if (searchSubmit) {
			var parent = searchSubmit.parentNode;
			var div = parent.appendChild(document.createElement("div"));
			div.id = "l-search-submit";
			attachEvent(div, "click", function() {
				document.getElementById("search-submit").click();
			});
		}
		
		////////////////////////////////////////////////////////////////////
		// This code sets all text input elements in an ancestor element
		// with a single submit input to post when enter is hit while in the
		// text field
		////////////////////////////////////////////////////////////////////    
	    var oInputSubmits = getElementsByType(document, "input", "submit");
	    var iIdx = 0;
	    foreach (map(oInputSubmits), function(oInputSubmit) {
		    var oAncestorNode = null;
		    oCurrentNode = oInputSubmit.parentNode;
		    while (oAncestorNode == null && oCurrentNode != document) {
			    var oInputTextFields = getElementsByType(oCurrentNode, "input", "text");
			    if (oInputTextFields && oInputTextFields.length > 0) {
				    oAncestorNode = oCurrentNode;
			    } else {
				    oCurrentNode = oCurrentNode.parentNode;
			    }
		    }
		    if (oAncestorNode) {
			    var oSubmitCheck = getElementsByType(oAncestorNode, "input", "submit");
			    if (oSubmitCheck && oSubmitCheck.length == 1) {
				    if (oInputSubmit.id == "") {
					    oInputSubmit.id = oInputSubmit.name;
				    }
				    foreach (map(oAncestorNode.getElementsByTagName("input")), function (oInput) {
					    if (oInput.type == "text" || oInput.type == "password") {
						    oInput.setAttribute("submitId", oInputSubmit.id);
				            tilt.attachEvent(oInput, "keydown", function(oNode, oE) {
				                if (oE.keyCode == 13) {
					                var oSubmitId = oNode.getAttribute("submitId");
                   					window.setTimeout("var oSubmit = document.getElementById(\"" + 

oSubmitId + "\");oSubmit.focus();oSubmit.click()", 0);
				                    return false;
				                }
				                return true;
				            });
					    }
				    });
                    iIdx++;
			    }
		    }
	    });
	    
	    commonLayout.setExternalLinks();
	    
		///////////////////////////////////////////////////////////////////////
		// 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");	
		}
		
		///////////////////////////////////////////////////////////////////////
		// include script for grid, if needed
		///////////////////////////////////////////////////////////////////////
		var oContent = document.getElementById("l-content");
		if (oContent) {
			if (foreach(oContent.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");	
		}
		
		// replace images with flash by convention
		flashManager.flashReplacement();
	});
	
	attachEvent(document, "layouterror", function(errors) {
		var msg = "";
		foreach(errors, function(error) {
			msg = "\n\t" + error.name + ": " + error.message;
		});
		alert("errors occured:" + msg);
	});
	
	function getElementsByType(oElm, strTagName, strTypeName) {
		var oElement;
		var arrReturnElements = [ ];
		if (oElm) {
			var arrElements = (strTagName == "*" && oElm.all) ? oElm.all : 

oElm.getElementsByTagName(strTagName);
			for(var i=0;i<arrElements.length;i++) {
				oElement = arrElements[i];
				if((oElement.type && (oElement.type == strTypeName)) || (oElement.type && strTypeName 

== "*")) {
					arrReturnElements.push(oElement);
				}   
			}
		}
		return (arrReturnElements)
	}
	
	this.getFirstChild = function(node) {
		var c = node.firstChild;
		while (c && (c.nodeType != 1)) {
			c = c.nextSibling;
		}
		return c;
	}
	
	this.getElements = function(oElm, strTagName, strClassName) {
		return $getElements(oElm, strTagName, strClassName, false);
	}
	
	this.getFirstElement = function(oElm, strTagName, strClassName) {
		var items = $getElements(oElm, strTagName, strClassName, true);
		return (items && (items.length == 1)) ? items[0] : null;
	}
	
	function $getElements(oElm, strTagName, strClassName, firstOnly) {
		var oElement;
		var arrReturnElements = [ ];
		var arrClassNames = strClassName.split(" ");
		if (oElm) {
			var arrElements = (strTagName == "*" && oElm.all) ? oElm.all : 

			oElm.getElementsByTagName(strTagName);
			for(var i=0;i<arrElements.length;i++) {
				oElement = arrElements[i];
				if (oElement.className) {
					var oClasses = oElement.className.split(" ");
					var bolFound = false;
					for (var j = 0; j < oClasses.length; j++) {
						for (var k = 0; k < arrClassNames.length; k++) {
							if (oClasses[j] == arrClassNames[k]) {
								bolFound = true;
								break;
							} 
						}
						if (bolFound) {
							break;
						}
					}
					if (!bolFound) {
						if (strClassName == "*") {
							bolFound = true;
						}
					}
				} else {
					if (strClassName == "*") {
						bolFound = true;
					}
				}
				if (bolFound) {
					arrReturnElements.push(oElement);
					if ((arrReturnElements.count == 1) && firstOnly) {
						break;
					}
				}
			}
		}
		return (arrReturnElements)
	}
	
	this.queryString = new function() {

		if (window.location.search) {
			var list = window.location.search.split("?")[1].split("&");
			for(var i = 0; i < list.length; i ++)
			{
				var pair = list[i].split("=");
				this[pair[0].toLowerCase()] = pair[1];
			}
		}
	}
	
	this.setExternalLinks = function() {
		// open all external links in a new window
		window.status = "Making external links open in new window...";
		var anchors = document.getElementsByTagName("A");
		var host = location.protocol + "//" + location.host;
		var href;
		for (var i = 0; i < anchors.length; i ++) {
			href = anchors[i].getAttribute("href");
			if (href) {
				if ((href.indexOf("/") != 0) &&
					((href.indexOf("http:") == 0) && (href.indexOf(host) != 0)) &&
					(href.indexOf("estrada3.dll") < 0) &&
					(href.indexOf("estrada3-2.dll") < 0) &&
					(href.indexOf("javascript") < 0))
				{
					anchors[i].setAttribute("target", "_blank");
				}
			}
		}
		window.status = window.defaultStatus;
	}
		
	estrada.behavior("section-toggler").is({
		bind: function(node) {
			var oLinks = commonLayout.getElements(node, "div", "links");
			if (oLinks.length > 0) {
				oLinks[0].className += " l-hide";
				var items = oLinks[0].getElementsByTagName("li");
				if (items.length > 0) {
					this.attachEvent(node, "mouseover", function(node) {
						var n = estrada.scope.retrieve(arguments).getElement();
						toggleSection(n);
						return false;				
					});
					this.attachEvent(node, "mouseout", function(node) {
						var n = estrada.scope.retrieve(arguments).getElement();
						toggleSection(n);
						return false;
					});

				}
			}	
			
			function toggleSection(node) {
				if (node) {
					var oLinks = commonLayout.getElements(node, "div", "links");
					if (oLinks.length > 0) {
						var link = oLinks[0];
						if (link.className.indexOf("l-show") >= 0) {
							link.className = link.className.replace("l-show", "l-hide");

						} 
						else  {
							link.className = link.className.replace("l-hide", "l-show");
						} 
					}
				}
			}
		}
	})
	
	estrada.behavior("menu-toggler").is({
		bind: function(node) {
			node.className = "l-closed";
			this.attachEvent(document.body, "click", function() {
				var node = estrada.scope.retrieve(arguments).getElement();
				if (node.className == "l-open") {
					node.className = "l-closed";
				}
				return true;				
			});
			this.attachEvent(node, "click", function() {
				var node = estrada.scope.retrieve(arguments).getElement();
				if (node.className != "l-open") {
					node.className =  "l-open";
					return false; 
				}
				return true;
			});
		}
	});

	/*
	_uacct = "UA-1920988-2";
   	urchinTracker();
	*/	
	
	estrada.behavior("print").is({
		bind: function(node) {
			this.attachEvent(node, "click", function() {
				window.print();
				return true;
			});
		}
	});
	
	estrada.behavior("pageclassifier").is({
		bind: function(node) {
			var properties = document.getElementById("properties");
			if (properties) {
				var link = commonLayout.getFirstElement(node, "a", "classify");
				if (link) {
					estrada.insertAfter(link, commonLayout.getFirstChild(properties));
				}
			}
		}
	});
	
	this.ImageGalleryFeedHandler = function(contentAreaArray) {
		foreach(contentAreaArray,  function(contentArea) {
			foreach(commonLayout.getElements(contentArea, "ul", "documents"), function(ul) {
				foreach(ul.getElementsByTagName("li"), function(li) {
					var imagelink;
					var videolink;
					var fileext;
					foreach(li, function(el) {
						switch(el.className) {
							case "imagetitle":
								imagelink = el;
								break;
							case "itemtitle":
								videolink = el;
								break;
							case "filename":
								var filename = estrada.getInnerText(el);
								if (filename && filename.length > 0) {
									fileparts = filename.split(".");
									if (fileparts.length == 2) {
										fileext = fileparts[1];
									}
								}
								el.parentNode.removeChild(el);
								break;
						}		
					});
					if (imagelink) {
						var picture = document.createElement("img");
						picture.src = imagelink.href.replace(/\/$/, "." + fileext);
						if (videolink) {
							var text = videolink.firstChild;
							videolink.insertBefore(picture, text);
							if (text) {
								var div = document.createElement("div");
								div.className = "text";
								div.appendChild(text);
								videolink.appendChild(div);
							}
							imagelink.parentNode.removeChild(imagelink);
						}
					}
				});
			});
		});
	}
}

window.layoutManager = new function() {
	eval(estrada.namespace);
	
	this.addContentArea = function(bucket, bucketId, contentId) {
		var contentArea = document.getElementById(contentId);
		if (!bucket) {
			bucket = [];
		}
		if (contentArea) {
			if (!bucket[bucketId]) {
				bucket[bucketId] = [];
			}
			bucket[bucketId].push(contentArea);
		}
	}
	
	this.grabMore = function(bucketHolder, contentId, buckets) {
		var newbuckets = grab(document.getElementById(contentId), buckets);
		for(var p in newbuckets) {
			bucketHolder[p] = newbuckets[p];
		}
	}
}