var oldInput = "";
var lastInput = 0;
var selected = null;
var id = 0;
var keys = null;
var mode = '';

$(document).ready(function(){
	//Navigation
	$('#addKeyword input').keyup(function(e){
		switch(e.keyCode) {
			case 38: // up
				moveSelect(-1);
				break;
			case 40: // down
				moveSelect(1);
				break;
			case 9:  // tab
			case 13: // return
				keys = null;
				output.hide();
				break;
			default:
				search($(this).val(), $(this).siblings('div'));
				break;
		}
	});
	
	//Handle clicks actions
	$('#addKeyword div.searchOutput p').live('click', function(){
		id = keys.index($(this));
		setSelected($(this));
		$('form#addKeyword').trigger('submit');
	});

	$('#addKeyword div.searchOutput p').live('mouseover', function(){
		if(mode == 'keyboard'){
			unsetSelected();
			mode = 'mouse';
		}
		id = keys.index($(this));
		setSelected($(this));
	});

	$('#addKeyword div.searchOutput p').live('mouseout', function(){
		unsetSelected($(this));
	});

	//Submit by redirecting to the correct page
	$('form#addKeyword').submit(function(){
		if(selected == null) return false;

		var current = selected.attr('name');
		var url = cur_base + '/';
		if(current.charAt(0) == 'c')
			url += 'c:';
		url += current.substr(4);
		$(location).attr('href',url);
		return false;
	});
});

//Search keywords
function search(input, output){

	//Check input
	if(input.length < 1 || input == oldInput){
		output.html("").hide();
		return false;
	}
	oldInput = input;

	//Reset output
	id = 0;
	selected = null;

	//Get possible keywords
	$.ajax({
		type	: "GET",
		url	: "/site/ajaxSearchKeywords.php",
		data	: {start:input, keys:cur_keys, cats:cur_cats, base:cur_base, suffix:cur_suffix},
		success	: function(data, textStatus){
			var now = new Date().getTime();
			if(now >= lastInput){
				output.html(data).show();
				keys = $('#addKeyword div').children('p');
			}
		},
		beforeSend : function(){
			if(keys == null)
				output.html('<p>Loading...</p>').show();
		},
		error	: function(XMLHttpRequest, textStatus, errorThrown){
			output.html("<p>Can't process your search. Sorry...</p>").show();
		}
	});
	lastInput = new Date().getTime();
}

//Select an item in list
function moveSelect(step){
	mode = 'keyboard';
	if(keys == null) return false;

	//First movement
	if(selected == null){
		id = 0;

	//Normal movement
	}else if(id + step >=0 && id + step < keys.length){
		id += step;
		selected.removeClass("selected");

	//Incorrect movement
	}else
		return false;

	//Update selected
	setSelected(keys.eq(id));

	return true;
}

//Set current selected item
function setSelected(item){
	selected = item;
	selected.addClass("selected");
	$('#addKeyword input:first').val(selected.find('span:last').text());
	$('#addKeyword input[type=hidden]').val(selected.attr('name'));
}

//Unset selected element
function unsetSelected(){
	id = 0;
	if(selected != null){
		selected.removeClass("selected");
	}
}
