var selectjs = Class.create();

selectjs.prototype={
	
	selects:null,
	index:0,
	tabEvents:null,
	tabFinish:null,
	zindex:800,
	
	initialize : function(){
		this.selects=document.getElementsByTagName("select");
		if(this.selects.length>0)
			this.remplaceSelect();
	},
	
	remplaceSelect:function(){
		for(var i=0; i<this.selects.length;i++){
			var select=this.selects[i];
			if(!$(select).hasClassName("selectNonCustom"))
			{
				var parent=select.parentNode;
				var idSelect=select.id;
				var div=document.createElement("div");
				div.className="selectDiv";
				div.setAttribute("id","div_"+idSelect);
				div.setAttribute("idSelect",idSelect);
				div.style.zIndex=this.zindex;
				this.zindex--;
				var intituleSelect=document.createElement("span");
				intituleSelect.setAttribute("id","intitule_"+idSelect);
				intituleSelect.className="intituleSelect";
				var boutonSelect=document.createElement("span");
				boutonSelect.id="bouton_"+idSelect;
				boutonSelect.className="boutonSelect";
				var divOpts=document.createElement("div");
				divOpts.className="optionsDiv";
				divOpts.id="options_"+idSelect;
				divOpts.style.display="none";
				var ulOpts=document.createElement("ul");
				ulOpts.className="listeOptionsDiv";
				ulOpts.id="listeOptions_"+idSelect;
				this.extraitOptions(select,idSelect,ulOpts,true);
				divOpts.appendChild(ulOpts);
				div.appendChild(intituleSelect);
				div.appendChild(boutonSelect);
				div.appendChild(divOpts);
				div.style.display=select.style.display;
				parent.insertBefore(div,select);
				intituleSelect.onclick=new Function('myselectjs.ouvreSelect("'+idSelect+'")');
				boutonSelect.onclick=new Function('myselectjs.ouvreSelect("'+idSelect+'")');
			}
		}
		this.eventsFin();
		for(var i=0; i<this.selects.length;i++){
			
			select=this.selects[i];
			if(!$(select).hasClassName("selectNonCustom"))
			{
				var trouNoir=document.createElement("div");
				idSelect=select.id;
				div=$("div_"+idSelect);
				trouNoir.className="trouNoirSelects";
				trouNoir.style.display="none";
				div.appendChild(trouNoir);
				trouNoir.appendChild(select.parentNode.removeChild(select));
			}
		}
	},
	
	extraitOptions:function(pere, idSelect, nouveauPere,prem){
		var premiere=prem==true?true:false;
		var childs=$(pere).childElements();
		var reg=new RegExp("(&nbsp;)", "g");
		for(var i=0; i<childs.length;i++){
			var elem=childs[i];
			if(elem.tagName=="OPTION")
			{
				var value=elem.value;
				var selected=elem.selected;
				var text=elem.innerHTML.replace(reg," ");
				elem.writeAttribute("id","option_"+idSelect+this.index);
				var li=document.createElement("li");
				li.className="optionli";
				li.id="li_"+idSelect+this.index;
				var a=document.createElement("a");
				if(selected || premiere){
					a.className="selected";
					this.addEventFin('this.selectOption("'+idSelect+'", '+this.index+', '+text.inspect()+', true)');
					premiere=false;
				}
				a.onclick=new Function('myselectjs.selectOption("'+idSelect+'", '+this.index+', '+text.inspect()+')');
				a.appendChild(document.createTextNode(text));
				this.index++;
				li.appendChild(a);
				
			}
			else if(elem.tagName=="OPTGROUP")
			{
				var label=elem.readAttribute("label");
				var li=document.createElement("li");
				li.className="optgroupli";
				var divLabel=document.createElement("div");
				divLabel.className="optgroupLabel";
				divLabel.appendChild(document.createTextNode(label));
				var ul=document.createElement("ul");
				ul.setAttribute('class',"optgroupul");
				li.appendChild(divLabel);
				li.appendChild(ul);
				this.extraitOptions(elem, idSelect, ul,premiere);
			}
			nouveauPere.appendChild(li);
		}
	},
	
	selectOption:function(idSelect,n, text, init){
		var initialisation=init==true?init:false;
		//if(!initialisation)alert("idSelect="+idSelect+", n="+n+", text="+text+", init="+init+", id="+"option_"+idSelect+n);
		var select=$(idSelect);
		var option=$("option_"+idSelect+n);
		option.selected=true;
		if(!initialisation)
		{
			var onchange=select.readAttribute("onchange");
			if(onchange!="undefined" && onchange!="")
				eval(onchange);
			this.afficheCacheSelects();
		}
		var listeOptions=$("listeOptions_"+idSelect);
		var tabliensSelected=listeOptions.getElementsByClassName("selected");
		if(tabliensSelected[0]) tabliensSelected[0].removeClassName("selected");
		var li=$("li_"+idSelect+n);
		var a=li.firstDescendant();
		a.addClassName("selected");
		$("intitule_"+idSelect).innerHTML=text;
		this.fermeSelect(idSelect);
	},
	
	ouvreSelect:function(idSelect){
		if($("options_"+idSelect).style.display=="none")
		{
			for(var i=0; i<this.selects.length;i++){
				var select=this.selects[i];
				var idSelectTemp=select.id;
				$("options_"+idSelectTemp).hide();
			}
			$("options_"+idSelect).show();
		}
		else
			this.fermeSelect(idSelect);
	},
	
	fermeSelect:function(idSelect){
		$("options_"+idSelect).hide();
	},
	
	addEventFin:function(stringevent){
		if(this.tabFinish==null)
			this.tabFinish=new Array();
		var i=this.tabFinish.length;
		this.tabFinish[i]=stringevent
	},
	
	eventsFin: function(){
		if(this.tabFinish!=null)
			for(var i=0;i<this.tabFinish.length;i++)
			{
				eval(this.tabFinish[i]);
			}
	},
	
	afficheCacheSelects:function(){
		for(var i=0; i<this.selects.length;i++){
			var select=this.selects[i];
			var idSelect=select.id;
			var div=$("div_"+idSelect);
			div.style.display=select.style.display;
		}
	}
}