/***** 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 : $Pi('id');
* Pour cibler plusieurs IDs : $Pi('id1|id2|...|idn');
* Pour cibler un noeud enfant : $Pi('tag',lvl);   >   $Pi('tag1',lvl1,'tag2',lvl2,...,'tagn',lvln);
* Pour cibler une ID puis un noeud enfant : $Pi('id','tag',lvl);   >   $Pi('id','tag1',lvl1,'tag2',lvl2,...,'tagn',lvln);
* Pour cibler des TAG : $Pi('tag',-1);
* Pour cibler une ID puis des TAG : $Pi('id','tag',-1);
-------------------
* Retourne : Objet ou Array
**/
function $Pi(){
	var returnString = 'document';
	if(arguments.length == 1){
		var ids = arguments[0].split('|');
		if(ids.length > 1){
			var idsTab = new Array();
			for(var i=0; i<ids.length; i++){
				idsTab[idsTab.length] = $Pi(ids[i]);					
			}
			return idsTab;
		} else {
			returnString += '.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){
				returnString += '.getElementById(\''+arguments[i]+'\')';
			} else if(typeof arguments[p] == 'number'){
				returnString += (arguments[p] == -1)? '.getElementsByTagName(\''+arguments[i]+'\')' : '.getElementsByTagName(\''+arguments[i]+'\')['+arguments[p]+']';
			}
		}
	}
	return eval(returnString);
}

/**
Cibler des élément par leur class
-----------------------------------------
* Pour cibler un couple TAG / Class : $Pi$('tag','class');
* Pour cibler plusieurs TAG pour une class : $Pi$('tag1|tag2|...|tagn',class');
-----------------------------------------
* Retourne : Array
**/
function $Pi$(){
	var classedTab = new Array();
	var tagTab = arguments[0].split('|');
	for(var i=0; i<tagTab.length; i++){
		var elemTab = $Pi(tagTab[i],-1);
		for(var j=0; j<elemTab.length; j++){
			var classTab = arguments[1].split('|');
			for(var k=0; k<classTab.length; k++){
				if(elemTab[j].className == classTab[k] || elemTab[j].className.indexOf(classTab[k]+' ') != -1 || elemTab[j].className.indexOf(' '+classTab[k]) != -1){
					classedTab[classedTab.length] = elemTab[j];
				}
			}
		}
	}
	return classedTab;
}

/**
Récupérer une coordonée absolue 'x' ou 'y' ciblé par la fonction $Pi
------------------------------------------------------------------------------------
* Coordonnée X : $PiC('x',$Pi('id')); 
* Coordonnée Y : $PiC('y',$Pi('id')); 
------------------------------------------------------------------------------------
* Retourne : Integer
**/
function $PiC(){
	var obj = arguments[1];
	switch(arguments[0]){
		case 'y':
			objCoord = obj.offsetTop;
			while(obj.offsetParent != null) {
				objParent = obj.offsetParent;
				objCoord += objParent.offsetTop;
				obj = objParent;
			}
		break;
		case 'x':
			objCoord = obj.offsetLeft;
			while(obj.offsetParent != null) {
				objParent = obj.offsetParent;
				objCoord += objParent.offsetLeft;
				obj = objParent;
			}
		break;
		default:
			objCoord = null;
		break;
	}
	return objCoord;
}

/**
Valeur d'un champ
-----------------------
* Par son formualire / nom : $PiF('nom_form','nom_champ');
* Par son id : $PiF('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 $PiF(){
	var field = (arguments.length == 1)? $Pi(arguments[0]) : document.forms[arguments[0]].elements[arguments[1]];
	
	var fieldType = field.type;
	// Cas particuliers  radios / checkboxes / select
	if(field.length > 1){
		fieldType = (field[0].type == 'radio')? 'radios' : (field[0].type == 'checkbox')? 'checkboxes' : 'select';
	}
	switch(fieldType){
		case 'text': case 'password': case 'hidden': case 'textarea': case 'file': case 'radio': case 'select':
			return field.value;
		break;
		case 'radios':
			for(var i=0; i<field.length; i++){
				if(field[i].checked){
					return field[i].value;
					break;
				}
			}
			return false
		break;
		case 'checkbox':
			var isChecked = (field.checked)? field.value : false;
			return isChecked;
		break;
		case 'checkboxes':
			var checkLength = 0;
			for(var i=0; i<field.length; i++){
				checkLength += (field[i].checked)? 1 : 0;
			}
			checkLength = (checkLength > 0)? checkLength : false;
			return checkLength;
		break;
		default:
			return null;
		break;
	}
}

/**
Ajouter / Supprimer une CLASS a un objet ciblé par la fonction $Pi
-----------------------------------------------------------------------------------
* Pour ajouter une CLASS : $PiS('add',$Pi('id'),'nom_class');
* Pour supprimer une CLASS : $PiS('del',$Pi('id'),'nom_class');
-----------------------------------------------------------------------------------
**/
function $PiS(){
	var postClass = '';
	var preClass = arguments[1].className;
	var classTab = preClass.split(' ');
	switch(arguments[0]){
		case 'add':
			var isClass = false;
			for(var i=0; i<classTab.length; i++){
				if(classTab[i] == arguments[2]){
					isClass = true;
				}
			}
			postClass = (!isClass)? preClass+' '+arguments[2] : preClass ;
		break;
		case 'del':
			var classSpacer;
			for(var i=0; i<classTab.length; i++){
				classSpacer = (i == 0)? '' : ' ';
				if(classTab[i] != arguments[2]){
					postClass +=  classSpacer+classTab[i]
				}
			}
		break;
	}
	arguments[1].className = postClass;
}

/**
Récupérer le z-index parent le plus haut ciblé par la fonction $Pi
----------------------------------------------------------------------
* Pour récupérer le z-index parent le plus élevé : $PiZ($Pi('id'));
----------------------------------------------------------------------
* Retourne : Integer
**/
function $PiZ(){
	var obj = arguments[0];
	var highestIndex = obj.style.zIndex;
	while(obj.offsetParent != null) {
		highestIndex = (obj.offsetParent.style.zIndex > highestIndex)? obj.offsetParent.style.zIndex : highestIndex;
		obj = obj.offsetParent;
	}
	return highestIndex;
}