/*-jsl:import 1-effets.js */

// *** DÉTECTE LE NAVIGATEUR ***  (source modifiée depuis http://www.quirksmode.org/js/detect.html)
var Navigateur = 
	{
	nav_init: function () {
		this.nom = this.nav_rech(this.nav_liste) || "An unknown browser";
		this.version = this.nav_rechVersion(navigator.userAgent)	|| this.nav_rechVersion(navigator.appVersion) 	|| "an unknown version";
		},
	nav_rech: function (data) 
		{
		var i=0, retour='';
		while (i<data.length && retour==='')	
			{
			var dataString = data[i].part1;
			var dataProp = data[i].prop;
			this.rchVersionString = data[i].rchVersion || data[i].nom;
			if (dataString) 
				{
				if (dataString.indexOf(data[i].part2) != -1) retour=data[i].nom;
				}
			else if (dataProp) retour=data[i].nom;
			i++;
			}
		return retour;
		},
	nav_rechVersion: function (dataString) 
		{
		var index = dataString.indexOf(this.rchVersionString);
		if (index == -1) 
			return null;
		else
			return parseFloat(dataString.substring(index+this.rchVersionString.length+1));
		},
	nav_liste: [
		{ part1: navigator.userAgent, part2: "Chrome", nom: "Chrome" },
		{ part1: navigator.vendor, part2: "Apple", nom: "Safari", rchVersion: "Version" },
		{ prop: window.opera, nom: "Opera" },
		{ part1: navigator.userAgent, part2: "Firefox",	nom: "Firefox" },
		{ part1: navigator.userAgent, part2: "MSIE", nom: "Internet Explorer", 	rchVersion: "MSIE" }
		]
	};

Navigateur.nav_init();
var ie=false, opera=false, safari=false, ffox=false;
var ie55=false, ie6=false, ie7=false, ie8=false;
switch (Navigateur.nom)
	{
	case 'Firefox':ffox=true;break;
	case 'Opera':opera=true;break;
	case 'Safari':safari=true;break;
	case 'Internet Explorer':
		ie=true;
		switch (Navigateur.version)
			{
			case 5.5:ie55=true;break;
			case 6:ie6=true;break;
			case 7:ie7=true;break;
			case 8:ie8=true;break;
			//default:alert('version de IE non détectée');break;
			}	
		break;
	default:break;
	}

// Renvoie la touche tapée
function toucheClavier(evenmt)
	{
	if (ie)
		return window.event.keyCode;
	else if (evenmt && evenmt.which)
		return evenmt.which ;
	else
		return null;		
		
	}


// renvoie vrai si une variable n'est pas définie)
function nonDef(nomVariable)
	{
	if (typeof nomVariable=='undefined')
		return true;
	else if (nomVariable===null)
		return true;
	else
		return false;
	}


// Fonction créant un événement
// evenementCree( document, Array('mousemove'), mafonction);
// mousemove, mousedown, mouseup, click, dblclick, mouseover, mouseout, keypress, keyup, keydown
function evenementCree( objet, tabEven, fonction, mode_)
	{
	if (objet)
		{
		for (var i=0; i<tabEven.length; i++)
			{
			if (objet.addEventListener)
				objet.addEventListener( tabEven[i], fonction, mode_? mode_:false);
			else
				objet.attachEvent( 'on'+tabEven[i], fonction);
			}
		}
	}		

function evenementSuppr( objet, tabEven, fonction)
	{
	if (objet)
		{
		for (var i=0; i<tabEven.length; i++)
			{
			if (objet.addEventListener)
				objet.removeEventListener( tabEven[i], fonction, false);
			else
				objet.detachEvent( 'on'+tabEven[i], fonction);
			}
		}
	}	

	
function AJAX_Annule(objAJAX)
	{
	if (!objAJAX.AjaxAnnule && objAJAX.readyState !== 0)
		{
		
		objAJAX.AjaxAnnule=true;
		objAJAX.abort();
		objAJAX=null;
		}
	}
	
