/* MR - 02/08/2009
 * Slick AJAX front page search form
 */
 
 var SearchSaver = {
 	memorize: function(s) {
		deleteCookie("search_form");
		setCookie("search_form", s, 1);
	},
	
	remember: function() {
		var memory = getCookie("search_form");
		deleteCookie("search_form");
		return memory;
	}
 };
 /* Tabber object to toggle between search forms */
 var Tabber = {
 
 	tabs: [],
	
	divs: [],
	
	menuPrefix: "menu", 
	
	divPrefix: "div",
	
	hideClass: "hide", 
 
	init: function(a) {
		var i = 0,
			len = a.length;
			
		for(; i<len; i++) {
			this.tabs.push(new YAHOO.util.Element(this.menuPrefix+ a[i]));
			this.divs.push(new YAHOO.util.Element(this.divPrefix+ a[i]));
			this.tabs[i].setStyle("opacity", 0.85);
			this.divs[i].setStyle("opacity", 0.85);
		}
		
		// Preload images
		var images = ["/images/top-menu-l.png", "/images/top-menu-l-hover.png", "/images/top-menu-r.png", "/images/top-menu-r-hover.png"];
		
		i = 0;
		len = images.length;
		I = null;
		
		for(; i<len; i++) {
			I = new Image(1,1);
			I.src = images[i];
		}
	},
	
	tab: function(selected) {
		var i = 0,
			len = this.tabs.length;
			
		for(; i<len; i++) {
			if(this.tabs[i].get("id") == selected && !this.tabs[i].hasClass("selected")) {
				this.tabs[i].addClass("selected");
				this.divs[i].setStyle("display", "block");
			} else {
				this.tabs[i].removeClass("selected");
				this.divs[i].setStyle("display", "none");
			}
		}	
	}, 
	
	isset: false,
	
	openTab: function(s) {
		if(this.isset == true) {
			return;
		}
	
		this.enableTab(s);
		this.tab(this.menuPrefix+s);
		
		this.isset = true;
	}, 
	
	enableTab: function(s) {
		(new YAHOO.util.Element(this.menuPrefix+s)).removeClass(this.hideClass);
	},
	
	disableTab: function(s) {
		var el = new YAHOO.util.Element(this.menuPrefix+s);
		if(!el.hasClass(this.hideClass)) {
			el.addClass(this.hideClass);
		}
	}
	
};


function Search(form, tdInfo) {

	this.url = "/scripts/search.js.php";

	this.form = document.forms[form];
	
	this.tdInfo = tdInfo;
	
	this.menuItem = form.replace("frm", "");

	this.info = function(b) {
		document.getElementById(this.tdInfo).innerHTML = (!b ? "&nbsp;" : "<img border=\"0\" src=\"/images/loading.gif\" width=\"24\" height=\"24\"> Loading..");
	};
	
	// Set select drop-down (o) with default string (d) and array of options (a)
	this.setSelect = function(o, d, a) {
		var i = 0, 
			len = a.length;
		
		o.options.length = 0;
		
		d = (len > 0) ? d : "Sorry, nothing found";
		
		o.options[0] = new Option(d);
		
		if(len > 1) {
			o.options[1] = new Option("All", "all");
		}
		
		for(; i<len; i++) {
			o.options[o.options.length] = new Option(a[i].decode(), a[i]); // decode() string to convert to unicode chars (global js object string extension)
		}
		
		o = a = i = len = null;
	};
	
	this.cleanSelect = function(o, s) {
		o.options.length = 0;
		o.options[0] = new Option(s);
	
		this.fade(o, 0);
	};
	
	// update drop-down with new user-selected options
	this.search = function(p, f, o, t) {
		if(o.selectedIndex > 0) {
			
			if(o == this.form.country) {
				this.cleanSelect(this.form.region, "Please choose a country");
				this.cleanSelect(this.form.town, "Please choose a country");
			} else if(o == this.form.region) {
				this.cleanSelect(this.form.town, "Please choose a region");
			}
			
			t.options.length = 0;
			t.options[0] = new Option("Loading...");
			
			this.info(true);
			AJAX(this.url + p, f, this);
		} else {
			if(o == this.form.country) {
				this.cleanSelect(this.form.region, "Please choose a country");
				this.cleanSelect(this.form.town, "Please choose a country");
			} else if(o == this.form.region) {
				this.cleanSelect(this.form.town, "Please choose a region");
			}
		}
	};
	
	this.fade = function(s, i) {
		(new YAHOO.util.Anim(s, {opacity: {to: i}}, 1, YAHOO.util.Easing.easeOut)).animate();
	},
	
	// each country/region/town drop down acts slightly differently logically so the following 3 functions do this
	this.countries = function(s, o) {
		o.setSelect(o.form.country, "Please choose a country", eval(s));
		o.info(false);
	}, 
	
	this.regions = function(s, o) {
		o.setSelect(o.form.region, "Please choose a region", eval(s));
		o.fade(o.form.region, 1);
		o.info(false);
	}, 
	
	this.towns = function(s, o) {
		o.setSelect(o.form.town, "Please choose a town", eval(s));
		o.fade(o.form.town, 1);
		o.info(false);
	}, 
	
	// form validation for final submit
	this.validate = function() {
		var c = this.form.country, 
			r = this.form.region,
			t = this.form.town;
			
		if(c.selectedIndex == 0 || c[c.selectedIndex].value == "all") {
			c[c.selectedIndex].value = "";
		}
		if(r.selectedIndex == 0 || r[r.selectedIndex].value == "all") {
			r[r.selectedIndex].value = "";
		}
		if(t.selectedIndex == 0 || t[t.selectedIndex].value == "all") {
			t[t.selectedIndex].value = "";
		}
		
		SearchSaver.memorize(this.menuItem);
		return true;
	}
	
	// fill the country drop-down and it will set the rest of the form
	this.init = function() {
		this.cleanSelect(this.form.region, "Please choose a country");
		this.cleanSelect(this.form.town, "Please choose a country");
		
		this.info(true);
		
		AJAX(this.url +"?s=countries", this.countries, this); //AJAX defined in global js file
		
	};
	
}


var objAdvancedSearch = new Search("frmAdvancedSearch", "tdAdvancedFormInfo");
objAdvancedSearch.init();
var objLocationSearch = new Search("frmSearch", "tdFormInfo");
objLocationSearch.init();
var objAdvancedSearch = new Search("frmAdvancedSearch", "tdAdvancedFormInfo");
objAdvancedSearch.init();
var objOffersSearch = new Search("frmOffersSearch", "tdOffersFormInfo");
objOffersSearch.init();
var objArticlesSearch = new Search("frmArticlesSearch", "tdArticlesFormInfo");
objOffersSearch.init();

Tabber.init(["KeySearch", "Search", "AdvancedSearch", "OffersSearch", "ArticlesSearch"]);

Tabber.disableTab("OffersSearch");
Tabber.disableTab("ArticlesSearch");

var memory = SearchSaver.remember();
if(memory != null) {
	Tabber.openTab(memory);


	Tabber.enableTab("Search");
//	Tabber.enableTab("AdvancedSearch");
	Tabber.enableTab("KeySearch");
//	Tabber.enableTab("OffersSearch");
//	Tabber.enableTab("ArticlesSearch");			
}