/*init the searchKey input box*/
$('searchKey').setAttribute('autocomplete','off');
$('searchForm').setAttribute('autocomplete','off');

$('searchKey').addEvents({
		'keyup': function(e) {
			var charCode = (e.charCode) ? e.charCode : (e.which ? e.which : e.keyCode);
			e = new Event(e).stop();
			switch(charCode) {
				case 40:
					if($('suggestTable').getStyle('visibility') == 'visible') {
						suggest.pressDown();
					}
					break;
				case 38:
					if($('suggestTable').getStyle('visibility') == 'visible') {
						suggest.pressUp();
					}
					break;
				case 27:
					if($('suggestTable').getStyle('visibility') == 'visible') {
						suggest.pressEsc();
					}
					break;
				case 13:
					break;
				default:
					keyword = this.value;
					if(keyword=='') {
						suggest.hide();
						break;
					}
					var url = '/api/searchsuggest.php?q='+keyword;
					var request = new Json.Remote(url, {
						onComplete: function(jsonObj) {
							suggest.start(jsonObj);
						}
					}).send();
					break;
			}
		},
		
		'keypress': function(e) {
			var charCode = (e.charCode) ? e.charCode : (e.which ? e.which : e.keyCode);
			if(charCode == 13){
				if($('suggestTable').getStyle('visibility') == 'visible' && suggest.getSelectedIndex()!=-1) {
					suggest.pressEnter();
					e = new Event(e).stop();
				}
				
			}
		}
});

document.addEvents({
	'click': function(e) {
		suggest.hide();
	}
});

/*the Suggest Object*/
var suggest = {
	start: function(suggestlist) {
		this.clearTable();
		suggestlist.each(function(item) {
			suggest.addSuggestItem(item);
		});
		this.setTableLoc();
		$$('#suggestTable tr').each(function(item){
			suggest.addEvent(item);
		});
		this.show();
	},
	
	addEvent: function(target) {
		target.addEvents({
			'mouseover': function(e) {
				if(window.ie == true)
					e.target = e.srcElement;
				$$('#suggestTable tr').each(function(i) {
					i.removeClass('suggest-row-selected');
					i.addClass('suggest-row');
				});
				var td = e.target;
				td.parentNode.removeClass('suggest-row');
				td.parentNode.addClass('suggest-row-selected');
			},
			
			'click': function(e) {
				var tr = $$('.suggest-row-selected')[0];
				var td = tr.firstChild;
				var content = td.innerHTML;
				$('searchKey').value = content;
				suggest.hide();
			}
		});
	},
	
	pressUp: function() {
		var index = this.getSelectedIndex();
		if(index <= 0)
			return;
		this.setSelectedIndex(index-1);		
	},
	
	pressDown: function() {
		var index = this.getSelectedIndex();
		if(index == $('suggestTable').rows.length-1)
			return;
		this.setSelectedIndex(index+1);		
	},
	
	pressEsc: function() {
		this.hide();
	},
	
	pressEnter: function() {
		var tr = $('suggestTable').rows[this.getSelectedIndex()];
		var td = tr.firstChild;
		var content = td.innerHTML;
		$('searchKey').value = content;
		this.hide();
	},
	
	hide: function() {
		$('suggestTable').setStyle('visibility','hidden');
	},
	
	show: function() {
		$('suggestTable').setStyle('visibility','visible');
	},
	
	setSelectedIndex: function(index) {
		$$('#suggestTable tr').each(function(i) {
			i.removeClass('suggest-row-selected');
			i.addClass('suggest-row');
		});
		$('suggestTable').rows[index].removeClass('suggest-row');
		$('suggestTable').rows[index].addClass('suggest-row-selected');
	},
	
	getSelectedIndex: function() {
		if($$('.suggest-row-selected')[0] == null)
			return -1;
		else {
			var tr = $$('.suggest-row-selected')[0];
			return tr.rowIndex;
		}
	},
	
	setTableLoc: function() {
		var left = $('searchKey').getLeft();
		var top = $('searchKey').getTop() + $('searchKey').offsetHeight - $('searchKey').getStyle('margin-bottom').toInt();
		var width = $('searchKey').offsetWidth - $('searchKey').getStyle('padding-left').toInt() - $('searchKey').getStyle('padding-right').toInt();
		$('suggestTable').setStyle('left',left+'px');
		$('suggestTable').setStyle('top',top+'px');
		$('suggestTable').setStyle('width', width+'px');
		
	},
	
	clearTable: function() {
		$('suggestTable').setStyle('visibility', 'hidden');
		rowcount = $('suggestTable').rows.length;
		for(i=rowcount-1; i>=0; i--) {
			$('suggestTable').deleteRow(i);
		}
	},
	
	addSuggestItem: function(item) {
		var tr = document.createElement('tr');
		tr.setAttribute('class','suggest-row');
		var td_name = document.createElement('td');
		td_name.setAttribute('class','suggest-item-name');
		td_name.appendChild(document.createTextNode(item[0]));
		var td_info = document.createElement('td');
		td_info.setAttribute('class','suggest-item-info');
		td_info.appendChild(document.createTextNode(item[1]));
		tr.appendChild(td_name);
		tr.appendChild(td_info);
		$('suggestTable').tBodies[0].appendChild(tr);
	}	
};


/*build the table*/
//window.addEvent('domready', function(){
  var table = document.createElement('table');
	table.id = 'suggestTable';
	table.setAttribute('cellspacing',0);
	table.setAttribute('cellpadding',0);
	var tbody =  document.createElement('tbody');
	table.appendChild(tbody);
	document.body.appendChild(table);
	suggest.hide();
	suggest.setTableLoc();
//});

	
