(function($) {
	var select_replacement_index = 0;
	
	$.fn.select_replacement = function(options){

		var settings = {
			//Opzioni a default
			style:'select_replacement',
			img:false
		};
		

		//Estendo le opzioni
		options = options || {};
	   	$.extend(settings, options);

		$(document).bind("click",function(e){
			var $tgt = $(e.target);
			if (!$tgt.hasClass(settings.style)) $('ul:visible','div.'+settings.style).hide();
		})
		
		
		var nr = $(this).length;
		
		
		$(this).each(function(count){
			
			var select_list = this;
			
			if(!$(select_list).hasClass(settings.style+'_replaced')) {
				$(select_list).addClass(settings.style+'_replaced');
				
				if($('option:selected',select_list).length) {
					if(settings.img == true){
						var text = '<img src="'+$('option:selected',select_list).attr('title')+'" class="middle"/>'+$('option:selected',select_list).html();
					}else{
						var text = $('option:selected',select_list).text();
					}
					var index = $('option',select_list).index($('option:selected',select_list));	
				}else{
					if(settings.img == true){
						var text = '<img src="'+$('option:first',select_list).attr('title')+'" class="middle"/>'+$('option:first',select_list).html();
					}else{
						var text = $('option:first',select_list).text();	
					}
					var index = 1;
				}
										
				$(select_list).wrap('<div class="'+settings.style+'" id="'+settings.style+'_'+select_replacement_index+'" style="position:relative;z-index:'+(nr-count)+'" ></div>');		
				
				var select_replacement = $('div#'+settings.style+'_'+select_replacement_index);
				
				$(select_replacement).prepend('<div class="select_handle"><span class="">'+text+'</span></div><ul style="display:none" class=""></ul>');
								
				var innerHtml='';
				for (var o = 0; this.options[o]; o++) {
					
					if(o == index) selected = ' class="selected" ';
					else selected='';
					
					if(this.options[o].title == '')
			           	innerHtml+='<li><a href="#"'+selected+'>'+this.options[o].text+'</a></li>';
			        else
			           	innerHtml+='<li><a href="#"'+selected+'><img src="'+this.options[o].title+'" class="middle"/>'+this.options[o].text+'</a></li>';
		        }			
				
				
				
				$('ul',select_replacement).html(innerHtml);
				
				if($('ul li',select_replacement).length > 15){
							$('ul',select_replacement).css({'height':'100px', 'overflow-y':'scroll', 'overflow-x':'hidden'})
				}
				
				$(select_replacement).click(function(e){
					e.preventDefault();
					$('ul',select_replacement).slideToggle('fast');
					return false;
				})
				
				$('ul li',select_replacement).click(function(e){
					e.preventDefault();
					
					//gia selezionato
					if($('a',this).hasClass('selected')) return false;
					
					$('ul li a',select_replacement).removeClass('selected');
					$('a',this).addClass('selected');
					
					if(settings.img == true){
						$('span',select_replacement).html($('a',this).html());
					}else{
						$('span',select_replacement).text($('a',this).text());
					}
					
					$('ul',select_replacement).hide();
	
					var index = parseInt($('li',$(this).parent()).index(this));
	
					$('option:nth-child('+(index+1)+')',select_list).attr('selected', true);	
					
					$(select_list).trigger('change')			
					return false;
				});
				
			
				$(select_list).hide();	
			}	
			
			select_replacement_index++;
				
		});
		

		return this;
	}
	
	
	
	$.fn.select_replacement_update= function(){

		var select_list = $(this);
		var select_replacement = $(this).parent();
		
		var innerHtml='';
		
		if($('option:selected',select_list).length) {
			var text = $('option:selected',select_list).text();
			var index = $('option',select_list).index($('option:selected',select_list));	
		}else{
			var text = $('option:first',select_list).text();	
			var index = 1;
		}
		
		$('span',select_replacement).text(text);
		
		$('option',select_list).each(function(i){
			
			if(i == index) selected = ' class="selected" ';
			else selected='';
			
 			if($(this).attr('title') == '')
	           	innerHtml+='<li><a href="#"'+selected+'>'+$(this).text()+'</a></li>';
	        else
	           	innerHtml+='<li><a href="#"'+selected+'><img src="'+$(this).attr('title')+'" class="middle"/>'+$(this).text()+'</a></li>';
        });
		
		
		
		$('ul',select_replacement).html(innerHtml);

		$('ul li',select_replacement).click(function(e){
			e.preventDefault();
			
			//gia selezionato
			if($('a',this).hasClass('selected')) return false;
			
			$('ul li a',select_replacement).removeClass('selected');
			$('a',this).addClass('selected');
			$('span',select_replacement).text($('a',this).text());
			$('ul',select_replacement).hide();

			var index = parseInt($('li',$(this).parent()).index(this));
			
			$('option:nth-child('+(index+1)+')',select_list).attr('selected', true);	
			
			$(select_list).trigger('change')			
			return false;
		});

		$('ul li',select_replacement).click(function(e){
			e.preventDefault();
			
			//gia selezionato
			if($('a',this).hasClass('selected')) return false;
			
			$('ul li a',select_replacement).removeClass('selected');
			$('a',this).addClass('selected');
			$('span',select_replacement).text($('a',this).text());
			$('ul',select_replacement).hide();

			var index = parseInt($('li',$(this).parent()).index(this));
			
			$('option:nth-child('+(index+1)+')',select_list).attr('selected', true);	
			
			$(select_list).trigger('change')			
			return false;
		});


	}
	
	
	$.fn.select_replacement_select = function(index){
		var opt = $('option:eq('+index+')',this);
		opt.attr('selected','selected');
		var value = opt.text();
		var select_replacement = $(this).parent();
		$('span',select_replacement).text(value);
		$('ul li a',select_replacement).removeClass('selected');
		$('ul li:eq('+index+') a',select_replacement).addClass('selected');
	}


	$.fn.select_replacement_loading= function(){
		var select_replacement = $(this).parent();
		var innerHtml = '<li class="center"><img src="img/loader-small.gif" /></li>'
		$('ul',select_replacement).html(innerHtml).slideDown();
        return $(this);
	}
	
})(jQuery);
