/**
 * JavaScript by Jeffrey Ouma.
 * Copyright© 2008 artkenya.net Ltd.
 * All rights reserved.
 *
 * Script name: main.js
 * Purpose: Defines namespaces and common functions that are executed by every page.
 */
Site = {}; // Namespace: Defines functions that are specific to this website, but used widely.
Site.main = {};
Site.main.collapsible = {
	Init:function() {
		try {
			// Get the heights of all the open collapsibles and save them as attributes "h"
			var elm, defaultElm, elmArray = Dom.getElementsByClassName("collapsible-bd", "div", "maincontent");
			for (var i = elmArray.length - 1; i >= 0; i--) {
				var dim = BLEEZ.util.Dimensions(elmArray[i]);
				elmArray[i].setAttribute("h", dim["height"]);
				var parentElm = Dom.getAncestorByClassName(elmArray[i], "collapsible");
				if(!Dom.hasClass(parentElm, "default")) {
					Site.main.collapsible.Hide(elmArray[i]);
				} else {
					Site.main.collapsible.defaultElm = parentElm;
				}
			};
			elmArray = Dom.getElementsByClassName("collapsible-link", "a", "maincontent");
			Event.on(elmArray, "click", function() {
				try {
					var parentElm = Dom.getAncestorByClassName(this, "collapsible");
					var elmArray = Dom.getElementsByClassName("collapsible-bd", "div", parentElm);
					if (elmArray.length) {
						if(Dom.hasClass(parentElm, "open")) {
							Site.main.collapsible.Hide(elmArray[0]);
						} else {
							Site.main.collapsible.Show(elmArray[0], parentElm);
						}
					}
				} catch (e) {
					errorHandler(e);
				}
			});
		} catch (e) {
			errorHandler(e);
		}
	},
	Hide: function(elm) {
		try {
			var parentElm, anim;
			if (Dom.hasClass(elm, "collapsible") && elm.tagName.toLowerCase() == "div") {
				parentElm = elm;
				elm = Dom.getElementsByClassName("collapsible-bd", "div", parentElm);
				if (elm.length) {
					elm = elm[0];
				} else { return false; }
			} else if (Dom.hasClass(elm, "collapsible-bd") && elm.tagName.toLowerCase() == "div") {
				parentElm = Dom.getAncestorByClassName(elm, "collapsible");
			} else { return false; }
			anim = new YAHOO.util.Anim(elm, {
				opacity: {
					to: 0
				},
				height: {
					to: 0,
					unit: "px"
				}
			}, 0.8, YAHOO.util.Easing.easeOut);
			anim.onComplete.subscribe(function() {
				try {
					Dom.removeClass(parentElm, "open");
				} catch (e) {
					errorHandler(e);
				}
			});
			anim.animate();
		} catch (e) {
			errorHandler(e);
		}
	},
	Show: function(elm, parentElm) {
		try {
			if (!Dom.hasClass(parentElm, "open")) {
				var h = parseInt(elm.getAttribute("h"));
				var anim = new YAHOO.util.Anim(elm, {
					opacity: {
						to: 1
					},
					height: {
						to: h,
						unit: "px"
					}
				}, 1, YAHOO.util.Easing.backOut);
				Dom.setStyle(elm, "height", "0px");
				Dom.setStyle(elm, "opacity", "0");
				Dom.addClass(parentElm, "open");
				anim.animate();
			}
		} catch (e) {
			errorHandler(e);
		}
	}
};
Site.main.image = {
	Init: function() {
		try {
			Site.main.image.panel = new YAHOO.widget.Panel("clicktoenlarge", {
				autofillheight: "body",
				fixedcenter: true,
				constraintoviewport: true,
				underlay: "shadow",
				close: true,
				visible: false,
				modal: true,
				iframe: false,
				draggable: false,
				effect: {
					effect: YAHOO.widget.ContainerEffect.FADE,
					duration: 0.25
				}
			});
			Site.main.image.panel.hideEvent.subscribe(Site.main.image.panel.removeMask);
			Site.main.image.panel.render();
			var elmArray = Dom.getElementsByClassName("click-to-enlarge", "a", "main");
			Event.on(elmArray, "click", function(e) {
				try {
					var elmArray = Dom.getElementsByClassName("enlarge-image", "div", "clicktoenlarge");
					var elm = this.getElementsByTagName("img");
					elm = elm[0];
					Dom.addClass(elmArray, "hide");
					Dom.removeClass("enlargeimage" + elm.getAttribute("imgid"), "hide");
					/*Site.main.image.panel.cfg.setProperty("width", this.getAttribute("imgwidth") + "px");
					 Site.main.image.panel.cfg.setProperty("height", this.getAttribute("imgheight") + "px");*/
					Dom.removeClass("clicktoenlarge", "hide");
					Site.main.image.panel.center();
					Site.main.image.panel.show();
					Event.preventDefault(e);
				} catch (e) {
					errorHandler(e);
				}
			});
			for (var i = 0; i < elmArray.length; i++) {
				var srcImg = elmArray[i].getElementsByTagName("img");
				srcImg = srcImg[0];
				var elm = document.createElement("div");
				elm.className = "enlarge-image";
				elm.id = "enlargeimage" + srcImg.getAttribute("imgid");
				var img = document.createElement("img");
				img.title = srcImg.title;
				img.alt = srcImg.alt;
				img.src = srcImg.src;
				elm.appendChild(img);
				var caption = document.createElement("p");
				caption.innerHTML = "<strong>" + srcImg.title + "</strong>";
				elm.appendChild(caption);
				Site.main.image.panel.appendToBody(elm);
			}
		} catch (e) {
			errorHandler(e);
		}
	}
};
/**
 * Function name: Init
 * Purpose: Executes when the page loads after the DOM is ready. Performs initialization of any
 * elements or values to their default.
 */
Site.main.Init = function() {
	try {
		var elm, elmArray;
		BLEEZ.util.browserDetect.init();
		elmArray = Dom.getElementsByClassName("scrub");
		Event.addFocusListener(elmArray, function() {
			try {
				BLEEZ.util.Scrub(this);
			} catch (e) {
				errorHandler(e);
			}
		});
		Site.main.collapsible.Init();
		if (BLEEZ.util.browserDetect.browser != "Internet Explorer" || (BLEEZ.util.browserDetect.browser == "Internet Explorer" && BLEEZ.util.browserDetect.version > 6)) {
			Site.main.image.Init();
		}
		Event.addFocusListener("search", function() {
			try {
				if(Dom.hasClass(this, "default")) {
					this.value = "";
					Dom.removeClass(this, "default");
					Dom.get("searchbutton").disabled = false;
				}
			} catch (e) {
				errorHandler(e);
			}
		});
		Event.on("search", "blur", function() {
			try {
				if(this.value == "") {
					this.value = Dom.get("searchdefault").value;
					Dom.addClass(this, "default");
					Dom.get("searchbutton").disabled = true;
				}
			} catch (e) {
				errorHandler(e);
			}
		});
	} catch (e) {
		errorHandler(e);
	}
};
try {
	Event.onDOMReady(Site.main.Init);
} catch (e) {
	errorHandler(e);
}
