/**
Ajouter un évènement
----------------------------------------------------------------------
* Pour ajouter un évènement sur un objet _eAdd(Objet, Evenement, Fonction, parametres);
* Pour supprimer un évènement sur un objet _eRemove(Objet, Evenement, Fonction, parametres);
----------------------------------------------------------------------
**/
function _eAdd(o,e,f,p){
	var b = "f"+f; b = b.substring(b.indexOf(" "),b.indexOf("("));
	var a  = Array.prototype.splice.call(arguments,4,arguments.length);
	o[e+b] = function(e){ if(o.ev){ a.pop(); } else { o.ev = true; } a.push(e); f.apply(o,a); }
	if(o.attachEvent){ o.attachEvent("on"+e,o[e+b]); } else if(o.addEventListener){ o.addEventListener(e,o[e+b],p); }
}
function _eRemove(o,e,f,p){
	var b = "f"+f; b = b.substring(b.indexOf(" "),b.indexOf("("));
	if(o.detachEvent){ o.detachEvent("on"+e,o[e+b]); } else if(o.removeEventListener){ o.removeEventListener(e,o[e+b],p); }
	o.ev = undefined;
}


/* Javascript - Lapeyre Suisse */

// 00 - Header navigation
// 05 - Swapper
// 10 - Universes
// 15 - Left navigation
// 99 - wLoad

/***** 00 - Navigation *****/
function hBuilder(o){
	
	
	// Check all
	var lTab = __("li","main",o);
	for(var i=0; i<lTab.length; i++){
		lTab[i].id = "main"+i;
		// If has subs
		var s = _("main"+i,"ul",-1);
		if(s.length > 0){
			// Events
			_eAdd(lTab[i],"mouseover",hHover,false);
			_eAdd(lTab[i],"mouseout",hOut,false);
		}
	}
	
}
function hHover(){
	_S("add",this,"hover");
}
function hOut(){
	_S("del",this,"hover");
}

/***** 05 - Swapper *****/
function sBuilder(o){
	
	// Store default
	o.c = null;
	
	// Childs
	var iTab = __("div","item",o);
	if(iTab.length > 1){
		
		// Create list
		var p = document.createElement("div");
		p.className = "pager";
		o.appendChild(p);
		var u = document.createElement("ul");
		p.appendChild(u);
		
		var d = iTab[0];
		for(var i=0; i<iTab.length; i++){
			
			// Add list item
			var l = document.createElement("li");
			var t = document.createTextNode(i+1);
			l.appendChild(t);
			u.appendChild(l);
			
			// Register clown
			l.c = iTab[i];
			iTab[i].c = l;
			
			// Store default
			iTab[i].p = o;
			
			// Has default
			if(_S("check",iTab[i],"on")){
				d = iTab[i];
			}
			
			// Events
			l.onclick = function(){ sAction(this.c); }
			
		}
		sAction(d);
	} else {
	   _S("add",iTab[0],"on");
	}
	
}
function sAction(o){
	if(o.p.c != null){
		_S("del",o.p.c,"on");
		_S("del",o.p.c.c,"on");
	}
	_S("add",o,"on");
	_S("add",o.c,"on");
	
	o.p.c = o;
}

/***** 10 - Universes *****/
function uBuilder(o){
	
	// Store default
	o.c = null;
	
	// Childs
	var iTab = __("div","item",o);
	var lTab = _(o.id,"li",-1);
	if(iTab.length > 1){
		
		var d = iTab[0];
		for(var i=0; i<iTab.length; i++){
			
			// Register clown
			lTab[i].c = iTab[i];
			iTab[i].c = lTab[i];
			
			// Store default
			iTab[i].p = o;
			
			// Has default
			if(_S("check",iTab[i],"on")){
				d = iTab[i];
			}
			
			// Events
			lTab[i].onclick = function(){ uAction(this.c); }
			
		}
		uAction(d);
	}
	
}
function uAction(o){
	if(o.p.c != null){
		_S("del",o.p.c,"on");
		_S("del",o.p.c.c,"activ");
	}
	_S("add",o,"on");
	_S("add",o.c,"activ");
	
	o.p.c = o;
}

