if (!colruyt) var colruyt = window.colruyt = {};
ee = function(obj){
	el = document.getElementById(obj);
	if (!el) { el = document[obj]; }
	if (!el && document.all) { el = document.all[obj]; }
	if (!el) { el = obj; }
	return el;
};
addEvent = function(obj, evt, notify){
	if (obj.attachEvent){
		obj.attachEvent('on' + evt, notify);	
	}else 
	if (obj.addEventListener){
		obj.addEventListener(evt,notify,false);
	}
};
$getClass = function(obj){
	return obj.className;
};
setClass = function(obj, className){
	obj.className = className;
};
addClass = function(obj, className){
	if(!hasClass(obj, className))
	{
		cl = $getClass(obj).split(" ");
		cl.push(className);
		setClass(obj, cl.join(" "));
	}
};
removeClass = function(obj, className){
	if(hasClass(obj, className))
	{
		cl = $getClass(obj).split(" ");
		for (i=0; i < cl.length; i++){
			if(cl[i] == className) 
			{
				cl.splice(i, 1);
				setClass(obj, cl.join(" "));
				return;
			}
		}
	}
};
replaceClass = function(obj, oldClassName, newClassName){
	removeClass (obj, oldClassName);
	addClass(obj, newClassName);
};
hasClass = function(obj, className){
	//cl = getClass(obj).split(" ");
	cl = obj.className.split(" ");
	for (i=0; i < cl.length; i++){
		if(cl[i] == className) return true;
	}
	return false;
};
colruyt.ajax = {
	createXmlHttpRequest:function() {
		try {
			if (typeof ActiveXObject != 'undefined') {
				return new ActiveXObject('Microsoft.XMLHTTP');
			} else if (window["XMLHttpRequest"]) {
				return new XMLHttpRequest();
			}
		} catch (e) {}
		return null;
	},
	download:function(url, callback) {
		var status = -1;
		var request = this.createXmlHttpRequest();
		if (!request) { return false; }
		
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				try {
					status = request.status;
				} catch (e) {}
				if (status == 200) {
					callback(request.responseXML, request.status);
					request.onreadystatechange = function() {};
				}
			}
	 	}
		request.open('GET', url, true);
		try {
			request.send(null);
		} catch (e) {}
	}
};
colruyt.Branchsel = function(searchbox, resultsbox){
	this.searchbox = ee(searchbox);
	this.resultsbox = ee(resultsbox);
	addClass(this.resultsbox, "empty");
	var me=this;
	addEvent(this.searchbox.form, "submit", function(evt){ return me.submit(evt); });
}

