/*
 * Utilise
 * search.php
 * css/jquery.autosuggest.css
 * images/autosuggest/*.* 
 * 
 */
(function($){
    $.fn.autosuggest = function(config) {
        var defaults = {
            className: 'div-suggest',
            methodType: 'POST',
            addParams: null,
            dataFile: 'search.php',
            minChars:  4,
            match:    'contains',
            headerTxt:  'Résultats',
            noResultTxt:  'Pas de résultats',
            limit:     5,
            fadeTime:  100,
            pagencours: 1
          };
    
        var config = $.extend(defaults, config);
        var idInput="";
        
        config.addParams = (config.addParams != '') ? '&' + config.addParams : '';
        $('<div class="suggestionsBox"><div class="header">'+config.headerTxt+'<a href="#" class="fermer">&nbsp;</a></div><ul></ul><div class="footer"></div></div>').appendTo('.' + config.className);
        $(".suggestionsBox > ul li").live('mouseover', function()
        {	
			var sel = $(this).parent().find("li[class='selected']").removeClass('selected');
			$(this).addClass('selected');
		});
		
			$("." + config.className + " > input").keyup(function(event)
			{
			   var fieldParent = $(this).parents('div.' + config.className);
			   if (event.which != 39 && event.which != 37 && event.which != 38 && event.which != 40 && event.which != 13 && event.which != 9 ) {

				fieldVal = fieldParent.find('input:eq(0)').val();
				idInput=this.id;
				suggest(fieldVal,idInput);
			   } else {

			     var fieldChild  = fieldParent.find('.suggestionsBox > ul');

			     switch (event.which)
				{
				 case 40: { keyEvent(fieldChild,'next');break; }
				 case 38: { keyEvent(fieldChild,'prev');break; }
				 case 13:
				 {
					//fieldParent.children('input:eq(0)').val($("li[class='selected'] a").text());
					fieldParent.children('div.suggestionsBox').hide();
					return false;
					break;
				 }
				 case 9:
				 {
					offFocus(this); 
					$("li").removeClass("selected");
					break;
				 }
			     }
			}
        });

		$("." + config.className).bind("keypress", function(event) {
		  if (event.keyCode == 13)
		  {
			  var urlChild = $(this).find("li[class='selected'] a").attr("href");
			  document.location.href=urlChild;
			  return false;
		  }
		});

        /*$("." + config.className + " > input").live("blur", function(){ 
        	offFocus(this); 
        	$("li").removeClass("selected"); 
        });*/
    
        function suggest(dataInput, id)
        {
            if(dataInput.length < config.minChars) {
                    $('#'+id).parent('.' + config.className).children('div.suggestionsBox').fadeOut();
            } else {
            $('#' + id + ":eq(0)").addClass('sug-load');
                $.ajax({
                   type: config.methodType,
                    url: config.dataFile,
               dataType: "json",
                   data: "data=" + dataInput + "&id=" + id + "&match=" + config.match + "&limit=" + config.limit + "&pagencours=" + config.pagencours + config.addParams,
                success: function(data){
                    if(data.dataoutput.length >0)
                    {
                        $('#'+id).parent('div.' + config.className).children('div.suggestionsBox').fadeIn();
                        $('#'+id).parent('div.' + config.className).find('.suggestionsBox > ul').html(data.dataoutput);
                        $('#'+ id + ":eq(0)").removeClass('sug-load');
                        var footerTxt="";
                        if (data.prev==1)
                        	footerTxt+="<a href='#' class='precedent'>Précédent</a>";
                        if (data.next==1)
                        {
                        	if (data.prev==1)
                        		footerTxt+="| ";	
                        	footerTxt+="<a href='#' class='suivant'>Suivant</a>";
                        }
                        $(".footer").html(footerTxt);
                    	$('.suggestionsBox > ul').effect('slide');	                	
                    }
                    else
                    {
                        $('#'+id).parent('div.' + config.className).children('div.suggestionsBox').fadeIn();
                        $('#'+id).parent('div.' + config.className).find('.suggestionsBox > ul').html('<li id="0"><a href="#">'+config.noResultTxt+'</a></li>');                    	
                        $('#' + id + ":eq(0)").removeClass('sug-load');
                        $(".footer").html('');
                    	$('.suggestionsBox > ul').effect('slide');	                	
                    }
                }
              });
            }
        }

		function keyEvent (fieldChild,action)
		{
			yx = 0;
			fieldChild.find("li").each(function(){
				if($(this).attr("class") == "selected")
                yx = 1;
            });
            
			if(yx == 1)
            {
				var sel = fieldChild.find("li[class='selected']");
				(action=='next') ? sel.next().addClass("selected") : sel.prev().addClass("selected");
				sel.removeClass("selected");
            }
            else
			{
				(action=='next') ? fieldChild.find("li:first").addClass("selected") : fieldChild.find("li:last").addClass("selected");
			}
        }
		
        $(".precedent").live("click", function()
        {
           	var fieldParent = $(this).parents('div.' + config.className);
        	fieldVal = fieldParent.find('input:eq(0)').val();
        	config.pagencours--;
        	suggest(fieldVal,idInput);
        });		
        
        $(".suivant").live("click", function()
        {
        	var fieldParent = $(this).parents('div.' + config.className);
			fieldVal = fieldParent.find('input:eq(0)').val();
			config.pagencours++;
			suggest(fieldVal,idInput);
        });
        
        $(".fermer").live("click", function()
        {
        	offFocus($("." + config.className + " > input"));
        });

        function offFocus(fieldChild)
        {
            var fieldParent =  $(fieldChild).parents('div.' + config.className);
            fieldParent.children('div.suggestionsBox').delay(config.fadeTime).fadeOut();
        }

        $(".suggestionsBox > ul li").live("click", function()
        {
        	if ($(this).children('a').attr("href")!="#")
        	{
	            var fieldParent = $(this).parents('div.' + config.className);
//            	fieldParent.children('input:eq(0)').val($(this).attr("id"));
	            fieldParent.children('div.suggestionsBox').hide();
        	}
        });

    };
})(jQuery);
