var Site = {
    init: function() {
        Site.Textsize = new TextSize({ selector: '#textSize .textMinus img, #textSize .textPlus img', cookieName: 'xyzaltextsize', targeted: $$('#contentMain') });

        // search field
        var searchBtn = document.getElement("#siteSearch .siteSearchBtn") || new Element("div");
        var searchField = document.id("ctl00_search_SearchText") || new Element("div");
		
        function validateSearch(e) {
			var isNotValid = (searchField.get("value") || "") == searchField.defaultValue || searchField.get("value") == "" || searchField.get("value") == null;
			if (!!isNotValid) e.stop();			
            return this;
        };
		
        searchBtn.addEvent("click", validateSearch.bindWithEvent(searchBtn));
        searchField.addEvent("enter", validateSearch.bindWithEvent(searchField));

		// allergen forecast
		var forecastBtn = document.getElement("#forecast .searchBtn") || new Element("div");
		var forecastField = document.getElement("#forecast input[type=text]") || new Element("div");
		
		var validateForecast = function(e) {
			var isNotValid = forecastField.get('value') == null || forecastField.get('value').length < 5 || !(/^[\d() .:\-\+#]+$/.test(forecastField.get('value')));			
			if (!!isNotValid) {
				e.stop();
				alert("Please enter a valid zip code.");
			}			
			return this;			
		};
		
		forecastBtn.addEvent("click", validateForecast.bindWithEvent(forecastBtn));
		forecastField.addEvent("enter", validateForecast.bindWithEvent(forecastField));
			


    }
};

window.addEvent("domready", function() {
	Site.init();
});


var QABox = new Class({
	Implements: Options,
	
	options: {
		slideSelector: ".slide",
		prevSelector: "#prev",
		nextSelector: "#next",
		navHolderSelector: "#nav",
		navParentTag: "ul",
		navChildTag: "li",
		navActiveClass: "active",
		startSlide: 0
	},
	
	curr: null,
	
	initialize: function(id, opts) {
		this.element = document.id(id);
		this.setOptions(opts);
		
		this.slides 	= this.element.getElements(this.options.slideSelector);
		this.nextBtn 	= this.element.getElement(this.options.nextSelector);
		this.prevBtn 	= this.element.getElement(this.options.prevSelector);
				
		["next", "prev"].each(function(key, i) {
			this[key + "Btn"].addEvent("click", function() {				
				this[key]();
			}.bind(this))
		}, this);
		
		var ul = new Element(this.options.navParentTag);
		this.lis = [];
		
		this.slides.each(function(slide, i) {
			var li = new Element(this.options.navChildTag);
			li.addEvent("click", function() {
				this.show(i);
			}.bind(this));
			
			this.lis.push(li);
		}, this);
		
		//lis[this.options.startSlide].addClass(this.options.navActiveClass);
		ul.adopt(this.lis).inject(this.element.getElement(this.options.navHolderSelector));
		
		
		this.show(this.options.startSlide);		
	},
	
	show: function(id) {
		if (id === this.curr) return;
		if ($chk(this.curr)) {
			this.slides[this.curr].hide();
			this.lis[this.curr].removeClass(this.options.navActiveClass);
		}

		this.slides[id].show();
		this.lis[id].addClass(this.options.navActiveClass);		
		
		this.curr = id;		
	},
	
	next: function() {
		var next = (this.curr + 1 > this.slides.length - 1) ? 0 : this.curr + 1;
		this.show(next);
	},
	
	prev: function() {
		var prev = (this.curr - 1 < 0) ? this.slides.length - 1 : this.curr - 1;
		this.show(prev);	
	}
});

var TextSize = new Class({
	cName: null,
	opts: { duration: 60, path: "/" },
	scale: ["0.8125em", "1.0em", "1.1em", "1.15em"],
	myScale: null,
	els: null,
	curr: 0,
	initialize: function(obj) {
		this.els = $$(obj.selector)

		if (this.els.length == 0) return

		this.cName = obj.cookieName

		if (!$chk(Cookie.read(this.cName))) Cookie.write(this.cName, 0, this.opts);

		this.myScale = parseInt(Cookie.read(this.cName)) || 0;
		
		this.els.each(function(el, i) {
			if (el.get("tag") === "a") el.set('href', 'javascript:void(0);');
			el.addEvent('click', function() {
				this.processScale(el, i)
			} .bind(this))
		}, this);

		this.targetEl = $$(obj.targeted);
		
		this.targetEl.setStyle('font-size', this.scale[this.myScale]);		
	},
	setCookie: function() {
		Cookie.write(this.cName, this.myScale.toString(), this.opts);
	},
	processScale: function(el, index) {		
		switch(index) {
			case 0:				
				this.myScale = Math.max(this.myScale - 1, 0);
				break;
			case 1:				
				this.myScale = Math.min(this.myScale + 1, this.scale.length - 1);
				break;
		}		
		this.setCookie();
		this.targetEl.setStyle('font-size', this.scale[this.myScale]);
	}
});

