searchfieldajax = function(_id,_url,_limit,_form,_order)
{
	this.id = _id;
	this.url = _url;
	this.limit = _limit;
	this.size = 0;
	this.order = _order;
	
	this.ajax = null;
	
	this.messLimit = "Étoffez votre recherche...";
	
	this.suggestion = new Array();


	this.form = jQuery(_form);
	
	this.jQ = jQuery(this.id);
	
	this.jQ.attr('autocomplete','off');
	this.ul = jQuery('ul#searchField'); 
	
	var that = this;
    this.navList = function(dir){
  		var li = jQuery('ul#searchField li.first');
  		var nbLi = jQuery('ul#searchField li').size();
    	if(dir == 'up')
    	{
    		if(li.prev('li').html() == null)
    		{
    			li.removeClass('first');
    			if(jQuery('ul#searchField li:eq('+(nbLi-1)+')').html() == that.messLimit)
    			{
    				nbLi -= 1;
    			}
    			jQuery('ul#searchField li:eq('+(nbLi-1)+')').addClass('first');
    		}
    		else
    		{
    			li.removeClass('first');
    			li.prev('li').addClass('first');
    		}
    	}
    	else
    	{
    		if(li.next('li').html() == null || li.next('li').html() == that.messLimit)
    		{
    			li.removeClass('first');
    			if(jQuery('ul#searchField li:eq(0)').html() == that.messLimit)
    			{
    				nbLi -= 1;
    			}
    			jQuery('ul#searchField li:eq(0)').addClass('first');
    		}
    		else
    		{
    			li.removeClass('first');
    			li.next('li').addClass('first');
    		}
    	}
    }
    
    this.clearList = function() {
   		that.ul.html('');
   	//	that.ul.css('z-index',1);
    }
    
    this.resetList = function() {
    	that.ul.slideUp('fast',function()
    	{
    	//	that.ul.css('z-index',1);
    		that.ul.html('');
    	});
    }
        	
    this.displayList = function(str){
    	that.clearList();
    	var creationList = '';
    	var nb = 0;
    	var regex = new RegExp(str,'gi');
    	for(var i = 0; i < that.size;i++)
    	{
    		if(regex.test(that.suggestion[i]))
    		{
	    	//	alert(that.suggestion[i]);
    			var text = that.suggestion[i];
				var reg=new RegExp("("+str+")", "i");
				text = text.replace(reg,"<strong>$1</strong>");
						
						
    			if(nb == 0)
    			{
    				creationList += '<li class="first">'+text+'</li>';
    			}
    			else
    			{
    				creationList += '<li>'+text+'</li>';
    			}
    			nb++;
    		} 
    		if(nb == that.limit)
    		{
    			creationList += '<li id="limit">'+that.messLimit+'</li>';
    			break;
    		}
    	}
    	if(nb)
    	{
    	that.jQ = jQuery(this.id);
    	that.ul.html(creationList);
    	that.ul.css('left',that.jQ.offset().left);
    	that.ul.css('top',that.jQ.offset().top+that.jQ.height()+6);	
    /*	that.ul.position().left = that.jQ.offset().left;
    	that.ul.position().top = that.jQ.offset().top+that.jQ.height()+10; */
    	that.ul.css('width',that.jQ.width()-8);
    	that.ul.slideDown('fast',function()
    	{	that.ul.css('z-index',150);
    	});
    	}

    }
    
    
    this.createList = function(str){
    
    	that.jQ.next('.btn').css('background-image','url("layout/img/index/carousel_loading.gif")');
    	/* On supprime la requête ajax au cas où il en existerait déjà une */
    	if(that.ajax != null)
    	{ 
    		that.ajax.abort();
    	}
    	
    	/* On en crée une nouvelle */
    	that.suggestion = new Array();
    	
    	that.ajax = jQuery.ajax({
			suggestion:this.suggestion,
			type: "POST",
			dataType: "json",
			data: 'begin=' + str,
			url: that.url,
			success: function(msg) {
				if(msg != undefined)
				{
					size = msg.length;
					for(var i=0;i<size;i++)
					{
						that.suggestion.push(msg[i][0]+ " " + msg[i][1]);
						if(that.order != 'unilateral')
						{
							that.suggestion.push(msg[i][1]+ " " + msg[i][0]);
						}
					}
					that.size = that.suggestion.length;
					that.displayList(str);
					that.jQ.next('.btn').css('background-image','url("layout/img/nav/ico_search_dark.gif")');
				}
			},
			error: function(header,msg) {
			}
		});
	}
	
	jQuery('#searchField li').live('mouseover',function()
	{
		jQuery('#searchField li.first').removeClass('first');
		jQuery(this).addClass('first');
	});
				
    this.startList = function (){
    	var str = that.jQ.val();
    	
		if(str.length > 0){
			that.createList(str);
		} else {
			that.resetList();
		}
	}
    
	this.jQ.focus(function() {
		jQuery('#searchField').bind('mousedown',function(){
			var text = jQuery('#searchField li.first').html();
			var reg=new RegExp("<strong>(.+)</strong>", "i");
			text = text.replace(reg,"$1");
			that.jQ.val(text);
			that.resetList();
			return false;
		});
	});
	
	this.jQ.blur(function() {
		that.resetList();
		jQuery('#searchField').unbind('mousedown');
	});
	
	
	this.selectList = function(){
		var text = jQuery('#searchField li.first').html();
    	var reg=new RegExp("<strong>(.+)</strong>", "i");
		text = text.replace(reg,"$1");
		
		that.jQ.val(text);
		that.resetList();
	//	return false;
	}
	
	this.enter = function(e) {
		if(e.keyCode == 13) 
        { 
        		that.selectList();
        		return false;
		}
	}
	
	this.searchF = function(e) {
		switch (e.keyCode) 
        { 
        	case 13:
        		return false;
				break;			
			case 27:  // esc
				that.clearList();
				break;				
			case 38: // up
				that.navList("up");
				break;

			case 40: // down
				that.navList("down");		
				break;

            default:
            	that.startList();
            	break;
        }
	}
	jQuery(this.id).bind('keydown',this.enter);
	jQuery(this.id).bind('keyup',this.searchF);
}

