/**
 *  author:		Timothy Groves - http://www.brandspankingnew.net
 *	version:	1.2 - 2006-11-17
 *
 *	requires:	bsn.DOM.js
 *				bsn.Ajax.js
 *
 */

var useBSNns;

if (useBSNns){
	if (typeof(bsn) == "undefined")
		bsn = {}
	_bsn = bsn;
}
else{
	_bsn = this;
}


if (typeof(_bsn.DOM) == "undefined")
	_bsn.DOM = {}
	

_bsn.AutoSuggest = function (fldID, param){
	if (!document.getElementById)
		return false;
	
	this.fld = _bsn.DOM.getElement(fldID);

	if (!this.fld)
		return false;
		
	this.nInputChars = 0;
	this.aSuggestions = [];
	this.iHighlighted = 0;
	
	// parameters object
	this.oP = (param) ? param : {};
	// defaults	
	if (!this.oP.minchars)		this.oP.minchars = 1;
	if (!this.oP.method)		this.oP.meth = "get";
	if (!this.oP.varname)		this.oP.varname = "input";
	if (!this.oP.hoe)			this.oP.hoe = 	  "";
	if (!this.oP.welke)			this.oP.welke = 	  "2";
	if (!this.oP.functie)		this.oP.functie = 	  "";
	if (!this.oP.className)		this.oP.className = "autosuggest";
	if (!this.oP.timeout)		this.oP.timeout = 2500;
	if (!this.oP.delay)			this.oP.delay = 1;
	if (!this.oP.maxheight && this.oP.maxheight !== 0)		this.oP.maxheight = 250;
	if (!this.oP.cache)			this.oP.cache = false;
	
	var pointer = this;
	
	this.fld.onkeyup = function () { pointer.getSuggestions( this.value ) };
	this.fld.setAttribute("autocomplete","off");
}


_bsn.AutoSuggest.prototype.getSuggestions = function (val){
	
	if (val.length == this.nInputChars)
		return false;
	
	if (val.length < this.oP.minchars){
		this.nInputChars = val.length;
		this.aSuggestions = [];
		this.clearSuggestions();
		return false;
	}
	
	
	if (val.length>this.nInputChars && this.aSuggestions.length && this.oP.cache)	{
		// get from cache
		var arr = [];
		for (var i=0;i<this.aSuggestions.length;i++){
			if (this.aSuggestions[i].substr(0,val.length).toLowerCase() == val.toLowerCase())
				arr.push( this.aSuggestions[i] );
		}
		
		this.nInputChars = val.length;
		this.aSuggestions = arr;
		
		
		this.createList( this.aSuggestions );
		
		return false;
	}
	
	
	this.nInputChars = val.length;
	
	var pointer = this;
	clearTimeout(this.ajID);
	this.ajID = setTimeout( function() { pointer.doAjaxRequest() }, this.oP.delay );


	return false;
}


_bsn.AutoSuggest.prototype.doAjaxRequest = function (){
	var pointer = this;
	
	// create ajax request
	var url = this.oP.script+this.oP.varname+"="+escape(this.fld.value);
	var meth = this.oP.meth;
	
	var onSuccessFunc = function (req) { pointer.setSuggestions(req) };
	var onErrorFunc = function (status) { alert("AJAX error: "+status); };

	var myAjax = new _bsn.Ajax;
	myAjax.makeRequest( url, meth, onSuccessFunc, onErrorFunc );
}


_bsn.AutoSuggest.prototype.setSuggestions = function (req){
	var xml = req.responseXML;
	if(xml){
		// traverse xml
		this.aSuggestions = [];
		var results = xml.getElementsByTagName('results')[0].childNodes;
		
		for (var i=0;i<results.length;i++){
			if (results[i].hasChildNodes()){
				this.aSuggestions.push( results[i].childNodes[0].nodeValue );
			}
		}
		this.idAs = "as_"+this.fld.id;
		this.createList(this.aSuggestions);
	}
}


