/**
*
*	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();",600);
				timeRedimensionne = setTimeout("redimensionnePopupMessage();",1000);
				timeRedimensionne = setTimeout("redimensionnePopupMessage();",2000);
				timeRedimensionne = setTimeout("redimensionnePopupMessage();",5000);
				maxopamessage = null;
				maxopacadre = null;
				navigateurIE = null;
			}
		}
	  }
	  else {
		if(e != "") {
			if(layerRetour) {
				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;
				}
			} else {
				global.eval(e);
			}
		}
	  }
	  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;
  }
}

// Ajouter un produit au panier
function ajouteAuPanier(listeId,nomBase,lienRetour,valide,nomFichier,idGabarit,idUnivers,cle) {
	
	if(!nomFichier) nomFichier = "btq_affiche_donnee_panier.php";

	var listeTags = document.getElementsByTagName('input');
	var listeId = listeId.split('-');
	var produitAAjouter = false;
	var listeTags = document.getElementsByTagName('input');
	var listeTags2 = document.getElementsByTagName('select');
	var retour = true;
	var bonRetour = false;
	for(var a = 0; a < listeId.length ; a++ ) {
		var idProduit = listeId[a];
		var tableauRetour1 = envoiAuPanier(idProduit,nomBase,listeTags,valide,cle);
		var tableauRetour2 = envoiAuPanier(idProduit,nomBase,listeTags2,valide,cle);
		var retour1 = true;
		for(nomChamp in tableauRetour1) { if(tableauRetour1[nomChamp] == false && nomChamp != "") { retour1 = false; } else { bonRetour = true; } }
		var retour2 = true;
		for(nomChamp in tableauRetour2) { if(tableauRetour2[nomChamp] == false && nomChamp != "") { retour2 = false; } else { bonRetour = true; } }
		if(retour1 == false || retour2 == false) var retour = false;
		if(retour == true) {
			//appelAjax('../medias/includes/btq_affiche_donnee_panier.php','no-reply','ajax=1&ajoutPanier=Oui&idProduitAjout='+idProduit+'&info=valide&typeAjout='+nomBase+'&valeur='+((valide)?valide:""),'inner'); 
			aCorb.push('idProduitAjout='+idProduit+'&info=valide&typeAjout='+nomBase+'&valeur='+((valide)?valide:"")+((cle)?'&cleInc='+cle:'') );
		}
	}

	sCorb = base64_encode(serialize(aCorb));
	if(listeId.length) {
		appelAjax('../medias/includes/'+nomFichier,'popup_message','ajax=1&ajoutPanierv2=Oui&listeAjout='+sCorb+((idGabarit > 0)?'&idGabarit='+idGabarit:'')+((idUnivers > 0)?'&idUnivers='+idUnivers:''),'inner'); 			
	}
	
	aCorb = new Array();

	return ((listeId.length > 1)?bonRetour:retour);
}

function supprimeDuPanier(listeId,nomBase,lienRetour,nomFichier,idGabarit,idUnivers,cle) {

	if(!nomFichier) nomFichier = "btq_affiche_donnee_panier.php";
	var listeId = listeId.split('-');
	var produitAAjouter = false;
	for(var a = 0; a < listeId.length ; a++ ) {
		var idProduit = listeId[a];
		appelAjax('../medias/includes/'+nomFichier,'popup_message','ajax=1&supprimePanier=Oui&idProduitSuppr='+idProduit+'&typeAjout='+nomBase+((idGabarit > 0)?'&idGabarit='+idGabarit:'')+((idUnivers > 0)?'&idUnivers='+idUnivers:'')+((cle)?'&cleInc='+cle:''),'inner');
	}
}

function envoiAuPanier(idProduit,nomBase,response,valide) {

	var retour = new Array();
	for(var i=0 ; i < response.length ; i++) { 
		var idChamp = response[i].id.toString();
		var nomChamp = response[i].name.toString();
		if(idChamp.match("ms-info-panier")) {
			if(!retour[nomChamp]) retour[nomChamp] = false;
			var reg = new RegExp("[\-]+", "g");
			var tableau = idChamp.split(reg);
			var tableau2 = nomChamp.split(reg);
			var info = tableau2[4];
			var produit = tableau2[5]; 
			var declinaison = tableau[6];
			var univers = tableau[7];
			var cle = tableau[8];
			var element = document.getElementById(idChamp);		
			if(element) {
				var valeur = "";
				var typeChamp = document.getElementById(idChamp).type;
				var autoriseEnvoi = false;
				if(typeChamp == "text" || typeChamp=="textarea" || typeChamp == "hidden" ) { 
					// Test si valeur de min et de max
					valeur = document.getElementById(idChamp).value; if(valeur != "") { autoriseEnvoi = true; } 
				}
				else if (typeChamp == "select-one" ) { 
					var nombreOptions = document.getElementById(idChamp).options.length;
					for(var e = 0; e < nombreOptions ; e++) {
						if(document.getElementById(idChamp).options[e].selected) { 
							valeur = document.getElementById(idChamp).options[e].value;
							autoriseEnvoi = true;
						}
					}
				}
				else if (typeChamp == "radio" ) { if(document.getElementById(idChamp).checked) { valeur = document.getElementById(idChamp).value; autoriseEnvoi = true; } }
				else if (typeChamp == "checkbox" ) { if(document.getElementById(idChamp).checked) {  valeur = document.getElementById(idChamp).value; autoriseEnvoi = true; } }
				if(autoriseEnvoi) retour[nomChamp] = true;
				if(produit == idProduit && (info != "" || info != "undefined" ) ) { 
					var idMaitre = false;
					if(declinaison != null && declinaison != "null" && declinaison != "undefined" ) { var idMaitre = produit; produit = declinaison; }
					if(!idMaitre && autoriseEnvoi) {
						//appelAjax('../medias/includes/btq_affiche_donnee_panier.php','no-reply','ajax=1&ajoutPanier=Oui&idProduitAjout='+idProduit+'&info='+info+'&typeAjout='+nomBase+'&valeur='+valeur,'inner');
						aCorb.push('idProduitAjout='+idProduit+'&info='+info+'&typeAjout='+nomBase+'&valeur='+valeur+((univers)?'&univers='+univers:'')+((cle)?'&cleInc='+cle:'') );
					} 
					if(idMaitre && autoriseEnvoi) {
						//appelAjax('../medias/includes/btq_affiche_donnee_panier.php','no-reply','ajax=1&ajoutPanier=Oui&idProduitAjout='+idProduit+'&info=idDeclinaison&typeAjout='+nomBase+'&valeur='+valeur,'inner');
						aCorb.push('idProduitAjout='+idProduit+'&info=idDeclinaison&typeAjout='+nomBase+'&valeur='+valeur+((univers)?'&univers='+univers:'')+((cle)?'&cleInc='+cle:''));
					}
				}
			}
		}
	}	
	return retour;

}

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" : "");

};


var listeAdresse = new Object([1]);

function Gmap_vers(i) {
	document.getElementById("toAddress").value = listeAdresse[i].adresse;
	document.getElementById("toAddress").style.backgroundColor = "#FFFFFF";
	document.getElementById("fromAddress").value = "";
	document.getElementById("fromAddress").style.backgroundColor = "#AFAFAF";
	document.getElementById("fromAddress").focus();
}

function Gmap_depuis(i) {
	document.getElementById("fromAddress").value = listeAdresse[i].adresse;
	document.getElementById("fromAddress").style.backgroundColor = "#FFFFFF";
	document.getElementById("toAddress").value = "";
	document.getElementById("toAddress").style.backgroundColor = "#AFAFAF";
	document.getElementById("toAddress").focus();
}

function Gmap_initialize(listeAdresse,zoom,notInitCadre,noAlert) {

	if (GBrowserIsCompatible()) {
		map = new GMap2($("map_canvas"));
		map.setCenter(new GLatLng(46.935261, 1.88), zoom?zoom:10 );
		map.setUIToDefault();			

		gdir = new GDirections(map, document.getElementById("directions"));
		GEvent.addListener(gdir, "load", Gmap_onGDirectionsLoad);
		GEvent.addListener(gdir, "error", Gmap_handleErrors);
		
		geocoder = new GClientGeocoder();

		icone = new GIcon(G_DEFAULT_ICON);
		icone.iconSize = new GSize(17, 24);
		icone.shadowSize = new GSize(25, 20);
		markerOptions = { icon:icone };
		
		nbAdresse = listeAdresse.length;
		for (nb = 0; nb < nbAdresse; nb++) {
			if (listeAdresse[nb].longitude!="" && listeAdresse[nb].latitude!="") {
				var latlng = new GLatLng(listeAdresse[nb].longitude, listeAdresse[nb].latitude);
				map.setCenter(latlng, zoom?zoom:6 );
				Gmap_showAddress(latlng, listeAdresse[nb],notInitCadre);
			} else {
				Gmap_rechercheAddress(listeAdresse[nb],zoom,notInitCadre,noAlert);					
			}
		}
	}
}

function Gmap_rechercheAddress(address,zoom,notInitCadre) {
	if (geocoder) {
		geocoder.getLatLng(address.adresse, function(point) {
				if (!point) {
					if(!noAlert) alert("L'adresse \""+address.adresse+"\" est introuvable !");
					//document.write(address.adresse)+"<br />\n";
				} else {
					map.setCenter(point, zoom?zoom:6 );
					Gmap_showAddress(point, address, notInitCadre);
				}
			}
		);
	}
}

function Gmap_showAddress(point, address, notInitCadre) {
	var marker = new GMarker(point, markerOptions);
	map.addOverlay(marker);
	GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(address.contenu+"<br style='clear:both' />");
	});
	if(!notInitCadre) marker.openInfoWindowHtml(address.contenu+"<br style='clear:both' />");
}

function Gmap_majBase(idProduit, coordonnees) {

	
	var infoArticle = new Ajax("../medias/includes/me_google_maps.php");
	infoArticle.ajoute('action', "modifCoordonnees");
	infoArticle.ajoute('idProduit', idProduit);
	infoArticle.ajoute('coordonnees', coordonnees);

	infoArticle.envoie();

}

function Gmap_setDirections(fromAddress, toAddress, locale) {
	gdir.load("from: " + fromAddress + " to: " + toAddress, { "locale": locale });
}

function Gmap_handleErrors(){
   if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
	 alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
   else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
	 alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
   
   else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
	 alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
	 
   else if (gdir.getStatus().code == G_GEO_BAD_KEY)
	 alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);

   else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
	 alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
	
   else alert("An unknown error occurred.");
   
}

function Gmap_onGDirectionsLoad(){ 
  // Use this function to access information about the latest load()
  // results.

  // e.g.
  // document.getElementById("getStatus").innerHTML = gdir.getStatus().code;
  // and yada yada yada...
}

function ms_verifieConnexion() {
	  var login = $('connexion_login').value;
	  var pass = $('connexion_pass').value;
	  var formulaire = $('connexion_formulaire');
	  if( login != 'login' && login != '' && pass != 'pass' && pass != '' ) {
		 formulaire.submit();
	  }
	  else {
		 alert('Veuillez compléter le champ login et mot de passe !');
	  }
};

function ms_verifieConnexionAjax(nomFichier,nomBase,idGabarit,idGabaritOk,listeLayers,prefixe,pR) {
	  if(!prefixe) prefixe = "";
	  if(!pR) pR = "";
	  var login = $(prefixe+'connexion_login').value;
	  var pass = $(prefixe+'connexion_pass').value;
	  var souvenir = $(prefixe+'connexion_souvenir').checked?$(prefixe+'connexion_souvenir').value:0;
	  var formulaire = $(prefixe+'connexion_formulaire');
	  if( login != 'login' && login != '' && pass != 'pass' && pass != '' ) {
		 appelAjax('../medias/fonctions/'+nomFichier,'popup_message','ajax=1&b='+nomBase+'&connexion_login='+login+'&connexion_pass='+pass+'&idGabarit='+idGabarit+'&idGabaritOk='+idGabaritOk+'&layers='+listeLayers+'&souvenir='+souvenir+'&prefixe='+prefixe+'&pR='+pR,'inner');
	  }
	  else {
		 alert('Veuillez compléter le champ login et mot de passe !');
	  }
};
