// url de l'image du temporisateur  fournie dans src prec.
/*
Fonction de communication AJAX :
cette fonction prend comme parametres : 
	- l' id de la div à actualiser
	- l'url de traitement
	- 4 parametres et leurs valeurs (facultatifs)
	- Si le premier parametre = 'formulaire', alors, value contient l'id du formualire à envoyer à la page de traitement 
	en methode post.


Utilisation :

// 1- temporisateur : préciser en tete de page l'URL du temporisateur
<script type="text/javascript">
// url de l'image du temporisateur :
var ImageTemporisateur = '<?php echo (ADRESSE_SITE_INTERNET . "/" . REPERTOIRE_IMAGES ."/indicator_medium.gif"); ?>';
</script>


// 2- La balise DIV parent de celle faisant l'objet d'une mise à jour (IdRetour) doit être en position relative (centrage du temporisateur)

*/

function AjaxUpdater(IdRetour, Url, param1,value1,param2,value2,param3,value3,param4,value4,param5,value5,param6,value6,param7,value7,param8,value8,param9,value9,param10,value10) 
{
parametre = ''

if (param1=='formulaire')
	{
	parametre = $( value1 ).serialize(true);
	}
else
	{
	parametre+= param1 + "=" + value1;
	if (param2 !="")
		 { parametre+="&" + param2 + "=" + value2;}
	if (param3 !="")
		 { parametre+="&" + param3 + "=" + value3;}
	if (param4 !="")
		 { parametre+="&" + param4 + "=" + value4;}
	if (param5 !="")
		 { parametre+="&" + param5 + "=" + value5;}
	if (param6 !="")
		 { parametre+="&" + param6 + "=" + value6;}
	if (param7 !="")
		 { parametre+="&" + param7 + "=" + value7;}
	if (param8 !="")
		 { parametre+="&" + param8 + "=" + value8;}
	if (param9 !="")
		 { parametre+="&" + param9 + "=" + value9;}
	if (param10 !="")
		 { parametre+="&" + param10 + "=" + value10;}
	}
	
Ajax.ElementId = IdRetour;

new Ajax.Updater(IdRetour, Url, {				// reponse request
	method:'post',
	parameters: parametre,
	evalScripts : true
});
if ($('surimpression'))
	$('surimpression').style.height = getDocHeight() + 'px';
}



// Fonction faisant apparaitre le temporisateur
// url de l'image du temporisateur :
if (typeof(ImageTemporisateur)=='undefined')
	ImageTemporisateur = "../../images/indicator_medium.gif";


function AjaxControleurStart() {
	if ((Ajax.activeRequestCount > 0)  ) 
		{
		AjaxTemporisateurAppear();
		}
	}
	
function AjaxTemporisateurAppear() {
  // on crée un temporisateur dans la balise Ajax.ElementId
		//Effect.Fade(Ajax.ElementId, { duration: 0.7 , from: 1.0 , to: 0.5 });
		//SupprimeEnfants(Ajax.ElementId);
		Tempo 					= document.createElement( "DIV" );
		TempoImg				= document.createElement( "IMG" );
		Tempo.id				= "Tempo";
		Tempo.style.textAlign 	= "center";
		Tempo.width 			= "100%";
		Tempo.height 			= "100%";
		Tempo.style.zIndex 		= "999";
		Tempo.style.position	= "absolute";
		Tempo.style.top 		= "50%";
		Tempo.style.left 		= "50%";

		document.getElementById(Ajax.ElementId).appendChild(Tempo);
	 	document.getElementById("Tempo").appendChild(TempoImg);
		TempoImg.src	 	= ImageTemporisateur ;
		TempoImg.alt	 	= '' ;
}

function AjaxControleurStop(){
	if ((Ajax.activeRequestCount == 0) && ($("Tempo")) )
		{ 
		TempoImg	= $("Tempo").firstChild;
		// suppression du temporisateur
		disparu 	= $("Tempo").removeChild(TempoImg);
		}
		// reapparition de la balise mise à jour
		Effect.Appear(Ajax.ElementId, { duration: 0.7 , from: 0.0 , to: 1.0 });
	}

// Controleur de reponse AJAX. Au début : affichage / creation temporisateur. EN fin : suppression du temporisateur.	
Ajax.Responders.register( {
  		onCreate : function(){AjaxControleurStart()},
		onComplete: function(){AjaxControleurStop()}
});


