var TCESuggest = Class.create();

TCESuggest.prototype = {
	initialize: function(searchBoxId, responseContainer) {
		this.searchBox = $(searchBoxId);
		this.searchBox.onkeyup = this.handleKey.bindAsEventListener(this, "hehe");
		this.responseContainer = responseContainer;
		this.highlightedElemenNr = 0;
	},
	
	handleSuggest: function() {
	
		if($(this.responseContainer).visible() == false) {
			this.clear();
			this.show();
		}
	
		suggestValue = $F(this.searchBox).replace(/\?/, "*");
			
		var myAjax = new Ajax.Updater(
			this.responseContainer,
			'/',
			{
				method: 'get',
				parameters: 'suggest=' + suggestValue
			}
		);
	},

	handleSuggestDebug: function(event, extraInfo) {
		var myAjax = new Ajax.Request(
			'/',
			{
				method: 'get',
				parameters: 'suggest=' + this.searchBox.value,
				onComplete: this.show
			}
		);
	},


	handleKey: function(event, extraInfo) {
		switch(event.keyCode)
		{
			// Escape
			case 27:
				this.close();
				break;
				
			// ArrowUp
			case 38:
				this.arrowUp();
				break;	
				
			// ArrowDown
			case 40:
				this.arrowDown();
				break;
			
			default:
				this.highlightedElemenNr = 0;
				this.handleSuggest();
				break;
		}
		
		return false;
	},
	
	arrowUp: function() {
		if(this.highlightedElemenNr > 0) {
			$("suggest"+this.highlightedElemenNr).className = "suggestNormal";
		}
		this.highlightedElemenNr --;
		if($("suggest"+this.highlightedElemenNr)) {
			$("suggest"+this.highlightedElemenNr).className = "suggestHigh";
		}
		else {
			this.highlightedElemenNr = 1;
			$("suggest"+this.highlightedElemenNr).className = "suggestHigh";
		}
		this.searchBox.value = $("suggestWord"+this.highlightedElemenNr).innerHTML;
	},
	
	arrowDown: function() {
		if(this.highlightedElemenNr > 0) {
			$("suggest"+this.highlightedElemenNr).className = "suggestNormal";
		}
		this.highlightedElemenNr ++;
		
		if($("suggest"+this.highlightedElemenNr)) {
			$("suggest"+this.highlightedElemenNr).className = "suggestHigh";
		}
		else {
			this.highlightedElemenNr --;
			$("suggest"+this.highlightedElemenNr).className = "suggestHigh";
		}
		this.searchBox.value = $("suggestWord"+this.highlightedElemenNr).innerHTML;
	},
	
	close: function() {
		$(this.responseContainer).hide();
	},
	
	show: function(response) {
		$(this.responseContainer).show();
	},
	
	clear: function () {
		$(this.responseContainer).update('');
	}
}

window.onload = function () {
	var suggest = new TCESuggest("searchTerm", "searchTermContainer");
}