/*============================================================================================
 Fichier Javascript
 Fichier contenant divers fonction utile pour la manipulation du css

 AUTEUR:					Alban BALLIEUX
 CREATION:					17/11/2008
 VARIABLE GLOBALES:
 MODIFICATIONS:
 	MA DUMONT			- 14/04/2009 - Ajout des méthodes MasqueParAttribut, MontreParAttribut, SupprimeRegleCssAttribut
 									 - Mise en compatibilité IE
 	Alban BALLIEUX		- 29/05/2009 - Ajout des fonction ChampErreur et ChampValide
 						- 13/08/2009 - On ne sauvegarde l'ancienne classe CSS que si elle est différente de la nouvelle dans la fonction ChangeClassCss()
===============================================================================================
	copyright 2009 Alban BALLIEUX - ballieuxa@laon.noirot
	http://www.phpmyportal.info

	This file is part of phpMyPortal.

    phpMyPortal is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation; either version 2.1 of the License, or
    any later version.

    phpMyPortal is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with phpMyPortal; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
===============================================================================================*/

/**
 * Fonction permettant de récuperer une information de style sur un Id voulu
 * @param {Object} ID
 * @param {Object} styleelement
 */
function getCssValue(ID,styleelement) {
	var tag = GetPtId(ID);
	var value= tag.style[styleelement];
	if(value==null || value=='' || value=='undefined'){
		var aClass = tag.className;
		var aTag	= tag.tagName.toLowerCase();;
		var curtagdotclass = '' ;
		var cssRules = '';
		for (var sSheet=0; sSheet < document.styleSheets.length; sSheet++){
			if(isset(document.styleSheets[sSheet]['cssRules'])){
				cssRules = 'cssRules' ;
			}else{
				cssRules = 'rules' ;
			}
			for (var rule=0; rule < document.styleSheets[sSheet][cssRules].length; rule++) {
				curtagdotclass = document.styleSheets[sSheet][cssRules][rule].selectorText ;
				if (curtagdotclass == aTag+'.'+aClass) {
					return document.styleSheets[sSheet][cssRules][rule].style[styleelement];
				}
				if (curtagdotclass == '.'+aClass) {
					return document.styleSheets[sSheet][cssRules][rule].style[styleelement];
				}
			}
		}
	}
	return  value;
}

/**
 * Permet d'attribuer une nouvelle valeur à un Id précis.
 * 
 * @param {Object} ID
 * @param {Object} styleelement
 * @param {Object} newValue
 */
