// SEARCH SUGGEST - V1.4.1 - by Alberto Sarullo - www.albertosarullo.it
	
var activeIndex = 0;
var activeList = [];

var input_text;
var inputHasFocus = false;
var searchResultOver = false;
var searchResultDivOver = true;
var searchResultDiv2Over = true;

var popup;
var numDigit = 0; // caratteri digitati
var keynum;
var list;

var suggest_max_number = 10;
var city = [];
var suggestInitialized = false;

popup = document.getElementById("popup");

// workaround x xhtml 1.1 strict
document.getElementById("q").setAttribute('autocomplete','off');

function onFocus(){
	inputHasFocus = true;
	if(suggestInitialized==false){
		suggestInit();
	}
}


function suggestInit(){
	dhtmlLoadScript("/script/searchSuggest.js");
	suggestInitialized = true;
}

function onBlur(){
	inputHasFocus = false;
	//removeChilds("");
	// setCssClass(popup,"hide");
}

// patch x diverso comportamento di .class e .className
function setCssClass(domNode, cssClass){
	if(domNode){
		domNode.setAttribute('class',cssClass);
		domNode.className = cssClass;
	}
}

function removeChilds(domNode){
	popup.innerHTML = '';
}



function incrementa(){
	setCssClass(document.getElementById("s_id_"+activeIndex),'classeProva');
	//activeIndex = (activeIndex+1)%activeList.length;
	activeIndex = (activeIndex+1)%(suggest_max_number+1);
	setCssClass(document.getElementById("s_id_"+activeIndex),'classeProvaActive');
	setText(activeIndex);
	selectLastChars();
}



function decrementa(){
	setCssClass(document.getElementById("s_id_"+activeIndex),'classeProva');
	if(activeIndex <= 0){
		activeIndex = (suggest_max_number+1);
	}
	//activeIndex = (activeIndex-1)%activeList.length;
	activeIndex = (activeIndex-1)%(suggest_max_number+1);
	setCssClass(document.getElementById("s_id_"+activeIndex),'classeProvaActive');
	setText(activeIndex);
	selectLastChars();
}

function setText(activeIndex){
	if(popup.childNodes.length){
		document.getElementById("q").value = list[activeIndex]; 
		document.getElementById("q").focus();	
	}
}

function PisteCiclabiliSuggest(index){
	setText(index);
	document.forms["form_cerca"].submit();	
}

function getKeyCode(event){
	if(window.event){		// IE
		return event.keyCode;
	}
	else{
		if(event.which){ 	// Netscape/Firefox/Opera
			return event.which;
		}
	}
}

function selectLastChars(){
	setCaretPosition( document.getElementById("q"), numDigit, document.getElementById("q").value.length );
}


function keyDownHandler(event){	
	if(inputHasFocus){
		keynum = getKeyCode(event);
		if(keynum == 8){ // del
			// numDigit--;
		}
		else if( keynum == 13){
			if(document.getElementById("id_"+activeIndex)){
				if(document.getElementById("id_"+activeIndex).childNodes[0].nodeValue){
					// document.getElementById("q").value = document.getElementById("id_"+activeIndex).childNodes[0].nodeValue;
				}
			}
		}
		else if(keynum == 40){
			incrementa();
		}
		else if(keynum == 38){
			decrementa();
		}	
		else if ( keynum < 32 || (keynum >= 33 && keynum <= 46) || (keynum >= 112 && keynum <= 123)) {
		
		}				
	}
}

function keyUpHandler(event){
	if(inputHasFocus){
		keynum = getKeyCode(event);
		if ( keynum !=8 && keynum < 32 || (keynum >= 33 && keynum <= 46) || (keynum >= 112 && keynum <= 123)) {
		
		}
		else{
			suggest(document.getElementById("q").value);		
		}
	}
}


function suggest(input_text){
	if(input_text){
		list = [];
		listOther = [];
		removeChilds(popup);
		for(i=0; i < city.length; i++){
			if( city[i].substr(0,input_text.length).toLowerCase() == input_text.toLowerCase()){
				temp = city[i].split("|");
				comune = temp[0];
				nItinerari = temp[1];
				str = " - "+nItinerari+" itinerari";
				if(nItinerari==1)
					str+="o";
				list.push(comune);	
				listOther.push(str);	
			}
		}
		if(list.length > 0){
			setCssClass(popup,"show");
			str = "";
			for(i=0; i< list.length && i <= suggest_max_number; i++){
				str += "<div id='s_id_"+i+"' class='classeProva' onmouseover=\"divOver();\" onmouseout=\"divOut();\"><a href=\"javascript:PisteCiclabiliSuggest("+i+")\" id='id_"+i+"' onmouseover='divOver2();' onmouseout='divOut2();'>"+list[i]+listOther[i]+"</a></div	>";
			}
			if(list.length > suggest_max_number){
				str += "<div id='s_id_"+i+"' class='classeProva' onmouseover=\"divOver();\" onmouseout=\"divOut();\"><a onmouseover='divOver2();' onmouseout='divOut2();'>...</a></div>";
			}

			popup.innerHTML = str;
			numDigit = input_text.length;
			activeIndex = -1;
			
			activeList = list;
		}
		else{
			setCssClass(popup,"hide");	
		}
	}
	else{
		setCssClass(popup,"hide");
		removeChilds(popup);
	}
}


function CaretPosition()
{
 var start = null;
 var end = null;
}

function getCaretPosition(oField)
{
	var oCaretPos = new CaretPosition();
	// IE support
	if(document.selection){
		oField.focus();
		var oSel = document.selection.createRange();
		var selectionLength = oSel.text.length;
		oSel.moveStart ('character', -oField.value.length);
		oCaretPos.start = oSel.text.length - selectionLength;
		oCaretPos.end = oSel.text.length;
	}
	 
	// Firefox support
	else if(oField.selectionStart || oField.selectionStart == '0') {
		oCaretPos.start = oField.selectionStart;
		oCaretPos.end = oField.selectionEnd;
	}
	return (oCaretPos);
}

function setCaretPosition(oField, iCaretStart, iCaretEnd){

	// IE Support
	if (document.selection){
		oField.focus();

		var oSel = document.selection.createRange();
		oSel.moveStart ('character', -oField.value.length);
		oSel.moveEnd ('character', -oField.value.length);
		
		if(iCaretEnd != null)
			oSel.moveEnd ('character', iCaretEnd);
		else
			oSel.moveEnd ('character', iCaretStart);
		oSel.moveStart ('character', iCaretStart);
		oSel.select();
	}
	// Firefox support
	else if(oField.selectionStart || oField.selectionStart == '0'){
		oField.selectionStart = iCaretStart;
		if(iCaretEnd != null)
			oField.selectionEnd = iCaretEnd;
		else
			oField.selectionEnd = iCaretStart;
		oField.focus();
	}
}


function suggestMouseOut(e){
	searchResultOver = false;
}

function suggestMouseOver(e){
	searchResultOver = true;
}

function divOver(){
	searchResultDivOver = true;
}

function divOut(){
	searchResultDivOver = false;
}

function divOver2(){
	searchResultDiv2Over = true;
}

function divOut2(){
	searchResultDiv2Over = false;
}
