var validateForm = function(elem, options){		
	var isValid = {
		required: function(value, element) {
			switch( element.nodeName.toLowerCase() ) {
			case 'select':
				var options = jQuery("option:selected", element);
				return options.length > 0 && ( element.type == "select-multiple" || (jQuery.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
			case 'input':
				if (jQuery(element).is(":radio") || jQuery(element).is(":checkbox")) {
					return jQuery("input[name='" + element.name + "']").filter(":checked").length > 0;
				} else {
					return jQuery.trim(value).length > 0;
				}
			default:
				return jQuery.trim(value).length > 0;
			}
		},
		email: function(value, element) {
			return is_optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
		}
	};
	
	var errorMsg = {
		required: "This field is required.",
		email: "Please enter a valid email address."
	};
	
	var is_optional = function(element) {
		return !isValid.required.call(this, element.value, element);
	};
	
	var check = function(element) {
		var r = rules(element);
		
		for (var i=0,n=r.length;i < n; i++) {
			if (!isValid[r[i]].call(this, element.value, element)) {
				return errorMsg[r[i]];
			}
		}
		
		return true;
	};
	
	var rules = function(element) {
		var rules = [];
		var classes = jQuery(element).attr('class') || "";
		classes && jQuery.each(classes.split(/ +/), function() {
			if (this in isValid) {
				rules.push(this);
			}
		});
		return rules;
	};
	
	var errorCreateLabel = function(element, options) {
		
	};
	
	return function(elem, options){
		var frm;
		var options = options || {};
		
		if (jQuery(elem).is("form")) {
			frm = elem;
		} else {
			frm = jQuery(elem).parents("form");
			if (frm.length < 1) return;
			frm = frm[0];
		}
		
		var groups = ({});
		if (options.groups) {
			jQuery.each(options.groups, function(k, v) {
				jQuery.each(v.split(/\s+/), function(i, n) {
					groups[n] = k;
				});
			});
		};
		
		var elements = jQuery("input, textarea, select, button", elem);
		elements
			.filter(":input")
			.not(":submit, :reset, :image, [disabled]");
			
			
		var getLabel = function(element){
			var label;
			var id = groups[element.name] || ((jQuery(element).is(":radio") || jQuery(element).is(":checkbox")) ? element.name : element.id || element.name);
			
			label = jQuery("label[generated='true'][for='"+id+"']", elem);
			if (label.length > 0) {
				//
			} else {
				label = jQuery("<label />")
					.addClass("error")
					.attr("generated","true")
					.attr("for", id);
					
				options.errorPlacement ? options.errorPlacement(label, jQuery(element)) : label.insertAfter(element);
			}
			
			return label;
		};
			
		var validate = function() {
			var valid = true;
			var toShow = [], toHide = [];
			var toFocus = undefined;
			jQuery(elements).each(function(){
				var r = check(this);
				var label = getLabel(this);
				if ( r !== true ) {
					label.html(r || "");
					toShow.push(label);
					valid = false;
					
					if (toFocus == undefined) {
						toFocus = this;
					}
				} else {
					toHide.push(label);
				}
			});
			
			jQuery(toHide).each(function() {
				jQuery(this).hide();
			});
			
			jQuery(toShow).each(function(){
				jQuery(this).show();
			});
			
			if (!valid && toFocus != undefined) {
				try {
					jQuery(toFocus).focus();
				} catch(e) {};
			}
			
			return valid;
		}
		
		
		jQuery(frm).bind("submit", function(){
			if (!validate()) {
				return false;
			}
		});
	}
}();
	
(function(jQuery){
	/* MENU */
	function init_menu() {
		jQuery(".menu").each(function(){
			var elem = this;
			var elemOffset = jQuery(elem).offset();
			var elemWidth = jQuery(elem).outerWidth();
			var mainMenu = jQuery(".mainMenu", elem);
			var hideTimeout = 0;
			
			var hideCurrentMenu = function(){
				hideTimeout = 0;
				jQuery(".mainMenu>li.mainMenuItem_hover").removeClass("mainMenuItem_hover");
			};
			
			var clearHideTimeout = function() {
				if (hideTimeout > 0) {
					window.clearTimeout(hideTimeout);
					hideTimeout = 0;
				}
			};
			
			var startHideTimeout = function(){
				clearHideTimeout();
				hideTimeout = window.setTimeout(function(){
					hideCurrentMenu();
				}, 100);
			};
			
			jQuery(".mainMenu>li>a", elem).each(function(){
				var li = jQuery(this).parent();
				var hasSubmenu = jQuery(".subMenu", li).length > 0;
				jQuery(this)
					.append( jQuery("<span />").addClass("bl") )
					.append( jQuery("<span />").addClass("br") );
					
				jQuery(li).bind("mouseover.menu", function(){
					if (jQuery(li).is(".mainMenuItem_hover")) {
						clearHideTimeout();
					} else {
						hideCurrentMenu();
						if (hasSubmenu) {
							jQuery(li).addClass("mainMenuItem_hover");
						}
					}
				});
				jQuery(this).bind("mouseover.menu", function(){
					clearHideTimeout();
				});
				
				jQuery(li).bind("mouseout.menu", function(){
					startHideTimeout();
				});
				
			});
			
			
			//submenu
			var subHideTimeout = 0;
			var hideCurrentSubMenu = function(){
				subHideTimeout = 0;
				jQuery(".subMenu>li.subMenuItem_hover", elem).removeClass("subMenuItem_hover");
			};
			
			//calculate row/ col
			jQuery(".mainMenu>li", elem).each(function(){
				if (jQuery(".subMenu", parent).lenght < 1) return;
				var parent = jQuery(this);
				var parentOffset = jQuery(parent).offset();
				jQuery(".subMenu_wrapper", parent).show();
				var subMenuItemWidth = jQuery(".subMenu>li.subMenuItem:eq(0)", parent).outerWidth(true);
				var subMenuItemsCount = jQuery(".subMenu>li.subMenuItem", parent).length;
				var maxCols = 4;
				
				var rows = Math.ceil(subMenuItemsCount / maxCols);
				var cols = maxCols;
				if ((rows * maxCols) > subMenuItemsCount) {
					var d = subMenuItemsCount - ((rows-1) * maxCols);
					if ( d <= Math.ceil(maxCols / 2) ) {
						rows++;
						cols--;
					}
				}
				
				var subMenuItemsWidth = cols * subMenuItemWidth;
				
				var subMenuItemPaddingH = 0, subMenuItemMarginH = 0;
				var subMenuItemsHeight = 0;
				subMenuItemPaddingH += parseInt(jQuery(".subMenu>li.subMenuItem:eq(0)", parent).css("paddingTop")) || 0;
				subMenuItemPaddingH += parseInt(jQuery(".subMenu>li.subMenuItem:eq(0)", parent).css("paddingBottom")) || 0;
				subMenuItemMarginH += parseInt(jQuery(".subMenu>li.subMenuItem:eq(0)", parent).css("marginTop")) || 0;
				subMenuItemMarginH += parseInt(jQuery(".subMenu>li.subMenuItem:eq(0)", parent).css("marginBottom")) || 0;
				
				for (var i=0,n=0; i < rows; i++) {
					var maxH = 0;
					for (var j = 0, h = 0; j < cols; j++) {
						h = jQuery(".subMenu>li.subMenuItem:eq("+(n+j)+")", parent).outerHeight(true);
						if ( maxH < h ) maxH = h;
					}
					
					for (var j = 0; j < cols; j++) {
						jQuery(".subMenu>li.subMenuItem:eq("+n+")", parent).css({
							height: (maxH-(subMenuItemPaddingH+subMenuItemMarginH)) + "px"
						});
						n++;
					}
					
					subMenuItemsHeight += maxH;
				}
				
				//subMenuItemsHeight -= parseInt(jQuery(".subMenu", parent).css("paddingTop")) || 0;
				//subMenuItemsHeight -= parseInt(jQuery(".subMenu", parent).css("paddingBottom")) || 0;
				//subMenuItemsWidth -= parseInt(jQuery(".subMenu", parent).css("paddingLeft")) || 0;
				//subMenuItemsWidth -= parseInt(jQuery(".subMenu", parent).css("paddingRight")) || 0;
				
				subMenuItemsWidth += 20;
				
				jQuery(".subMenu", parent).css({
					width: (subMenuItemsWidth) + "px",
					height: subMenuItemsHeight + "px"
				});
				
				jQuery(".subMenu_wrapper", parent).css({
					width: (subMenuItemsWidth+10) + "px"
				});
				
				subMenuItemsHeight += parseInt(jQuery(".subMenu", parent).css("paddingTop")) || 0;
				subMenuItemsHeight += parseInt(jQuery(".subMenu", parent).css("paddingBottom")) || 0;
				
				subMenuItemsHeight += parseInt(jQuery(".subMenu_wrapper", parent).css("paddingTop")) || 0;
				subMenuItemsHeight += parseInt(jQuery(".subMenu_wrapper", parent).css("paddingBottom")) || 0;
				
				//sub menu position
				var parentWidth = jQuery(parent).outerWidth();
				
				subMenuItemsWidth -= parseInt(jQuery(".subMenu", parent).css("paddingLeft")) || 0;
				subMenuItemsWidth -= parseInt(jQuery(".subMenu", parent).css("paddingRight")) || 0;
				var d = ((parentOffset.left + parentWidth) - elemOffset.left) - subMenuItemsWidth;
				if ( d > 0 ) {
					jQuery(".subMenu_wrapper", parent).css({
						left: (elemWidth-subMenuItemsWidth)+"px"
					});
				}
				
				jQuery(".subMenu_wrapper", parent).append(
					jQuery("<div />").addClass("subMenu_wrapper_br").append(
						jQuery("<div />").addClass("subMenu_wrapper_r")
					)
				);
				
				jQuery(".subMenu_wrapper .subMenu_wrapper_br", parent).css({
					height: (subMenuItemsHeight-10) + "px"
				}).show();
				
				jQuery(".subMenu_wrapper", parent).css({
					display:""
				});
			});
			
			
			var clearSubHideTimeout = function() {
				if (subHideTimeout > 0) {
					window.clearTimeout(subHideTimeout);
					subHideTimeout = 0;
				}
			};
			
			var startSubHideTimeout = function(){
				clearSubHideTimeout();
				subHideTimeout = window.setTimeout(function(){
					hideCurrentSubMenu();
				}, 100);
			};
			
			jQuery(".subMenu>li", elem).bind("mouseover.menu", function(){
				clearSubHideTimeout();
				if (!jQuery(this).is(".subMenuItem_hover")) {
					hideCurrentSubMenu();
					jQuery(this).addClass("subMenuItem_hover");
				}
			});
			jQuery(".subMenu>li", elem).bind("mouseout.menu", function(){
				startSubHideTimeout();
			});
		});
		
		jQuery(".region").each(function(){
			var elem = this;
			var hideTimeout = 0;
			var selection = jQuery(".region_selections",  elem);
			
			if (selection.length) {
				selection.hide();
				var hideCurrentMenu = function(){
					selection.hide();
					jQuery(elem).removeClass("region_hover");
				};
				
				var clearHideTimeout = function() {
					if (hideTimeout > 0) {
						window.clearTimeout(hideTimeout);
						hideTimeout = 0;
					}
				};
				
				var startHideTimeout = function(){
					clearHideTimeout();
					hideTimeout = window.setTimeout(function(){
						hideCurrentMenu();
					}, 200);
				};
				
				jQuery(".current_region", elem).bind("mouseover.region", function(){
					clearHideTimeout();
					if (!jQuery(elem).is(".region_hover")) {
						jQuery(elem).addClass("region_hover");
						selection.show();
					}
				});
				jQuery([selection, elem]).bind("mouseover.region", function(){
					clearHideTimeout();
				});
				
				jQuery(elem).bind("mouseout.region", function(){
					startHideTimeout();
				});
			}
		});
		
		if (jQuery.browser.msie && jQuery.browser.version < 7) {
			jQuery(".region_selections").show();
			var W = jQuery(".region_selections").innerWidth();
			W -= parseInt(jQuery(".region_selections").css("paddingLeft")) || 0;
			W -= parseInt(jQuery(".region_selections").css("paddingRight")) || 0;
			
			jQuery(".region_selections a").each(function(){
				
				
				var w = W;
				
				w -= parseInt(jQuery(this).css("paddingLeft")) || 0;
				w -= parseInt(jQuery(this).css("paddingRight")) || 0;
				
				
				jQuery(this).css({
					width:w+"px"
				});
			});
			jQuery(".region_selections").hide();
		}
		
	};
	
	/* default text */
	function init_def_text() {
		var changedClass = "jDefText_changed";
		
		jQuery(".jDefText[type='text']").each(function(){
			var onFocus = false;
			var elem = this;
			jQuery(this).bind("focus.jDefText", function(){
				onFocus = true;
				if (this.value == this.defaultValue) {
					this.value = "";
				}
				jQuery(this).addClass(changedClass);
			});
			jQuery(this).bind("blur.jDefText", function(){
				onFocus = false;
				if (this.value == "") {
					this.value = this.defaultValue;
					jQuery(this).removeClass(changedClass);
				}
			});
			jQuery(this).bind("change.jDefText", function(){
				if (!onFocus) {
					jQuery(this).triggerHandler("focus");
					jQuery(this).triggerHandler("blur");
				}
			});
			//form reset
			if (jQuery(this).parents("form").length) {
				jQuery(this).parents("form").bind("reset.jDefText", function(){
					elem.value = elem.defaultValue;
					jQuery(elem).removeClass(changedClass);
				});
			}
			if (this.value == this.defaultValue) {
				jQuery(this).removeClass(changedClass);
			} else {
				jQuery(this).addClass(changedClass);
			}
			
		});
	};
	
	/* LEFT NAVIGATION */
	function init_left_nav() {
		
		var shared = {
			leftNav_onClick: function(){
				var self = this;
				
				jQuery(".subLeftNav_expanded", jQuery(self.elem).parents(".leftNavItem")).removeClass("subLeftNav_expanded");
				
				if (jQuery(self.link).is(".expanded")) {
					jQuery(self.link).removeClass("expanded");
					jQuery(self.subMenu.elem).hide().find(".expanded").removeClass("expanded").end().find(".subLeftNav").hide();
					jQuery(self.subMenu.elem).parents("li:first").parents("li:first").find("ul.subLeftNav").addClass("subLeftNav_expanded");
				} else {
					jQuery(self.link).addClass("expanded");
					jQuery(self.subMenu.elem).show().addClass("subLeftNav_expanded");
				}
			}
		};
		
		var leftNav = function(elem, parent) {
			var self = this;
			self.elem = elem;
			self.parent = parent;
			self.link = jQuery(">a", self.elem);
			self.hasSubMenu = (jQuery(">ul.subLeftNav", self.elem).length > 0);
			
			self.subMenu = undefined;
			if ( jQuery(".span", self.link).length < 1 ) {
				jQuery(self.link).wrapInner( jQuery("<span />").addClass("span") );
			}
			
			
			if (self.hasSubMenu) {
				self.subMenu = new leftNavGroup(jQuery(">ul.subLeftNav", self.elem)[0], self);
				jQuery(self.link).addClass("expanded");
				jQuery(">ul.subLeftNav", self.elem).show();
				
				/*
				jQuery(self.link).bind("click.leftNav", function(){
					shared.leftNav_onClick.apply(self, []);
					this.blur();
					return false;
				});
				*/
			}
			
			return this;
		};
		
		var leftNavGroup = function(elem, parent) {
			var self = this;
			self.parent = parent;
			self.elem = elem;
			self.menuItems = [];
			
			jQuery(">li", self.elem).each(function(){
				(self.menuItems).push(new leftNav(this, self));
			});
			
			return this;
		};
		
		var init = function() {
			
		};
		
		jQuery(".leftNav").each(function(){
			var elem = this;
			
			var topBorder = jQuery(elem).next();
			if (!topBorder.is(".leftNav_top")) {
				topBorder = jQuery("<div />").addClass("leftNav_top").insertAfter(jQuery(elem));
				
				if ( jQuery.browser.msie && jQuery.browser.version < 7 ) {
					jQuery(elem).next(".leftNav_top").pngfix();
				}
			}
			jQuery(elem).wrap( jQuery("<div />").addClass("leftNavWrapper") );
			jQuery(elem).parent().css({position:"relative"}).append(topBorder);
			
			jQuery("ul.subLeftNav", elem).hide().removeClass("subLeftNav_expanded");
			jQuery(".expanded", elem).removeClass("expanded");
			
			if ( jQuery(".selected", elem).length > 0 ) {
				if (jQuery(".selected", elem).length > 1) {
					jQuery(".selected", elem).not(":last").removeClass("selected");
				}
				
				var p = jQuery(".selected", elem).parents("ul.subLeftNav");
				while(1) {
					if (p.length > 0) {
						p.parents("li").find(">a").addClass("expanded");
						p.show();
						p = p.parents("ul.subLeftNav");
					} else {
						break;
					}
				}
				
				p = jQuery(".selected", elem).parents("li");
				if ( jQuery(">ul.subLeftNav", p).length  > 0 ) {
					jQuery(".selected", elem).addClass("expanded");
					jQuery(">ul.subLeftNav", p).show();
				}
			}
			
			
			if (jQuery(".expanded", elem).length > 0) {
				jQuery(".expanded", elem).filter(":last").parents("li:first").find(">ul.subLeftNav").addClass("subLeftNav_expanded");
				if (jQuery(".expanded", elem).filter(":last").parents("li:first").find(">ul.subLeftNav").length < 1) {
					jQuery(".expanded", elem).parents("ul.subLeftNav").filter(":last").addClass("subLeftNav_expanded");
				}
			}
			
			
			if (jQuery.browser.msie) {
				jQuery(elem).css("zoom",1);
				jQuery(".leftNavItem, .subLeftNav, .subLeftNavItemm",elem).css("zoom",1);
			}
			
			var menu = new leftNavGroup(elem, null);
		});
	};
	
	/* CAROUSEL */
	function init_carousel(options) {
		options = options || {};
		
		/* Change Options here */
		var animateSlideDuration = options.animateSlideDuration || 1000;
		var hideNavOnSingleSlide = options.hideNavOnSingleSlide == undefined ? true : options.hideNavOnSingleSlide;
		
		var autoMode = options.autoMode == undefined ? true : options.autoMode;
		var autoMode_autoStart = options.autoMode_autoStart || 5000;	//wait before start on page load
		var autoMode_timeout = options.autoMode_timeout || 3000;	//wait before show next slide
		var autoMode_pauseAfterUserAction = options.autoMode_pauseAfterUserAction || 8000;	//after user click (manual slide select), wait before start automode again
		
		var getSlideID = (function(){
			var i = 0;
			return (function(){
				return "slide" + (i++);
			});
		})();
		
		var baseurl = jQuery('script[src*=script/]:first').attr('src');
		// The baseurl is the src up until the start of our js file
		baseurl = baseurl.substring(0, baseurl.indexOf("script/"));
		
		var centerSlideContent = function(elem) {
			var wrapper = jQuery(".slide_content_wrapper", elem);
			if (wrapper.length > 0) {
				var H = jQuery(elem).innerHeight();
				H -= parseInt(jQuery(elem).css("paddingTop")) || 0;
				H -= parseInt(jQuery(elem).css("paddingBottom")) || 0;
				
				var h = jQuery(wrapper).outerHeight();
				h -= parseInt(jQuery(wrapper).css("paddingTop")) || 0;
				h -= parseInt(jQuery(wrapper).css("paddingBottom")) || 0;
				
				var y = (H - h) / 2;
				if ( y < 0 ) y = 0;
				var h = parseInt(jQuery(wrapper).css("paddingTop")) || 0;
				var p = h+y-10;
				if ( p > 0 ) {
					jQuery(wrapper).css("paddingTop", p+"px");
				}
			}
		};
		
		jQuery(".carousel").each(function(){
			var elem = this;
			var currentIndex = 0;
			var slidesCount = jQuery(".carousel_slide", elem).length;
			var slideWidth = jQuery(".carousel_slide:eq(0)", elem).outerWidth(true);
			
			
			if (slidesCount > 1 || !hideNavOnSingleSlide) {
				var nav = jQuery("<div />").addClass("carousel_nav")
					.append( jQuery("<div />").addClass("carousel_nav_buttons") )
					.append( jQuery("<div />").addClass("carousel_nav_taglines") )
					.wrapInner( jQuery("<div />").addClass("carousel_nav_wrapper"));
					
				nav.appendTo(elem).show();
				jQuery(nav).append( jQuery("<div />").addClass("carousel_nav_edge"));
				
				var contents = jQuery("<div />").addClass("slide_content");
				contents.append(jQuery("<div />").addClass("slide_content_wrapper"));
				contents.insertAfter(jQuery(".carousel_slides", elem));
			}
			
			tagLineWidth = 0;
			jQuery(".carousel_slide", elem).each(function(){
				var slide = this;
				var slideTag = jQuery(".slide_tagline", slide);
				var slideImage = jQuery(".slide_image", slide);
				var slideContent = jQuery(".slide_content", slide);
				
				var slideID = jQuery(this).attr("id") || getSlideID();
				
				if (slideTag.length > 0) {
					slideTag = slideTag.html() || "";
				} else {
					slideTag = "";
				}
				
				if (slideContent.length > 0) {
					//centerSlideContent(slideContent);
				}
				
				if (slidesCount > 1 || !hideNavOnSingleSlide) {
					jQuery("<a />").attr({
						href: "#" + slideID,
						title: slideTag
					}).addClass("carousel_nav_button").show().appendTo( jQuery(".carousel_nav_buttons", nav));
					
					var tagline = jQuery("<span />").addClass("carousel_nav_tagline").html(slideTag);
					tagline.appendTo(jQuery(".carousel_nav_taglines", nav));
					
					if (tagline.outerWidth(true) > tagLineWidth) {
						tagLineWidth = tagline.outerWidth(true);
					}
					
					var content = jQuery("<div />").addClass("slide_content_inner");
					jQuery("<div />").addClass("slide_content_helper").html(jQuery(".slide_content_wrapper", slide).html()).appendTo(content);
					
					content.appendTo(jQuery(".slide_content_wrapper", contents));
				}
				
				var more = jQuery(".more", slide);
				if (more.length > 0) {
					var slide_link = more.clone(true);
					slide_link.html("").removeClass("more").addClass("slide_link");
					
					if (slidesCount > 1 || !hideNavOnSingleSlide) {
						slide_link.appendTo(content);
					} else {
						slide_link.appendTo(jQuery(".slide_content", slide));
					}
					
					//.insertAfter(jQuery(slide).parent()).show();
					
					if (jQuery.browser.msie && jQuery.browser.version < 8) {
						slide_link.append( jQuery("<img />").attr({
							src: baseurl + "images/x.gif",
							width: slide_link.outerWidth(),
							height: slide_link.outerHeight(),
							alt: ""
						}) );
					}
				}
				
				jQuery(this).bind("click.carousel", function(){
					moveTo(currentIndex+1, true, autoMode_pauseAfterUserAction);
				});
			});
			
			if (slidesCount > 1 || !hideNavOnSingleSlide) {
				contents.insertAfter(jQuery(".carousel_slides", elem));
			}
			
			if (slidesCount > 1 || !hideNavOnSingleSlide) {
				jQuery(".carousel_nav_taglines, .carousel_nav_tagline", nav).css({
					width: (tagLineWidth+5)+"px"
				});
				jQuery(".carousel_nav_tagline", elem).hide();
				
				jQuery(".carousel_slide", elem).hide();
				jQuery(".carousel_slide .slide_content", elem).hide();
				
				var H = contents.innerHeight();
				jQuery(".slide_content_helper", contents).each(function(){
					var h = jQuery(this).innerHeight();
					var y = (H - h)/2;
					if (y > 0) {
						jQuery(this).parent().css("top", y+"px");
					}
					
					if (slidesCount > 1 || !hideNavOnSingleSlide) {
						if ( jQuery(this).next().is(".slide_link") ) {
							jQuery(jQuery(this).next()).css({
								top: -y+"px"
							});
						}
					}
				});
				
				contents.show();
				jQuery(".slide_content_inner", contents).hide();
			}
			
			
			if (jQuery(".carousel_slide_current", elem).length > 0) {
				currentIndex = jQuery(".carousel_slide", elem).index(jQuery(".carousel_slide_current", elem));
			} else {	
				jQuery(".carousel_slide:eq(0)", elem).addClass("carousel_slide_current");
			}
			
			
			var fadeIn = function(obj, onComplete){
				var obj = jQuery(obj);
				var visible = obj.css("display") != "none";
				var opacity = obj.css("opacity");
				
				obj.stop();
				if (!visible && (!opacity || opacity == 1) ) {
					obj.css({
						opacity:0,
						display:"block"
					});
				} else if (!visible && opacity < 1) {
					obj.css({
						display:"block"
					});
				}
				
				obj.animate({opacity:1}, {queue:false, duration:1000, complete: function(){
					jQuery(this).css({
						opacity:"",
						display:"block"
					});
					if (jQuery.isFunction(onComplete)) {
						onComplete();
					}
				}});
			};
			
			var fadeOut = function(obj, onComplete) {
				jQuery(obj)
					.stop()
					.animate({opacity:0}, {queue:false, duration:1000, complete: function(){
						jQuery(this).css({
							opacity:"",
							display:"none"
						});
						if (jQuery.isFunction(onComplete)) {
							onComplete();
						}
					}});
			};
			
			var moveTo = function(i, anim, nextTimeout) {
				if (i < 0 || i >= slidesCount) i = 0;
				resetAutoTimeout();
				
				anim = anim || false;
				if (currentIndex >= 0 && currentIndex < slidesCount) {
					jQuery(".carousel_slide:eq(" + currentIndex +")", elem).removeClass("carousel_slide_current");
					if (slidesCount > 1 || !hideNavOnSingleSlide) {
						jQuery(".carousel_nav_button:eq(" + currentIndex +")", elem).removeClass("carousel_nav_button_current");
						jQuery(".carousel_nav_tagline:eq(" + currentIndex +")", elem).hide();
					}
					if (anim) {
						fadeOut(jQuery(".carousel_slide:eq(" + currentIndex + ")", elem));
						
						if (slidesCount > 1 || !hideNavOnSingleSlide) {
							fadeOut(jQuery(".slide_content_inner:eq(" + currentIndex + ")", contents));
						}
					} else {
						jQuery(".carousel_slide:eq(" + currentIndex + ")", elem).hide();
						jQuery(".slide_content_inner:eq(" + currentIndex + ")", contents).hide();
					}
				}
				
				currentIndex = i;
				
				if (currentIndex >= 0 && currentIndex < slidesCount) {
					jQuery(".carousel_slide:eq(" + currentIndex +")", elem).addClass("carousel_slide_current");
					
					if (slidesCount > 1 || !hideNavOnSingleSlide) {
						jQuery(".carousel_nav_button:eq(" + currentIndex +")", elem).addClass("carousel_nav_button_current");
						jQuery(".carousel_nav_tagline:eq(" + currentIndex +")", elem).show();
					}
					
					if (anim) {
						fadeIn(jQuery(".carousel_slide:eq(" + currentIndex +")", elem), function(){
							if (autoMode && slidesCount > 1) {
								setAutoTimeout(nextTimeout, autoMode_timeout);
							}
						});
						if (slidesCount > 1 || !hideNavOnSingleSlide) {
							fadeIn(jQuery(".slide_content_inner:eq(" + currentIndex + ")", contents));
						}
					} else {
						jQuery(".carousel_slide:eq(" + currentIndex +")", elem).show();
						if (slidesCount > 1 || !hideNavOnSingleSlide) {
							jQuery(".slide_content_inner:eq(" + currentIndex + ")", contents).show();
						}
						if (autoMode && slidesCount > 1) {
							setAutoTimeout(nextTimeout, autoMode_timeout);
						}
					}
				}
				
			};
			
			if (slidesCount > 1 || !hideNavOnSingleSlide) {
				jQuery(".carousel_nav_button", elem).bind("click.carousel", function(){
					var idx = jQuery(".carousel_nav_button", elem).index(this);
					moveTo(idx, true, autoMode_pauseAfterUserAction);
					this.blur();
					return false;
				});
			}
			
			var autoModeTimeout = 0;
			var resetAutoTimeout = function(){
				if (autoMode_timeout > 0) {
					window.clearTimeout(autoModeTimeout);
					autoModeTimeout = 0;
				}
			}
			
			var setAutoTimeout = function(timeout, nextTimeout) {
				resetAutoTimeout();
				autoModeTimeout = window.setTimeout(function(){
					moveTo(currentIndex+1, true, nextTimeout);
				}, timeout);
			}
			
			currentIndex = -1;
			moveTo(0, false, autoMode_autoStart);
		});
	};
	
	function init_side_carousel(options) {
		options = options || {};
		/* Change Options here */
		var animateSlideDuration = options.animateSlideDuration || 1000;
		var hideNavOnSingleSlide = options.hideNavOnSingleSlide == undefined ? true : options.hideNavOnSingleSlide;
		
		var autoMode = options.autoMode == undefined ? true : options.autoMode;
		var autoMode_autoStart = options.autoMode_autoStart || 5000;	//wait before start on page load
		var autoMode_timeout = options.autoMode_timeout || 3000;	//wait before show next slide
		var autoMode_pauseAfterUserAction = options.autoMode_pauseAfterUserAction || 8000;	//after user click (manual slide select), wait before start automode again
		
		jQuery(".sideCarousel").each(function(){
			var elem = this;
			var slidesCount = jQuery(".sideCarousel_content", elem).length;
			var nav = jQuery(".sideCarousel_nav", elem);
			var currentIndex = 0;
			var slideWidth = 0;
			
			if (!jQuery(".sideCarousel_contents", elem).parent().is(".sideCarousel_contents_container")) {
				jQuery(".sideCarousel_contents", elem).wrap( jQuery("<div />").addClass("sideCarousel_contents_container"));
			}
			
			
			var maxH = 0;
			jQuery(".sideCarousel_content", elem).each(function(){
				if (jQuery(this).outerHeight(true) > maxH) {
					maxH = jQuery(this).outerHeight(true);
				}
			});
			
			slideWidth = jQuery(".sideCarousel_content:eq(0)", elem).outerWidth(true);
			
			jQuery(".sideCarousel_contents_container", elem).css({
				height:maxH+"px"
			});
			jQuery(".sideCarousel_contents", elem).css({
				width: (slideWidth * slidesCount) + "px"
			});
			
			jQuery(".prev", nav).bind("click.sideCarousel", function(){
				moveTo(currentIndex - 1, true, autoMode_pauseAfterUserAction);
				this.blur();
				return false;
			});
			jQuery(".next", nav).bind("click.sideCarousel", function(){
				moveTo(currentIndex + 1, true, autoMode_pauseAfterUserAction);
				this.blur();
				return false;
			});
			
			var initNavState = function() {
				if (currentIndex <= 0) {
					currentIndex = 0;
					jQuery(".prev", nav).addClass("prev_disabled");
				} else {
					jQuery(".prev", nav).removeClass("prev_disabled");
				}
				
				if (currentIndex >= slidesCount) {
					currentIndex = slidesCount;
					jQuery(".next", nav).addClass("next_disabled");
				} else {
					jQuery(".next", nav).removeClass("next_disabled");
				}
			};
			
			var moveTo = function(i, anim, nextTimeout) {
				if (i < 0 || i >= slidesCount) i = 0;
				resetAutoTimeout();
				
				anim = anim || false;
				if (currentIndex >= 0 && currentIndex < slidesCount) {
					jQuery(".sideCarousel_content:eq(" + currentIndex +")", elem).removeClass("sideCarousel_content_current");
				}
				
				currentIndex = i;
				
				if (currentIndex >= 0 && currentIndex < slidesCount) {
					if (anim) {
						jQuery(".sideCarousel_contents", elem).stop();
						jQuery(".sideCarousel_contents", elem).animate({left:-(currentIndex * slideWidth) + "px"}, {queue:false, duration: animateSlideDuration, easing: "easeInOutExpo", complete: function(){
							if (autoMode && slidesCount > 1) {
								setAutoTimeout(nextTimeout, autoMode_timeout);
							}
						}});
					} else {
						jQuery(".sideCarousel_contents", elem).css({
							left: -(currentIndex * slideWidth) + "px"
						});
						
						if (autoMode && slidesCount > 1) {
							setAutoTimeout(nextTimeout, autoMode_timeout);
						}
					}
					
					jQuery(".sideCarousel_content:eq(" + currentIndex +")", elem).addClass("sideCarousel_content_current");
				}
				
				initNavState();
			};
			
			var autoModeTimeout = 0;
			var resetAutoTimeout = function(){
				if (autoMode_timeout > 0) {
					window.clearTimeout(autoModeTimeout);
					autoModeTimeout = 0;
				}
			}
			
			var setAutoTimeout = function(timeout, nextTimeout) {
				resetAutoTimeout();
				autoModeTimeout = window.setTimeout(function(){
					moveTo(currentIndex+1, true, nextTimeout);
				}, timeout);
			}
			
			moveTo(0, false, autoMode_autoStart);
		});
	};
	
	function init_newsRoller(options) {
		options = options || {};
		var animateDuration = options.duration || 1000;
		var animateWaitBeforeNext = options.waitBeforeNext || 8000;
		
		jQuery(".newsRoller").each(function(){
			var elem = this;
			var newsCount = jQuery(".newsRoller_news_item", elem).length;
			var timeout = 0;
			var currentIdx = 0;
			if (newsCount < 2) return;
			
			var newsHeight = jQuery(".newsRoller_news_item:eq(0)", elem).outerHeight(true);
			var newsWidth = jQuery(".newsRoller_news_item:eq(0)", elem).outerWidth(true);
			
			/*
			jQuery(".newsRoller_news_item:eq(0)", elem).clone().appendTo(jQuery(".newsRoller_news", elem));
			newsCount++;
			*/
			var mouseIn = false;
			
			jQuery(".newsRoller_news", elem).css({
				height: (newsHeight) + "px",
				width: (newsWidth * newsCount) + "px"
			});
			
			var moveNext = function() {
				var x = -newsWidth;
				jQuery(".newsRoller_news", elem).stop();
				jQuery(".newsRoller_news", elem).animate({left: x+"px"}, {queue:false, duration: animateDuration, easing: "easeOutExpo", complete: function(){
					jQuery(".newsRoller_news_item:eq(0)", elem).appendTo(jQuery(".newsRoller_news", elem).css({left:0}));
					setTimeout();
				}});
			};
			
			var setTimeout = function(){
				clearTimeout();
				timeout = window.setTimeout(moveNext, animateWaitBeforeNext);
			};
			
			var clearTimeout = function(){
				if (timeout > 0) {
					window.clearTimeout(timeout);
					timeout = 0;
				}
			};
			
			jQuery(".newsRoller_news", elem).bind("mouseover.newsRoller", function(){
				if (!mouseIn) {
					mouseIn = true;
					clearTimeout();
				}
			});
			
			jQuery(".newsRoller_news", elem).bind("mouseout.newsRoller", function(){
				if (mouseIn) {
					mouseIn = false;
					timeout = window.setTimeout(setTimeout, 100);
				}
			});
			
			jQuery(".newsRoller_news", elem).css({left:0});
			setTimeout();
		});
	};
	
	function init_homeTabs() {
		jQuery(".homeTabs").each(function(){
			var elem  = this;
			
		});
	};
	
	/* needed fix for IE */
	function ie_fix() {
		if (jQuery.browser.msie && jQuery.browser.version < 7) {
			jQuery("img[src$=png], .leftNav_top, .slide_content, .carousel_nav_edge, .newsRoller_fadeLeft, .newsRoller_fadeRight").pngfix();
			
			jQuery(".searchForm .btnSubmitSearch").each(function(){
				jQuery(this).bind("mouseover", function(){
					jQuery(this).addClass("btnSubmitSearch_hover");
				});
				jQuery(this).bind("mouseout", function(){
					jQuery(this).removeClass("btnSubmitSearch_hover");
				});
			});
		}
		
		if (jQuery.browser.msie && jQuery.browser.version < 8) {
			jQuery(".button1, .button2, .button4, .button5").each(function(){
				var elem = this;
				var span = jQuery(".span", elem);
				var H = jQuery(elem).innerHeight();
				H -= parseInt(jQuery(elem).css("paddingTop")) || 0;
				H -= parseInt(jQuery(elem).css("paddingBottom")) || 0;
				
				var h = jQuery(span).innerHeight();
				h -= parseInt(jQuery(span).css("paddingTop")) || 0;
				h -= parseInt(jQuery(span).css("paddingBottom")) || 0;
				
				var y = (H - h) / 2;
				jQuery(span).css({
					paddingTop:y+"px"
				});
			});
		}
		
		if (jQuery.browser.msie && jQuery.browser.version < 8) {
			jQuery(".cyanRoundedBox").each(function(){
				var W = jQuery(".boxContent",this).outerWidth();
				var h = jQuery(".boxContent", this).innerHeight();
				var w = W;
				w += parseInt(jQuery(this).css("paddingLeft")) || 0;
				w += parseInt(jQuery(this).css("paddingRight")) || 0;
				
				jQuery(this).css({
					width: W+"px",
					height: h+"px",
					display:"inline-block",
					overflow:"hidden"
				});
				
				jQuery(".boxBorder-t, .boxBorder-b", this).css({
					width: w+"px"
				});
				
			});
		}
	};
	
	function init_text_shadow(selector) {
		jQuery(selector).each(function(){
			var elem = this;
			var html = jQuery(elem).html();
			var shadow, wrapper;
			
			if (elem.tagName == "DIV") {
				shadow = jQuery("<div />").addClass("shdwC");
				jQuery(elem).wrapInner( jQuery("<div />").addClass("shdwI") );
				wrapper = jQuery(".shdwI", elem);
				
				if (jQuery(elem).css("display") == "table-cell") {
					jQuery(elem).wrapInner( jQuery("<div />").addClass("shdwD").css("display","block") );
					elem = jQuery(".shdwD", elem);
				}
				
			} else {
				shadow = jQuery("<span />").addClass("shdwC");
				jQuery(elem).wrapInner( jQuery("<span />").addClass("shdwI") );
				wrapper = jQuery(".shdwI", elem);
				
				if (jQuery(elem).css("display") == "table-cell") {
					jQuery(elem).wrapInner( jQuery("<span />").addClass("shdwD").css("display","block") );
					elem = jQuery(".shdwD", elem);
				}
			}
			
			if ( jQuery(elem).css("position") != "absolute" && jQuery(elem).css("position") != "relative" ) {
				jQuery(elem).css("position", "relative");
			}
			
			var o, z, p;
			if ( jQuery(elem).css("position") == "absolute" ) {
				o = jQuery(elem).offset();
				z = parseInt(jQuery(elem).css("zIndex")) || 0;
			} else {
				o = {
					left: parseInt(jQuery(elem).css("left")) || 0,
					top: parseInt(jQuery(elem).css("top")) || 0
				};
				o.left += parseInt(jQuery(elem).css("paddingLeft")) || 0;
				o.top += parseInt(jQuery(elem).css("paddingTop")) || 0;
				z = parseInt(jQuery(elem).css("zIndex")) || 0;
			}
			
			if ( z < 1) {
				p = jQuery(elem).parent();
				while (1) {
					if (p.length > 0 && !jQuery(p).is("BODY") && !jQuery(p).is("HTML")) {
						z = parseInt(jQuery(p).css("zIndex")) || 0;
						if (z > 0) {
							break;
						}
						p = jQuery(p).parent();
					} else {
						break;
					}
				}
				z++;
				if ( z < 10 ) z = 10;
				//jQuery(elem).css("zIndex", z);
			}
			
			jQuery(elem).append( shadow );
			
			wrapper.css({
				position:"relative",
				zIndex: z+2
			});
			
			var w,h,padding,margin;
			w = jQuery(elem).innerWidth();
			h = jQuery(elem).innerHeight();
			
			padding = {
				top: parseInt(jQuery(elem).css("paddingTop")) || 0,
				right: parseInt(jQuery(elem).css("paddingRight")) || 0,
				bottom: parseInt(jQuery(elem).css("paddingBottom")) || 0,
				left: parseInt(jQuery(elem).css("paddingLeft")) || 0
			};
			margin = {
				top: parseInt(jQuery(elem).css("marginTop")) || 0,
				right: parseInt(jQuery(elem).css("marginRight")) || 0,
				bottom: parseInt(jQuery(elem).css("marginBottom")) || 0,
				left: parseInt(jQuery(elem).css("marginLeft")) || 0
			};
			
			w -= padding.left + padding.right;
			h -= padding.top + padding.bottom;
			
			if (jQuery.browser.msie) {
				if (jQuery.browser.version > 7) {
					if (padding.top > 0) {
						o.top -= padding.top - 1;
					}
					
				} else if (jQuery.browser.version > 6 && jQuery.browser.version < 8) {
					if (jQuery(elem).css("display") == "inline-block") {
						o.left += padding.left/4;
					} else {
						wrapper.css("width",w+"px");
						wrapper.css("float","left");
					}
				} else if (jQuery.browser.version < 7) {
					if (jQuery(elem).css("display") == "inline-block") {
						o.left += padding.left/4;
					} else {
						wrapper.css("width",w+"px");
						
						wrapper.css("display","inline-block");
						
					}
				}
			} else {
				if (padding.top > 0) {
					o.top -= padding.top;
					if (jQuery.browser.mozilla && parseFloat(jQuery.browser.version) < 1.9) {
						if (jQuery(elem).css("display") == "inline") {
							o.top ++;
						}
					}
				}
			}
			
			var css = {
				position:"absolute",
				left: (o.left+1)+"px",
				top: (o.top+1)+"px",
				textAlign: jQuery(elem).css("textAlign") || "",
				verticalAlign: jQuery(elem).css("verticalAlign") || "",
				display: jQuery(elem).css("display") || "",
				width: w+"px",
				height: h+"px",
				lineHeight: jQuery(elem).css("lineHeight") || "",
				zIndex: z+1
			};
			
			shadow.html(html).css(css);
			
			// to replace contained image with blank image.
			shadow.html(html).children().filter("img").each(function(){
				var w = jQuery(this).innerWidth();
				var h = jQuery(this).innerHeight();
				jQuery(this).css({
					width: w+"px",
					height: h+"px",
					overflow: "hidden"
				}).attr({
					width:w,
					height:h,
					src:"images/x.gif"
				});
			});
		});
	};
	
	/* onload initialization */
	jQuery(document).ready(function(){
		ie_fix();
		
		//make text shadow
		//put all selector here -- more info about jQuery selector can be found here: http://docs.jquery.com/Selectors
		/*init_text_shadow(".mainMenu>li>a, .sideCarousel_title a, .scrollBox_title, .leftBox_title, .homeTabs_tabs a, .newsRoller_title .span, .button1 .span, .button2 .span, .button3 .span, .articleUtility a, .button4 .span, .button5 .span");*/
		
		init_menu();	//menu
		init_left_nav();
		init_def_text(); //def text
		
		//text input
		if (jQuery.fn.InputBox) {
			jQuery(".customInput").InputBox();
		}
		
		//textarea
		if (jQuery.fn.TextareaBox) {
			jQuery(".customTextarea").TextareaBox();
		}
		
		//checkboxes
		if (jQuery.fn.Checkbox) {
			jQuery(".customCheckbox").Checkbox();
		}
		
		
		//dropdown
		if (jQuery.fn.dropDownMenu) {
			jQuery(".customDropdown").dropDownMenu({
				scrollPaneOptions: {
					scrollbarWidth : 14,
					showArrows : false,
					arrowSize : 0,
					dragMinHeight : 57,
					dragMaxHeight : 57,
					maintainPosition: true
				}
			});
		}
		
		//carousel
		init_carousel({
			animateSlideDuration: 1000,
			hideNavOnSingleSlide: true,
			autoMode: true,
			autoMode_autoStart: 5000,
			autoMode_timeout: 5000,
			autoMode_pauseAfterUserAction: 8000
		});	
		jQuery(".carousel_nav_edge").pngfix();
		
		//side carousel
		init_side_carousel({
			animateSlideDuration: 1000,
			autoMode: false,
			autoMode_autoStart: 8000,
			autoMode_timeout: 8000,
			autoMode_pauseAfterUserAction: 8000
		});
		
		//rolling news
		init_newsRoller({
			duration: 800,	//in ms
			waitBeforeNext: 8000 //in ms, wait before next news
		});
		
		//tabs
		if (jQuery.fn.tabs) {
			jQuery(".homeTabs_tabs").tabs();
		}
		
		//gallery
		if (jQuery.fn.gallery) {
			jQuery(".imageGallery").gallery();
		}
		
		//scrollbox
		if (jQuery.fn.jScrollPane) {
			jQuery(".scrollBox .scrollBox_content").jScrollPane({
				scrollbarWidth : 14,
				showArrows : false,
				arrowSize : 0,
				dragMinHeight : 57,
				dragMaxHeight : 57,
				maintainPosition: true
			});
			
			jQuery(".jScrollPane").jScrollPane({
				scrollbarWidth : 14,
				showArrows : false,
				arrowSize : 0,
				dragMinHeight : 57,
				dragMaxHeight : 57,
				maintainPosition: true
			});
		}
		
		//accordion
		if (jQuery.fn.accordion) {
			jQuery(".accordion").accordion();
		}
		
		//advanced search filter checkboxes
		if (jQuery(".searchFilters .lblFilter :checkbox").length > 0) {
			new function(){
				var checkboxes = jQuery(".searchFilters .lblFilter").not(".lblFilterAll").find(":checkbox");
				var checkAll = jQuery(".searchFilters .lblFilterAll :checkbox");
				
				var checkAllChanged = function() {
					if (jQuery(this).is(":checked")) {
						jQuery(checkboxes).each(function(){
							if (!jQuery(this).is(":checked")) {
								jQuery(this).attr("checked", "checked").triggerHandler("change");
							}
						});
					} else {
						if (jQuery(checkboxes).not(":checked").length < 1) {
							jQuery(checkboxes).each(function(){
								jQuery(this).removeAttr("checked").triggerHandler("change");
							});
						}
					}
				};
				
				var checkboxChanged = function(){
					if (!jQuery(this).is(":checked")) {
						if (jQuery(checkAll).is(":checked")) {
							jQuery(checkAll).removeAttr("checked").triggerHandler("change");
						}
					}
				};
				
				if (checkboxes.length > 0 && checkAll.length > 0) {
					jQuery(checkAll).bind("change.advancedSearchFilters", function(){
						checkAllChanged.apply(this,[]);
					});
					jQuery(checkboxes).each(function(){
						jQuery(this).bind("change.advancedSearchFilters", function(){
							checkboxChanged.apply(this,[]);
						});
					});
				}
				
				jQuery(document).ready(function(){
					checkAllChanged.apply(jQuery(checkAll)[0],[]);
				});
			};
		}
		
		//press release table
		jQuery("table.pressRelease_list").each(function(){
			jQuery("tr:first",this).addClass("first");
		});
		
		//color box
		if (jQuery.fn.colorbox) {
			jQuery(".colorbox").colorbox({
				iframe:true, 
				width:540, 
				height:480,
				title:false,
				opacity:0.66,
				close:"close window"
			});
		}
		
		//fix Mac FF
		var isMac = (navigator.platform && navigator.platform.toLowerCase().indexOf("mac") >= 0);
		if (isMac && jQuery.browser.mozilla) {
			jQuery(".inputBox-container .customInput").css({top:"-1px"});
		}
	});
})(jQuery);
