
// some usefull funcs


/**
* Renvoie les éléments HTML qui correspondent des classes CSS.
*@param oElm(objet) -> Elément HTML, conteneur des éléments à récupérer.
*@param strTagName(string) -> Filtre sur le TagName. Si ce paramètre est différent de "*", seuls les éléments du contenu "oElm" qui correspondent au TagName spécifié 
*								seront récupérés.
*@param oClassNames(array) -> Tableau contenant le nom des classes à chercher. Si un nom de classe est suivit de *, toutes les classes dont le nom commence 
*								par ce nom seront cherchées.
*@return (array) Tableau des éléments HTML correspondants.
*
* EXEMPLE D'APPEL : getElementsByClassName(document.getElementById("container"), "div", ["col", "left", "el*"]);
*/
function getElementsByClassName(oElm, strTagName, oClassNames)
	{
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var arrRegExpClassNames = new Array();
	if(typeof oClassNames == "object")
		{
		for(var i=0; i<oClassNames.length; i++)
			{
			arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
			}
		}
	else
		{
		arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
		}
	
	var oElement;
	var bMatchesAll;
	
	for(var j=0; j<arrElements.length; j++)
		{
		oElement = arrElements[j];
		bMatchesAll = true;
		for(var k=0; k<arrRegExpClassNames.length; k++)
			{
			if ((chrpos = oClassNames[k].indexOf('*')) == -1)
				{
				if(!arrRegExpClassNames[k].test(oElement.className))
					{
					bMatchesAll = false;
					break;
					}
				}
			else
				{
				myregexp = new RegExp("(^|\\s)" +  Remplace2(oClassNames[k],'*','(.*)') + "(\\s|$)");
				//if (oElement.className.indexOf(oClassNames[k].substring(0, chrpos)) == -1)
				if (!myregexp.test(oElement.className))
					{
					bMatchesAll = false;
					break;
					}
				}
			
			}
		if(bMatchesAll)
			{
			arrReturnElements.push(oElement);
			}
		}
	return (arrReturnElements)
}

//-------------------------
/**
* Ajoute une classe CSS à un élément HTML.
*@param element(objet) -> Elément HTML concerné.
*@param value(string) -> Nom de la classe à ajouter.
*@return void
*/
function addClass(element, value)
	{
	if (!element.className)
		{
		element.className = value;
		}
	else
		{
		var newClassName = element.className;
		newClassName += " ";
		newClassName += value;
		element.className = newClassName;
		}
	}

/**
*/
function switchClass(element, value)
	{
	if (!element.className)
		{
		addClass(element, value);
		}
	else
		{
		var newClassName = element.className;
		if (newClassName.indexOf(value) != -1)	removeClass(element, value);
		else addClass(element, value);		
		}
	}
/**
* Supprime une classe CSS d'un élément HTML.
*@param element(objet) -> Elément HTML concerné.
*@param value(string) -> Nom de la classe à supprimer.
*@return void
*/
function removeClass(element, value)
	{
	if (element.className)
		{
		var newClassName = element.className;
		newClassName = Remplace2(newClassName, value, '');
		element.className = newClassName;
		}
	}
//------------------------------
/**
* Affiche un élément HTML.
*@param obj(objet) -> Elément HTML à afficher.
*@param mode(string) -> Valeur javascript pour définir le mode d'affichage de l'élément.
*@return void
*/
function showElt(obj, mode)
	{
	if (mode == undefined) mode = '';
	//if (mode != '') mode += '!important';
	if (obj.style) obj.style.display = mode;
	else if (document.getElementById(obj))
		document.getElementById(obj).style.display=mode;
	else alert("an error occurred...\n[DEBUG backtrace]unable to find item"+obj);
	}
/**
* Cache un élément HTML. L'espace sur la page n'est plus réservé.
*@param obj(objet) -> Elément HTML à cacher.
*@return void
*/
function hideElt(obj)
	{
	if (document.getElementById(obj))
		{
		document.getElementById(obj).style.display = "none";
		}
	else alert('elt '+obj+' unknown...');
	}
/**
* "Supprime" un élément HTML en effacant son contenu, et en valorisant sa propriété style.visibility à "hidden !important". L'espace sur la page reste réservé.
*@param obj(objet) -> Elément HTML à "cacher".
*@return void
*/
function delElt(obj)
      {
      document.getElementById(obj).parentNode.removeChild(document.getElementById(obj));
      /*
      if (document.getElementById(obj))
      	{
    	  document.getElementById(obj).innerHTML = '';
    	  alert('suppression contenu done...');
	      document.getElementById(obj).style.visibility = "hidden !important";
	      alert('changement visibility done...');
      	}
      else alert('elt '+obj+' unknown...');
      */
      }

//-------------------------------
/**
* Valorise la propriété "innerHTML" d'un élément HTML.
*@param obj(objet) -> Elément HTML.
*@param content(string) -> Valeur à affecter à "innerHTML".
*@return void
*/
function setInnerHTML(obj, content)
	{
	if (obj.innerHTML) obj.innerHTML = content;	
	else if (document.getElementById(obj))	document.getElementById(obj).innerHTML = content;
	else alert('elt '+obj+' unknown...');
	}

function getInnerHTML(obj_id)
	{
	if (document.getElementById(obj_id))
		return document.getElementById(obj_id).innerHTML;
	else return '';
	}

	
	
function Remplace2(expr,a,b) 
	{
	expr = expr.toString();
		var i=0;
		while (i!=-1)
		{
			i=expr.indexOf(a,i);
			if (i>=0)
			{
			expr=expr.substring(0,i)+b+expr.substring(i+a.length);
			i+=b.length;
			}
		}
	return expr;
	}

jQuery.fn.center = function ()
	{
    this.css("position", "absolute");
    this.css("top", (($j(window).height() - this.outerHeight()) / 2 +$j(window).scrollTop()) + "px");
    //this.css("left", (($j(window).width() - this.outerWidth()) / 2 +$j(window).scrollLeft() / 2) + "px");
	this.css("left", this.outerWidth() + "px");
    return this;
	}

/**
 * Ouvre un pop centré au milieu de l'écran
 * @param url String - Url de la page à ouvrir
 * @param nom String - Nom de la frame à ouvrir
 * @param largeur Int - largeur du pop up en px
 * @param hauteur Int - heuteur du pop up en px
 * @param options String - Option HTML supplémentaires
 */
function popUpCenter(url,nom,largeur,hauteur,options)
	{
	var haut=(screen.height-hauteur)/2;
	var Gauche=(screen.width-largeur)/2;
	fencent=self.open(url,nom,"top="+haut+",left="+Gauche+",width="+largeur+",height="+hauteur+","+options);
	fencent.focus();
	//return fencent;
	}
	
	

