jQuery.fn.extend({
   findPos : function() {
       obj = $(this).get(0);
       var curleft = obj.offsetLeft || 0;
       var curtop = obj.offsetTop || 0;
       while (obj = obj.offsetParent) {
                curleft += obj.offsetLeft
                curtop += obj.offsetTop
       }
       return {x:curleft,y:curtop};
   }
});


$("#carto").ready(function(){
		
	initSelect();
	
});	

var chargerList = new Array();
chargerList["select_organisme"] = 0;
chargerList["select_departement"] = 0;
chargerList["select_commune"] = 0;
chargerList["select_milieu"] = 0;
chargerList["select_nature"] = 0;
chargerList["select_espece"] = 0;
chargerList["select_radion"] = 0;

var inFocus = false;
var hasfocus = 1;
var active = -1;	
var currentList = "";

var containX1 = 0;
var containX2 = 0;
var containY1 = 0;
var containY2 = 0;
var clickInput = 0;	
		
function initSelect(){

	$("body").click(function(evt){
		if(verifBlur(evt) && clickInput == 0){
				
			$("#"+currentList+"_container").hide();
			_open = 0;
			if($("#"+currentList+"_input_hidden").val() == ""){
				$("#"+currentList+"_container ul li:first").addClass('selected');
			}else{
				$("#"+currentList+"_container ul li#"+$("#"+currentList+"_input_hidden").val()).addClass('selected');
			}	
		}else{
			clickInput = 0;			
		}
			
	});

	$(".input").mouseover(function(){	
		var firstOpen=0;
		var i=0;		
		var _open = 0;
		var id = $(this).attr('id');
		if(	chargerList[id] == 0 ){

			chargerList[id] = 1;
			var selectBox = $(this);
			var contain = $("#"+id+"_container");
			var input = $("#"+id+"_input");	
			var hidden = $("#"+id+"_input_hidden");	
				

				
		


			input
			.click(function(){
				if(!selectBox.hasClass("disabled")){
					if(contain.is(':visible')){	
						contain.hide();
						currentList = "";
						if(hidden.val() == ""){
							$("#"+id+"_container ul li:first").addClass('selected');
						}else{
							$("#"+id+"_container ul li#"+hidden.val()).addClass('selected');
						}	
					}else{
						$(".selectbox-wrapper:visible").hide();
						
							clickInput = 1;
							contain.show();
							if( $("#"+id+"_container ul li.selected").html() == defaultValue ){
								contain.scrollTop(0);
							}else{
								var liTop = $("#"+id+"_container ul li.selected").get(0).offsetTop;
								$("#"+id+"_container").scrollTop(liTop);
							}
							_open = 1;
							currentList = id;
							/* Calcul des coordonnées de la div de contenu */
							var containDom = contain.get(0);
							var pos = contain.findPos();
							containX1 = pos.x;
							containX2 = pos.x + containDom.offsetWidth;
							containY1 = pos.y;
							containY2 = pos.y + containDom.offsetHeight;
	
							var bodyDom = $("body").get(0);
							var inputOffset = input.offset();
	
							if((inputOffset.left + containDom.offsetWidth) < bodyDom.clientWidth){
								contain.css("margin-left",109);
							}else{
								contain.css("margin-left", 38);
							}
							
							if((inputOffset.top + input.outerHeight() + containDom.offsetHeight) < (bodyDom.clientHeight+bodyDom.scrollTop)){
								var containerOffset = $("#select_container").offset();
								var containerTop  = containerOffset.top;
								contain.css("top",inputOffset.top + input.outerHeight()- containerTop);
							}else{
								var containerOffset = $("#select_container").offset();
								var containerTop  = containerOffset.top;
								contain.css("top",inputOffset.top - containDom.offsetHeight - containerTop);
							}
							
							/* MAJ des coordonnées de la div de contenu */
							var pos = contain.findPos();
							containX1 = pos.x;
							containX2 = pos.x + containDom.offsetWidth;
							containY1 = pos.y;
							containY2 = pos.y + containDom.offsetHeight;
							
	
	
		
					}	
				}	
	
			}).keydown(function(event) {	  
					switch(event.keyCode) {
					case 38: // up
						event.preventDefault();
						moveSelect(id,-1);
						break;
					case 40: // down
						event.preventDefault();
						moveSelect(id,1);
						break;
					case 13: // return
						event.preventDefault();
						var sel = $("#"+id+"_container li.selected");
						selectValue(sel,"#"+id);
						input.blur();						
						break;
					case 9: // tabulation
						event.preventDefault();
						var sel = $("#"+id+"_container li.selected");
						selectValue(sel,"#"+id);
						input.blur();
						break;
					case 27: // Echap
						event.preventDefault();
						$("#"+id+"_container").hide();
						_open = 0;
						if($("#"+id+"_input_hidden").val() == ""){
							$("#"+id+"_container ul li:first").addClass('selected');
						}else{
							$("#"+id+"_container ul li#"+$("#"+id+"_input_hidden").val()).addClass('selected');
						}	
						break;	
				}
			})
	
		}			
	});	
}


	function moveSelect(selectId,step) {
		var lis = $("#"+selectId+"_container li", contain);
		if (!lis) return;		
		
		var sel = $("#"+selectId+"_container li.selected");
		active = $("#"+selectId+"_container li").index(sel);
		active += step;
		if (active < 0) {
			active = 0;
		} else if (active >= lis.size()) {
			active = lis.size() - 1;
		}

		lis.removeClass("selected");
		$(lis[active]).addClass("selected");


		var scrTopContain = $("#"+selectId+"_container").scrollTop();
		var containClientHeight = $("#"+selectId+"_container").get(0).clientHeight;
		var selClientHeight = sel.outerHeight();    	
		
		var LiOffset = $(lis[active]).position();
		if(LiOffset.top	< 0){
			$("#"+selectId+"_container").scrollTop($("#"+selectId+"_container").scrollTop()+LiOffset.top);
		}
		if(LiOffset.top	> ( containClientHeight - selClientHeight )){		
			var ecart = LiOffset.top - containClientHeight;
			$("#"+selectId+"_container").scrollTop($("#"+selectId+"_container").scrollTop()+ecart+selClientHeight);
		}
	}

		function verifBlur(evt){
			if(evt.pageX > containX1 && evt.pageX < containX2 && evt.pageY > containY1 && evt.pageY < containY2){
				return false;
			}else{
				return true;
			}
		}

		function selectValue(li, selectId){
			$(selectId+"_input_hidden").val($(li).attr("id"));
			$(selectId+"_input").val($(li).text().substring(0,14));
			$(selectId+"_container").hide();
			hasfocus = 0;
			$(selectId).trigger("change");
			$(li).addClass("selected");
			firstOpen=1;
		}
		
		function selectOver(li){
			var ulParent =$(li).parent().parent();
			var id = ulParent.attr('id');
			$("#"+id+" ul li.selected").removeClass('selected');
			hasfocus = 1;
			$(li).addClass("selected");
		}		
		function selectOut(li){
			if(hasfocus != 0)
				$(li).removeClass("selected");
				
			hasfocus = -1;			
		}
		
