// ajout de l'appel javascript à SWFObject via un document.write, cela evite de devoir le coller dans toutes les pages
document.write('<script type="text/javascript" src="/scripts-v56/lib/swfobject.js"></script>');


var IS_IE = document.all && window.print && !window.opera && ( !document.compatMode || /MSIE [56]/.test(navigator.userAgent) || (document.compatMode && document.compatMode=="BackCompat"));
/* Event.onDOMReady(function() { //stuff here! }); */

try {
    Object.extend(Event, {
        _domReady : function() {
            if (arguments.callee.done) return;
            arguments.callee.done = true;
            if (this._timer) clearInterval(this._timer);
            this._readyCallbacks.each(function(f) { f() });
            this._readyCallbacks = null;
        },
        onDOMReady : function(f) {
            if (!this._readyCallbacks) {
                var domReady = this._domReady.bind(this);
                if (document.addEventListener) document.addEventListener("DOMContentLoaded", domReady, false);
                if (/WebKit/i.test(navigator.userAgent)) {
                    this._timer = setInterval(function() {
                        if (/loaded|complete/.test(document.readyState)) domReady();
                    }, 10);
                }
                Event.observe(window, 'load', domReady);
                Event._readyCallbacks =  [];
            }
            Event._readyCallbacks.push(f);
        }
    });
} catch(e) {
}


	
/****
 Global vars
*******/
var IS_IE = document.all && window.print && !window.opera && ( !document.compatMode || /MSIE 6/.test(navigator.userAgent) || (document.compatMode && document.compatMode=="BackCompat"));
var heightPropertyToUse = IS_IE ? "height" : "minHeight"; //variable utilisee pour l'alignement en hauteur des elements.
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); 

//ajoute la classe hasJS si le JS est active sur le navigateur
/*document.documentElement.className+=" hasJS";
if (IS_IE) document.documentElement.className+=" IS_IE";*/

/*******
* Framework : 
* Fonctions necessaires au fonctionnement general. Elles apportent une aide supplementaire pour le developpement d'autres fonctions. Ces fonction sont utilisees par toutes les autres.
*********/
Array.prototype.eachInv = function(f) {
	var i;
	for(i=this.length-1;i>=0;i--) {
		f(this[i], i);
	}
}

/* fixAll(action, element) : fonction raccourci pour lancer tout ce qu'on a besoin (fixHeight, fixColumns, fixCorners)
	action : fonction ?ancer
		- 'h' ; fixHeight (fixe les cot?p?aux des blocs sous IE6)
		- 'c' : fixCorners (fixe les corners sous IE6)
		- 'p' : fixColumns (correspond ?a page en general;
	on peut aussi cumuler : fixAll('hcp', element)
	element : element parent
	
*/

// VOIR SI SOLUTIONNE PROBLEME QUAND VARIABLE NON INITIALISE
function fixAll(actions, element) {
	actions = actions ? actions.toLowerCase().split('') : ['c','h','p'];
	actions.each(function(action) {
		switch(action) {
			case 'c' : fixCorners(element); break;
			case 'h' : fixHeights(element); break;
			case 'p' : fixColumns(element); break;
		}
	});
}

//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)
	}
};