colruyt.Branchsel.prototype ={
	check:function(){
		alert("check");
	},
	submit:function(evt){
		this.search(this.searchbox.value);
		try{evt.preventDefault();}catch(err){}
		return false;
	},	
	search:function(searchString){
		url = this.cten.URL_LOC_SEARCH;
		if(!searchString) return;
		url += "&"+this.cten.SEARCH_PARAM+"=" + escape(searchString);
		this.onSearch();
		this.getResults(url);
	},
	getStores:function(postcode){
		url = this.cten.URL_BRANCH_SEARCH;
		if(!postcode) return;
		url += "&"+this.cten.SEARCH_PARAM+"=" + postcode;
		this.onSearch();
		this.getResults(url);
	},
	getResults:function(url){
		removeClass(this.resultsbox, "results");
		removeClass(this.resultsbox, "noresults");
		replaceClass(this.resultsbox, "empty", "searching");
		try{this.resultsbox.innerHTML = "";}catch(e){}
		me=this;
		colruyt.ajax.download(url,
		function(data, status){
			var no_results = function(){
				removeClass(me.resultsbox, "searching");
				addClass(me.resultsbox, "noresults");
				me.resultsbox.innerHTML = me.i18n.no_results;
				me.onNoDataFound();
			}		
			me.onDataLoaded();
			if (data && data.documentElement)
			{
				var winkels = data.documentElement.getElementsByTagName(me.cten.TAG_BRANCH);
				if(winkels.length == 0){
					var gemeentes = data.documentElement.getElementsByTagName(me.cten.TAG_LOC);
					if(gemeentes.length != 0){
						me.createGemeentes(gemeentes);
					}else{
						no_results();
					}
				}else{
					me.createWinkels(winkels);
				}
			}else{
				no_results();
			}
		});
		return false;
	},
	createGemeentes:function(gemeentes){
		if(gemeentes.length > 0)
			replaceClass(this.resultsbox, "searching", "results");
		this.onShowResults();
		this.resultsbox.innerHTML = "";
		for (i=0; i<gemeentes.length; i++){
			g = new this.Gemeente(gemeentes[i], this);
			this.resultsbox.appendChild(g.obj);			
		}
	},
	createWinkels:function(winkels){
		if(winkels.length > 0)
			replaceClass(this.resultsbox, "searching", "results");
		this.onShowResults();
		this.resultsbox.innerHTML = "";
		for (i=0; i<winkels.length; i++){
			w = new this.Winkel(winkels[i], this);
			this.resultsbox.appendChild(w.obj);
		}
	},
	createContainer:function(html, className, id, tagName){
		if(!tagName) tagName = "div";
		e = document.createElement(tagName);
		if(html) e.innerHTML = html;
		if(id) e.id = id;
		if(className) e.className = className;
		return e;
	},
	Gemeente:function(data, bs){
		this.Postcode = data.getAttribute(bs.cten.ATT_POSTCODE);
		this.Name = data.getAttribute(bs.cten.ATT_CITY);
		this.Draw = function(){
			var result = document.createElement("div");
			var me = this;
			addEvent(result, "mouseover", function(evt){ addClass(result, 'over'); bs.onCityMouseOver(me); });
			addEvent(result, "mouseout", function(evt){ removeClass(result, 'over'); bs.onCityMouseOut(me); });
			result.className = "city";
						
			// postcode + city
			li = document.createElement("li");
			li.className = "line1";
			li.appendChild(bs.createContainer(this.Postcode,bs.cten.ATT_POSTCODE,null,"span"));
			li.appendChild(bs.createContainer(this.Name,bs.cten.ATT_CITY,null,"span"));
			result.appendChild(li);
			
			// choose
			li = document.createElement("li");
			li.className = "button";
			li.appendChild(bs.createContainer(bs.i18n.select, null, null, "span"));
			result.appendChild(li);
						
			d = bs.createContainer("","button");
			result.appendChild(d);
			
			addEvent(result, "click", 
			function(evt){
				if(!bs.onSubmit) return;
				bs.getStores(data.getAttribute(bs.cten.ATT_POSTCODE));
				return false;
			});
			
			return result;
		};
		this.obj = this.Draw();
	},
	Winkel:function(data, bs){
		this.Name = data.getAttribute(bs.cten.ATT_NAME);
		this.Street = data.getAttribute(bs.cten.ATT_STREET);
		this.Number = data.getAttribute(bs.cten.ATT_NUMBER);
		this.Postcode = data.getAttribute(bs.cten.ATT_POSTCODE);
		this.City = data.getAttribute(bs.cten.ATT_CITY);
		this.Id = data.getAttribute(bs.cten.ATT_BRANCHID);
		this.Draw = function(){
			var result = document.createElement("div");
			var me = this;
			addEvent(result, "mouseover", function(evt){ addClass(result, 'over'); bs.onBranchMouseOver(me); });
			addEvent(result, "mouseout", function(evt){	removeClass(result, 'over'); bs.onBranchMouseOut(me); });
						
			result.className = "branch";
						
			var li;
			
			// name			
			li = document.createElement("li");
			li.className = "line1";
			li.appendChild(bs.createContainer(this.Name,bs.cten.ATT_NAME, null, "span"));
			result.appendChild(li);
			
			// street + nr
			li = document.createElement("li");
			li.className = "line2";
			li.appendChild(bs.createContainer(this.Street,bs.cten.ATT_STREET, null, "span"));
			if(this.Number)
				li.appendChild(bs.createContainer(this.Number,bs.cten.ATT_NUMBER, null, "span"));
			result.appendChild(li);
			
			// postcode + city
			li = document.createElement("li");
			li.className = "line3";
			li.appendChild(bs.createContainer(this.Postcode,bs.cten.ATT_POSTCODE, null, "span"));
			li.appendChild(bs.createContainer(this.City,bs.cten.ATT_CITY, null, "span"));
			result.appendChild(li);
						
			// choose
			li = document.createElement("li");
			li.className = "button";
			li.appendChild(bs.createContainer(bs.i18n.more_info, null, null, "span"));
			result.appendChild(li);
						
			//addEvent(e, "click", 
			addEvent(result, "click", 
			function(evt){
				if(!bs.onSubmit) return;
				bs.onBranchSelect(me);
				return false;
			});
			
			return result;
		};
		this.obj = this.Draw();
	},
	cten:{
		
		SEARCH_PARAM:'s',
		TAG_BRANCH:'branch',
		TAG_LOC:'loc',
		ATT_NAME:'name',
		ATT_BRANCHID:'id',
		ATT_STREET:'street',
		ATT_NUMBER:'nr',
		ATT_POSTCODE:'postcode',
		ATT_CITY:'cityname'
	},
	// callback events
	onDataLoaded:function(){},
	onSearch:function(){},
	onShowResults:function(){},
	onSubmit:function(){},
	onCityMouseOver:function(city){},
	onCityMouseOut:function(city){},
	onBranchMouseOver:function(branch){},
	onBranchMouseOut:function(branch){},
	onBranchSelect:function(branch){},
	onNoDataFound:function(){}
};

calcLoc = function(area){
	var coords = area['coords'].split(",");
	var xV=0,yV=0;
	for (var i=0; i<coords.length - 1; i+=2)
	{
		xV+=parseInt(coords[i].replace(/\s*?/ig, ""));
		yV+=parseInt(coords[i+1].replace(/\s*?/ig, ""));
	}
	return ({
		x: parseInt(xV / (coords.length/2)),
		y: parseInt(yV / (coords.length/2))
	});
};

findBranches=function(){
	var areas = document.getElementsByTagName("area");
	var i;
	for (i=0; i<areas.length; i++)
	{
		if (areas[i].href && areas[i].href.length > 0)
		{
			var href = areas[i].href;
			var f = /filiaal=([0-9][^&|\n].*?)&/i.exec(href);
			if(f) {
				branchCol[f[1]] = {
					p : areas[i].parentNode.name.replace("_fullMap",""),
					a : areas[i]
					,l : calcLoc(areas[i])
				}
			}
		}
	}
}
