/**
*
*	Fonctions pour MS
*
*/
var ie = document.all;

var global = this;

var popupOpen = false;
var popupBeingClose = false;
var timeRedimensionne;

var aLayersHeights = {};

var aCorb = new Array();
var sCorb = "";

if (typeof Class != 'undefined') {
	var appelAjaxObjet = Class.create();

		appelAjaxObjet.prototype = {

		// Constructeur
		initialize: function(url,layercible,parametres,typeretour,retourMultiple,cibleRetourDemande) {
			this.divRetour = layercible;
			this.typeRetour = typeretour;
			if(cibleRetourDemande) this.cibleRetour = cibleRetourDemande;
			var oAfficheAjax = new Ajax(url,this);  
			if(parametres) {
				var reg= new RegExp("[&]+", "g");
				var tableau=parametres.split(reg);
				if(tableau.length > 0) {
				  for (var i=0; i<tableau.length; i++) {
					  var regIn=new RegExp("[=]+", "g");
					  var tableauIn=tableau[i].split(regIn);
					  oAfficheAjax.ajoute(tableauIn[0], tableauIn[1]);
				  }
				} else {
				   var regIn=new RegExp("[=]+", "g");
				   var tableauIn=tableau[i].split(regIn);
				   oAfficheAjax.ajoute(tableauIn[0], tableauIn[1]); 
				}
			}

			// On ajoute l'idpage en cours si la variable existe
			/*if(me_id_page_en_cours) {
				oAfficheAjax.ajoute("me_id_page_en_cours", me_id_page_en_cours); 
			}*/

			if(retourMultiple != null) oAfficheAjax.envoie(retourAjaxMultiple);  
			else oAfficheAjax.envoie(retourAppelAjax); 
		}

	};	

}

// Fonction d'appel à la création d'une requête ajax
function appelAjax(url,layercible,parametres,typeretour,retourMultiple,cibleRetourDemande) {
	new appelAjaxObjet(url,layercible,parametres,typeretour,retourMultiple,cibleRetourDemande);
}

// On met à jour le contenu suite à une requête ajax
var retourAppelAjax = function(e) {	

	  var navigateurIE = null;
	  var layerRetour = $(this.divRetour);
	  var Even = window;
	  if(this.cibleRetour == "parent") {
		  layerRetour = window.parent.$(this.divRetour);
		  var Even = window.parent;
	  }
	  if(this.typeRetour == "inner") {
		if(e != "") {
			layerRetour.innerHTML = e;
			var javascript = layerRetour.getElementsByTagName("script");
			for (var i = 0; i < javascript.length; i++){
				global.eval(javascript[i].text);
			}
			if(maxopamessage && maxopacadre && layerRetour.offsetHeight && layerRetour.offsetWidth) {
				ouvrePopup(layerRetour.offsetWidth,layerRetour.offsetHeight,maxopamessage,maxopacadre,navigateurIE);
				timeRedimensionne = setTimeout("redimensionnePopupMessage();",1000);
				timeRedimensionne = setTimeout("redimensionnePopupMessage();",2000);
				timeRedimensionne = setTimeout("redimensionnePopupMessage();",5000);
				maxopamessage = null;
				maxopacadre = null;
				navigateurIE = null;
			}
		}
	  }
	  else {
		if(e != "") {
			var sauveHtml = layerRetour.innerHTML;
			layerRetour.innerHTML = e;
			var javascript = layerRetour.getElementsByTagName("script");
			for (var i = 0; i < javascript.length; i++){
				global.eval(javascript[i].text);
			} 	
			layerRetour.innerHTML = sauveHtml;
			if(maxopamessage && maxopacadre && layerRetour.offsetHeight && layerRetour.offsetWidth) {
				ouvrePopup(layerRetour.offsetWidth,layerRetour.offsetHeight,maxopamessage,maxopacadre,navigateurIE);
				maxopamessage = null;
				maxopacadre = null;
				navigateurIE = null;
			}
		}
	  }
	  this.typeRetour = "";
	  this.divRetour = "";
	  this.cibleRetour = "";
}