_bsn.AutoSuggest.prototype.setClick = function(hoe,gemid,gemnaam,functie){
	if(functie == "Hotels"){
		var pointer = this;
		document.getElementById('gemeente-id-'+hoe).value=gemid;
		document.getElementById('plaats-'+hoe).value=gemnaam;
		document.getElementById('txthotels-'+hoe).style.display = 'block';
		showHotels(hoe,gemid);
		pointer.clearSuggestions();
	}
	if(functie == "Stations"){
		var pointer = this;
		document.getElementById('station-'+hoe).value=gemid;
		document.getElementById('plaats-'+hoe).value=gemnaam;
		pointer.clearSuggestions();
	}
	if(functie == "Plaatsen"){
		var pointer = this;
		document.getElementById('deelgemeenteid-'+hoe).value=gemid;
		document.getElementById('plaats-'+hoe).value=gemnaam;
		pointer.clearSuggestions();
	}
}

_bsn.AutoSuggest.prototype.createList = function(arr){
	hoe = this.oP.hoe;
	functie = this.oP.functie;
	var pointer = this;
	pointer.clearSuggestions();
	
	var ul = _bsn.DOM.createElement("ul", {id:this.idAs, className:this.oP.className});
    for (var i=0;i<arr.length;i++){
    	// DIT IS GEWOON KUT, MAAR HET IS VOOR NU FF DAT HET ZO WERKT.
    	//alert(arr[i]);
    	if(i == 0){
			b = arr[i].split("|");
			if(functie == "Plaatsen")
				var a = _bsn.DOM.createElement("a", { href:"#" }, b[1]+' ('+b[2]+')');
			else
				var a = _bsn.DOM.createElement("a", { href:"#" }, b[1]);
			a.onclick = function () { pointer.setClick(hoe,b[0],b[1],functie); return false; }
			var li = _bsn.DOM.createElement("li",{},a);
			ul.appendChild(li);
    	}
    	if(i == 1){
			c = arr[i].split("|");
			if(functie == "Plaatsen")
				var a = _bsn.DOM.createElement("a", { href:"#" }, c[1]+' ('+c[2]+')');
			else
				var a = _bsn.DOM.createElement("a", { href:"#" }, c[1]);
			a.onclick = function () { pointer.setClick(hoe,c[0],c[1],functie); return false; }
			var li = _bsn.DOM.createElement("li",{},a);
			ul.appendChild(li);
    	}
    	if(i == 2){
			d = arr[i].split("|");
			if(functie == "Plaatsen")
				var a = _bsn.DOM.createElement("a", { href:"#" }, d[1]+' ('+d[2]+')');
			else
				var a = _bsn.DOM.createElement("a", { href:"#" }, d[1]);
			a.onclick = function () { pointer.setClick(hoe,d[0],d[1],functie); return false; }
			var li = _bsn.DOM.createElement("li",{},a);
			ul.appendChild(li);
    	}
    	if(i == 3){
			e = arr[i].split("|");
			if(functie == "Plaatsen")
				var a = _bsn.DOM.createElement("a", { href:"#" }, e[1]+' ('+e[2]+')');
			else
				var a = _bsn.DOM.createElement("a", { href:"#" }, e[1]);
			a.onclick = function () { pointer.setClick(hoe,e[0],e[1],functie); return false; }
			var li = _bsn.DOM.createElement("li",{},a);
			ul.appendChild(li);
    	}
    	if(i == 4){
			f = arr[i].split("|");
			if(functie == "Plaatsen")
				var a = _bsn.DOM.createElement("a", { href:"#" }, f[1]+' ('+f[2]+')');
			else
				var a = _bsn.DOM.createElement("a", { href:"#" }, f[1]);
			a.onclick = function () { pointer.setClick(hoe,f[0],f[1],functie); return false; }
			var li = _bsn.DOM.createElement("li",{},a);
			ul.appendChild(li);
    	}
    	if(i == 5){
			g = arr[i].split("|");
			if(functie == "Plaatsen")
				var a = _bsn.DOM.createElement("a", { href:"#" }, g[1]+' ('+g[2]+')');
			else
				var a = _bsn.DOM.createElement("a", { href:"#" }, g[1]);
			a.onclick = function () { pointer.setClick(hoe,g[0],g[1],functie); return false; }
			var li = _bsn.DOM.createElement("li",{},a);
			ul.appendChild(li);
    	}
    	if(i == 6){
			h = arr[i].split("|");
			if(functie == "Plaatsen")
				var a = _bsn.DOM.createElement("a", { href:"#" }, h[1]+' ('+h[2]+')');
			else
				var a = _bsn.DOM.createElement("a", { href:"#" }, h[1]);
			a.onclick = function () { pointer.setClick(hoe,h[0],h[1],functie); return false; }
			var li = _bsn.DOM.createElement("li",{},a);
			ul.appendChild(li);
    	}
    	if(i == 7){
			j = arr[i].split("|");
			if(functie == "Plaatsen")
				var a = _bsn.DOM.createElement("a", { href:"#" }, j[1]+' ('+j[2]+')');
			else
				var a = _bsn.DOM.createElement("a", { href:"#" }, j[1]);
			a.onclick = function () { pointer.setClick(hoe,j[0],j[1],functie); return false; }
			var li = _bsn.DOM.createElement("li",{},a);
			ul.appendChild(li);
    	}
    	if(i == 8){
			k = arr[i].split("|");
			if(functie == "Plaatsen")
				var a = _bsn.DOM.createElement("a", { href:"#" }, k[1]+' ('+k[2]+')');
			else
				var a = _bsn.DOM.createElement("a", { href:"#" }, k[1]);
			a.onclick = function () { pointer.setClick(hoe,k[0],k[1],functie); return false; }
			var li = _bsn.DOM.createElement("li",{},a);
			ul.appendChild(li);
    	}
    	if(i == 9){
			l = arr[i].split("|");
			if(functie == "Plaatsen")
				var a = _bsn.DOM.createElement("a", { href:"#" }, l[1]+' ('+l[2]+')');
			else
				var a = _bsn.DOM.createElement("a", { href:"#" }, l[1]);
			a.onclick = function () { pointer.setClick(hoe,l[0],l[1],functie); return false; }
			var li = _bsn.DOM.createElement("li",{},a);
			ul.appendChild(li);
    	}
    	if(i == 10){
			m = arr[i].split("|");
			if(functie == "Plaatsen")
				var a = _bsn.DOM.createElement("a", { href:"#" }, m[1]+' ('+m[2]+')');
			else{
				var a = _bsn.DOM.createElement("a", { href:"#" }, m[1]);
			}
			a.onclick = function () { pointer.setClick(hoe,m[0],m[1],functie); return false; }
			var li = _bsn.DOM.createElement("li",{},a);
			ul.appendChild(li);
    	}
    	if(i == 11){
			n = arr[i].split("|");
			if(functie == "Plaatsen")
				var a = _bsn.DOM.createElement("a", { href:"#" }, n[1]+' ('+n[2]+')');
			else
				var a = _bsn.DOM.createElement("a", { href:"#" }, n[1]);
			a.onclick = function () { pointer.setClick(hoe,n[0],n[1],functie); return false; }
			var li = _bsn.DOM.createElement("li",{},a);
			ul.appendChild(li);
    	}
	}
	
	var pos = _bsn.DOM.getPos(this.fld);
	
	ul.style.left = pos.x + "px";
	ul.style.top = ( pos.y + this.fld.offsetHeight ) + "px";
	ul.style.width = this.fld.offsetWidth + "px";
	ul.onmouseover = function(){ pointer.killTimeout() }
	ul.onmouseout = function(){ pointer.resetTimeout() }
	
	document.getElementsByTagName("body")[0].appendChild(ul);
	
	if (ul.offsetHeight > this.oP.maxheight && this.oP.maxheight != 0){
		ul.style['height'] = this.oP.maxheight + "px";
	}
		
	var TAB = 9;
	var ESC = 27;
	var KEYUP = 38;
	var KEYDN = 40;
	var RETURN = 13;
	
	this.fld.onkeydown = function(ev){
		var key = (window.event) ? window.event.keyCode : ev.keyCode;

		switch(key)	{
			case ESC:
			pointer.clearSuggestions();
			break;

			case KEYUP:
			pointer.changeHighlight(key);
			return false;
			break;

			case KEYDN:
			pointer.changeHighlight(key);
			return false;
			break;
			
			case TAB:
			case RETURN:
			if(!arr[pointer.iHighlighted-1]){
				value2 = arr[0];
				bla = value2.split("|");
				id = bla[0];
				
				if(functie == "Hotels"){
					if(arr[0] != ''){
						document.getElementById('gemeente-id-'+hoe).value=id;
						document.getElementById('plaats-'+hoe).value=bla[1];
						showHotels(hoe,id);
						pointer.clearSuggestions();
					}
				}
				else if(functie == "Stations"){
					if(arr[0] != ''){
						document.getElementById('station-'+hoe).value=id;
						document.getElementById('plaats-'+hoe).value=bla[1];
						pointer.clearSuggestions();
					}
				}
				else if(functie == "Plaatsen"){
					if(arr[0] != ''){
						document.getElementById('deelgemeenteid-'+hoe).value=id;
						document.getElementById('plaats-'+hoe).value=bla[1]+" ("+bla[2]+")";
						pointer.clearSuggestions();
					}
				}
			}
			else{
				pointer.setHighlightedValue();
				value2 = arr[pointer.iHighlighted-1];
				bla = value2.split("|");
				id = bla[0];	
				
				if(functie == "Hotels"){
					document.getElementById('gemeente-id-'+hoe).value=id;
					showHotels(hoe,id);
					pointer.clearSuggestions();
				}
				else if (functie == "Stations"){
					document.getElementById('station-'+hoe).value=id;
					pointer.clearSuggestions();
				}
				else if (functie == "Plaatsen"){
					document.getElementById('deelgemeenteid-'+hoe).value=id;
					pointer.clearSuggestions();
				}
			}			
			pointer.clearSuggestions();
			return false;
			break;
		}

	};
	this.iHighlighted = 0;
	clearTimeout(this.toID);
	var pointer = this;
	plaatsje = document.getElementById('plaats-'+hoe).value;
	for (var j=0;j<arr.length;j++){
		blaat2 = arr[j].split("|");
		if(blaat2[1] == plaatsje){
			pointer.clearSuggestions();	
			break;				
		}	
		else
			this.oP.timeout = 2500;	
	}
	
	this.toID = setTimeout(function () { pointer.clearSuggestions() }, this.oP.timeout);
}