// getStyle : retourne la valeur d'une propriete CSS appliquee a un element
function getStyle(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*/
function intStyle(oElm, strCSSRule) {
	var val = parseInt(getStyle(oElm, strCSSRule));
	if (isNaN(val)) val=0;
	return val;
}

/* retourne la somme de tous les styles verticaux appliques (border-width+padding) */ 
function getVStyles(elm) {
	return IS_quirks ? 0 : intStyle(elm, "border-top-width")+intStyle(elm, "border-bottom-width")+intStyle(elm, "padding-top")+intStyle(elm, "padding-bottom");
}
function getVMargins(elm) {
	return intStyle(elm, "margin-top")+intStyle(elm, "margin-bottom");
}
function getHStyles(elm) {
	return IS_quirks ? 0 : intStyle(elm, "border-left-width")+intStyle(elm, "border-right-width")+intStyle(elm, "padding-left")+intStyle(elm, "padding-right");
}


/* corners functions */
var CSSBottomCorners=[]; //array pouvant contenir les coins absolu positionnes en bottom
var currentBlockToFixCorners=null; //variable gloable utilisee lorsqu'on veux fixer les coins sur un seul bloc

function cssRight(elm) {
	if (!IS_IE) {
		elm.style.right = elm.currentStyle.right || "auto";
		return;
	}
	if (elm.currentStyle.right!="auto") {
		elm.style.right = (parseInt(elm.currentStyle.right)-(elm.parentNode.offsetWidth%2))+"px";
	} else {
		elm.style.right = "auto";
	}
}
function cssBottom(elm, pushElement) {
	if (!IS_IE) {
		elm.style.bottom = elm.currentStyle.bottom || "auto";
		return;
	}
	if (pushElement && !elm.CSSBottomAlreadyCSS) {
		CSSBottomCorners.push(elm);
		elm.CSSBottomAlreadyCSS=true;
	}
	if (elm.currentStyle.bottom!="auto") {
		elm.style.bottom = (parseInt(elm.currentStyle.bottom)-(elm.parentNode.offsetHeight%2))+"px";
	} else {
		elm.style.bottom = "auto";
	}
}
function fixCorners(block) {
	// 
	if (window.event) { // correction coins arrondis hack culte
		setTimeout(function() {
			$$('b[class*=content]').each(function(corner){
				corner.style.zoom = 1;
				setTimeout(function() {corner.style.zoom = 0;}, 10);
			});
		},10);
	}
	if (IS_IE) {
		for (var i=CSSBottomCorners.length-1; i>-1; --i) {
			CSSBottomCorners[i].style.bottom="";
		}
	} else {
		if (IS_Webkit || /Gecko\/200[56]|Opera 8.5/i.test(navigator.userAgent)) fixCornersOnBlocks(block);
	}
}
var currentBlockToFixCorners = null;
function fixCornersOnBlocks(block) {
	currentBlockToFixCorners = block || document.body;
	currentBlockToFixCorners.className+=" hidecorners";
	setTimeout(fixCornersOnBlocksShowCorners,5);
}
function fixCornersOnBlocksShowCorners() {
	if (currentBlockToFixCorners) currentBlockToFixCorners.className=currentBlockToFixCorners.className.replace(/\bhidecorners\b/g,"");
	currentBlockToFixCorners=null;
}


/* initialisation des divs dans la page 
   + ajout fonctionnalit et ?ments de d?ration 
*/
function generateStyleElements(parent, stringClasses) {
	var i, x;
	parent = (typeof parent == "string") ? $(parent) : parent;
	var content = parent || document.body;
	var nodes = content.getElementsByTagName("div");
	nodes = $A(nodes).concat($A(document.getElementsByTagName("ul")));
	
	//recupere un node avec la class block_insideParDefaut
	function getIsd(node, className) { return getNode(node, {className: (className || "block_inside")})};
	
	// fonction de creation d'un coin (b avec className) 
	function nc(clN) {var b = document.createElement("b");b.className=clN;return b;};
	
	//ajoute un element ou une liste d'elements (c) sur l'element x
	function add(x, c) {
		var i=0; if (!x) return; 
		if (c.length) for (i=0; i<c.length; i++) x.appendChild(c[i].cloneNode(true));
		else x.appendChild(c.cloneNode(true));
	};
	
	//-- creation des elements qui seronts clones --
	var corners = [nc("tl"), nc("tr"), nc("bl"), nc("br")]; //corners 
	var cornersLeft = [nc("tl"), nc("bl")]; //corners 
	var cornersRight = [nc("tr"), nc("br")]; //corners 
	var overtl = nc("overtl"); // overtl : coin arrodis supplementaire pour les blocks avec des bordures speciales
	var slTopLeft = nc("tLeft"); add(slTopLeft, nc("tRight"));
	var slBottomLeft = nc("bLeft"); add(slBottomLeft, nc("bRight"));
	
	// -- creation des coins ou autres elements -- 
	// parcours des divs pour leur rajouter les corners
	for (i=nodes.length-1; i>=0; i--) {
		x=nodes[i];
		if (!x.alreadyProcessed) {
			if (x.className.match(/\bblock-(simple|filled)\b/)) add(x, corners);
			if (x.className.match(/\bblock-complex\b/)) {
				first = x.firstChild;
				while(first.nodeType==3){
					first = first.nextSibling;
				};
				x.insertBefore(slTopLeft.cloneNode(true),first);
				add(x, slBottomLeft);
			}
			if (x.className.match(/\bblockTabs\b/)) add(getIsd(x, 'blockInside'), corners);
			if (x.id=="content") add(x, [nc("content-tl"), nc("content-tr"), nc("content-bl"), nc("content-br")]);
			if (x.id=="main-inside") add(x, [nc("main-tl"), nc("main-tr"), nc("main-bl"), nc("main-br")]);
			if (x.id=="main-site") add(x, [nc("std-block-bl"), nc("std-block-br")]);
			x.alreadyProcessed = true;	
			initBlocksFunctionnalities(x); // fonction d'initialisation d'autres blocks
		}
	}
	var li = document.getElementsByTagName('li');
	for (var i=0; i<li.length; i++) {
		var x = li[i];
		if (x.id=="std-block-left") {add(x, [nc("std-block-tl"),  nc("std-block-bl")]);}
		if (x.id=="std-block-right") {add(x, [nc("std-block-tr"), nc("std-block-br")]);}
		if (x.className.match(/\b(menu-current)\b/)) {add(x, [nc("menu-current-tr"), nc("menu-current-br")]);}
	}
	var ul = document.getElementsByTagName('ul');
	for (var i=0; i<ul.length; i++) {
		initBlocksFunctionnalities(ul[i]);
	}
}

/* 	initOtherBlocks(block) : fonction rajoute d'autres fonctionnalites sur differents blocks  (toggle, onglets),
	Cette fonction est forcement lancee depuis generateStyleElements, et cela evite de faire une deuxieme passe sur les divs de la page
 */
function initBlocksFunctionnalities(x) {
	if (x.className.match(/\bline\b/)) //si ligne de block, on la stocke dans un tableau
		linesOfBlocks.push(x);
	if (x.className.indexOf("block-toggle")!=-1)
		toggleBlock.init(x);
	if (x.className.match(/\bblockTabs/)) 
		tabs.init(x);
}


/**************
* sizeBlocks : alignement des blocks en hauteurs
**************/
var linesOfBlocks=[];
function sizeBlocks(parentBlock) {
	function size(block, size){
		if (block){
			var body = block; //block.className.match(/\bblock\b/) ? getNode(block, {nodeName:"div", className:"body"}) : block; //si on a une line ou bien un block
			if (body) body.style[heightPropertyToUse] = body.offsetHeight + size - getVStyles(body) + "px";
		}
	};
	linesOfBlocks.eachInv(function (line) { //les lignes fournies sont
		var units = getChildNodes(line, {className:"unit"});
		units.each(function(unit) {
			var blocks = getChildNodes(unit, {className:"(block|line)"}, {className:"noresize"});
			var sizeToApply = line.offsetHeight-unit.offsetHeight;
			var sizePerBlock = parseInt(sizeToApply/blocks.length);
			blocks.each(function(block) {
				size(block, sizePerBlock);
			});
			//sur une division on tombe parfois sur un calcul pas precis, on resize le dernier element d'un unit, afin que le calcul soit correct
			//if (blocks.length>1) size(blocks.getLast(), line.offsetHeight-unit.offsetHeight);
			// Si ca ne fonctionne pas, appeller arnaud gueras, le nain malin
		});
	});
}

/* ToggleBlock :  block qui s'ouvre et qui se ferme */
var toggleBlock = {
	init : function(elm) {
		var head = getNode(elm, {className:"head"});
		if (head) 
			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:"block-toggle"});
		toggleClass(block, 'toggle-closed')
		fixColumns();
		document.body.scrollTop = scrollTop;
		document.body.style.zoom = 1;
		setTimeout(function() {document.body.style.zoom=0}, 1);
		setTimeout(fixCorners,2);
	}
};