// On met à jour plusieurs layer suite au retour de la requête ajax
var retourAjaxMultiple = function(e) {
	var reg=new RegExp("[||\*||]+", "g");
    var tableau=e.split(reg);
    if(tableau.length > 0) {
		for (var a = 0; a < tableau.length; a++) {		
			if(a%2 == 0) {
			  var re = tableau[a];
			  var contenu = "";
			} else {
			  var contenu = tableau[a];
			}
			if(contenu && re && $(re)) {
				$(re).innerHTML = contenu;
				var javascript = $(re).getElementsByTagName("script");
				var global = this; //dans un contexte global
				for (var i = 0; i < javascript.length; i++){
					global.eval(javascript[i].text);
				}
			}
		}
	}
}

var valeursChamp = '';
function champsSelect(separateur) {
  valeursChamp = '';
  for (var i=0; i< $('champs').options.length; i++)
  {
    if ($('champs').options[i].selected && $('champs').options[i].value != 0)
    valeursChamp += $('champs').options[i].value+separateur;
  }
}

var valeursDossier = '';
function dossierSelect(separateur) {
  valeursDossier = '';
  for (var i=0; i< $('dossiers').options.length; i++)
  {
    if ($('dossiers').options[i].selected && $('dossiers').options[i].value != 0)
    valeursDossier += $('dossiers').options[i].value+separateur;
  }
}

function rechargeLayers(listeLayerAMaj,parametres,idPage,latence,affichePopupPanier,retour) {
	var listeTexte = serialize(listeLayerAMaj);
	if(latence != null) {
		setTimeout("appelAjax('../medias/fonctions/rechargeContenuLayer.php','','ajax=1&listeLayers="+listeTexte+"&parametres="+parametres+"&idPage="+idPage+"','inner','1');",latence);
	} else {
		appelAjax('../medias/fonctions/rechargeContenuLayer.php','','ajax=1&listeLayers='+listeTexte+'&parametres='+parametres+'&idPage='+idPage,'inner','1');
	}
	if(affichePopupPanier) {
		if($('ms_popup_resume_panier')) {
			if($('ms_popup_resume_panier').style.display == 'none' || $('ms_popup_resume_panier').style.display == '') {
				if(latence != null) {
					setTimeout("positionnePopupPanier('ms_popup_resume_panier');",latence);
				} else {
					positionnePopupPanier('ms_popup_resume_panier');	
				}
			}
		}
	}
}

// Positionne la fenêtre au centre (future ancienne fonction)
function positionnePopupPanier(layer) {
	$(layer).style.display = 'block';
	$(layer).style.zIndex = 10;
	// On repositionne le layer
	var largeurFenetre = document.documentElement.clientWidth;
	var hauteurFenetre = document.documentElement.clientHeight;
	var scrollTop = document.documentElement.scrollTop;
	var scrollLeft = document.documentElement.scrollLeft;
	var largeurPanier = $('ms_popup_resume_panier').style.width;
	var hauteurPanier = $('ms_popup_resume_panier').style.height;
	var posCadrePanierX = Math.round( ((largeurFenetre/2) - (largeurPanier/2) + scrollLeft) );
	var posCadrePanierY = Math.round( ((hauteurFenetre/2) - (hauteurPanier/2) + scrollTop) );
	$(layer).style.left = posCadrePanierX+"px";
	$(layer).style.top = posCadrePanierY+"px";
}

var getDocumentSize = function () {

	// Mozilla
	var height = document.documentElement.scrollHeight;
	var width = document.documentElement.scrollWidth;

	// IE et opéra
	if(document.documentElement.clientHeight > height) {
		height = document.documentElement.clientHeight;
	}
	if(document.documentElement.clientWidth > width) {
		width = document.documentElement.clientWidth;
	}

	// Safari
	if(document.body.scrollHeight > height) {
		height = document.body.scrollHeight;
	}
	if(document.body.scrollWidth > width) {
		width = document.body.scrollWidth;
	}

	return new Array(width,height);

}

var getDisplaySize = function () {

	var myWidth = 0, myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}
	return new Array(myWidth,myHeight);

};

