﻿/* vers 1.0.1.16h56 test */
// ----------------------------------------------------------------------------------------------
//                                  ConcatÃ©nation des JS
//                            RECUPERATION DU FICHIER lib.js
// ----------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------
/* vers 1.0.1.15173 */
var IS_IE = document.all && window.print && !window.opera && ( !document.compatMode || /MSIE [56]/.test(navigator.userAgent) || (document.compatMode && document.compatMode=="BackCompat"));
var IE_NG = document.all && window.print && !window.opera && /MSIE [7-9]/.test(navigator.userAgent) && document.compatMode && document.compatMode!="BackCompat"; //variable pour IE7 et + si besoin.
var IS_quirks = IS_IE && document.compatMode && document.compatMode=="BackCompat"; // variable qui declare le quirksmode seulement utile pour IE
var IS_Webkit = /Konqueror|Safari|KHTML/.test(navigator.userAgent);
var IS_MS = /MSIE /.test(navigator.userAgent);
var heightPropertyToUse = IS_IE ? "height" : "minHeight"; //variable utilisee pour l'alignement en hauteur des elements.
var TrDisplayPropertyToUse =  IS_MS ? "block" : "table-row";  // utilisee pour le toggle des trs d'un table
document.documentElement.className =" hasJS";
document.documentElement.className+= IS_IE ? " IS_IE" : "";

/** *********************************************************************************************************
**************************** HELPERS FUNCTIONS ********************************
*********************************************************************************************************  */

function logs(debug, ecrase, elm){
return;
 	if(elm){elm.style.behavior = " "} //reecriture du style behavior
  var oParentToInsert = document.body.getElementsByTagName("*")[0];
  if (document.getElementById("logs"))
  {
//    if(!ecrase==0)
//    {
      nouveauDiv.innerHTML+="<pre>"+debug+"</pre>";
//    }
//    else
//    {
//      nouveauDiv.innerHTML="<pre>"+debug+"</pre>";
//    }

  }
  else{
    nouveauDiv = document.createElement("div");//creation  de l objet
    nouveauDiv.id="logs";//identification
    nouveauDiv.style.display="block";//on le stylise un peu
    nouveauDiv.style.position="absolute";
    nouveauDiv.style.top="20px";
    nouveauDiv.style.left="0px";
    nouveauDiv.style.color="#CCC";
    nouveauDiv.style.background="black";
    nouveauDiv.style.border="solid 1px #900";
    nouveauDiv.style.zIndex="60000";
    nouveauDiv.style.fontFamily="courier new";
    nouveauDiv.style.textAlign="left";
    nouveauDiv.style.fontSize="11px";
    nouveauDiv.style.overflow="auto";
    nouveauDiv.style.height="600px";
    nouveauDiv.style.width="250px";
    nouveauDiv.style.padding="5px";
    nouveauDiv.innerHTML="<pre>"+debug+"</pre>";
    oParentToInsert.parentNode.insertBefore(nouveauDiv, oParentToInsert);//on insert l'objet avant la balise appele
  }
}

/** *********************************************************************************************************
     REMPLACEMENT DES METHODES getElementById ET getElementsByTagName
     EXEMPLES :
	var oEl = $('test');              // retourne l'objet ayant l'id 'test'
	var oEl2 = $(oEl);               // retourne oEl
	var aEls = $(oEl, 'a');         // retourne tous les liens de oEl
	var aEls2 = $('test', 'a');    // retourne tous les liens du conteneur ayant pour id 'test'
	var oEl3 = $(oEl, 'a')[0];    // retourne le premier lien de oEl
*/

var $ = {
	select: function() {
		var aArgs = arguments;
		if(aArgs.length > 1 && typeof aArgs[1] == 'string') {
			return typeof aArgs[0] == 'string' ?
				document.getElementById(aArgs[0]).getElementsByTagName(aArgs[1]):
				aArgs[0].getElementsByTagName(aArgs[1]);
		}
		else switch(typeof aArgs[0]) {
			case 'string':
				return document.getElementById(aArgs[0]);
			case 'object':
				return aArgs[0];
		}
		return false;
	}
};
$ = $.select;

/** *********************************************************************************************************
     FONCTION D'EXTENTION DE PROPRIETES D'UN OBJET - Extrait de Mootools
     EXEMPLES :
	$extend(myObj, {alerte: function(sMsg) { alert(sMsg); });      //  Ajout de la methode alerte a l'objet myObj
	$extend(myObj, anotherObj);                                             //  Ajout des methodes de l'objet anotherObj a l'objet myObj
*/

var $extend = {
	extend: function(){
		var args = arguments;
		if (!args[1])
			args = [this, args[0]];
		for (var property in args[1])
			args[0][property] = args[1][property];
		return args[0];
	}
};
$extend = $extend.extend;

