/** Variables statiques servant aux fonctions __switch() et __interpolation()
*	@author	Oceanet 2007
*	@var	ma_div			nom de la div container 
*	@var	ma_liste 		nom de la de la liste de définition
*	@var 	interval		intervalle courant
*	@var 	opacity			opacité de la div container
*/
var ma_div;
var ma_liste;
var interval;
var opacity=0;
var isDragging = false;
var objectToDrag;
var obj;
var ecartX;
var ecartY;
var curX;
var curY;
var test_var = "";
var index = 0;
var index_td = 0;
var is_open = true;
var array_filtres = Array();
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/** Fonction getPositionCurseur 
*	@author	
*	@param	e		évènements
*/
function getPositionCurseur(e){
	if(document.all){
		curX = event.clientX;
		curY = event.clientY;
	}
	if(document.getElementById){
		curX = e.clientX;
		curY = e.clientY;
	}
}
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/** Fonction beginDrag 
*	@author	
*	@param	p_obj	objet à déplacer
*	@param	e		évènements
*/
function beginDrag(p_obj,e){
	isDragging = true;
	objectToDrag = p_obj;
	getPositionCurseur(e);
	ecartX = curX - parseInt(objectToDrag.style.left);
	ecartY = curY - parseInt(objectToDrag.style.top);
}
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/** Fonction drag 
*	@author
*	@param	e		évènements
*/
function drag(e){
	var newPosX;
	var newPosY;
	if(isDragging == true){
		getPositionCurseur(e);
		newPosX = curX - ecartX;
		newPosY = curY - ecartY;
		objectToDrag.style.left = newPosX + 'px';
		objectToDrag.style.top = newPosY + 'px';	
	}
}
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/** Fonction endDrag 
*	@author	
*/
function endDrag(){
	isDragging = false;
	document.getElementById('liste_filtre').style.display = "block";
	with(document.getElementById('div_filtre')){
		style.opacity = (90 / 100);
		style.MozOpacity = (90 / 100);
		style.KhtmlOpacity = (90 / 100);
		filter = "alpha(opacity=" + 90 + ")";
		setAttribute("onmousedown", "");
		setAttribute("onmousemove", "");
		setAttribute("onmouseup", "");
		style.cursor = "default";
	}
}
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/** Fonction shewbox créatrice de la liste de filtres
*	@author	Oceanet 2007
*	@param	element		objet parent
*	@param  index		index de l'ul
*/
var filtre_cur_actif = false;
function shewbox(element, index, nom_tab_trait){

	if(document.getElementById('div_filtre')){
		//Si la div existe, on la supprime ainsi que ses fils sinon, on la crée
		document.body.removeChild(document.getElementById('div_filtre'));
	}else{
		//On récupère la position de l'élément passé en paramètre
		var x = findPos(element)[0];
		var y = findPos(element)[1];
		//Div1
		var new_div = document.createElement("div");
		new_div.setAttribute("id",'div_filtre');
		//Style
		with(new_div.style){
			padding				= "0";
			margin				= "0";
			position			= "absolute";
			top					= y+"px";
			left				= x+10+"px";
			backgroundImage		= "url(img/interface/back_filtre.gif)";
			backgroundRepeat	= "no-repeat";
			backgroundPosition	= "bottom";
			width				= "161px";
			height				= "119px";
			paddingTop			= "10px";
			zIndex				= "12";
			opacity 			= (90 / 100);
			MozOpacity 			= (90 / 100);
			KhtmlOpacity 		= (90 / 100);
			filter 				= "alpha(opacity=" + 90 + ")";
			display				= "none";
		}	
		new_div.ondblclick = function(){
			with(this){
				testDrag = true;
				style.opacity = (50 / 100);
				style.MozOpacity = (50 / 100);
				style.KhtmlOpacity = (50 / 100);
				style.filter = "alpha(opacity=" + 50 + ")";
				setAttribute("onmousedown", "beginDrag(this,event);");
				setAttribute("onmousemove", "drag(event);");
				setAttribute("onmouseup", "endDrag()");
				style.cursor = "move";
			}
			new_div3.style.display = "none";
		}
		//Div2
		var new_div2 = document.createElement("div");
		new_div2.setAttribute("id",'menu_filtre');
		//Style
		with(new_div2.style){
			padding		= "0";
			margin		= "0 auto";
			width		= "161px";
			height		= "15px";
			position	= "absolute";
			top			= "8px";
			zIndex		= "12";
			display		= "none";
		}
		//Création de la div permettant le drag and drop
		var div_drag = document.createElement("div");
		//Attachement
		new_div.appendChild(new_div2);
		//Img1
		var img1 = document.createElement("img");
		img1.setAttribute("id", "status_filtre");
		img1.setAttribute("src", "img/interface/status_filtre.gif");
		with(img1.style){
			padding			= "0";
			margin			= "0 auto";
			float			= "left";
			marginLeft		= "10px";
			marginRight		= "0px";
			zIndex			= "12";
		}
		new_div2.appendChild(img1);
		//Img2
		var img2 = document.createElement("img");
		img2.style.cursor = "pointer";
		img2.setAttribute("id", "mini_filtre");
		img2.setAttribute("src", "img/interface/mini_filtre.gif");
		with(img2.style){
			padding			= "0";
			margin			= "0 auto";
			float			= "left";
			marginLeft		= "3px";
			marginRight		= "3px";
			zIndex			= "12";
		}
		img2.onclick 	 = cache;
		img2.onmouseover = function(){img2.setAttribute("src", "img/interface/mini_hover_filtre.gif");}
		img2.onmouseout = function(){img2.setAttribute("src", "img/interface/mini_filtre.gif");}
		new_div2.appendChild(img2);
		//Img3
		var img3 = document.createElement("img");
		img3.style.cursor = "pointer";
		img3.setAttribute("id", "close_filtre");
		img3.setAttribute("src", "img/interface/close_filtre.gif");
		with(img3.style){
			padding			= "0";
			margin			= "0 auto";
			float			= "left";
			marginLeft		= "3px";
			marginRight		= "3px";
			zIndex			= "12";
		}
		img3.onclick 	 = close_div;
		img3.onmouseover = function(){img3.setAttribute("src", "img/interface/close_hover_filtre.gif");}
		img3.onmouseout = function(){img3.setAttribute("src", "img/interface/close_filtre.gif");}
		new_div2.appendChild(img3);
		//Div3
		var new_div3 = document.createElement("div");
		new_div3.setAttribute("id",'liste_filtre');
		//Style
		with(new_div3.style){
			overflow	= "auto";
			background	= "url(img/interface/liste_filtre.gif) no-repeat";
			width		= "156px";
			height		= "97px";
			marginTop	= "16px";
			marginLeft	= "4px";
			display		= "none";
			fontFamily	= "'trebuchet MS', sans-serif";
			fontSize	= "11px";
			color		= "#666666";
			zIndex		= "12";
			position	= "absolute";
		}
		//Création du select
		var ul_filtre = document.createElement("ul");
		//Définition des attributs
		ul_filtre.setAttribute("id", "ul_filtre");
		//Création des options
		var i = 1;
		//Création de la liste
//[BOUTON TOUT AFFICHER]____________________________________________________________________________________________________________________________________________________________________________________________
		chaine_trait = document.getElementById('filtre_contains').title;			
		array_filtres = explode(chaine_trait, "|");
		if(filtre_cur_actif || simple_in_array(array_filtres, index)==false){
			var li_filtre = document.createElement("li");
			with(li_filtre){
				style.border = "1px solid black";
				setAttribute("title", "tout");
				setAttribute("id", "tout");
				style.fontFamily		= "'trebuchet MS', sans-serif";
				style.fontSize			= "11px";
				style.color				= "#666666";
				style.textDecoration	= "none";
				style.display 			= "block";
				style.cursor			= "pointer";
				appendChild(document.createTextNode("Tout afficher"));
			}			
			li_filtre.onclick = function(){			
				var chaine_trait = document.getElementById('filtre_contains').title;				
				
				var pos = getIndex(array_filtres,index);
				array_filtres.splice(pos,2);
				if((array_filtres.join("|"))==""){
					document.getElementById('filtre_contains').title = "";
				}else{
					document.getElementById('filtre_contains').title = array_filtres.join("|")+"|";
				}
				
				var tableR  = document.getElementById(nom_tab_trait);
				var tab_tr = tableR.getElementsByTagName('tr');		
				
				for(var i=0; i<tab_tr.length; i++){tab_tr[i].style.display = "";}
				if(array_filtres.length>=2){
					for (var i=0; i<tab_tr.length; i++){
						var tab_td =  tab_tr[i].getElementsByTagName('td'); 
						if (tab_td.length>=4 && i>=4){
							var toDelete=true;
							for(var p=0;p<tab_td.length;p++){if(is_conform(tab_tr[i])){toDelete = false;}}
							if(toDelete==true){tab_tr[i].style.display = "none";}
						}
					}
				}
				
				
				if (document.getElementById("tab_tetiere_total").style.display=="block") {
						
					var tableR  = document.getElementById("tab_tetiereOver");
					var tab_tr = tableR.getElementsByTagName('tr');		
					
					for(var i=0; i<tab_tr.length; i++){tab_tr[i].style.display = "";}
					if(array_filtres.length>=2){
						for (var i=0; i<tab_tr.length; i++){
							var tab_td =  tab_tr[i].getElementsByTagName('td');

							if (tab_td.length>=4 && i>=4){								 
								var toDelete=true;
								for(var p=0;p<tab_td.length;p++){if(is_conform(tab_tr[i])){toDelete = false;}}
								if(toDelete==true){tab_tr[i].style.display = "none";}
							}
						}
					}
				}
				
				document.body.removeChild(document.getElementById('div_filtre'));
				document.getElementById('infoF_'+index).style.display='none';
				if (document.getElementById("tab_tetiere_total").style.display=="block") {
					
					document.getElementById('infoFOver_'+index).style.display='none';
				}
			}
			ul_filtre.appendChild(li_filtre);
		}
//[BOUTON TOUT AFFICHER]____________________________________________________________________________________________________________________________________________________________________________________________
//[LISTE DEROULANTE]____________________________________________________________________________________________________________________________________________________________________________________________	
		while(i < eval("tab_"+index).length-1){
			var li_filtre = document.createElement("li");
			with(li_filtre){
				style.border = "1px solid black";
				setAttribute("title", eval("tab_"+index+"["+i+"]"));
				style.fontFamily		= "'trebuchet MS', sans-serif";
				style.fontSize			= "11px";
				style.color				= "#666666";
				style.textDecoration	= "none";
				style.display 			= "block";
				style.cursor			= "pointer";
				appendChild(document.createTextNode(eval("tab_"+index+"["+i+"]")));
			}			
			test_var = eval("tab_"+index+"["+i+"]");
			index_td = index;
			
			//Evenement sur le clic_______________________________________________________________________________________________________________________________
			li_filtre.onclick = function(){		
				filtre_cur_actif = true;
				//On incrémente le tableau de filtres[numéro de la colonne, valeur du filtre]				
				if(!in_array(array_filtres, index, this.title)){ 	
					var chaine_trait = document.getElementById('filtre_contains').title;				
					array_filtres = explode(chaine_trait, "|");		
					if(simple_in_array(array_filtres,index)){					
						
						var pos = getIndex(array_filtres,index);
						array_filtres[pos+1]=this.title;
												
						document.getElementById('filtre_contains').title = array_filtres.join("|")+"|";
						document.getElementById('infoF_'+index).innerHTML='Filtre: '+this.title;
						document.getElementById('infoF_'+index).style.display='block';
						//if (document.getElementById("tab_tetiere_total").style.display=="block"){							
							document.getElementById('infoFOver_'+index).innerHTML='Filtre: '+this.title;
							document.getElementById('infoFOver_'+index).style.display='block';	
						//}
					}else{						
						
						document.getElementById('filtre_contains').title += index+"|"+this.title+"|";
						chaine_trait = document.getElementById('filtre_contains').title;				
						array_filtres = explode(chaine_trait, "|");
						
						document.getElementById('infoF_'+index).innerHTML='Filtre: '+this.title;
						document.getElementById('infoF_'+index).style.display='block';
						
						//if (document.getElementById("tab_tetiere_total").style.display=="block"){														
							document.getElementById('infoFOver_'+index).innerHTML='Filtre: '+this.title;						
							document.getElementById('infoFOver_'+index).style.display='block';	
						//}
					}			
					
				}
				//Lorsque l'on clique, on affiche tt en mettant les lignes ne correspondant pas au filtre en display none 
				//Déclaration des variables
				var tableR  = document.getElementById(nom_tab_trait);
				
				var tab_tr = tableR.getElementsByTagName('tr');		
				
				for(var i=0; i<tab_tr.length; i++){	
						tab_tr[i].style.display = "";
				}
				
				
				/*DEBUT*/
				/*for (var i=0; i<tab_tr.length; i++){
					temp = tab_tr[i].getElementsByTagName('td');
					alert(temp.length);	
				}/*
				/*FIN*/
				
				//Si un filtre est au moins selectionné
				if(array_filtres.length>=2){
					//On parcours les tr
					for (var i=0; i<tab_tr.length; i++){
						var tab_td =  tab_tr[i].getElementsByTagName('td'); 
						//if (i<=4) alert(tab_td.length+"\n"+i);
						if (tab_td.length>=4 && i>=4){
							//On parcours les td
							var toDelete=true;
							for(var p=0;p<tab_td.length;p++){
								//Si l'indice du td [ET] sa valeur sont dans le tableau des filtres
								
								if(is_conform(tab_tr[i])){
									toDelete = false;
								}
							}
							if(toDelete==true){
								tab_tr[i].style.display = "none";
							}
						}
					}
				}
				
				
				
				//if (document.getElementById("tab_tetiere_total").style.display=="block"){
					var tableR  = document.getElementById("tab_tetiere_total");				
					var tab_tr = tableR.getElementsByTagName('tr');		
					
					for(var i=0; i<tab_tr.length; i++){	
							tab_tr[i].style.display = "";
					}
				
					//Si un filtre est au moins selectionné
					if(array_filtres.length>=2){
						//On parcours les tr
						for (var i=0; i<tab_tr.length; i++){
							var tab_td =  tab_tr[i].getElementsByTagName('td'); 
							if (tab_td.length>4 && i>=4){
								//On parcours les td
								var toDelete=true;
								for(var p=0;p<tab_td.length;p++){
									//Si l'indice du td [ET] sa valeur sont dans le tableau des filtres
									if(is_conform(tab_tr[i])){
										toDelete = false;
									}
								}
								if(toDelete==true){
									tab_tr[i].style.display = "none";
								}
							}
						}
					}
				
				//}				
				
				
				
				document.body.removeChild(document.getElementById('div_filtre'));
			}
			//________________________________________________________________________________________________________________________________________________
			ul_filtre.appendChild(li_filtre);
			i++;
		}
//[LISTE DEROULANTE]____________________________________________________________________________________________________________________________________________________________________________________________
		with(ul_filtre.style){
			listStyleType 	="none";
			margin 			= "0";
			padding 		= "0";
			backgroundColor	= "#FFF";
			overflow 		= "auto"; 
		}
		//On attache le select à la div
		new_div3.appendChild(ul_filtre);
		//Attachement
		new_div.appendChild(new_div3);
		//Attachement
		document.body.appendChild(new_div);
		__switch("div_filtre", x, y);
	}
}
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/** Fonction getIndex 
*	@author	Oceanet 2007
*/
function getIndex(tab, index){
	var pos = "";
	for(var i=0; i<tab.length-1;i+=2){
		var temp = tab[i];
		if(temp.toString()==index.toString()){
			pos = i;
		}
	}
	return pos;
}
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/** Fonction in_array 
*	@author	Oceanet 2007
*	@param	Array  tab			Tableau à parser
*	@param	String value		valeur à tester
*	@return Bool   is_in 		Retourne true si la valeur [value] est dans le tableau, retourne false le cas échéant
*/
function simple_in_array(tab, value){
	var bool_return = false;
	for(var i=0; i<tab.length-1;i+=2){
		var temp = tab[i];
		if(temp.toString()==value.toString()){
			bool_return = true;
		}
	}
	return bool_return;
}
/** Fonction  is_conform
*	@author	Oceanet 2007
*	@param	tr 		 htmlObject
*	@return Bool     bool_return
*/
function is_conform(tr){
	
	var bool_return = true;
	if (tr.getElementsByTagName("td")){
		var td_list 	= tr.getElementsByTagName("td");
		for(var i=0;i<array_filtres.length-1;i+=2){		
			if(array_filtres[i+1]!=td_list[array_filtres[i]].innerHTML){
				bool_return = false;
			}
		}
	}
	return bool_return;
}
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/** Fonction explode 
*	@author	Oceanet 2007
*	@param	String obj_string	chaine de caractère à traiter
*	@param	String delimiter de la chaine de caractere
*	@return Array  tableau 
*/
function explode(chaine, delimiter){
	//Parcours de toute la chaine
	var pos   		= 0;
	var table 		= Array();
	var pos_current = 0;
	var i 			= 0;
	
	while(pos_current<chaine.length){
		//On prend la position du delimiter
		pos 		= chaine.indexOf(delimiter,pos_current);
		//On extrait la chaine et on la stocke
		table[i] 	= chaine.substring(pos_current, pos);
		//On incrémente la position courante +1 pour le délimiter
		pos_current = pos+1;
		//On incrémente l'index du tableau
		i++;
	}
	//On retourne le tableau
	return table;
}
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/** Fonction print_r 
*	@author	Oceanet 2007
*	@param	Array  tab			Tableau à afficher
*	@return String str_return 	Retourne le tableau mis en forme
*/
function print_r(tab){
	var str_return = "Array \n";
	//Parcours du tableau
	for(var i=0;i<tab.length;i++){ str_return+= "["+i+"] => "+tab[i]+"\n" }
	//Retour de la chaine
	alert(str_return);
}
function in_array(tab, value1, value2){
	var bool_return = false;
	for(var i=0; i<tab.length;i+=2){
		if(tab[i]==value1 && tab[i+1]==value2){
			bool_return = true;
		}
	}
	return bool_return;
}
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/** Fonction findPos 
*	@author	Oceanet 2007
*	@param	obj			objet à traiter
*	@return array		tableau contenant le x et le y de l'objet passé en paramètre
*/
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent){
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	return [curleft,curtop];
	
}	
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/** Fonction __switch de changement de couleur d'un élément
*	@author	Oceanet 2007
*	@param	par			nom de la div container à traiter
*	@param	sel			nom de la liste de définition à traiter
*	@return void
*/
function __switch(par){
	var div = document.getElementById(par);	
	if(div.style.display == "block"){
		i=0;
		div.style.display = "none";
		div.style.width="0px";
		div.style.height="0px";
	}else{
		i=0;
		opacity=0;
		div.style.display = "block";
		div.style.width="0px";
		div.style.height="0px";
		ma_div	= document.getElementById(par);
		__interpolation();	
	}
}
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/** Fonction __interpolation permettant le changement de largeur de de longueur de la div contenant la liste de filtres 
*	et changeant également l'opactité de cette dernière
*	@author	Oceanet 2007
*	@return void
*/
function __interpolation(){
	if(ma_div.style.width.substr(0, ma_div.style.width.length-2) < 162){
		ma_div.style.width = i+"px";
		timer = setTimeout("__interpolation()",10);
		//Interpolation de mouvement
		if(ma_div.style.height.substr(0, ma_div.style.height.length-2) < 120){
			ma_div.style.height = i+"px";
		}				
		i+=15;		
	}else{
		document.getElementById('menu_filtre').style.display = "block";
		document.getElementById('liste_filtre').style.display = "block";
		//document.getElementById('loader').style.visibility = "hidden";
		window.clearTimeout(timer);
	}
}
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/** Fonction __color de changement de couleur d'un élément
*	@author	Oceanet 2007
*	@param	name_element	nom de l'élément à traiter
*	@param	color			couleur à attribuer au background-color
*	@return void
*/
function __color(name_element, color){
	document.getElementById(name_element).style.backgroundColor = color;
}
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/** Fonction __close de fermeture de la liste de filtre
*	@author	Oceanet 2007
*	@return void
*/
function __close(){
	document.body.removeChild(document.getElementById('div_filtre'));
	//document.getElementById('loader').style.visibility = "hidden";
	document.getElementById('div_filtre').removeChild(document.getElementById('ul_filtre'));		
}
//____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
function cache(){
	if(is_open){
		document.getElementById("div_filtre").style.backgroundImage = "url(img/interface/back_mini_filtre.gif)";
		document.getElementById("div_filtre").style.height = "22px";
		document.getElementById("liste_filtre").style.visibility = "hidden";
		is_open = false;
	}else{
		document.getElementById("div_filtre").style.backgroundImage = "url(img/interface/back_filtre.gif)";
		document.getElementById("div_filtre").style.height = "119px";
		document.getElementById("liste_filtre").style.visibility = "visible";
		is_open = true;
	}
}
function close_div(){
	document.body.removeChild(document.getElementById('div_filtre'));
}