var redimensionnePopupMessage = function () {

	if(!popupBeingClose) {

		// On récupère les dimensions du document
		var tailleDocument = getDocumentSize();
		var largeurEcran = tailleDocument[0];
		var hauteurEcran = tailleDocument[1];
		// On calcul les dimension des scrolls
		var decalageX = (document.documentElement.scrollLeft)?document.documentElement.scrollLeft:document.body.scrollLeft;
		var decalageY = (document.documentElement.scrollTop)?document.documentElement.scrollTop:document.body.scrollTop;

		// *************************************//
		// Popup
		var layer = $('popup_message');

		// On initialise les dimensions pour éviter les petits bug liés aux navigateurs
		layer.style.height = '';
		layer.style.width = '';
		
		// On récupère les informations de taille de la zone d'affichage
		var tailleAffichage = getDisplaySize();

		// On positionne le layer à 50% en top et left
		layer.style.left = ( tailleAffichage[0] / 2)+decalageX+"px";
		layer.style.top = ( tailleAffichage[1] / 2)+decalageY+"px";

		// On récupère la taille du layer (suite au innerHTML)
		hauteur = layer.offsetHeight;
		largeur = layer.offsetWidth;

		// Si la largeur est plus grande que la largeur de la fenêtre on réduit la taille
		if(largeur > (largeurEcran - decalageX) ) { largeur = (largeurEcran - decalageX) - 150; }
		// Si la hauteur est plus grande que la hauteur de la fenêtre on réduit la taille
		if(hauteur > (hauteurEcran - decalageY)) { hauteur = (hauteurEcran - decalageY) - ((decalageY)?20:0) - 150; }

		// On calcul les marges pour positionner le layer au centre
		var margeTop = (((hauteur)/2)-((decalageY)?20:0));
		var margeLeft = (((largeur)/2)-((decalageX)?20:0));

		// Si la marge est supérieur au positionnement du layer, le layer va sortir de l'écran, il faut donc le repositionner
		if(margeTop > layer.style.top) margeTop = margeTop - (layer.style.top - margeTop) - 20;
		if(margeLeft > layer.style.left) margeLeft = margeLeft - (layer.style.left - margeLeft) - 20;

		// On applique les marges
		layer.style.marginTop = "-"+margeTop+"px";
		layer.style.marginLeft = "-"+margeLeft+"px";
		
		// On applique la dimensions au layer
		layer.style.height = (hauteur)+'px';
		layer.style.width = (largeur)+'px';

	}

}

var ouvrePopup = function(largeur,hauteur,maxopamessage,maxopacadre,ie) {

	// On récupère les dimensions du document
	var tailleDocument = getDocumentSize();
	var largeurEcran = tailleDocument[0];
	var hauteurEcran = tailleDocument[1];
	// On calcul les dimension des scrolls
	var decalageX = (document.documentElement.scrollLeft)?document.documentElement.scrollLeft:document.body.scrollLeft;
	var decalageY = (document.documentElement.scrollTop)?document.documentElement.scrollTop:document.body.scrollTop;

	// *************************************//
	// Popup
	var layer = $('popup_message');

	// On initialise les dimensions pour éviter les petits bug liés aux navigateurs
	layer.style.height = '';
	layer.style.width = '';
	
	// On récupère les informations de taille de la zone d'affichage
	var tailleAffichage = getDisplaySize();

	// On positionne le layer à 50% en top et left
	layer.style.left = ( tailleAffichage[0] / 2)+decalageX+"px";
	layer.style.top = ( tailleAffichage[1] / 2)+decalageY+"px";

	// On récupère la taille du layer (suite au innerHTML)
	hauteur = layer.offsetHeight;
	largeur = layer.offsetWidth;

	// Si la largeur est plus grande que la largeur de la fenêtre on réduit la taille
	if(largeur > (largeurEcran - decalageX) ) { largeur = (largeurEcran - decalageX) - 150; }
	// Si la hauteur est plus grande que la hauteur de la fenêtre on réduit la taille
	if(hauteur > (hauteurEcran - decalageY)) { hauteur = (hauteurEcran - decalageY) - ((decalageY)?20:0) - 150; }

	// On calcul les marges pour positionner le layer au centre
	var margeTop = (((hauteur)/2)-((decalageY)?20:0));
	var margeLeft = (((largeur)/2)-((decalageX)?20:0));

	// Si la marge est supérieur au positionnement du layer, le layer va sortir de l'écran, il faut donc le repositionner
	if(margeTop > layer.style.top) margeTop = margeTop - (layer.style.top - margeTop) - 20;
	if(margeLeft > layer.style.left) margeLeft = margeLeft - (layer.style.left - margeLeft) - 20;

	// On applique les marges
	layer.style.marginTop = "-"+margeTop+"px";
	layer.style.marginLeft = "-"+margeLeft+"px";
	
	// On applique la dimensions au layer
	layer.style.height = (hauteur)+'px';
	layer.style.width = (largeur)+'px';

	// On place le layer devant le voile
	layer.style.zIndex = 1001;
	// Si pas IE6 et < ou si la fenetre n'est pas ouverte, on l'ouvre en fondu
	if(!ie && !popupOpen) apparitionPopup('popup_message',0,maxopamessage,1,0.5);

	// *************************************//
	// Voile

	var layer = $('popup_voile');
	// On le place en haut à gauche
	layer.style.top = "0px";
	layer.style.left = "0px";
	// On l'étire sur tout la longueur de la page
	layer.style.width =  largeurEcran+decalageX+"px";;
	layer.style.height = hauteurEcran+decalageY+"px";
	// On lui applique une couleur de fond si elle n'existe pas
	if(layer.style.backgroundColor == "") layer.style.backgroundColor = "black";
	// On le place sous la popup
	layer.style.zIndex = 1000;
	// Si la fenetre n'est pas ouverte, on l'ouvre en fondu
	if(!popupOpen) apparitionPopup('popup_voile',0,maxopacadre,1,1);
	popupBeingClose = false;

};