// Permet avec l'outil Ajax d'effectuer dynamiquement des requêtes
function AJAX_Appel	(params)
	{
	
	if (nonDef(params['opt_asynchrone'])) params['opt_asynchrone']=true;
	if (nonDef(params['opt_coderAppel'])) params['opt_coderAppel']=true;
	if (nonDef(params['paramsEntree'])) params['paramsEntree']='';
	
    var objAJAX;

     // Crée l'objet AJAX
     try
         { objAJAX = new XMLHttpRequest();   }
     catch (e)
        {
         try
             { objAJAX = new ActiveXObject("Microsoft.XMLHTTP");  }
         catch(e)
             {
             try
                 { objAJAX = new ActiveXObject("Microsoft.XMLHTTP");  }
             catch(e)
                 { return null;  }
            }
        }

	var paramsCodes='';
	if (params['paramsEntree']!=='')
		{
		if (typeof params['paramsEntree']=='string')
			paramsCodes+= params['paramsEntree'];
		else
			{
			for (var i=0;i<params['paramsEntree'].length;i++)
				{
				if (i>0) paramsCodes+='|';
				paramsCodes+=params['paramsEntree'][i];
				}
			}
		}
	if (params['opt_coderAppel']) paramsCodes=AJAX_Codage(paramsCodes);
		
    // On défini le fichier appelé lors de l'envoi
    objAJAX.open("GET", params['page'] + '?param=' + paramsCodes, params['opt_asynchrone']);
	
	objAJAX.AjaxAnnule=false;
    if (params['opt_asynchrone'])
        {
        objAJAX.onreadystatechange = function()
            {
			if (!objAJAX.AjaxAnnule)
				{
	            if (objAJAX.readyState == 4 && objAJAX.status == 200)
					{
					AJAX_Retour(objAJAX, params['opt_fonctionRetour'], params['opt_paramsRetour']);
					}
				}
            };
        }

    // On déclare le type des données échangées
    objAJAX.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    objAJAX.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); // Evite pb de cache

    // Envoi
    objAJAX.send(null);

    if (!params['opt_asynchrone'])
        AJAX_Retour(objAJAX, params['opt_fonctionRetour'], params['opt_paramsRetour']);

	return objAJAX;
	}
	
// Codage des caractères d'une chaîne pour les passer + facilement
function AJAX_Codage(chaine)
	{
	// Permet de faire passer " & + ...
	var source=String(chaine);
	var retour= "";
	for (var i=0;i<source.length;i++)
		{
		//retour += source.charCodeAt(i) + '-';
		var caract=source.charCodeAt(i).toString(16);
		if (caract.length<2) caract='0'+caract;
		retour += caract ;
		}
	return retour;
	}		

// Retour suite à l'appel au serveur
function AJAX_Retour(objAJAX, fonctionJavascriptRetour, paramsJSRetour)
    {
    // Fonction retour Javascript
    if (typeof fonctionJavascriptRetour!='undefined')
        {
        fonctionJavascriptRetour(objAJAX.responseText, paramsJSRetour);
        }
    }	
	
	
function objet_Renvoie(nomObjet)
	{
	if (typeof nomObjet=="string")
		{
		if (document.getElementById) 
			return document.getElementById(nomObjet);
		else if (document.all)  
			return document.all[nomObjet];
		else 
			return null;
		}
	else
		return nomObjet;
	}
	
// Détruit un objet (par nom ou objet)
function objet_Detruit(nomObjet)
	{
	var Objet=objet_Renvoie(nomObjet);
	if (Objet)
		{
		//if (Objet.offsetParent)
		// removeChild ne fonctionne que si la fenêtre parent est positionnée		
		if (Objet.parentNode) 
			{(Objet.parentNode).removeChild(Objet);}
			//(Objet.offsetParent).removeChild(Objet);			
		}
	}	
	
// Renvoie hauteur/largeur d'un élément
function objet_TailleRenvoie(objet)
	{
	return {hauteur:objet.offsetHeight, 
		largeur:objet.offsetWidth, 
		haut:objet.offsetTop,
		gauche:objet.offsetLeft};
	}	


// Positionnement automatique
function objet_PositionnementAuto(Element, posX, posY)
	{
	var Objet=objet_Renvoie(Element);
	if (Objet)
		{
		Objet.style.position = 'absolute';
		Objet.style.left= posX+ 'px';
		Objet.style.top	= posY + 'px';		
		}
	}	
	
function objet_CreeConteneur(objParent, OPT_Cacher, OPT_Classe)
	{	
	return objet_Cree('div',objParent, OPT_Classe);
	}
	