// suppression de tous les elements enfants d'un ID fourni (pas utilisé).
function SupprimeEnfants(Id)
{
if(document.getElementById(Id))
	{
	Fin		 = false;
	disparu  = new Array();
	t 		 = 0;

	while (!Fin)
		{
		if(document.getElementById(Id).hasChildNodes())
			{
			var noeud=document.getElementById(Id).firstChild;
			disparu = document.getElementById(Id).removeChild(noeud);
			t++;
			}
		else 
			{Fin = true;
			}
		}
	}
}


// fonction pour ajouter un element à la liste des elts droppabels.
ElementsDropables_Permanents 	= new Array();
ElementsDropables_NonPermanents = new Array();

function AjouterElementDroppable(ElementsDropables, id, commondbprefix, file1, div1, file2, div2)
{
	var	x 			= ElementsDropables.length;
	// on regarde si cet item n'existe pas deja

	t				= 0;
	FinBalayage 	= false;
	DejaDropable 	= false;
	
	if (x==0) FinBalayage = true;
	
	while (!FinBalayage)
		{
		// si elt de tableau
		if (ElementsDropables.toString().indexOf("Array") != -1) 
			{
			if (ElementsDropables[t]['id']==id)
			{DejaDropable = true;FinBalayage = true;}
			}
		t++;
		if (t > x) {FinBalayage = true;}
		}
	// si elle n'existe pas, on l'ajoute au tableau.
	if (!DejaDropable)
		{
		ElementsDropables[x]					= new Array();
		ElementsDropables[x]['id'] 				= id;
		ElementsDropables[x]['commondbprefix'] 	= commondbprefix;
		ElementsDropables[x]['file1'] 			= file1;
		ElementsDropables[x]['div1'] 			= div1;
		ElementsDropables[x]['file2'] 			= file2;
		ElementsDropables[x]['div2'] 			= div2;
		}
	return ElementsDropables;	
}
/* Fonction utilisée pour rendre droppable les divs d'un tableau :	
Parametres a fournir :
Table ElementsDropables[x][]
	- id 				= id de l'objet media à mettre à jour
	- commondbprefix 	= nom de la bdd media utilisée
	- div1 				= id de la 1e div cible après traitement
	- file1				= url du fichier de traitement 1
	- div2 				= id de la 2e div cible après traitement
	- file2				= url du fichier de traitement 2

onDrop  = fonction a effectuer lorsque l'objet est laché sur cette zone

Les variables $('').idt sont les id de ces zones. Elles sont nécessaires pour la mise à jour des bdd par AJAX.
		droppable.idt 	= contient l'id de l'elt (base de donnée) news ou produit ou... à mettre à jour
		draggable.idt 	= contient l'id du media (base de donnée concernée) à mettre à jour.

*/

function RendreDroppable(ElementsDropables)
	{
	var ArrayLength = ElementsDropables.length;
	if (ArrayLength == 0) return;
	// ElementsDropables = new Array[x]  id, commondbprefix,file1, div1, file2, div2
	for (x = 0 ; x < ArrayLength ; x++)
		{

		id		 		= ElementsDropables[x]['id'];
		commondbprefix 	= ElementsDropables[x]['commondbprefix'];
		file1			= ElementsDropables[x]['file1'];
		div1			= ElementsDropables[x]['div1'];
		file2			= ElementsDropables[x]['file2'];
		div2 			= ElementsDropables[x]['div2'];
	   Droppables.add(div2, {onDrop: moveItem, hoverclass:'hoverdrop'});
	   document.getElementById(div2).idt = id;
	   document.getElementById(div2).commondbprefix = commondbprefix;
	   document.getElementById(div2).cleared = false;
	   document.getElementById(div2).file1 = file1;
	   document.getElementById(div2).file2 = file2;
	   document.getElementById(div2).div1 = div1;
	   document.getElementById(div2).div2 = div2;
	   }
	}


// fonction pour supprimer les elts droppabels
function SupprimeDroppables(ElementsDropables)
{
// ElementsDropables = new Array[x]  id, commondbprefix,file1, div1, file2, div2
for (x = 0 ; x < ElementsDropables.length ; x++)
	{

	div2 			= ElementsDropables[x]['div2'];
	Droppables.remove(div2);
   }
   
}