/***** 15 - Left navigation *****/
function lBuilder(o){
	
	// Store default
	o.c = null;
	
	// Childs
	var lTab = _(o.id,"li",-1);
	if(lTab.length > 1){
		
		var d = null;
		for(var i=0; i<lTab.length; i++){
			
			// Store childs
			lTab[i].id = "left"+i;
			
			// If has subs
			var s = _("left"+i,"ul",-1);
			if(s.length > 0){
				
				// Store
				lTab[i].p = o;
				
				// Has default
				if(_S("check",lTab[i],"open")){
					d = lTab[i];
				}
				
				// Events
				lTab[i].onclick = function(){ lAction(this); }
				
			}
			
		}
		o.c = d;
	}
	
}
function lAction(o){
	if(o.p.c != null){
		_S("del",o.p.c,"open");
	}
	_S("add",o,"open");
	
	o.p.c = o;
}

/***** 99 - wLoad *****/
function wLoad(){
	
	// 00 - Header navigation
	var hNav = _("header");
	if(hNav){
		hBuilder(hNav);
	}
	
	// 05 - Swapper
	var sTab = __("div","swapper",_("footer"));
	for(var i=0; i<sTab.length; i++){
		sBuilder(sTab[i]);
	}
	
	// 10 - Universes
	var uSwap = _("universes");
	if(uSwap){
		uBuilder(uSwap);
	}
	
	// 15 - Left navigation
	var lNav = _("left");
	if(lNav){
		lBuilder(lNav);
	}
	
}
_eAdd(window,"load",wLoad,false);


/***** Sommaire *****/
// 00 - Variables
// 01 - Base
/*******************/

/***** 00 - Variables *****/
var actURL = document.location.href;
var isOpera = (navigator.userAgent.indexOf('Opera') != -1)? true : false;
var isIE = (document.all && !isOpera && navigator.platform == "Win32")? true : false;
var isIE7 = (navigator.userAgent.indexOf('MSIE 7') != -1)? true : false ;
var isW2000 = (navigator.userAgent.indexOf('Windows NT 5.0') != -1)? true : false;
var isSafari = (navigator.userAgent.indexOf('AppleWebKit') != -1)? true : false;

/***** 01 - Base *****/		
/**
Cibler un objet
-------------------
* Pour cibler une ID : _('id');
* Pour cibler plusieurs IDs : _('id1|id2|...|idn');
* Pour cibler un noeud enfant : _('tag',lvl);   >   _('tag1',lvl1,'tag2',lvl2,...,'tagn',lvln);
* Pour cibler une ID puis un noeud enfant : _('id','tag',lvl);   >   _('id','tag1',lvl1,'tag2',lvl2,...,'tagn',lvln);
* Pour cibler des TAG : _('tag',-1);
* Pour cibler une ID puis des TAG : _('id','tag',-1);
-------------------
* Retourne : Objet ou Array
**/
function _(){
	var r = 'document';
	if(arguments.length == 1){
		var d = arguments[0].split('|');
		if(d.length > 1){
			var t = new Array();
			for(var i=0; i<d.length; i++){ t[t.length] = _(d[i]); }
			return t;
		} else {
			r += '.getElementById(\''+arguments[0]+'\')';
		}
	} else {
		for(var i=0; i<arguments.length; i++){
			var p = i+1;
			if(typeof arguments[p] == 'string' && typeof arguments[i] != 'number' || p > arguments.length){
				r += '.getElementById(\''+arguments[i]+'\')';
			} else if(typeof arguments[p] == 'number'){
				r += (arguments[p] == -1)? '.getElementsByTagName(\''+arguments[i]+'\')' : '.getElementsByTagName(\''+arguments[i]+'\')['+arguments[p]+']';
				i = p;
			}
		}
	}
	return eval(r);
}