function setCssValue(ID,styleelement,newValue) {
	var tag = GetPtId(ID);
	if(isset(tag.style)){
		var value= tag.style[styleelement];
	}else{
		var value= null;
	}
	if (value == null || value == '' || value == 'undefined') {
		var aClass = tag.className;
		var aTag = tag.tagName.toLowerCase();
		;
		var cssRules = '';
		var curtagdotclass = '';
		for (var sSheet = 0; sSheet < document.styleSheets.length; sSheet++) {
			if (isset(document.styleSheets[sSheet]['cssRules'])) {
				cssRules = 'cssRules';
			}
			else {
				cssRules = 'rules';
			}
			for (var rule = 0; rule < document.styleSheets[sSheet][cssRules].length; rule++) {
				curtagdotclass = document.styleSheets[sSheet][cssRules][rule].selectorText;
				if (curtagdotclass == aTag + '.' + aClass) {
					document.styleSheets[sSheet][cssRules][rule].style[styleelement] = newValue;
				}
				if (curtagdotclass == '.' + aClass) {
					document.styleSheets[sSheet][cssRules][rule].style[styleelement] = newValue;
				}
			}
		}
	}
	else {
		tag.style[styleelement] = newValue;
	}
}

 /**
  * Masque les éléments qui ont un attribut att à la valeur val
  * 
  * @param {Object} att	le nom de l'attribut à modifier
  * @param {Object} val	la valeur de l'attribut à modifier
  * @param {Object} css	le fichier css
  */
 function MasqueParAttribut(att,val,css){
 	i=0;
 	while(i<document.styleSheets.length && document.styleSheets[i].href.replace(new RegExp(".*[/]"),'')!=css ){
 		i++;
 	}
 	CountRule =  GetCssRules(document.styleSheets[i]);
 	InsertRule(document.styleSheets[i],"*[" + att +"="+ val + "]","{display:none !important;}", CountRule.length);
 }
 
 /**
  * Supprime une ou des règles css pour un attributs
  * 
  * @param {Object} att	le nom de l'attribut à modifier
  * @param {Object} val	la valeur de l'attribut à modifier
  * @param {Object} css	le fichier css
  */
 function SupprimeRegleCssAttribut(att,val,css){
 	i=0;
 	while(i<document.styleSheets.length && document.styleSheets[i].href.replace(new RegExp(".*[/]"),'')!=css ){
 		i++;
 	}
 	CountRule = GetCssRules(document.styleSheets[i]);	// on récupère l'objet cssRules en fonction du navigateur
 	for (j=0;j<CountRule.length;j++){
		Type = CountRule[j].selectorText.replace(new RegExp('[^a-zA-Z0-9]*([a-zA-Z0-9_-]*).*'),'$1');
		valeur = CountRule[j].selectorText.replace(new RegExp('[^a-zA-Z0-9]*([a-zA-Z0-9_-]*)[^a-zA-Z0-9]*([a-zA-Z0-9]*)[^a-zA-Z0-9]*'),'$2');
		if (Type==att && valeur==val){
			DeleteRule(document.styleSheets[i],j);
		}
	}
 }
 
 /**
  * Fonction multi-navigateur : récupère l'objet cssRules (rules tout court chez microsoft)
  *   
  * @param {Object} o		l'objet stylesheet
  */
 function GetCssRules(o){
 	if(isset(o.cssRules)){ 	// attribut w3c
		return o.cssRules;
	}else if(isset(o.rules)){
		return o.rules;		// attribut ie
	}else{
		alert('Navigateur non supporté (attributs cssRules), contactez le service informatique');
	}
 }
 
 /**
  * Fonction multi-navigateur : insert une règle css dans le stylesheet
  * 
  * @param {Object} obj		l'objet stylesheet
  * @param {string} nomrule	le nom de la règle à ajouter, ex : div
  * @param {string} valrule	la valeur de la règle à ajouter, ex : {display:none !important;}
  * @param {Object} index	à quel endroit mettre la règle, ne sera pas utiliser par la méthode non w3c
  */
 function InsertRule(obj,nomrule,valrule,index){
 	if(isFunction(obj.insertRule)){			// fonction w3c
		obj.insertRule(nomrule+valrule,index);
	}else if(isObject(obj.addRule)){		// fonction ie
		obj.addRule(nomrule,valrule);
	}else{
		alert('Navigateur non supporté (fonction insertRule), contactez le service informatique');
	}
 }
 
 /**
  * Fonction multi-navigateur : efface une règle css dans le stylesheet
  * 
  * @param {Object} obj		l'objet stylesheet
  * @param {Object} index	quel règle doit on supprimer
  */
 function DeleteRule(obj,index){
 	if(isFunction(obj.deleteRule)){			// fonction w3c
		obj.deleteRule(index);
	}else if(isObject(obj.removeRule)){		// fonction ie
		obj.removeRule(index);
	}else{
		alert('Navigateur non supporté (fonction deleteRule), contactez le service informatique');
	}
 }

 
 /**
 * Permet de mettre d'une couleur la bordure d'un champ (Traitement Css)
 * 
 * @param {Object} Id			Identifiant du champ de destination
 * @param {Object} Couleur		Couleur de fond
 * @param {Object} Text			Couleur du texte
 */
