var getting_suggestions = false;
var num_suggestions = 0;
var first_search_char = "";
var selected_suggestion = -1;
var highlight_location = -1;
var queued_get_suggests = false;

function suggest_key_down(event){
	if (event != null) {
		keycode = event.keyCode;
		if (keycode == 13 && selected_suggestion >= 0){
			var suggestion = document.getElementById("suggestion" + selected_suggestion);
			submit_suggestion(suggestion.innerHTML);
		} else if (keycode == 40) {
			//down
			next_suggestion();
		} else if (keycode == 38){
			//up
			previous_suggestion();
		}
	}
}

function process_suggest_keystroke(url,event){
	var text = false;
	if (event != null) {
		keycode = event.keyCode;
		 if (keycode != 13 && (keycode < 37 || keycode > 40) ) {
			//not enter, up or down
			text = true;
		}
	}
	
	if(text){
		get_suggest(url);
	}
	
}

function get_suggest(url){
	search_term = document.getElementById('search_input').value;
	
	if(first_search_char == "" || first_search_char != search_term.charAt(0)){
		hide_suggestions();
		getting_suggestions = true;
		first_search_char = search_term.charAt(0);
		form_fields = "action=ajax&ajax_search=" + first_search_char;
		document.getElementById('search-suggest').style.display = "block";
		makeRequest(url, form_fields);
	} else if (search_term.length == 0){
		document.getElementById("search-suggest").innerHTML = "";
		hide_suggestions();
		num_suggestions = 0;
		first_search_char = "";
	} else if (!getting_suggestions){
		refining_search_term();
	} else {
		queued_get_suggests = true;
	}
}

function refining_search_term(){
	search_term = document.getElementById('search_input').value;
	var num_displayed = 0;
	
	for(var i = 0; i < num_suggestions; i++){
		var div_id = "suggestion" + i;
		var suggestion = document.getElementById(div_id);
		var name = suggestion.innerHTML;
		name = name.toLowerCase();
		if(suggestion.style.display != "none"){
			if(!name.match(search_term.toLowerCase())){
				suggestion.style.display = "none";
			} else {
				num_displayed++;
			}
		}else{
			if(name.match(search_term.toLowerCase())){
				suggestion.style.display = "block";
				num_displayed++;
			}
		}
	}
	set_suggest_box(num_displayed);
}


function set_suggest_box(num_displayed){
	if(num_displayed > 7){
		document.getElementById('search-suggest').style.height = "91px";
		document.getElementById('search-suggest').style.display = "block";
	} else if(num_displayed == 0) {
		hide_suggestions();
	} else {
		document.getElementById('search-suggest').style.height = "auto";
		document.getElementById('search-suggest').style.display = "block";
	}
	highlight_suggestion(-1);
	highlight_location = -1;
	document.getElementById('search-suggest').scrollTop = 0;
	
}

function hide_suggestions(){
	document.getElementById('search-suggest').style.height = "0px";
	document.getElementById('search-suggest').style.display = "none";
	document.getElementById('search-suggest').scrollTop = 0;
}

function submit_suggestion(term){
	if(term != null && term.length > 0){
		document.getElementById('search_input').value = term;
		hide_suggestions();
		document.frm_search.submit();
	}
}

function highlight_suggestion(suggestion_number){

	if(selected_suggestion >= 0){
		var curr_suggestion_id = "suggestion" + selected_suggestion;
		var curr_suggestion = document.getElementById(curr_suggestion_id);
		curr_suggestion.style.background = "#FFFFFF";
	}
	selected_suggestion = suggestion_number;
	if(suggestion_number >= 0){
		var suggestion_id = "suggestion" + suggestion_number;
		var suggestion = document.getElementById(suggestion_id);
		suggestion.style.background = "#e69302";
	}
}

function next_suggestion(){
	if (highlight_location < 6) {
		highlight_location++
	} else {
		document.getElementById('search-suggest').scrollTop += 13;
	}
	
	var curr_suggestion = selected_suggestion;
	var done = false;
	while(!done){
		curr_suggestion++;
		if(curr_suggestion < num_suggestions){
			var suggestion_id = "suggestion" + curr_suggestion;
			if (document.getElementById(suggestion_id).style.display != "none") {
				highlight_suggestion(curr_suggestion);
				selected_suggestion = curr_suggestion;
				done = true;
			}
		} else {
			done = true;
		}
	}
}

function previous_suggestion(){
	if (highlight_location > 0) {
		highlight_location--;
	} else {
		document.getElementById('search-suggest').scrollTop  -= 13;
	}
	
	var curr_suggestion = selected_suggestion;
	var done = false;
	while(!done){
		curr_suggestion--;
		if(curr_suggestion > -1){
			var suggestion_id = "suggestion" + curr_suggestion;
			if (document.getElementById(suggestion_id).style.display != "none") {
				highlight_suggestion(curr_suggestion);
				selected_suggestion = curr_suggestion;
				done = true;
			}
		} else {
			done = true;
		}
	}
}