var s;

Keyboard = {RETURN:13, TAB:9, ESCAPE:9, ARROW_UP:38, ARROW_DOWN:40 }

Suggest = function(targetId, queryURL){
	this.items = [];
	this.selectedIndex = -1;
	this.selectedItem;
	this.queryURL = queryURL;
	this.text = "";
	this.target = $("#"+targetId);	
	
	var reference = this;

        this.target.attr("autocomplete","off");

	this.target.keypress(function(event){ 
		return reference.onKeyPress(event);
	})
	
	this.target.keyup(function(event){ 
		return reference.onKeyUp(event);
	})
	s = this;
}

Suggest.prototype.onKeyPress = function (event){
	var keyCode = (window.event) ? window.event.keyCode : event.keyCode;
	var bubble = 1;

	switch(keyCode)	{
		case Keyboard.RETURN:
			if (this.selectedIndex != -1){
				value = "specialiste/sr/" + this.selectedItem.id;	
			} else {
				value = "specialiste/" + this.target.attr("value");
			}
			$('#hiddenSearch').attr('value', value);
			bubble = 0;
			break;

		case Keyboard.ESCAPE:
			$(".autosuggest").fadeOut();
			break;
	}

	return bubble;
}

Suggest.prototype.onKeyUp = function(event) {
	var keyCode = (window.event) ? window.event.keyCode : event.keyCode;
	var bubble = 1;
	switch(keyCode)	{
		case Keyboard.ARROW_UP:
			if(this.selectedIndex > 0){
				this.selectedIndex--;
				this.selectedItem = this.items[this.selectedIndex];
				this.highlight();
			}
			bubble = 0;
			break;
		case Keyboard.ARROW_DOWN:
			if (this.selectedIndex < this.items.length-1){
				this.selectedIndex++;
				this.selectedItem = this.items[this.selectedIndex];
				this.highlight();
			}
			bubble = 0;
			break;
		default:
			this.text = this.target.attr("value");
			if (this.text.length > 2) this.getResults();
	}
	return bubble;	
}

Suggest.prototype.getResults = function (){
	jQuery.get(this.queryURL, {search:this.text}, this.parseResults)
}

Suggest.prototype.highlight = function () {
	$(".autosuggest li").removeClass("highlight");
	$(".autosuggest li").eq(this.selectedIndex+1).addClass("highlight");
}

Suggest.prototype.parseResults = function (data, textStatus){
	s.items.length = 0;
	s.items = [];
	var xml = data.responseXML;
	var results = data.getElementsByTagName('results')[0].childNodes;
	var l = (results.length > 12) ? 12 : results.length;
	
	for (var i=0;i < l ;i++){
		if (results[i].hasChildNodes()) {
			s.items.push({'id'	:results[i].getAttribute('id'), 
							 'value':results[i].childNodes[0].nodeValue, 
							 'info'	:results[i].getAttribute('info')});
		}
	}
	
	s.createList()
}

Suggest.prototype.createList = function (){
	$(".autosuggest").remove();
	
	var ul = '<ul class="autosuggest">';
	ul += '<li class="top">&nbsp;</li>';
	
	
	if (this.items.length > 0){
		for (i=0; i< this.items.length; ++i){
			var txt = this.items[i].value.replace(this.text,"<em>$&</em>");
			ul += '<li><a href="specialiste/sr/'+this.items[i].id+'">' + this.items[i].value + '<small>'+ this.items[i].info+'</small></a></li>';
		}
	} else {
		ul += '<li>Aucun résultat</li>'
	}
	ul += '<li class="bottom">&nbsp;</li>';
	$("#searchRayon").after(ul);
	
	$(".autosuggest").fadeIn();
}