/** *********************************************************************************************************
    OBJET DE GESTION DE CLASSE - INSPIRE DE http://www.onlinetools.org/articles/unobtrusivejavascript/cssjsseparation.html
    EXEMPLES :
	$c.add(oEl, 'test');                    //  Ajout d'une classe a l'element oEl
	$c.has(oEl, 'test');                    //  Verification de l'existence de la classe 'test' sur l'element oEl via une chaine texte
	$c.has(oEl, /\btest\b/);             //  Verification de l'existence de la classe 'test' sur l'element oEl via une expression reguliere
	$c.swap(oEl, 'test', 'test2');      //  Modification de la classe 'test' de l'element oEl en classe 'test2' (ou inversement)
	$c.remove(oEl, 'test2');            //  Suppression de la classe 'test2' de l'element oEl
 */

var $c = {
	remove: function(oEl, sClass) {
		var rep = oEl.className.match(' ' + sClass) ? ' ' + sClass : sClass;
		oEl.className = oEl.className.replace(rep, '');
	},
	add: function(oEl, sClass) {
		if(!$c.has(oEl, sClass))
			oEl.className += oEl.className ? ' ' + sClass : sClass;
	},
	swap: function(oEl, sClass1, sClass2) {
		oEl.className = !$c.has(oEl, sClass1) ?
			oEl.className.replace(sClass2, sClass1):
			oEl.className.replace(sClass1, sClass2);
	},
	has: function() {
		//console.log(arguments[1], arguments[0].className, arguments[1].test(arguments[0].className));
		return typeof arguments[1] == 'string' ?
			new RegExp('\\b' + arguments[1] + '\\b').test(arguments[0].className):
			arguments[1].test(arguments[0].className);
	}
};

/** *********************************************************************************************************
    GESTIONNAIRE D'EVENEMENT
    EXEMPLES :
	$e.add('domready', alerte);                                                    // Lance le gestionnaire alerte au chargement de la page
	$e.add(oEl, 'click', alerte);                                                     // Ajoute le gestionnaire alerte au clic sur oEl en mode 'effervescence'
	$e.add(oEl, 'click', alerte, true);                                             // Ajoute le gestionnaire alerte au clic sur oEl en mode 'capture' (IE ne sait pas faire)
	$e.remove(oEl, 'click', alerte);                                               // Supprime le gestionnaire alerte au clic sur oEl
	$e.add(oEl, 'click', function(e) { $e.stop(e); });                        // Si oEl est un lien, $e.stop(e); stoppe la transmission de l'evenement et annule l'action normale du lien
	$e.add(oEl, 'click', function(e) { alert($e.getSrc(e)); });            // Retourne la source de l'evenement
	$e.add(oEl, 'mouseover', function(e) { alert($e.relSrc(e)); });    // Retourne l'element survole precedent le mouseover
	$e.add(oEl, 'mouseout', function(e) { alert($e.relSrc(e)); });     // Retourne l'element survole suivant le mouseout
*/

var $e = {
	// Ajout d'un gestionnaire d'evenement sur un element lors d'un evenement donne
	add: function() {
		var a = arguments;
		if(a[0] == 'domready')
			return $e.domready(a[1]);
		return document.addEventListener ?
			a[0].addEventListener(a[1], a[2], a[3] || false):
			a[0].attachEvent ?
				a[0].attachEvent('on' + a[1], a[2]):
				false;
	},
	// Suppression d'un gestionnaire d'evenement sur un element pour un evenement donne
	remove: function(oElem, sEvType, fn, bCapture) {
		return document.addEventListener ?
			oElem.removeEventListener(sEvType, fn, bCapture || false):
			oElem.detachEvent ?
				oElem.detachEvent('on' + sEvType, fn):
				false;
	},
	// Annulation de la propagation d'un evenement et de l'action par defaut d'un element
	stop: function(e) {
		if(e && e.stopPropagation && e.preventDefault) {
			e.stopPropagation();
			e.preventDefault();
		}
		else if(e && window.event) {
			window.event.cancelBubble = true;
			window.event.returnValue = false;
		}
		return false; // Indispensable pour Safari
	},
	// Retourne la source de l'evenement
	getSrc: function(e) {
		return e.target || e.srcElement;
	},
	relSrc: function(e) {
		switch(e.type) {
			case 'mouseover': // Retourne l'element survole precedent l'element source de l'evenement
				return e.relatedTarget(e) || e.fromElement;
			case 'mouseout': // Retourne l'element survole suivant l'element source de l'evenement
				return e.relatedTarget(e) || e.toElement;
		}
	},
	// Detecte le chargement du DOM - http://dean.edwards.name/weblog/2006/06/again/#comment5338
	domready: function(fn) {
		// Internet Explorer
		if(window.attachEvent) {
			document.write('<script id="ieScriptLoad" defer src="//:"><\/script>');
			document.getElementById('ieScriptLoad').onreadystatechange = function() {
				if(this.readyState == 'complete')
					$e.init(fn);
			};
		}
		// Mozilla/Opera 9
		if(document.addEventListener)
			document.addEventListener('DOMContentLoaded', function() { $e.init(fn); }, false);
		// Safari
		if(navigator.userAgent.search(/WebKit/i) != -1){
		    $e.loadTimer = setInterval(function (){
				if(document.readyState.search(/loaded|complete/i) != -1)
					$e.init(fn);
			}, 10);
		}
		// Other web browsers
		if($e)
			$e.add(window, 'load', function() { $e.init(fn); });
	},
	// Initialise le script
	init: function(fn) {
		if (arguments.callee.done) return;
		arguments.callee.done = true;
		if ($e.loadTimer) clearInterval($e.loadTimer);
			fn();
	}
};