function ChampErreur(Id,Couleur,Text){
	if (!isset(Couleur))	Couleur='#FF0000';
	if (!isset(Text))		Text='#FFFFFF';
	CountRule =  GetCssRules(document.styleSheets[i]);
	InsertRule(document.styleSheets[i],"#"+Id,"{background-color:" + Couleur + " !important;}", CountRule.length);
	InsertRule(document.styleSheets[i],"#"+Id,"{color:" + Text + " !important;}", CountRule.length);
}

/**
 * Permet de mettre de supprimer la couleur la bordure d'un champ (Traitement Css)
 * 
 * @param {Object} Id			Identifiant du champ de destination
 */
function ChampValide(Id){
	SupprimeRegleCssAttribut(Id,'',document.styleSheets[0].href.replace(new RegExp(".*[/]"),''))
	SupprimeRegleCssAttribut(Id,'',document.styleSheets[0].href.replace(new RegExp(".*[/]"),''))
}

/**
 * Applisque une nouvelle class a un identifiant et sauvegarde l'ancienne
 * 
 * @param {Object} Id 		Identifiant devant etre sauvegardé
 * @param {Object} Class 	Class a appliquer
 * @param {Object} Groupe 	Groupe des identifiants mis en couleur ... 
 *
 */
function ChangeClassCss(Id, Class, Groupe){
	var PtId			=  GetPtId(Id);
	if (!isset(Groupe))							Groupe 						= 'ALL';
	if (!isset(window.TSavClassCss))			window.TSavClassCss 		= new Array();
	if (!isset(window.TSavClassCss[Groupe]))	window.TSavClassCss[Groupe]	= new Array();

	if (!PtId) return;
	
	if (PtId.className != Class){
		window.TSavClassCss[Groupe][Id] = PtId.className;
		PtId.className					= Class;
	}
}
/**
 * Restaure la ou les classes sauvegarder dans le tableau TSavClassCss
 * 
 * @param {Object} Id Identifiant devant etre restauré si vide tout le tableau TSavClassCss est restauré
 * @param {Object} Groupe 	Groupe des identifiants mis en couleur ... 
 *
 */
function RestaureClassCss(Id, Groupe){
	var PtId = '';
	if (!isset(Groupe))							Groupe 						= 'ALL';
	if (!isset(window.TSavClassCss))			window.TSavClassCss 		= new Array();
	if (!isset(window.TSavClassCss[Groupe]))	window.TSavClassCss[Groupe]	= new Array();
	PtId = GetPtId(Id);
	
	if (PtId && isset(Id)){
	// Je ne restaure qu'un identifiant
		if (PtId && isset(TSavClassCss[Groupe][Id])){
			PtId.className = TSavClassCss[Groupe][Id];
		}
		if (PtId && isset(TSavClassCss[Groupe][Id])){
			PtId.className = TSavClassCss[Groupe][Id];
		}
	}else{
	// Je restaure tout le tableau
		for (v in TSavClassCss[Groupe]){
			PtId = GetPtId(v);
			if (PtId && isset(TSavClassCss[Groupe][v])){
				PtId.className = TSavClassCss[Groupe][v];
			}
		}
	}
}

/**
 * Recupere une propriete css
 * 
 * @param {Object} Id 			Identifiant
 * @param {Object} Property 	Proprieté que l'on souhaite recuperer
 * @param {Object} Defaut 		Valeur par défaut
 */
function GetCurrentStyle(Id, Property, Defaut){
// Je regartde si je veux les valeurs par defaut ou les valeurs courantes
	Id=GetPtId(Id);
	try{
	// Je suis sous IE sinon firefox
		if(Id.currentStyle){
			Valeur = Id.currentStyle[Property];
		}else{
			Valeur = document.defaultView.getComputedStyle(Id, null).getPropertyValue(Property);
		}
	} catch(e) {
		Valeur = false;
	}
	
	if (isset(Valeur)){
		return Valeur.replace(new RegExp('px|pt', 'gi'),'');
	}else{ 
		return false;
	}
}