_bsn.AutoSuggest.prototype.changeHighlight = function(key){
	var list = _bsn.DOM.getElement(this.idAs);
	if (!list)
		return false;
	
	
	if (this.iHighlighted > 0)
		list.childNodes[this.iHighlighted-1].className = "";
	
	if (key == 40)
		this.iHighlighted ++;
	else if (key = 38)
		this.iHighlighted --;
	
	
	if (this.iHighlighted > list.childNodes.length)
		this.iHighlighted = list.childNodes.length;
	if (this.iHighlighted < 1)
		this.iHighlighted = 1;
	
	list.childNodes[this.iHighlighted-1].className = "highlight";
	
	//alert( list.childNodes[this.iHighlighted-1].firstChild.firstChild.nodeValue );
	
	this.killTimeout();
}


_bsn.AutoSuggest.prototype.killTimeout = function(){
	clearTimeout(this.toID);
}


_bsn.AutoSuggest.prototype.resetTimeout = function(){
	clearTimeout(this.toID);
	var pointer = this;
	this.toID = setTimeout(function () { pointer.clearSuggestions() }, 1000);
}


_bsn.AutoSuggest.prototype.clearSuggestions = function (){
	if (document.getElementById(this.idAs))
		_bsn.DOM.removeElement(this.idAs);
	this.fld.onkeydown = null;
	
}


_bsn.AutoSuggest.prototype.setHighlightedValue = function (){
	if (this.iHighlighted){
		this.fld.value = document.getElementById(this.idAs).childNodes[this.iHighlighted-1].firstChild.firstChild.nodeValue;
		this.killTimeout();
		this.clearSuggestions();
	}
}


_bsn.AutoSuggest.prototype.setValue = function (val){
	this.fld.value = val;
	this.resetTimeout();
}