/** *********************************************************************************************************
    GESTIONNAIRE DE STYLES
*/

var $s = {
	// Retourne la valeur d'une propriete CSS appliquee a un element
	get: function(oElm, strCssRule) {
		var strValue = "";
		if(document.defaultView && document.defaultView.getComputedStyle) {
			try{
				strValue = document.defaultView.getComputedStyle(oElm, null).getPropertyValue(strCssRule);
			}
			catch(e) { strValue = ""; }
		}
		else if(oElm.currentStyle) {
			try{
				strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
					return p1.toUpperCase();
				});
				strValue = oElm.currentStyle[strCssRule];
			} catch(e) {
				strValue = "";
			}
		}
		return strValue;
	},
	// Retourne la valeur entiere d'un style
	integer: function(oElm, strCSSRule) {
		var val = parseInt($s.get(oElm, strCSSRule));
		if (isNaN(val)) val=0;
		return val;
	},
	// Retourne la somme de tous les styles verticaux appliques (border-width+padding)
	getV: function(elm) {
		return IS_quirks ?
			0 :
			$s.integer(elm, "padding-top") +
			$s.integer(elm, "padding-bottom") +
			$s.integer(elm, "border-top-width") +
			$s.integer(elm, "border-bottom-width");
	},
	// Retourne la somme de tous les styles horizontaux appliques (border-width+padding)
	getH: function(elm) {
		return IS_quirks ?
			0 :
			$s.integer(elm, "padding-left") +
			$s.integer(elm, "padding-right");
	}
};

// openclose
function swapContent(elm) {
	var par = getParent(elm, {className:/\bcontent(show|hide)/i});
	par.className.match(/contenthide/i) ? toggleClass(par, "contentHide", "contentShow") : toggleClass(par, "contentShow", "contentHide");
	//fixColumns();
}

/*******************************************************************************************************************************/
/** FIN DES MODIFS *********************************************************************************************************/
/*******************************************************************************************************************************/