function objet_Cree(p_type, p_parent, p_id, OPT_ParamType, OPT_Classe)
	{
	var obj=document.createElement(p_type);
	if (!nonDef(p_id)) obj.id=p_id;
	p_parent.appendChild(obj);
	if (OPT_ParamType) obj.type=OPT_ParamType;
	if (!nonDef(OPT_Classe)) obj.className=OPT_Classe;
	return obj;
	}
	
// Copie un objet
// retourne nbImagesChargees et nbImagesDemandees
function objet_Copie(objetSource, objetDesti, OPT_objParent)
	{
	/*
	if (objetSource.currentStyle) // IE/Opera
		objetDesti.currentStyle= objetSource.currentStyle;
		
	else if (document.defaultView.getComputedStyle) // Firefox
		document.defaultView.getComputedStyle(objetDesti, null)= document.defaultView.getComputedStyle(objetSource, null);
	else if (objetSource.runtimeStyle) // Autre
		objetDesti.runtimeStyle= objetSource.runtimeStyle;			
	*/
	if (typeof OPT_objParent=='undefined') 
		{
		OPT_objParent=objetDesti;
		OPT_objParent.nbImagesChargees=0;
		OPT_objParent.nbImagesDemandees=0;
		}
	
	// Copie position et taille
	objetDesti.className=objetSource.className;
	objetDesti.style.position=objetSource.style.position;
	objetDesti.style.cursor=objetSource.style.cursor;
	objetDesti.style.overflow=objetSource.style.overflow;
	objetDesti.style.width=objetSource.offsetWidth + 'px';
	objetDesti.style.height=objetSource.offsetHeight + 'px';
	objetDesti.style.left=objetSource.offsetLeft + 'px';
	objetDesti.style.top=objetSource.offsetTop + 'px';

	if (objetSource.onclick) objetDesti.onclick=objetSource.onclick;
	if (objetSource.onmouseover) objetDesti.onmouseover=objetSource.onmouseover;
	if (objetSource.onmouseout) objetDesti.onmouseout=objetSource.onmouseout;
	
	// Copie sous-éléments
	for (var i=0;i<objetSource.childNodes.length;i++)
		{
		var objet1=objetSource.childNodes[i];
		// typeObjet doit exister...
		var objet2=document.createElement(objet1.typeObjet);
		objetDesti.appendChild(objet2);
		objet2.typeObjet=objet1.typeObjet;
		objet_Copie(objet1, objet2, OPT_objParent);
		}
		
	if (objetSource.src) 
		{
		//objetDesti.appendChild (objetSource.cloneNode(true));
		OPT_objParent.nbImagesDemandees++;
		objetDesti.onload=function()
			{
			OPT_objParent.nbImagesChargees++;
			};
		objetDesti.src=objetSource.src;

		}
	}
	
function Opacite_Fixe(obj, valeur)
	{

	if (ie) 
		obj.style.filter="alpha(opacity="+valeur.toString()+")";
	else if (ffox)
		{
		if (Navigateur.version<3.5 )
			obj.style.setProperty("-moz-opacity", valeur/100, "");
		else
			obj.style.setProperty("opacity", valeur/100, "");
		}			
	else if (opera)
		obj.style.opacity=valeur/100;
	else
		obj.style.filter="opacity="+ (valeur/100).toString()+")";
	}			
	
// Renvoie la position absolue d'un élément
function objet_PositionAbsolue(obj)
	{
	var coord = new Array();
	var parent = obj.offsetParent;

	coord.gauche = obj.offsetLeft;
	coord.haut = obj.offsetTop;
	while (parent)
		{
		coord.gauche += parent.offsetLeft;
		coord.haut += parent.offsetTop;
		if (parent.nodeName == 'DIV')
			coord.haut -= parent.scrollTop;
		parent = parent.offsetParent;
		}
	return coord;
	}	
	
// Fixe l'attribut  style d'un objet	
function objet_Style_Applique(Objet,Valeur)
	{
	// Attributs
	if(Objet) 
		{
		if (Objet.style.setAttribute)
			Objet.style.setAttribute('cssText',Valeur); // IE
		else
			Objet.setAttribute('style',Valeur);
		}
	else
		alert('objet inconnu (objet_Style_Applique)');
	}		
