/***** 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 ;

/***** 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 i = arguments[0].split('|');
		if(i.length > 1){
			var t = new Array();
			for(var i=0; i<i.length; i++){
				t[t.length] = _(i[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]+']';
			}
		}
	}
	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');
-----------------------------------------
* Retourne : Array
**/
function __(){
	var c = new Array();
	var t = arguments[0].split('|');
	for(var i=0; i<t.length; i++){
		var e = _(t[i],-1);
		for(var j=0; j<e.length; j++){
			var d = arguments[1].split('|');
			for(var k=0; k<d.length; k++){
				if(e[j].className == d[k] || e[j].className.indexOf(d[k]+' ') != -1 || e[j].className.indexOf(' '+d[k]) != -1){
					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 != null) {
				p = o.offsetParent;
				c += p.offsetTop;
				o = p;
			}
		break;
		case 'x':
			c = o.offsetLeft;
			while(o.offsetParent != null) {
				p = o.offsetParent;
				c += p.offsetLeft;
				o = p;
			}
		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 i = (f.checked)? f.value : false;
			return i;
		break;
		case 'checkboxes':
			var c = 0;
			for(var i=0; i<f.length; i++){
				c += (f[i].checked)? 1 : 0;
			}
			c = (c > 0)? c : false;
			return c;
		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 p = false;
			for(var i=0; i<c.length; i++){
				if(c[i] == arguments[2]){
					p = true;
				}
			}
			a = (!p)? 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;
	}
	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;
}