var opacifie = function(sId, nPourcentage) {
	var calque = $(sId).style;
	calque.opacity = (nPourcentage / 100);
	calque.MozOpacity = (nPourcentage / 100);
	calque.KhtmlOpacity = (nPourcentage / 100);
	calque.filter = "alpha(opacity=" + nPourcentage + ")";
};



var retournOpacity = function(sId) {
	var calque = $(sId).style;
	if(calque.opacity) return calque.opacity*100;
    else if(calque.MozOpacity) return calque.MozOpacity*100;
	else if(calque.KhtmlOpacity) return calque.KhtmlOpacity*100;
	else if(calque.filters.item("DXImageTransform.Microsoft.Alpha").Opacity) return calque.filters.item("DXImageTransform.Microsoft.Alpha").Opacity;
};

var apparitionPopup = function(layer,opacity,opacityFin,vitesse,cadence,palier) {
	if(!palier) palier = 10;
	opacity = Math.round( ( (Math.log(palier)-1) / (Math.log(opacityFin)-1) ) * 100);
	if(opacityFin >= opacity) {
		opacifie(layer, opacity);
		eval("tPopup = setTimeout(\"apparitionPopup('"+layer+"', "+opacity+", "+opacityFin+", "+vitesse+", "+cadence+", "+(palier+(10/cadence))+")\", "+vitesse+")");
	} else {
		opacifie(layer, opacityFin);
		popupOpen = true;
	}
};

var disparitionPopup = function(layer,opacity,opacityFin,vitesse,cadence,palier) {
	if(!palier) palier = opacity/10;
	opacity = Math.round(Math.exp( (palier * (4.6/10)) ));
	if(opacity > 1) {
		opacifie(layer, opacity);
		eval("tPopup = setTimeout(\"disparitionPopup('"+layer+"', "+opacity+", "+opacityFin+", "+vitesse+", "+cadence+", "+(palier-(10/cadence))+")\", "+vitesse+")");
	} else {
		opacifie(layer, 0);
		$(layer).style.left = "-4000px";
		popupOpen = false;
	}
};

var fermePopupFondu = function() {

	popupBeingClose = true;
	clearTimeout(timeRedimensionne);
	var opacity = retournOpacity('popup_message');
	disparitionPopup('popup_message',opacity,0,1,2);
	var opacity = retournOpacity('popup_voile');
	disparitionPopup('popup_voile',opacity,0,1,9);
};

