/***** Sommaire - MSC Base *****/
// 00 - Variables
// 01 - Base
/*******************/

/***** 00 - Variables *****/
var msc_nUrl = document.location.href;
var msc_nOpera = (navigator.userAgent.indexOf('Opera') != -1)? true : false;
var msc_nIe = (document.all && !msc_nOpera && navigator.platform == "Win32")? true : false;
var msc_nIeM = (navigator.userAgent.indexOf('MSIE 7') != -1 || navigator.userAgent.indexOf('MSIE 8') != -1)? true : false ;
var msc_nW2000 = (navigator.userAgent.indexOf('Windows NT 5.0') != -1)? true : false;

/***** 01 - Base *****/		
/**
Cibler un objet
-------------------
* Pour cibler une ID : msc_o('id');
* Pour cibler plusieurs IDs : msc_o('id1|id2|...|idn');
* Pour cibler un noeud enfant : msc_o('tag',lvl);   >   msc_o('tag1',lvl1,'tag2',lvl2,...,'tagn',lvln);
* Pour cibler une ID puis un noeud enfant : msc_o('id','tag',lvl);   >   msc_o('id','tag1',lvl1,'tag2',lvl2,...,'tagn',lvln);
* Pour cibler des TAG : msc_o('tag',-1);
* Pour cibler une ID puis des TAG : msc_o('id','tag',-1);
-------------------
* Retourne : Objet ou Array
**/
function msc_o(){
	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] = msc_o(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]+']';
			}
		}
	}
	return eval(r);
}

/**
Cibler des élément par leur class
-----------------------------------------
* Pour cibler un couple TAG / Class : msc_c('tag','class');
* Pour cibler plusieurs TAG pour une class : msc_c('tag1|tag2|...|tagn',class');
* Pour cibler un couple TAG / Class dans un élément ciblé: msc_c('tag','class',msc_o('id'));
* Pour cibler un couple TAG / Class dans un élément ciblé: msc_c('tag','class',msc_o('id','div',2));
-----------------------------------------
* Retourne : Array
**/
function msc_c(){
	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]) : msc_o(t[i],-1);
		for(var j=0; j<e.length; j++){
			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){
					c[c.length] = e[j];
				}
			}
		}
	}
	return c;
}

/**
Récupérer une coordonée absolue 'x' ou 'y' ciblé par la fonction _
------------------------------------------------------------------------------------
* Coordonnée X : msc_g('x',msc_o('id')); 
* Coordonnée Y : msc_g('y',msc_o('id')); 
------------------------------------------------------------------------------------
* Retourne : Integer
**/
function msc_g(){
	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 : msc_f('nom_form','nom_champ');
* Par son id : msc_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 msc_f(){
	var f = (arguments.length == 1)? msc_o(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 : msc_s('add',msc_o('id'),'nom_class');
* Pour supprimer une CLASS : msc_s('del',msc_o('id'),'nom_class');
-----------------------------------------------------------------------------------
**/
function msc_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;
	}
	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é : msc_z(msc_o('id'));
----------------------------------------------------------------------
* Retourne : Integer
**/
function msc_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;
}