/**
Cibler des élément par leur class
-----------------------------------------
* Pour cibler un couple TAG / Class : __('tag','class');
* Pour cibler plusieurs TAG pour une class : __('tag1|tag2|...|tagn',class');
* Pour cibler un couple TAG / Class dans un élément ciblé: __('tag','class',_('id'));
* Pour cibler un couple TAG / Class dans un élément ciblé: __('tag','class',_('id','div',2));
-----------------------------------------
* Retourne : Array
**/
function __(){
	var p = (arguments[2])? arguments[2] : false;
	var c = new Array();
	var t = arguments[0].split('|');
	for(var i=0; i<t.length; i++){
		var e = (p)? p.getElementsByTagName(t[i]) : _(t[i],-1);
		for(var j=0; j<e.length; j++){
			var h = false;
			var s = arguments[1].split('|');
			for(var k=0; k<s.length; k++){
				if(e[j].className == s[k] || e[j].className.indexOf(s[k]+' ') != -1 || e[j].className.indexOf(' '+s[k]) != -1){
					h = true;
					break;
				}
			}
			if(h == true){
				c[c.length] = e[j];
			}
		}
	}
	return c;
}
/**
Récupérer une coordonée absolue 'x' ou 'y' ciblé par la fonction _
------------------------------------------------------------------------------------
* Coordonnée X : _C('x',_('id')); 
* Coordonnée Y : _C('y',_('id')); 
------------------------------------------------------------------------------------
* Retourne : Integer
**/
function _C(){
	var o = arguments[1];
	switch(arguments[0]){
		case 'y':
			c = o.offsetTop;
			while(o.offsetParent) {
				p = o.offsetParent;
				c += p.offsetTop-p.scrollTop;
				o = p;
			}
			c += (isIE || isSafari)? document.documentElement.scrollTop+document.body.scrollTop : 0;
		break;
		case 'x':
			c = o.offsetLeft;
			while(o.offsetParent != null) {
				p = o.offsetParent;
				c += p.offsetLeft-p.scrollLeft;;
				o = p;
			}
			c += (isIE || isSafari)? document.documentElement.scrollLeft+document.body.scrollLeft : 0;
		break;
		default:
			c = null;
		break;
	}
	return c;
}

/**
Valeur d'un champ
-----------------------
* Par son formualire / nom : _F('nom_form','nom_champ');
* Par son id : _F('id');
-----------------------
* Si SELECT, TEXT, PASSWORD, HIDDEN, TEXTAREA, FILE, RADIO (renseigné) retourne la value du champ
* Si RADIO (non renseigné), retourne FALSE
* Si CHECKBOX retourne TRUE ou FALSE fonction de CHECKED
-----------------------
* Retourne : String (value)  / False (si radio / checkbox vide)
**/
function _F(){
	var f = (arguments.length == 1)? _(arguments[0]) : document.forms[arguments[0]].elements[arguments[1]];
	
	var t = f.type;
	// Cas particuliers  radios / checkboxes / select
	if(f.length > 1){
		t = (f[0].type == 'radio')? 'radios' : (f[0].type == 'checkbox')? 'checkboxes' : 'select';
	}
	switch(t){
		case 'text': case 'password': case 'hidden': case 'textarea': case 'file': case 'radio': case 'select':
			return f.value;
		break;
		case 'radios':
			for(var i=0; i<f.length; i++){
				if(f[i].checked){
					return f[i].value;
					break;
				}
			}
			return false
		break;
		case 'checkbox':
			var c = (f.checked)? f.value : false;
			return c;
		break;
		case 'checkboxes':
			var l = 0;
			for(var i=0; i<f.length; i++){
				l += (f[i].checked)? 1 : 0;
			}
			l = (l > 0)? l : false;
			return l;
		break;
		default:
			return null;
		break;
	}
}

/**
Ajouter / Supprimer une CLASS a un objet ciblé par la fonction _
-----------------------------------------------------------------------------------
* Pour ajouter une CLASS : _S('add',_('id'),'nom_class');
* Pour supprimer une CLASS : _S('del',_('id'),'nom_class');
-----------------------------------------------------------------------------------
**/
function _S(){
	var a = '';
	var b = arguments[1].className;
	var c = b.split(' ');
	switch(arguments[0]){
		case 'add':
			var d = false;
			for(var i=0; i<c.length; i++){
				if(c[i] == arguments[2]){
					d = true;
				}
			}
			a = (!d)? b+' '+arguments[2] : b ;
		break;
		case 'del':
			var s;
			for(var i=0; i<c.length; i++){
				s = (i == 0)? '' : ' ';
				if(c[i] != arguments[2]){
					a +=  s+c[i]
				}
			}
		break;
		case 'check':
			var d = false;
			for(var i=0; i<c.length; i++){
				if(c[i] == arguments[2]){
					d = true;
				}
			}
			return d;
		break;
	}
	arguments[1].className = a;
}

/**
Récupérer le z-index parent le plus haut ciblé par la fonction _
----------------------------------------------------------------------
* Pour récupérer le z-index parent le plus élevé : _Z(_('id'));
----------------------------------------------------------------------
* Retourne : Integer
**/
function _Z(){
	var o = arguments[0];
	var h = o.style.zIndex;
	while(o.offsetParent != null) {
		h = (o.offsetParent.style.zIndex > h)? o.offsetParent.style.zIndex : h;
		o = o.offsetParent;
	}
	return h;
}