/***********************************
Ce fichier contient les fonctions javascripts qui permettent d'unifier les appels entre tous les navigateurs
**********************************/
var utils = {};

/**---- ajoute un gestionnaire d'événement ---- **/
/****** A REMPLACER PAR UN APPEL A LA METHODE DANS PROTOTYPE ******/
// from : the Yahoo User Interface library
utils.addListener = function (el, sType, fn) {
	if (window.addEventListener) {
		el.addEventListener(sType, fn, false);
	} else if (window.attachEvent) {
		el.attachEvent("on" + sType, fn);
	} else {
		el['on'+sType] = fn;
	}
}


/** ----renvoie les éléments ayant une classe donnée ---- */
// from : http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
/****** A REMPLACER PAR UN APPEL A LA METHODE DANS PROTOTYPE ******/
utils.getElementsByClassName = function(className, tag, elm){
	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}


/** ----transforme les \n en <br /> ---- */
utils.nl2br = function (str, is_xhtml) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Philip Peterson
    // +   improved by: Onno Marsman
    // +   improved by: Atli Ţór
    // +   bugfixed by: Onno Marsman
    // +      input by: Brett Zamir (http://brettz9.blogspot.com)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: nl2br('Kevin\nvan\nZonneveld');
    // *     returns 1: 'Kevin<br />\nvan<br />\nZonneveld'
    // *     example 2: nl2br("\nOne\nTwo\n\nThree\n", false);
    // *     returns 2: '<br>\nOne<br>\nTwo<br>\n<br>\nThree<br>\n'
    // *     example 3: nl2br("\nOne\nTwo\n\nThree\n", true);
    // *     returns 3: '<br />\nOne<br />\nTwo<br />\n<br />\nThree<br />\n'

    var breakTag = '';

    breakTag = '<br />';
    if (typeof is_xhtml != 'undefined' && !is_xhtml) {
        breakTag = '<br>';
    }

    return (str + '').replace(/([^>]?)\n/g, '$1'+ breakTag +'\n');
}

utils.var_dump = function(element, depth, tab) {
	if(!depth)
		depth = 0;
	if(!tab)
		tab = '';

	tab += '\t';
	string = '';

	//Loop through all the child objects in element
	for(property in element)
	{
		//Add the name and value of the child object
		string += tab + property 			

		//Check if the child is an object
		if(typeof element[property] == 'object')
			string += '\n'+ var_dump(element[property], depth+1, tab) + '\n';
		else
			string += ': '+ element[property] + ''+ '\n';
	}

	//Ouput the result
	if(depth == 0) alert(string);	

	return string;
}