/**********
* $n : objet de parcours du DOM, facile. Les fonctions ne font que les nodes HTML
***********/
var $n = {
	/* 	hasAttributes : retourne true si l'element passe en parametre correspond a tous les attributs passes, on peut aussi donner des attributs que l'on ne veut pas, afin de filtrer tous les elements
		ex : if (hasAttributes(div, {nodeName:"div", className:"foobar"), {className:"idontwant"} ) doStuff();
		ici on recherche tous les DIV qui on la classe "foobar", mais on ne prend pas ceux qui ont la classe "idontwant" ex : <div class="foobar idontwant"> ne sera pas recupere.
	*/
	hasAttr : function(n, a, not) {
		var re, at;
		if (n.nodeType!=1) return false;
		function check(attr) {
			for (var i in attr) {
				at = (typeof n[i]) !="undefined" ? n[i] : n.getAttribute(i);
				re = attr[i] instanceof RegExp ? attr[i] : new RegExp("\\b" + attr[i] + "\\b","i");
				if (!at || !re.test(at))
					return false;
			}
			return true;
		};
		if (not && check(not))	return false;
		if (check(a)) return true;
		return false;
	},
	/* getByTagName : equivalent a element.getElementsByTagName, mais compatible avec IE5 et IE5.5 pour l'histoire du "*" */
	getByTagName : function(n, tag) {
		return  (tag=="*") ? (n.all ? n.all : n.getElementsByTagName("*")) : n.getElementsByTagName(tag);
	},
	/* fonction qui retourne le premier element correspondant aux attributs donnes */
	node : function(n, a, not) {
		return $n.nodes(n, a, not, true);
	},
	/* fonction qui retourne tous les elements correspondant selon "a" */
	nodes : function(n, a, not, oneNode, arrElms) {
		var aRetElms=[];
		if (!a) a = {};
		if (typeof a == "string") a = {nodeName:a}; //si une chaine de caracteres passee en parametre, cela signifie qu'on ne veut que recuperer des tags
		if (a.nodeName && a.nodeName=="*") delete a.nodeName;
		var elms = arrElms || $n.getByTagName(n, (a.nodeName || "*"));
		for (var i=0; i<elms.length; i++) {
			var x = elms[i];
			if ($n.hasAttr(x, a, not)) {
				if (oneNode) return x;
				else aRetElms.push(x);
			}
		}
		if (oneNode) return null;
		return aRetElms;
	},
	/* childs : retourne tous les noeuds enfants de l'element  */
	childs : function(n, a, not) {
		return $n.nodes(n, a, not, false, n.childNodes);
	},
	firstChild : function(n, a, not) {
		return $n.nodes(n, a, not, true, n.childNodes);
	},
	lastChild : function(n, a, not) {
		var node = $n.nodes(n, a, not, false, n.childNodes);
		return node[node.length-1];
	},
	move : function(n, a, not, action) {
		while (n) {
			if ($n.hasAttr(n, a, not)) return n;
			n = n[action];
		}
		return null;
	},
	after : function(n, a, not) {
		return $n.move(n, a, not, "nextSibling");
	},
	before : function(n, a, not) {
		return $n.move(n, a, not, "previousSibling");
	},
	parent : function(n, a, not) {
		return $n.move(n, a, not, "parentNode");
	}
};
/* fonctions raccourcis */
var getNode = $n.node,
	getNodes = $n.nodes,
	getChildNodes = $n.childs,
	getNextSibling = $n.after,
	getPreviousSibling = $n.before,
	getParent = $n.parent,
	hasAttributes = $n.hasAttr,
	getElementsByTagName = $n.getByTagName;


function fixCorners(block) {
return;
/* laisse tel quel car utilise par ooshop dans le les toggles qui ont ete modifie alors que cette fonction n'etait plus necessaire */
}
function addHover(elm, className, iframeTag) {
	elm.style.behavior = " "; //reecriture du style behavior
	if(!/MSIE [56]/.test(navigator.userAgent)) return;
	if(!$('navH')) return;
	className = className || "hover";
	elm.hoverClassName = className;
	if (iframeTag) {
		elm.iframeElm = getNode(elm, iframeTag);
	}
	elm.onmouseenter = function() {
		this.className+= ' ' + this.hoverClassName;
		if (this.iframeElm)
		{
			ifrlayer.make(this.iframeElm);
		}
	};
	elm.onmouseleave = function() {
	   this.className = this.className.replace(new RegExp("\\b" + this.hoverClassName + "\\b", "g"), "");
	   if (this.iframeElm) ifrlayer.hide(this.iframeElm);
	};
}
function lunchFrame(stopBoucle){
/*
optimisation, on detecte si il y a les select du haut
de page pour generer les iframe sur les sous menu deroulant
permet de faire gagner en perf sur les pages sans les deux selects de tri
*/
/*
le script est execute via le serveur, on peut zapper les test
il est utilise dans la recherche, seul endroit du site avec les select assez haut pour gener le sous menu
*/
	if (IS_IE)
	{
		var iTimelunchFrame01 = new Date().getTime();
		logs("on rentre dans lunchFrame");
		var oMain = $("main");
	if(!oMain){return}
		logs("on passe le div id main");
		var oNavHDiv = document.getElementById("navh").getElementsByTagName("div");
		for(var iNavHDiv = 0; oNavHDiv.length > iNavHDiv; iNavHDiv++)
		{
			(function(oNavHDiv,iNavHDiv){
			ifrlayer.make(oNavHDiv[iNavHDiv].getElementsByTagName('ul')[0],false);
				var iTimelunchFrame02 = new Date().getTime();
				logs("lunchFrame       : " + (iTimelunchFrame01-iTimelunchFrame02));
			}).delay(3*iNavHDiv,this,[oNavHDiv,iNavHDiv]);
		}
	}

}
var ifrlayer = {
	ie: document.all && window.print && !window.opera && document.getElementById,
	$: function(obj) {
		if (!obj) return null;
		return (typeof(obj)=="string") ? document.getElementById(obj) : obj;
	},
	make: function(obj,size) {
		obj = this.$(obj);
		if(!obj) return;
		if(this.ie) {
			if (!obj.iframelayer) {
				var ifr = document.createElement('iframe');
				ifr.src = "javascript:false";
				obj.parentNode.insertBefore(ifr, obj);
				obj.iframelayer = ifr;
			}
			var ifr = obj.iframelayer;
			if(obj.currentStyle.zIndex != "" && parseInt(obj.currentStyle.zIndex) > 1) {
				ifr.style.zIndex = parseInt(obj.currentStyle.zIndex)-1;
			}
			with(ifr.style) {
				filter = "mask()";
				position = "absolute";
			}
			obj.iframelayer.style.visibility = "visible";
			if(size == false)
			{
				var doSize = false;
			}
			else
			{
				var doSize = true;
			}
			ifrlayer.move(obj,doSize);
		}
	},
	hide: function(obj) {
		obj = this.$(obj);
		if(!obj) return;
		if(obj.iframelayer) {
			obj.iframelayer.style.visibility = "hidden";
		}
	},
	kill: function(obj) {
		obj = this.$(obj);
		if(!obj) return;
		if(obj.iframelayer) {
			obj.iframelayer.parentNode.removeChild(obj.iframelayer);
			obj.iframelayer = null;
		}
	},
	move: function(obj, size) {
		obj = this.$(obj);
		if(obj && obj.iframelayer) {
			with(obj.iframelayer.style) {
				top = obj.offsetTop + "px";
				left = obj.offsetLeft + "px";
				if(size) {
					width  =  obj.offsetWidth + "px";
					height =  obj.offsetHeight + "px";
				}
			}
		}
	}
};