var fermePopup = function() {
	popupBeingClose = true;
	clearTimeout(timeRedimensionne);
	$('popup_message').style.left = "-4000px";
	$('popup_voile').style.left = "-4000px";
};

// Serialisation des données 
function serialize( mixed_value ) {

    var _getType = function( inp ) {
        var type = typeof inp, match;
        var key;
        if (type == 'object' && !inp) {
            return 'null';
        }
        if (type == "object") {
            if (!inp.constructor) {
                return 'object';
            }
            var cons = inp.constructor.toString();
            if (match = cons.match(/(\w+)\(/)) {
                cons = match[1].toLowerCase();
            }
            var types = ["boolean", "number", "string", "array"];
            for (key in types) {
                if (cons == types[key]) {
                    type = types[key];
                    break;
                }
            }
        }
        return type;
    };
    var type = _getType(mixed_value);
    var val, ktype = '';
    
    switch (type) {
        case "function": 
            val = ""; 
            break;
        case "undefined":
            val = "N";
            break;
        case "boolean":
            val = "b:" + (mixed_value ? "1" : "0");
            break;
        case "number":
            val = (Math.round(mixed_value) == mixed_value ? "i" : "d") + ":" + mixed_value;
            break;
        case "string":
            val = "s:" + mixed_value.length + ":\"" + mixed_value + "\"";
            break;
        case "array":
        case "object":
            val = "a";
            /*
            if (type == "object") {
                var objname = mixed_value.constructor.toString().match(/(\w+)\(\)/);
                if (objname == undefined) {
                    return;
                }
                objname[1] = serialize(objname[1]);
                val = "O" + objname[1].substring(1, objname[1].length - 1);
            }
            */
            var count = 0;
            var vals = "";
            var okey;
            var key;
            for (key in mixed_value) {
                ktype = _getType(mixed_value[key]);
                if (ktype == "function") { 
                    continue; 
                }
                
                okey = (key.match(/^[0-9]+$/) ? parseInt(key) : key);
                vals += serialize(okey) +
                        serialize(mixed_value[key]);
                count++;
            }
            val += ":" + count + ":{" + vals + "}";
            break;
    }
    if (type != "object" && type != "array") val += ";";
    return val;
}

function addslashes(str) {
	str=str.replace(/\'/g,'\\\'');
	str=str.replace(/\"/g,'\\"');
	str=str.replace(/\\/g,'\\\\');
	str=str.replace(/\0/g,'\\0');
	return str;
}

function stripslashes(str) {
	str=str.replace(/\\'/g,'\'');
	str=str.replace(/\\"/g,'"');
	str=str.replace(/\\\\/g,'\\');
	str=str.replace(/\\0/g,'\0');
	return str;
}

function base64_encode( data ) {

	var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc="", tmp_arr = [];
	if (!data) {
		return data;
	}
	do { 
		// pack three octets into four hexets
		o1 = data.charCodeAt(i++);
		o2 = data.charCodeAt(i++);
		o3 = data.charCodeAt(i++);
		bits = o1<<16 | o2<<8 | o3;
		h1 = bits>>18 & 0x3f;
		h2 = bits>>12 & 0x3f;
		h3 = bits>>6 & 0x3f;
		h4 = bits & 0x3f;
 		// use hexets to index into b64, and append result to encoded string
		tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
	} while (i < data.length);

	enc = tmp_arr.join('');
	switch( data.length % 3 ){
		case 1: enc = enc.slice(0, -2) + '=='; break;
		case 2: enc = enc.slice(0, -1) + '='; break;
	}
	return enc;

}

var writeCookie = function (nom, valeur) {

	var argv=writeCookie.arguments;
	var argc=writeCookie.arguments.length;
	var expires=(argc > 2) ? argv[2] : null;
	var path=(argc > 3) ? argv[3] : null;
	var domain=(argc > 4) ? argv[4] : null;
	var secure=(argc > 5) ? argv[5] : false;
	document.cookie=nom+"="+escape(valeur)+
	((expires==null) ? "" : ("; expires="+expires.toGMTString()))+
	((path==null) ? "" : ("; path="+path))+
	((domain==null) ? "" : ("; domain="+domain))+
	((secure==true) ? "; secure" : "");

};
