/**
 * JavaScript by Jeffrey Ouma.
 * Copyright© 2008 - 2010 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 = {};
/**
 * 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.top = {
	Init: function() {
		try {
			Event.on(window, "scroll", function() {
				try {
					if(Dom.getDocumentScrollTop() === 0) {
						Site.main.top.Hide();
					} else  if (Dom.hasClass(Dom.get("top"), "hide")) {
						Site.main.top.Show();
					}
				} catch (e) {
					errorHandler(e);
				}
			});
			Event.on("top", "click", function() {
				try {
					Site.main.top.scrollToTop();
				} catch (e) {
					errorHandler(e);
				}
			});
			if(Dom.getDocumentScrollTop() != 0) {
				Site.main.top.Show();
			}
		} catch (e) {
			errorHandler(e);
		}
	},
	Show: function() {
		try {
			var elm = Dom.get("top");
			var anim = new YAHOO.util.Anim(elm, {
				opacity: {
					to: 1
				}
			}, 1, Easing.backOut);
			Dom.setStyle(elm, "opacity", "0");
			Dom.removeClass(elm, "hide");
			anim.animate();
		} catch (e) {
			errorHandler(e);
		}
	},
	Hide: function() {
		try {
			var elm = Dom.get("top");
			var anim = new YAHOO.util.Anim(elm, {
				opacity: {
					to: 0
				}
			}, 1, Easing.backOut);
			Dom.setStyle(elm, "opacity", "1");
			anim.onComplete.subscribe(function() {
				try {
				Dom.addClass(elm, "hide");
				} catch (e) {
					errorHandler(e);
				}
			});
			anim.animate();
		} catch (e) {
			errorHandler(e);
		}
	},
	scrollToTop: function() {
		try {
			var anim = new YAHOO.util.Scroll(document.documentElement, {
				scroll: {
					to: [Dom.getDocumentScrollLeft(), 0]
				}
			}, 1, Easing.easeOut);
			anim.animate();
		} catch (e) {
			errorHandler(e);
		}
	}
};
Site.main.search = {
	Init: function() {
		try {
			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("defaulttext").value;
						Dom.addClass(this, "default");
						Dom.get("searchbutton").disabled = true;
					}
				} catch (e) {
					errorHandler(e);
				}
			});
			Dom.get("search").disabled = false;
		} catch (e) {
			errorHandler(e);
		}
	}
};
Site.main.login = { 
	Init: function() {
		try {
			if(Dom.get("loginemail") && Dom.get("loginpassword") && Dom.get("loginbutton")) {
				Site.main.login.Clear();
				BLEEZ.form.field.Init("loginemail", "email");
				BLEEZ.form.field.Init("loginpassword");
				Event.on("loginbutton", "click", function(e) {
					try {
						if (!Site.main.login.Validate()) Event.preventDefault(e);
					} catch (e) {
						errorHandler(e);
					}
				});
			}
		} catch (e) {
			errorHandler(e);
		}
	},
	Clear: function() {
		try {
			BLEEZ.form.field.Clear("loginemail");
			Dom.get("loginemail").disabled = false;
			BLEEZ.form.field.Clear("loginpassword");
			Dom.get("loginpassword").disabled = false;
			Dom.get("loginremember").checked = false;
			Dom.get("loginremember").disabled = false;
			Dom.get("loginbutton").disabled = false;
		} catch (e) {
			errorHandler(e);
		}
	},
	Validate: function() {
		try {
			if(!BLEEZ.form.field.Validate("loginemail") || !BLEEZ.form.field.Validate("loginpassword")) return false;
			return true;
		} 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);
		}
	}
};
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", "maincontentarea");
			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", "maincontentarea");
			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, 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, Easing.backOut);
				if(Dom.hasClass(parentElm, "accordion")) {
					var elmArray = Dom.getElementsByClassName("collapsible-bd", "div", "maincontentarea");
					for (var i = elmArray.length - 1; i >= 0; i--) {
						var elmParent = Dom.getAncestorByClassName(elmArray[i], "collapsible");
						if(Dom.hasClass(elmParent, "open")) {
							Site.main.collapsible.Hide(elmArray[i]);
						}
					};
					anim.onComplete.subscribe(function() {
						try {
						} catch (e) {
							errorHandler(e);
						}
					});
					var prevElm = Dom.getPreviousSibling(parentElm);
					var d = BLEEZ.util.Dimensions(prevElm);
					if(Dom.getDocumentScrollTop() > d["top"]) BLEEZ.util.scroll.Vertical("", "", d["top"]);
				}
				Dom.setStyle(elm, "height", "0px");
				Dom.setStyle(elm, "opacity", "0");
				Dom.addClass(parentElm, "open");
				anim.animate();
			}
		} catch (e) {
			errorHandler(e);
		}
	}
};
Site.main.carousel = {
	index:0,
	manual:false,
	Init: function() {
		try {
			var elmArray = Dom.getElementsByClassName("carouselitem", "div", "carousel");
			if(elmArray.length) {
				var h = 0;
				for (var i = elmArray.length - 1; i >= 0; i--) {
					var d = BLEEZ.util.Dimensions(elmArray[i]);
					if(d["height"] > h) h = d["height"];
				};
				h += 25;
				Dom.setStyle("carousel", "height", h + "px");
				Dom.removeClass(elmArray, "active");
				Event.on("next-carouselitem", "click", function(){
					Site.main.carousel.manual = true;
					Site.main.carousel.Cycle();
					Bleez.util.Scrub(this);
				});
				Event.on("previous-carouselitem", "click", function(){
					Site.main.carousel.manual = true;
					Site.main.carousel.Cycle(-2);
					Bleez.util.Scrub(this);
				});
				// Display the tip navigation links, previous and next
				Dom.removeClass("carousel-nav", "hide");
				Site.main.carousel.Cycle();
			}
		} catch(e) {
			errorHandler(e);
		}
		
	},
	Show: function(elm) {
		try {
			if (Dom.hasClass(elm, "carouselitem")) {
				var animShow = new YAHOO.util.Anim(elm, {
					opacity: {
						to: 1
					}
				}, 1, Easing.easeIn);
				var elmArray = Dom.getElementsByClassName("active", "div", "carousel");
				Dom.removeClass(elmArray, "active");
				Dom.setStyle(elm, "opacity", "0");
				Dom.addClass(elm, "active");
				animShow.animate();
			}
		} catch(e) {
			errorHandler(e);
		}
	},
	Cycle:function(inc) {
		inc = (isNaN(inc)) ? 0 : inc;
		var i = Site.main.carousel.index + inc;
		var elmArray = Dom.getElementsByClassName("carouselitem", "div", "carousel");
		if (elmArray.length) {
	  	if (i >= elmArray.length) {
				i = 0;
			} else if(i < 0) {
				i = elmArray.length - 1;
			}
	  	Site.main.carousel.Show(elmArray[i]);
	  	i++;
			Site.main.carousel.index = i;
			if (!Site.main.carousel.manual) {
					if(Site.main.carousel.timer) {clearTimeout(Site.main.carousel.timer);}
					Site.main.carousel.timer = setTimeout("Site.main.carousel.Cycle()", 30000);
			} else {
					Site.main.carousel.manual = false;
					if(Site.main.carousel.timer) {clearTimeout(Site.main.carousel.timer);}
					Site.main.carousel.timer = setTimeout("Site.main.carousel.Cycle()", 120000);
			}
		}
	}
};
Site.main.Init = function() {
	try {
		if(Dom.get("status") && Dom.get("status-message")) {
			var dialog = new BLEEZ.dialog.modal, dialogHeader;
			switch(Dom.get("status").value) {
				case "success":
					dialogHeader = "Success";
					break;
				case "error":
					dialogHeader = "Problem Encountered";
					break;
				case "info":
					dialogHeader = "Notice";
					break;
			}			 
			dialog.Show(Dom.get("status").value + "-dialog", dialogHeader, Dom.get("status-message").value, [{
				text: "OK",
				handler: function() {
					try {
						this.hide();
					} catch (e) {
						errorHandler(e);
					}
				}
			}], "450px");
		}
		var elm, elmArray;
		elmArray = Dom.getElementsByClassName("scrub");
		Event.addFocusListener(elmArray, function() {
			try {
				BLEEZ.util.Scrub(this);
			} catch (e) {
				errorHandler(e);
			}
		});
		Site.main.top.Init();
		Site.main.search.Init();
		Site.main.login.Init();
		BLEEZ.util.browserDetect.init();
		if (BLEEZ.util.browserDetect.browser != "Internet Explorer" || (BLEEZ.util.browserDetect.browser == "Internet Explorer" && BLEEZ.util.browserDetect.version > 6)) {
			Site.main.image.Init();
		}
		Site.main.collapsible.Init();
		Site.main.carousel.Init();
	} catch (e) {
		errorHandler(e);
	}
};
try {
	Event.onDOMReady(Site.main.Init);
} catch (e) {
	errorHandler(e);
}

