// global variables
var vListTotal   =  0;
var vListCurrent = -1;
var vDelay = 175;

var vBackURL = '/api/suggest.php?q=';
var vResultDiv = null;
var inited = false;

var q_fields = new Array();

function initSuggestions(field_id) {
	if (!inited) {
		$("body").append('<div id=_suggest></div>');
		vResultDiv  = $('#_suggest');
		inited = true;
	}
	q_fields[field_id] = $("#" + field_id);
	
	var fld = q_fields[field_id];
	
	fld.blur(function(){ setTimeout("clearSuggestions()", 250) });
	fld.keyup(function (e) {
		var _fld = q_fields[field_id];
		var keyCode = e.keyCode || window.event.keyCode;
		var lastVal = _fld.val();

		if(nextPrevArrow(_fld, keyCode)) return;

		if(keyCode == 13){
			clearSuggestions();
			_fld.parents('form:first').submit();
			return;
		}
		if (keyCode == 27) {
			clearSuggestions();
			return;
		}
		setTimeout(function () {autoComplete(_fld, lastVal)}, vDelay);
	});
}

function autoComplete(fld, lastValue) {
	var part = fld.val();

	if(part == '' || part.length < 2){ clearSuggestions();	return;	}
	
	if(lastValue != part){ return; }
	
	repositionResultsDiv(fld);

	$.getJSON(vBackURL + part, function(json){
		var ansLength = vListTotal = json.length;

		if(ansLength > 0){
			var newData = '';
			for(i=0; i < ansLength; i++) newData += '<div class=_unselected>' + json[i] + '</div>';
			
			vResultDiv.html(newData);
			vResultDiv.css("display","block");
			
			var divs = $('#_suggest' + " > div");
		
			divs.mouseover( function() {
				divs.each(function(){ this.className = "_unselected"; });
				this.className = "_selected";
			})
		
			divs.click( function() {
				fld.val(this.childNodes[0].nodeValue);
				clearSuggestions();
				fld.parents('form:first').submit();
			});
		} else {
			clearSuggestions();
		}
	});
}

function clearSuggestions() { vResultDiv.html(''); vResultDiv.css("display","none"); }

function repositionResultsDiv(fld) {
	var sf_pos    = fld.offset();
	var sf_top    = sf_pos.top;
	var sf_left   = sf_pos.left;
	var sf_height = fld.height();
	var sf_width  = fld.width();
	vResultDiv.css("position","absolute");
	vResultDiv.css("left", sf_left - 2);
	vResultDiv.css("top", sf_top + sf_height + 5);
	vResultDiv.css("width", sf_width + 4);
}


function nextPrevArrow(fld, keyCode) {
	if(keyCode == 40 || keyCode == 38){
		if(keyCode == 38){ // up
			if(vListCurrent == 0 || vListCurrent == -1){ vListCurrent = vListTotal-1; }else{ vListCurrent--; }
		} else { // down
			if(vListCurrent == vListTotal-1){ vListCurrent = 0; } else { vListCurrent++; }
		}

		vResultDiv.children().each(function(i){
			if(i == vListCurrent){
				fld.val(this.childNodes[0].nodeValue);
				this.className = "_selected";
			} else {
				this.className = "_unselected";
			}
		});
		return true;
	} else {
		vListCurrent = -1;
		return false;
	}
}