/***************
* fixColumns()
****************/
function fixColumns() {
	function fix() {
		var colonnes = ['main-inside','side-menu','side','popsit-left','popsit-middle','popsit-right'],
			colonnesInside = ["", ""];
		var hMax=0, vStyle, i, b, minMax=0, sum=0; hToU = heightPropertyToUse;
		
		colonnes.each(function(id){
			id = $(id);
			if(id) {
				hMax = id.offsetHeight + getVStyles(id);
				if (hMax > minMax) {
					minMax = hMax;
					vStyle = getVStyles(id);
				}
			}
		});
		colonnes.each(function(id){
			id = $(id);
			if (id) id.setStyle({minHeight:minMax+vStyle-getVStyles(id)+'px',_height:minMax+vStyle-getVStyles(id)+'px'});
		});
		fixCorners();
	};
	setTimeout(fix,1);
} 

// Tooltip Object
var Tooltip = Class.create({
	initialize: function(el, options) {
		this.el = $(el);
		this.initialized = false;
		this.setOptions(options);
		
		// Event handlers
		this.showEvent = this.show.bindAsEventListener(this);
		this.hideEvent = this.hide.bindAsEventListener(this);
		this.updateEvent = this.update.bindAsEventListener(this);
		Event.observe(this.el, "mouseover", this.showEvent );
		Event.observe(this.el, "mouseout", this.hideEvent );
		
		// Removing title from DOM element to avoid showing it
		this.content = this.el.title;
		this.el.title = "";

		// If descendant elements has 'alt' attribute defined, clear it
		this.el.descendants().each(function(el){
			if(Element.readAttribute(el, 'alt'))
				el.alt = "";
		});
	},
	setup: function(){	
		
		this.tooltip.style.left = this.xCord - this.tooltip.getWidth() + 8 + "px";
		this.tooltip.style.top = this.yCord - this.el.getHeight() + 4 + "px";
		
	},
	_clearTimeout: function(timer) {
		clearTimeout(timer);
		clearInterval(timer);
		return null;
	}
});

/** */
Event.onDOMReady(function() {
	generateStyleElements();
});


Event.observe(window, 'load', function() {
	sizeBlocks();
	fixColumns();
	fixCorners();
});