/*************
* PopLayer
**************/
var popLayer = {
	pop : [],
	popContent : [],
	mask: [],
	levels:0,
	elmSource : [],
	template : '<span class="popt"><span></span></span><div class="popInside"><span class="popl"></span><span class="popr"></span><div class="popbody"><div class="popHead"><span class="close">Fermer</span></div><div class="popContent">Content Here</div></div></div><span class="popb"><span></span></span>',
	eventsArray : ["click", "mouseover", "mouseout", "mousemove", "mouseup", "mousedown", "keyup", "keydown", "keypress", "abort", "blur", "change", "dblclick", "error", "load", "reset", "resize", "select", "submit"],

	init : function(level) {
		level = level || 0;
		level = level>(popLayer.levels+1) ? popLayer.levels+1 : level;
		popLayer.levels=level;


		if (!popLayer.pop[level]){
			popLayer.pop[level] = $(document.createElement("div")).injectTop($(document.body)); //mootools.net
			popLayer.pop[level].id = "popLayer_"+level;
			popLayer.pop[level].addClass('popLayer');
			popLayer.pop[level].innerHTML = popLayer.template;
		}else{
			popLayer.pop[level].removeClass('hidden');
		}

		popLayer.popContent[level] = getNode(popLayer.pop[level],  {nodeName:"div", className:"popContent"});
		popLayer.pop[level].style.marginLeft = -popLayer.pop[level].offsetWidth/2+"px";

		var close = getNode(popLayer.pop[level], {className:"close"});
		close.onclick = function() {
			popLayer.close(level);
		};

		//popLayer.close();
		popLayer.pop[level].style.width = "";
		popLayer.pop[level].style.display = "block";
		popLayer.pop[level].style.zIndex = 9004+(level*4);
		popLayer.popContent[level].innerHTML = "";
		popLayer.popContent[level].style.height = "";
	},
	openTag : function(options) {
		content = $pick(options.content,null);
		width = $pick(options.width,null);
		height = $pick(options.height,null);
		mask = $pick(options.mask,true);
		level = $pick(options.level,0);
		callBack = $pick(options.callBack,null);

		popLayer.init(level);

        var popupId = content;
		content = typeof(content)=="string" ? document.getElementById(content) : content;
		if(content.childNodes.length == 0)
		{
		     //chargement via ajax
		     var xhr_object = null;
             if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();
             else
             if (window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
                
             // On ouvre la requete vers la page dÃ©sirÃ©e
             xhr_object.open("GET", "/controls/popup/popupHandler.ashx?id="+popupId, false);
             xhr_object.send(null); 
             
             content.innerHTML = xhr_object.responseText;            
		}
		popLayer.copyNodes(content, popLayer.popContent[level]);
        
//        Obsolete : duplication CGVPaiement > CGVPaiementPopup sans link css (pour perf)    
//        // Bug fixing : affichage IE7 - suppression styles à l'affichage d'une pop up cgv
//        var lRegExp = new RegExp("cgv","gi");
//        if (popupId.match(lRegExp))
//        {
//			lRegExp = new RegExp("<link*default.css*/>","gi");
//            content.innerHTML =  content.innerHTML.replace(lRegExp, "");
//        }
//        // Fin bug fixing
        

		if (mask) popLayer.showMask(level);

		setTimeout(function() {
			if (popLayer.iframe) {
				var pWin = popLayer.iframe.contentWindow || popLayer.iframe.window;
			}
		}, 2);
		popLayer.resize(level,width, height);
		popLayer.setPosition(level);
		popLayer.pop[level].style.visibility = "visible";
		ifrlayer.make(popLayer.pop[level]);
		if (callBack) callBack();
	},
	close : function(level) {
		var closeIn = function(index){
			popLayer.hideMask(index);
			ifrlayer.kill(popLayer.pop[index]);
			popLayer.pop[index].addClass('hidden');
		};
		if (level){
			closeIn(level);
		}else{
			for (var i=0; i<=popLayer.levels; i++){
				closeIn(i);
			}
		}

	},
	resize: function(level,width, height) {
		var doc, objectSized;
		if (width) {
			popLayer.pop[level].style.width = width + ((width+"").match(/%/) ? "%" : "px");
		}

		var overflown = popLayer.popContent[level].getElement('div.overflown');
		if (overflown) {
			var totalH = 0;
			height = $pick(height,(window.innerHeight?window.innerHeight-100:document.documentElement.offsetHeight-100));
			popLayer.popContent[level].setStyle('height',height);
			var parent = overflown.getParent();
			while (parent != popLayer.popContent[level]){
				height = height - (parent.getStyle('margin-top').toInt() + parent.getStyle('margin-bottom').toInt());
				parent = parent.getParent();
			}

			overflown.getParent().getChildren().each(function(elm,i){
				if (elm !== overflown){
					totalH = totalH + elm.offsetHeight + elm.getStyle('margin-top').toInt() + elm.getStyle('margin-bottom').toInt();
				}
			});
			overflown.setStyle('height', (height-totalH-10));
		}

		var sides = getNodes(popLayer.pop[level], {nodeName:"b", className:"pop(r|l)"});
		sides.each(function(side) { side.style.height = side.parentNode.offsetHeight + "px"; });
		ifrlayer.make(popLayer.pop[level]);
	},
	setPosition : function(level, top, left) {
		popLayer.pop[level].style.marginLeft = -popLayer.pop[level].offsetWidth/2+"px";
		popLayer.pop[level].style.top = document.documentElement.clientHeight>popLayer.pop[level].offsetHeight ? parseInt((document.documentElement.clientHeight-popLayer.pop[level].offsetHeight)/2) + document.documentElement.scrollTop + "px" :  document.documentElement.scrollTop + 10 + "px";
		ifrlayer.move(popLayer.pop[level]);
	},
	copyNodes : function(sourceElm, destElm) {
		for (var i=0; i<sourceElm.childNodes.length; i++) {
			var clone = sourceElm.childNodes[i].cloneNode(true);
			var newElem = $(destElm).adopt(clone); //mootools.net
			$(sourceElm).getElements('*').each(function(elm,i){  //mootools.net
				if (elm.id && elm.id!='' && !!!elm.id.match(/_clone/g)){
					elm.id = elm.id+'_clone';
				}
			});
			newElem.getElements('*').each(function(elm,i){  //mootools.net
				if (elm.id && elm.id!='' && !!elm.id.match(/_clone/g)){
					elm.id = elm.id.replace(/_clone/g,'');
				}
			});
		}
		var allSourceNodes = $n.getByTagName(sourceElm, "*");
		var allDestNodes = $n.getByTagName(destElm, "*");
		for (var i=0; i<allSourceNodes.length; i++) {
			popLayer.copyEvents(allSourceNodes[i], allDestNodes[i]);
		}
	},
	copyEvents : function(sourceElm, destElm) {
		for (var i=0; i<popLayer.eventsArray.length; i++) {
			var evt = "on"+popLayer.eventsArray[i];
			try{
			destElm[evt] = sourceElm[evt];
			}catch(err){}
		}
	},
	showMask : function(level) {
		if (!popLayer.mask[level]) {
			var div = new Element('div');
			div.id = 'popLayerMask_'+level;
			div.addClass('popLayerMask');
			var tuihreuighr = $(document.body).appendChild(div);//variable temporaire pour IE
			popLayer.mask[level] = $(tuihreuighr);
		}

		var height = document.documentElement.scrollHeight>document.documentElement.clientHeight ? document.documentElement.scrollHeight : document.documentElement.clientHeight;
		if(height<200){height=5000}//securite au-cas-ou
		var width  = document.documentElement.scrollWidth>document.documentElement.clientWidth ? document.documentElement.scrollWidth : document.documentElement.clientWidth;
		popLayer.mask[level].setStyle('height', height +'px');
		//popLayer.mask.style.width = width + 30 +'px';
		popLayer.mask[level].setStyle('display','block');
		popLayer.mask[level].setStyle('opacity',0.8);
		popLayer.mask[level].setStyle('zIndex',(9002+(level*4)));
		ifrlayer.make(popLayer.mask[level]);
		//$(document.documentElement).setStyle('overflow','hidden');
	},
	hideMask : function(level) {
		if (popLayer.mask[level] && popLayer.mask[level].clientHeight>0) {//evite d'avoir a tester display
			popLayer.mask[level].setStyle('display','none');
			//document.documentElement.setStyle('overflow','auto');
			ifrlayer.kill(popLayer.mask[level]);
		}
	},
	refixSize : function(level) {
		if (popLayer.mask[level] && popLayer.mask[level].style.display!='none') {
			for (var i=0; i<popLayer.levels; i++){
				popLayer.showMask(i);
			}
		}
	}
};



/********************
* Extensions d'objets
 ********************/
$extend(Array.prototype, {
	eachInv: function(f) {
		for(var i=this.length-1;i>=0;i--) {
			f(this[i]);
		}
	},
	last: function() {
		return this.length>0 ? this[this.length-1] : null;
	}
});

/******
* resizing d'objets
*******/
/* generates corners and others elements if needed */
function generateElements(parent, stringClasses) {
	var iTimeGenerateElements01 = new Date().getTime();
	var i, x;
	parent = (typeof parent == "string") ? document.getElementById(parent) : parent;
	var content = parent || document.body;
	var content = $("main");
	if(!content){return}
	var aDivs = content.getElementsByTagName("div");
	if(aDivs ==0 ){return}
 	var iDiv = aDivs.length-1;
//	var aElementToInit = [];
	for(var ii = 0 ; ii < iDiv ; ii++)
	{
		
		(function(iDiv,ii)
			{
		if(aDivs[ii]){
			if($c.has(aDivs[ii], /\bblockTabs\b/)){
				tabs.init(aDivs[ii]);
			}
			if ($c.has(aDivs[ii], /\bblockToggle\b/)){
				toggleBlock.init(aDivs[ii]);
			}
			if($c.has(aDivs[ii], /\bblockScrollV\b/)){
				new blockScroll(
					$(aDivs[ii]),
					{
						type: 'V',
						infinity: false
					}
				);
			}
			if($c.has(aDivs[ii], /\bblockScrollH\b/)){
				new blockScroll(
					$(aDivs[ii]),
					{
						type: 'H',
						infinity: false
					}
				);
			}
		}
				var iTimeGenerateElements02 = new Date().getTime();
				logs("generateElements : " + (iTimeGenerateElements01-iTimeGenerateElements02));
	}
		).delay(3*ii,this,[iDiv,ii]);
}
}
/* version optimum mais trop restrictive
function generateElements(parent, stringClasses) {
	var i, x;
	parent = (typeof parent == "string") ? document.getElementById(parent) : parent;
	var content = parent || document.body;
	var content = $("main");
	var aDivs = content.getElementsByTagName("div");
 	var iDiv = aDivs.length-1;
 	var aze = 0;
//	var aElementToInit = [];
	for(var ii = 0 ; ii < iDiv ; ii++){
	  aze++;
		if(aDivs[ii]){
			if(aDivs[ii].className == "block blockSimple blockTabs blockTabsDown" || aDivs[ii].className == "block blockSimple blockTabs"){
				tabs.init(aDivs[ii]);
			}
			if(aDivs[ii].className == "block blockScrollV scroll3"){
				new blockScroll(
					$(aDivs[ii]),
					{
						type: 'V',
						infinity: false
					}
				);
			}
			if(aDivs[ii].className == "block blockScrollH scroll3"){
				new blockScroll(
					$(aDivs[ii]),
					{
						type: 'H',
						infinity: false
					}
				);
			}
		}
	}
	logs("!" + aze);
}
*/


/* ToggleBlock :  block qui s'ouvre et qui se ferme */
var toggleBlock = {
	init : function(elm) {
		var head = getNode(
			elm,
			{
				className: "head"
			}
		);
		if(head) {
		//pour les besoins du design, jajoute une classe toggle a linit en mode closed
			if(elm.className.match(/\btoggleClosed\b/)) {
				toggleClass(head, 'toggleClosed');
			}
			var a = getNode(
				head,
				{
					nodeName: "a"
				}
			);
			if(a) {
				a.onclick = function() {
					toggleBlock.toggle(this);
					return false;
				}
			}
		}
	},
	// ajout les fonctionnalites du open/close (toggle);
	toggle : function(elm) {
		elm.blur();
		var scrollTop = document.body.scrollTop;

		var block = getParent(elm, {nodeName:"div", className:"blockToggle"});
		toggleClass(block, 'toggleClosed');
		//pour les besoins du design, jajoute une classe toggle au clic en mode closed
		var head = getNode(block, {className:"head"});
		toggleClass(head, 'toggleClosed');

		//fixColumns();
		document.body.scrollTop = scrollTop;
		document.body.style.zoom = 1;
		setTimeout(function() {document.body.style.zoom=0}, 1);
		setTimeout(fixCorners,2);
	}
};
//removeClass
function removeClass(element, className) {
	element.className = element.className.replace(new RegExp("\\b"+className+"\\b","g"),"");
};

//addClass
function addClass(element, className) {
	element.className += " " + className;
};

//toggleClass
function toggleClass(element, className) {
	if (element.className.match(className)) {
		removeClass(element, className)
	} else {
		addClass(element, className)
	}
};

/*******
* Tabs
 *******/
var tabs = {
	init : function(elm) {
		var uls = $(elm).getElements('ul.tabs');
		var allTabContent = elm.getElements('div.tabCtn');
		var theLinks = uls.getElements('a');
		var as = [];
  	theLinks.each(function(array) {
			as = as.extend(array);
		});
		as.each(function(link, index, array) {
			 if (!link.hasClass('nochange')) {
     	 	link.parentNode.indexOfTab = index;
        link.parentNode.numberOfTabs = array.length;
				link.parentNode.allTabs = array.map(function(link) {return link.parentNode});
				link.parentNode.allTabsContent = allTabContent;
			 	link.parentNode.onclick = function() {
					tabs.change(this, link.parentNode.indexOfTab);
					return false;
				};
				link.onclick = function() {this.parentNode.onclick()};
				$e.add(link, 'click', $e.stop);
			}
		})
	},
	sizeTab : function(a, ul) {
		if ($c.has(ul, 'noresize')) return;
		var newSize =  a.clientHeight + (ul.offsetHeight-a.clientHeight) - $s.getV(a);
		a.style[heightPropertyToUse] = (newSize<0) ? 0 : newSize + "px"; //IE doesn't compute size under 0
	},
	sizeContents : function(block) {
		//console.info(block.className);
		if (block.className.match(/\b(noresize|blockTabs|blockTabsVertical)\b/)) return;
		var oBody = $n.node(block, {nodeName:"div", className:"body"});
		var tabsCtn = $n.childs(oBody, {nodeName:"div", className:"tabCtn"});
		var maxHeight = oBody.offsetHeight;
		tabsCtn.each(function(x) {
			x.style.display = 'block';
			if (x.offsetHeight > maxHeight) maxHeight = x.offsetHeight;
		});
		tabsCtn.each(function(x) {
			var tabBody = $n.node(x, {className:'tabBody'});
			tabBody.style[heightPropertyToUse] = tabBody.offsetHeight + (maxHeight - x.offsetHeight) - $s.getV(tabBody) + "px";
			x.style.display = '';
		});
	},
	change : function(elm, index) {
  	elm.allTabs.each(function(tab, index) {
      $(tab).removeClass('current');
      tab.allTabsContent.removeClass('tabCurrent');
		});
		elm.addClass('current');
		elm.allTabsContent[elm.indexOfTab].addClass('tabCurrent');
	},

	centerAlign: function (elm, ul){
		elm.style.paddingTop = (ul.offsetHeight-elm.offsetHeight)/2+"px";
	}
};

/**
/ array index of
**/
if(typeof Array.prototype.indexOf === 'undefined') {
	Array.prototype.indexOf = function(elt /*, from*/) {
		var len = this.length;
		var from = Number(arguments[1]) || 0;
		from = (from < 0) ?
			Math.ceil(from):
			Math.floor(from);
		if(from < 0) {
			from += len;
		}
		for(; from < len; from++) {
			if(from in this && this[from] === elt) {
				return from;
			}
		}
		return -1;
	};
}
/* ne pas toucher, si on appelle un png sous ie6, risque de crash du navigateur */
function pngTrans(elm) {
	if(document.compatMode == "BackCompat" || /MSIE [56]/.test(navigator.userAgent)) {
		var imgurl = elm.currentStyle.backgroundImage.match(/url\([\"\'](.*)[\"\']\)/);
		if(imgurl) {
			elm.style.backgroundImage = "none";
			elm.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true', sizingMethod='crop' src='" + imgurl[1] + "')";
	}
		else {
			elm.style.filter = " ";
		}
					}
		else {
		elm.style.filter = " ";
						}
					}
					
function imgPngTrans(img) {
   if(document.compatMode == "BackCompat" || /MSIE [56]/.test(navigator.userAgent)) {
		var span = document.createElement('span');
		img.parentNode.insertBefore(span, img);
		span.appendChild(img);
		with(span.style) {
			display = 'inline-block';
			filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop src='" + img.src + "')";
				}
		img.style.visibility = 'hidden';
	}
}
