//javascript

//fonction qui vas permettre de changer le contenue d'un contener


//fonction qui peremt de récupérer tous les éléments qui possède une classe particulière
//exemple dans imediamg2009/index1.fr.html fonction affiche_communication et aussi dans scoop/modele/module_slider_specialites.fr.html
function getElementsByClass(searchClass, node, tag) {
    var classElements = new Array();
    if ( node == null )
        node = document;
    if ( tag == null )
        tag = '*';
    var els = node.getElementsByTagName(tag);//on récupère tous les tag (*)
    var elsLen = els.length;//on récupère la longeur du tableau qui contient tous les tags
    var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
    for (i = 0, j = 0; i < elsLen; i++) {
        if ( pattern.test(els[i].className) ) {//si on trouve la classe cherché alors on l'enregistre dans le tableau de la classe
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
}

//le preg_replace mais en javascript (utilisation : preg_replace(Array('px'),Array(''),my_string))
function preg_replace (array_pattern, array_pattern_replace, my_string)  {
var new_string = String (my_string);
	for (i=0; i<array_pattern.length; i++) {
		var reg_exp= RegExp(array_pattern[i], "gi");
		var val_to_replace = array_pattern_replace[i];
		new_string = new_string.replace (reg_exp, val_to_replace);
	}
	return new_string;
}
//les fonction qui suive permette d'exécuter les script javascript charger à partir d'ajax

/***Debut chargement script javascript via ajax***/
    // SetInnerHTML Sécurisé
    function setInnerHTML(divContent, HTML) {
	if(HTML == undefined)
		HTML = '';
      divContent.innerHTML=HTML; 
      var All=divContent.getElementsByTagName("*");
      for (var i=0; i<All.length; i++) {
        All[i].id=All[i].getAttribute("id")
        All[i].name=All[i].getAttribute("name")
        //All[i].className=All[i].getAttribute("class")//probleme avec le chargement des class css dans IE
      }
      var AllScripts=divContent.getElementsByTagName("script")
      for (var i=0; i<AllScripts.length; i++) {
         var s=AllScripts[i];
         if (s.src && s.src!="") {
            // Précédement asynchrone, mis en synchrone pour éviter des problèmes de dépendances de scripts
            eval(getFileContent(s.src))
         }
         else {
            eval(s.innerHTML)
         }
      }
    }
 
    // Renvoie le texte de l'objet ActiveXObject le plus récent depuis une liste
    var pickRecentProgID = function (idList){
	    // found progID flag
        var bFound = false;
        for(var i=0; i < idList.length && !bFound; i++){
            try{
                var oDoc = new ActiveXObject(idList[i]);
                o2Store = idList[i];
                bFound = true;
            }catch (objException){
                // trap; try next progID
            };
        };
        if (!bFound)
		    throw ("Aucun ActiveXObject n'est valide sur votre ordinateur, pensez à mettre à jour votre navigateur");
        idList = null;
        return o2Store;
    }
 
    // Retourne un nouvel objet XmlHttpRequest
    var GetXmlHttpRequest_AXO=null
    var GetXmlHttpRequest=function () {
	    if (window.XMLHttpRequest) {
		    return new XMLHttpRequest()
	    }
	    else if (window.ActiveXObject) {
		    if (!GetXmlHttpRequest_AXO) {
			    GetXmlHttpRequest_AXO=pickRecentProgID(["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]);
		    }
		    return new ActiveXObject(GetXmlHttpRequest_AXO)
	    }
	    return false;
    }
 
    function getFileContent(url) {
 	   var Xhr=GetXmlHttpRequest();
       Xhr.open("GET",url,false);
       Xhr.send(null);
       return Xhr.responseText;
    }
/***fin chargement script javascript via ajax***/

/*
contener : l'id du contener
fichier : le fichier php d'où on tire toutes les données
donne : des donnés pour que l'ont transmete en paramètre
effet : pour donner un effet à la div (existe : fade/appear/disappear ou slidedown/slideup)//ne pas oublier d'importer scriptaculous
*/
	 
var xhr_object_ajax = null;  

function init_xhr_object(){    
     if(window.XMLHttpRequest) // Firefox 
        xhr_object_ajax = new XMLHttpRequest(); 
     else if(window.ActiveXObject) // Internet Explorer 
        xhr_object_ajax = new ActiveXObject("Microsoft.XMLHTTP"); 
     else { // XMLHttpRequest non supporté par le navigateur 
        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
        return; 
     } 
}

	init_xhr_object();
function update_ajax(contener,fichier,donne,effet,duration){

	if(effet == undefined)
		effet = '';
	if(duration == undefined){
		duration = 1.0;
	}
	var duration_ms = duration*1000;//la durée en millisecondes
	if(contener != '')
	 var div = document.getElementById(contener); 
	 
     xhr_object_ajax.open("POST", fichier, true); 
	     
     xhr_object_ajax.onreadystatechange = function() { 
        if(xhr_object_ajax.readyState == 4) 
		   if(xhr_object_ajax.responseText.match("&error&"))
		   		alert(xhr_object_ajax.responseText);
		   else{
			   //cas ou on veux mettre à jour une div
				if(contener != ''){
					if(effet == 'appear' || effet == 'disappear' || effet == 'fade'){
						Effect.Fade(div,{duration:duration})
						//div.innerHTML = xhr_object.responseText;
						setTimeout(function(){setInnerHTML(div,xhr_object_ajax.responseText);},duration_ms);
						setTimeout(function(){Effect.Appear(div,{duration:duration});},duration_ms);
					}
					else{
						//pas 100% opérationnel
						if(effet == 'slidedown' || effet == 'slideup' || effet == 'slide'){
							//on regarde si la div est déplié (hauteur différent de 0)
							if(div.offsetHeight == 0){
								setInnerHTML(div,xhr_object_ajax.responseText);
								Effect.SlideDown(div,{duration:duration});
							}
							else{
								Effect.SlideUp(div,{duration:duration});
								div.style.display = 'none';
								setTimeout(function(){setInnerHTML(div,xhr_object_ajax.responseText);},duration_ms);
								setTimeout(function(){Effect.SlideDown(div,{duration:duration});},duration_ms);
							}
						}
						else{//aucun effet
							if(div != null && div != undefined)
								setInnerHTML(div,xhr_object_ajax.responseText);
						}
					}
				}//fin contener existant
		   }
     } 
	 
	 var data = donne; 
     xhr_object_ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
     xhr_object_ajax.send(data); 
	
}

function update_ajax_no_effet(contener,fichier,donne,option){

	if(option == undefined)
		option = 'remplace';

	if(contener != '')
	 var div = document.getElementById(contener);  
	 var xhr_object = null; 
	       
     if(window.XMLHttpRequest) // Firefox 
        xhr_object = new XMLHttpRequest(); 
     else if(window.ActiveXObject) // Internet Explorer 
        xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
     else { // XMLHttpRequest non supporté par le navigateur 
        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
        return; 
     } 
	 
     xhr_object.open("POST", fichier, true); 
	     
     xhr_object.onreadystatechange = function() { 
        if(xhr_object.readyState == 4) 
		   if(xhr_object.responseText.match("&error&"))
		   		alert(xhr_object.responseText);
		   else{
			   //cas ou on veux mettre à jour une div
				if(contener != ''){
					if(option == 'remplace'){
						setInnerHTML(div,xhr_object.responseText);
					}
					else{
						if(option == 'apres'){
							div.innerHTML = div.innerHTML+xhr_object.responseText;
						}
						else{
							if(option == 'avant')
								div.innerHTML = xhr_object.responseText+div.innerHTML;
						}
					}
				}//fin contener existant
		   }
     } 
	 
	 var data = donne; 
     xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
     xhr_object.send(data); 
	
}

/* fonction qui permet d'envoyer des donner à un script php pour qu'il s'exécute*/
function send_ajax(fichier,donne,method){

	 var xhr_object = null; 
	       
     if(window.XMLHttpRequest) // Firefox 
        xhr_object = new XMLHttpRequest(); 
     else if(window.ActiveXObject) // Internet Explorer 
        xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
     else { // XMLHttpRequest non supporté par le navigateur 
        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
        return; 
     } 
	 
     xhr_object.open(method, fichier, false); 
	     
     xhr_object.onreadystatechange = function() { 
        if(xhr_object.readyState == 4) 
		   var reg1=new RegExp("[Erreur]","g");
		   if(xhr_object.responseText.match(reg1))
		   		alert(xhr_object.responseText);
			else
				return xhr_object.responseText;
     } 
	 
	 var data = donne; 
     xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
     xhr_object.send(data); 
	
}

/*fonction qui va remplir les value d'un formulaire leur id etant séparé par des | (utilisé pour la soumission de congres (soumission_congres+soumission_formulaire_congres)*/
function update_ajax_value(id,fichier,donne){
	 var xhr_object = null; 
	 
     if(window.XMLHttpRequest) // Firefox 
        xhr_object = new XMLHttpRequest(); 
     else if(window.ActiveXObject) // Internet Explorer 
        xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
     else { // XMLHttpRequest non supporté par le navigateur 
        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
        return; 
     } 
	 
     xhr_object.open("POST", fichier, true); 
	     
     xhr_object.onreadystatechange = function() { 
        if(xhr_object.readyState == 4) 
		   resultat = xhr_object.responseText.split("|");
		   if(resultat.length > 1)
		   		alert(xhr_object.responseText);
		   else{
		   		var result = xhr_object.responseText.split("{");
				var contener = id.split('|');
				//alert(result);
				var taille = contener.length;
				var taille_donne = result.length;
				//on vas ordonné les donné récupéré dans result
				for(var i = 0; i < taille_donne ; i++){
					tempresult = result[i].split('=');//xhr_object.responseText;
					result[tempresult[0]] = tempresult[1];
				}
				//si jamais on as le nombre de div et de donné différent on le signale
				for(var i = 0; i < taille ; i++){
					//on regarde si c'est un select ou un text
					if(document.getElementById(contener[i]) == "[object HTMLSelectElement]"){
						//on récupère la taille du select car on en a besoin pour parcourir le select pour vérifier chaque valeur et selectionner la bonne
						var taille_select = document.getElementById(contener[i]).options.length;
						
						for(var j = 0; j < taille_select ; j++){
							//si on as trouvé le bon select
							if(document.getElementById(contener[i]).options[j].value == result[contener[i]]){
								document.getElementById(contener[i]).options[j].selected = true;
								break;
							}
						}
					}
					else{
						if(result[contener[i]] == undefined)
							result[contener[i]] = '';
						document.getElementById(contener[i]).value = result[contener[i]];//xhr_object.responseText;
					}
				}
		   }
     } 
	 
	 var data = donne; 
     xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
     xhr_object.send(data);
	
}
/*** Utilise les infobulle (tooltips) de mootools***/
function Glossaire() {
	var oThis = this;
	this.initialWidth = 400;
	this.typeContenuActif = '';// Pour savoir si on doit recharger le contenu de l'infobulle
	this.timer = 0;// Peremt de définir un delai avant la fermeture lorsque le pointeur n'est pas sur l'infobulle
	
	this.init = function(classname,delai) {
	
		this.delai = delai;
		
		this.tip = new Element('div').setProperty('class', classname).setStyles({display: 'none','opacity' : 0,'position' : 'absolute'}).injectInside(document.body);
		this.tip.addEvents({
				mouseover: function(){
					oThis.stayOpen('','','');
				},
				mouseout: function(){
					oThis.close();
				}
		});
		this.tipTop = new Element('div').setProperty('class', 'tipTop').injectInside(this.tip);		
		this.tipContener = new Element('div').setProperty('class', 'tipContener').injectInside(this.tip);
		this.tipContent = new Element('div').setProperty('class', 'tipContent').injectInside(this.tipContener);
		
		this.tipEffectOpen = new Fx.Morph(
							 this.tip,{
							 duration: 500, 
							 transition: Fx.Transitions.Sine.easeIn
							 });
		this.tipEffectClose = new Fx.Morph(
							  this.tip,{
							  duration: 500, 
							  transition: Fx.Transitions.Sine.easeIn,
							  onComplete: function(){
								  oThis.tip.setStyle('display','none');
							  }
							  });
	}
	
	this.loadContent = function(element,id_mot,typeContenu,tip) {
		
		var xhr_object = null; 
			   
		if(window.XMLHttpRequest) // Firefox 
			xhr_object = new XMLHttpRequest(); 
		else if(window.ActiveXObject) // Internet Explorer 
			xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
		else { // XMLHttpRequest non supporté par le navigateur 
			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
			return; 
		} 
		 
		xhr_object.open("POST", "/ajax/ajax_get_html_glossaire.php", true); 
			 
		xhr_object.onreadystatechange = function() { 
			if(xhr_object.readyState == 4) { 
				if(xhr_object.responseText.match("&error&"))
					alert(xhr_object.responseText);		
				oThis.tipContent.innerHTML = xhr_object.responseText;
				oThis.tipEffectOpen.start({
					'display' : 'block',
					'opacity' : 1
				});
			}
		} 
		var data = "id_mot="+id_mot+"&typeContenu="+typeContenu; 
		xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xhr_object.send(data); 
	}
	
	this.stayOpen = function(element,id_mot,typeContenu) {
		clearTimeout(this.timer);
	}
	
	this.open = function(element,id_mot,typeContenu) {
		
		var centerX = element.getPosition()['x'] + element.getSize().x/2 - this.tipContener.getStyle('width').toInt()/2; // Position du lien (en X) moins la demi largeur du lien moins la demi largeur de l'infobulle
		var centerY = element.getPosition()['y'] + element.getSize().y; // Position du lien (en Y) moins la demi hauteur du lien
		this.tip.setStyle('left',centerX);
		this.tip.setStyle('top',centerY);
		if (typeContenu != this.typeContenuActif) {
			this.loadContent(element,id_mot,typeContenu);
			this.typeContenuActif = typeContenu;
			this.tipEffectOpen.start({
				'display' : 'block',
				'opacity' : 1
			});
		} else {
			this.tipEffectOpen.start({
				'display' : 'block',
				'opacity' : 1
			});
		}
		
		this.stayOpen();
	}
	
	this.closeDelay = function() {
		this.tipEffectClose.start({
			'opacity' : 0
		});
		this.ouvert = 0;
	}
	
	this.close = function() {
		this.timer = setTimeout(function(){oThis.closeDelay();},this.delai);
	}
}
/* Class qui permet de charger le contenue d'une page dans une fenetre d'ouverture mootool. La page est gnérer directement dans le mootool
 * Utilise la librairie mootool
*/
function PageID() {
	var oThis = this;
	this.initialWidth = 720;
	
	this.init = function() {
		if ($('page'))
			this.initialHeightOverlay = $('page').getSize().y;
		else
			this.initialHeightOverlay = window.screen.height;
			
		this.overlay = new Element('div').setProperty('id', 'pageID_fond').setStyles({'position': 'absolute','left': '0', 'display': 'none', 'opacity': '0', 'zIndex': '300000', 'height': this.initialHeightOverlay, 'width': '100%'}).injectInside(document.body);
		this.contener = new Element('div').setProperty('id', 'pageID_contener').setStyles({'position': 'absolute','display': 'none', 'opacity': '0', 'zIndex': '300001', 'width': this.initialWidth+"px"}).injectInside(document.body);
		new Element('a').setProperties({id: 'closePage', href: 'javascript:void(0)'}).injectInside(this.contener).onclick = this.overlay.onclick = this.close.bind(this);
		this.contenu = new Element('div').setProperty('id', 'pageID_contenu').injectInside(this.contener);
		
	}	
	
	// Pour ouvrir un fichier
	this.open_file = function (file,donne) {
		
		if (donne == undefined)
			donne = '';
		var top = 200;
		//pour IE il n'arrive pas à prendre en compte Window.getScrollTop() ni Window.getHeight() donc sa s'affiche tous en haut il faut donc remonter dans la page
		if(top <= 0){
			top = 0;
			window.scrollTo(0,0);
		}
		this.contener.setStyle('top', top);
		this.contener.setStyle('left', window.getSize().x/2 - this.initialWidth/2);
		update_ajax_no_effet('pageID_contenu',"ajax/"+file,donne);
		this.overlay.setStyle('display', 'block');
		this.overlay.setStyle('top', '0');
		var Effect = new Fx.Morph('pageID_fond', {duration: 500, transition: Fx.Transitions.Sine.easeIn});
		Effect.start({
			'opacity' : 0.6
		});
		this.contener.setStyle('display', 'block');
		var Effect_2 = new Fx.Morph('pageID_contener', 
						{duration: 500, 
						transition: Fx.Transitions.Sine.easeIn, 
						onComplete: 
							function(){
								// Mise à niveau de la taille de l'overlay
								if ((oThis.contener.getStyle('height').toInt() + 200) > oThis.overlay.getStyle('height').toInt())
									oThis.overlay.setStyle('height', (oThis.contener.getStyle('height').toInt() + 400)+"px") 
								else
									oThis.overlay.setStyle('height',oThis.initialHeightOverlay+"px");
							}
						});
		Effect_2.start({
			'opacity' : 1
		});
		
	}
	
	this.open = function(pageID,donne) {
		if (donne == undefined)
			donne = '';
		var top = window.getScrollTop() + 200;
		//pour IE il n'arrive pas à prendre en compte Window.getScrollTop() ni Window.getHeight() donc sa s'affiche tous en haut il faut donc remonter dans la page
		if(top <= 200){
			top = 200;
			window.scrollTo(0,0);
		}
		this.contener.setStyle('top', top);
		this.contener.setStyle('left', window.getSize().x/2 - this.initialWidth/2);
		if (donne != '')
			update_ajax_no_effet('pageID_contenu',"/ajax/ajax_get_html_load_pageID.php","pageID="+pageID+"&"+donne);
		else
			update_ajax_no_effet('pageID_contenu',"/ajax/ajax_get_html_load_pageID.php","pageID="+pageID);
		this.overlay.setStyle('display', 'block');
		this.overlay.setStyle('top', '0');
		var Effect = new Fx.Morph('pageID_fond', {duration: 500, transition: Fx.Transitions.Sine.easeIn});
		Effect.start({
			'opacity' : 0.6
		});
		this.contener.setStyle('display', 'block');
		var Effect_2 = new Fx.Morph('pageID_contener', 
						{duration: 500, 
						transition: Fx.Transitions.Sine.easeIn, 
						onComplete: 
							function(){
								// Mise à niveau de la taille de l'overlay
								if ((oThis.contener.getStyle('height').toInt() + 200) > oThis.overlay.getStyle('height').toInt())
									oThis.overlay.setStyle('height', (oThis.contener.getStyle('height').toInt() + 400)+"px") 
								else
									oThis.overlay.setStyle('height',oThis.initialHeightOverlay+"px");
							}
						});
		Effect_2.start({
			'opacity' : 1
		});
		
	}
	
	this.close = function() {
		
		var Effect = new Fx.Morph('pageID_fond', {duration: 500, transition: Fx.Transitions.Sine.easeIn});
		Effect.start({
			'opacity' : 0
		});
		var Effect2 = new Fx.Morph('pageID_contener', {duration: 500, transition: Fx.Transitions.Sine.easeIn});
		Effect2.start({
			'opacity' : 0
		});
		setTimeout(function(){$('pageID_fond').setStyle('display','none');$('pageID_contener').setStyle('display','none');},600);
	}
	
}

/***UTILISATION PAGEID***/
/*
// Dans un script après la balise body
var pageID = new PageID();
pageID.init();
OU
var pageID;
window.addEvent('domready', function() {
	pageID = new PageID();
	pageID.init();
});

// Dans le lien
pageID.open('id_article');
*/
/*FIN UTILISATION PAGEID*/
var posX_mouse = 0;
var posY_mouse = 0;
	//pour la postiion de la souris
function move(e) {
	if (!e) var e = window.event;
		 
	if (e.pageX || e.pageY){
		posX_mouse = e.pageX;
		posY_mouse = e.pageY;
	}
	else if (e.clientX || e.clientY){
		posX_mouse = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		posY_mouse = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
   }
}
document.onmousemove=move; // dès que la souris bouge, on appelle la fonction move pour mettre à jour la position de la bulle.