// fonction utilisée pour supprimer d'une table leposte précisé.
function SupprimerDroppablePermanent(TableDroppable, id )
{
var x 					= 0;
var y 					= 0;
var Fin 				= false;
var NewTableDroppable	= new Array();

var ArrayLength = TableDroppable.length;
if (ArrayLength==0) return;
while (!Fin)
	{
	if (TableDroppable[x]['div2'] != id)
		{
		NewTableDroppable[y]	= new Array();
		NewTableDroppable[y] 	= TableDroppable[x];
		y++;
		}
	x++;
	if (x == ArrayLength) Fin = true;
	}

return NewTableDroppable;	
}	
/* Fonction utilisée pour rendre draggable une div :	
Parametres a fournir :
	- id 				= id de l'objet media à mettre à jour
	- commondbprefix 	= prefixe de la bdd media utilisée
	- div1 				= id de la div cible après traitement
	- file1				= url du fichier de traitement
	- idtobj		 	= identité de l'objet parent auquel s'attache ce media.

 Cette fonction ajoute a un objet la propriete de 'draggable', il peut etre glissé sur une zone
 declarée droppable (qui peut recevoir et mettre à jour les bdd en fonction)
starteffect = effet d'opacite au debut, lorsqu'on selectionne cet objet
revert = true : si fichier pas droppé sur zone correcte, il revient a sa position initiale

*/
function RendreDraggable(id, commondbprefix,div1, file1, idtobj)
	{
	new Draggable(div1, {revert: true,
						 starteffect:function() {new Effect.Opacity(id, { duration: 0.1 , from: 1.0 , to: 0.4 })}
						}
					);
  
	document.getElementById(div1).idt = id;
	document.getElementById(div1).commondbprefix = commondbprefix;
	document.getElementById(div1).file1 = file1;
	document.getElementById(div1).idtobj = idtobj;
	}


function moveItem( draggable,droparea){
   if (!droparea.cleared) {
      droparea.cleared = true;
   }
   draggable.parentNode.removeChild(draggable);
   // Mise a jour BDD fichiers. 
  if (draggable.file1 !='')
	   AjaxUpdater('listefichiers', draggable.file1, 'dropareaidt', droparea.idt, 'draggableidt', draggable.idt, 'commondbprefix', draggable.commondbprefix)

	if (droparea.idt != 0) // idt = 0 lorsque l'on replace un objet dans la liste des fichiers.
		{
	   // Mise a jour Affichage div1(element de liste). 
		if (droparea.file1 !='')
			{
		     AjaxUpdater(droparea.div1, droparea.file1, 'mediaobjectid', droparea.idt, 'commondbprefix', draggable.commondbprefix);
			}
	   // Mise a jour Affichage div2. 
		if (droparea.file2 !='')
			{
			 AjaxUpdater(droparea.div2, droparea.file2, 'mediaobjectid', droparea.idt, 'draggableidt', draggable.idt, 'commondbprefix', draggable.commondbprefix);
			}
		}
	else
		{
		// si draggable.idtobj est vide, on est dans le cas d'un deplacement de fichier sur la zone droppable de fichier. Il n'y a donc pas d'idt objet. On ne fait pas la mise à jour.

		if ((droparea.file1 !='') && (draggable.idtobj !='') )
			{
		     AjaxUpdater(droparea.div1 + draggable.idtobj, droparea.file1, 'mediaobjectid', draggable.idtobj, 'commondbprefix', draggable.commondbprefix);
			}
	   // Mise a jour Affichage div2. 
		if ((droparea.file2 !='') && (draggable.idtobj !='') )
			{
			 AjaxUpdater(droparea.div2 + draggable.idtobj, droparea.file2, 'mediaobjectid', draggable.idtobj, 'draggableidt', draggable.idt, 'commondbprefix', draggable.commondbprefix);
			}
		}
}

/* -- Fct de mise en forme du nouvel ordre des categ après modif :
On envoie une chaine de caract. contenant : 
-> l'id du niveau ou l'ordre a changé
-> la nouvelle position de chaque elt cde cet ordre.
Retourne la variable neworder.
*/
function FormatterListe(id) 
	{
	var newOrder = Sortable.serialize(id, 'list');
	z = id + "[]=";

	if (id != 'tmenu0')
	{	tab = id.split('_');	id = tab[1];	}
	else
	{	id=0;	}	
	var TabElement = newOrder.split('&');
	for(i=1; i<=TabElement.length; i++)
		{
		newOrder = newOrder.replace(z,"");
		newOrder = newOrder.replace("&",",");
		}
	newOrder = id +"," + newOrder;
	return newOrder;

	}