var hlt_suggest  = null;
var last_searched = '';
var block_blur = false;
var suggest_id = false;
var ajaxcall = null;
var input_text = null;

$( function() {
	
	/*--------------
	KEYUP Event
	---------*/
	$("#suggestbox").bind( 'keyup', function(e) {
		
		input_text = $("#suggestbox").val();
		input_text = input_text.replace(/\s/g, ""); // rimuove spazi
		input_text = input_text.toUpperCase(); 
		$("#suggestbox").val( input_text );
		
		if( input_text != '' && code( last_searched ) != code(input_text) && inputIsOk(input_text) ) { // e valore diverso dall'ultimo cercato
			
			if( ajaxcall != null )
				ajaxcall.abort();
	
			queryDB( input_text );
			
		} else if( !inputIsOk(input_text) ) {
			
			if( ajaxcall != null )
				ajaxcall.abort();			
			
			$("suggestbox").addClass('nomatch');
			last_searched = input_text;
			
			clearSuggestions();
			$("#loading").stop().fadeOut(200);
			
		} 
		
		switch(e.keyCode) {
		
			// User pressed "up" arrow
			case 38:
			if( hlt_suggest == null  )
				selectSuggestion( $("#suggests > ul > li").length );
			else if( hlt_suggest > 1  )
				selectSuggestion( hlt_suggest-1 );
			break;
			
			// User pressed "down" arrow
			case 40:
			if( hlt_suggest == null  ) {
				selectSuggestion( 1 );
			} else if( hlt_suggest < $("#suggests > ul > li").length  ) {
				selectSuggestion( hlt_suggest+1 );
			}
			break;
			
		}
	
	});
	
	/*--------------
	SUBMIT, BLUR events
	---------*/
	$("#suggestform").bind('submit', function(e) {
		
		if( $(".highlighted").attr('pid') != null ) {
			$(".highlighted").trigger('click');
			return false;
		} else {
			document.location.href = 'http://www.primaindustries.it/'+language+'/products/'+last_searched;
			return false;
		}
		
	});
	
	$("#suggestbox").bind('blur', function(e) {
		if( !block_blur )
			clearSuggestions();
	} );
	
	/*--------------
	MOUSE_ENTER, MOUSE_LEAVE Events
	---------*/
	$("#suggests")
	.mouseenter( function(e) {
		block_blur = true;
	})
	.mouseleave( function(e) {
		block_blur = false;
	});
	
	
} );

/*--------------
QUERY function
---------*/
function queryDB( input ) {
	
	last_searched = input;
	
	// resetta
	$("#suggestbox").removeClass();
	clearSuggestions();
	$("#loading").stop().fadeIn(50);
	
	// inizia nuova ricerca
	ajaxcall = $.post("php/suggest.php", { search_for: input },
		
		function(data) {
			
			$("#loading").stop().fadeOut(200);
			
			if( data['tot_results'] > 0 ) {
				display_suggest(data);
			} else {
				$("#suggestbox").addClass('nomatch');
			}
			
		}, "json"
		
	);
}


/*--------------
DISPLAY results
---------*/
function display_suggest( data ) {

	clearSuggestions();
	var suggest_id = 0;
	
	if( data['tot_results'] == 1 ) {
	
		if ( 	(data['items'].length > 0  && data['items'][0][0] == $("#suggestbox").val() ) 
			||
			( data['codes'].length > 0 && data['codes'][0][0] == $("#suggestbox").val() ) )  
			{
				$("#suggestbox").addClass('match');
				return;
			}
		
	} 
	
	if( input_text.indexOf('P') == 0 && input_text.indexOf('P.') == -1 ) {
		input_text = input_text.replace(/P/i, 'P.');
	}
	
	createRows( data['items'], data['tot_results'] );
	createRows( data['codes'], data['tot_results']  );

	$("#suggests").show();
		
}


function createRows( code_list, tot_results ) {
	
	for( grp in code_list ) {
		
		if( code_list[grp].length > 2 && tot_results > 15 ) {
			
			var html = getGroupRowHTML( code_list[grp], grp, input_text );
			var li = $( html );
			
			li.bind('click', function() {
				completeSearch( input_text+$(this).attr('group') );
			} );
			
			li.appendTo("#suggests > ul");
			
		} else {
			
			for( p in code_list[grp] ) {
				
				var html = getSingleRowHTML( code_list[grp], p, input_text );
				var li = $( html );
				
				li.bind('click', function() {
					clearSuggestions();
					$("#suggestbox").val( $(this).attr('pid') );
					document.location = "http://www.primaindustries.it/"+language+"/products/"+$(this).attr('pid');
				} );
				
				li.appendTo("#suggests > ul");
					
			}
			
		}
		
	}

}

function getGroupRowHTML( grp, grp_index, input_text ) {
		
		var html = '<li group="'+grp_index+'" pid="'+(input_text+grp_index)+'" id="'+( ++suggest_id )+'" class="group">';
		html += highlightMatch( input_text, input_text+grp_index ) + "... ( <small>"+grp.length+"</small> prodotti )";
		html +="</li>";
		
		return html;
		
}

function getSingleRowHTML( grp, grp_index, input_text ) {

		var html = '<li group="'+grp_index+'" pid="'+grp[grp_index]+'" id="'+( ++suggest_id )+'">';
		html += '<span class="thumb"  style="background-image:url(http://www.primaindustries.it/php/getThumb.php?item='+grp[grp_index]+' );"></span>';
		html += '<span class="code">'+highlightMatch( input_text, grp[grp_index] )+'</span></li>';
		
		return html;
		
}


function clearSuggestions() {
	hlt_suggest  = null;
	suggest_id = 0;
	$("#suggests > ul").html("");
	$("#suggests").hide();
}

function highlightMatch( input, suggestion) {
	
	var to_highlight = suggestion.substr( input.length );
	
	var re = new RegExp( to_highlight+"$", 'i');
	var highlighted = suggestion.replace( re, '<b>'+to_highlight+'</b>' );
	
	return highlighted;
	
}

function completeSearch( completed_value ) {
	
	if( code( completed_value ) == code( last_searched ) ) {
		clearSuggestions();
		return;
	}
		
	$("#suggestbox").val( completed_value );
	queryDB( completed_value );
}

function selectSuggestion( id ) {
	$('.highlighted').removeClass('highlighted');
	$("#"+id).addClass("highlighted");
	hlt_suggest = id;
}

/*--------------
INPUT VALIDATION / NORMALIZATION
---------*/

function inputIsOk( string ) {
	var pcode_rxp = new RegExp("^P\.?[0-9]{1,4}.{0,10}", 'i');
	var code_rxp = new RegExp("^[0-9]{1,4}", 'i');
	return ( string.match( pcode_rxp ) || string.match( code_rxp ) ) && $("#suggestbox").val() != '';
}

function code( str ) { // remove dot + lowercase
	return str.replace(/\./, '' ).toLowerCase();
}
/* -------------------------------- */

