/************************** DEBUG *********************************/

/*
	Name : getBackgroundColor
	Param : obj
	Return: la couleur en hexa du fond de l'objet sélectionné
*/
function getBackgroundColor(obj) {
	//Je prends la couleur de fond
	var bgcolor = getStyleInfo(obj,"backgroundColor");
	//S'il n'en a pas je continue de prendre la couleur du parent, et ainsi de suite
	if (bgcolor=="transparent") {
		while (!(obj.nodeName=="HTML" || (bgcolor!="transparent"))) {
			bgcolor = getStyleInfo(obj,"backgroundColor");
			obj = obj.parentNode;
		}
		//Si toujours rien, on prends du blanc
		if (bgcolor=="transparent") bgcolor = "#FFFFFF";
	}
	var rgb = convert2RGB(bgcolor);
	return "#"+deci2hexa(rgb["r"])+deci2hexa(rgb["g"])+deci2hexa(rgb["b"]);
}

/*
	Name : getStyleInfo
	Param : obj, style
	Return : la valeur de la propriété style
	genre getStyleInfo(obj, "padding") me retournera 25px par exemple
*/
function getStyleInfo(obj, style) {
	//Ie connait obj.currentStyle. Mozzy document.defaultView.getComputedStyle
	var ret =" ";
	//Pour IE
	if (obj.currentStyle) ret = obj.currentStyle[style];
	//Pour le DOM
	if (document.defaultView && document.defaultView.getComputedStyle) {
		//Safari Mac ne peut pas acceder aux objets qui sont en display:none.
		//On considere donc que si c'est ce qui est demande et qu'il n'y a pas de réponse, c'est que c'est du "none"
		if (!document.defaultView.getComputedStyle(obj, "") && style=="display") ret = "none";
		//Sinon on prends le résultat
		else ret = document.defaultView.getComputedStyle(obj, "")[style];
	}

	//Safari Mac retourne les couleurs en rgba et rgba(0,0,0,0) => transparent
	if (style=="backgroundColor" && ret=="rgba(0, 0, 0, 0)") ret = "transparent";
	
	return ret;
}

/*
	Name : convert2RGB
	Param : couleur
	Return: On retourne un tableau[r][g][b] avec les valeur dans les cases
	Mozzila me donnant la valeur sous forme rgb(255,47,14), IE sous forme #14FE23 on remets tout bien en tableau
*/
function convert2RGB(couleur) {
	var ret = Array(3);
	if (couleur.find("#")) {
		ret["r"] = hexa2deci(couleur.substring(1,3).toUpperCase());
		ret["g"] = hexa2deci(couleur.substring(3,5).toUpperCase());
		ret["b"] = hexa2deci(couleur.substring(5,7).toUpperCase());		
	}
	//trouve rgb( et rgba(
	if (couleur.find("rgb")) {
		var tmp = couleur.substring(4,couleur.length-1).split(", ");
		ret["r"] = tmp[0];
		ret["g"] = tmp[1];
		ret["b"] = tmp[2];
	}
	return ret;
}

/*
	Name : hexa2deci
	Param : hexa
	Retourne : valeur décimale
	La fonction prends une valeur hexadecimale (00->FF à priori) et retourne la valeur décimale
*/
function hexa2deci(hexa) {
	var deci = 0, pos;
	var arr = Array();
	arr["0"]=0;arr["1"]=1;arr["2"]=2;arr["3"]=3;arr["4"]=4;arr["5"]=5;arr["6"]=6;arr["7"]=7;arr["8"]=8;arr["9"]=9;
	arr["A"]=10;arr["B"]=11;arr["C"]=12;arr["D"]=13;arr["E"]=14;arr["F"]=15;
	//On lit le chiffre hexa lettre par lettre depuis la fin et on calcule la valeur en décimal
	for (var i=0;i!=hexa.length;i++) {
		pos = hexa.charAt(-i+1);
		deci+= Math.pow(16,i) * arr[pos];
	}
	return deci;
}

/*
	Name : deci2hexa
	Param : deci
	Retourne : valeur hexadécimale
	La fonction prends une valeur décimale (à priori entre 0 et 255) et retourne son équivalent en hexa
*/
function deci2hexa(deci) {
	var arr = Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
	return arr[(Math.floor(deci/16))]+arr[(deci%16)];
}

/*
	Name : rgb2cmjn
	Param : couleur
	Retourne un tableau CMJN des couleurs converties
	On normalize les couleurs (comprises entre 0 et 1)
	 Black   = minimum(1-Red,1-Green,1-Blue)
    Cyan    = (1-Red-Black)/(1-Black)
    Magenta = (1-Green-Black)/(1-Black)
    Yellow  = (1-Blue-Black)/(1-Black) 
*/


/*
	Name : vd (initiales de var_dump() issue du PHP)
	Param : var
	Affiche le type et les informations d'une variable passée en parametre
*/
function vd(my_var) {
	var body, tmp, debug;
	//On va ajouter un espace de texte tout en bas de la page dans lequel on va afficher un texte
	
	//On choppe déjà le corps de la page (body)
	body = getElementByTagName("body");
	
	//Si j'ai pas créé d'espace de debug je l'ajoute
	if (!(document.getElementById("Tim_debug"))) {
		//Je crée un espace où afficher mes infos, que j'ajoute à la fin de la page
		var debug = document.createElement("div");
		debug.setAttribute("id", "Tim_debug");
		debug.innerHTML = "";
		debug.style.position = "absolute";
		debug.style.top = "0px";
		debug.style.marginLeft = "0px";
		debug.style.padding = "20px";
		debug.style.borderWidth = "1px";
		debug.style.borderColor = "#000000";
		debug.style.borderStyle = "solid";
		
		
		debug.style.backgroundColor = "#FFFFFF";
		debug.style.textAlign = "left";
		debug.ondblclick = function() { this.style.display = "none" }
		body.appendChild(debug);
	}
	//J'ajoute mon texte dedans maintenant
	debug = document.getElementById("Tim_debug");
	tmp = debug.innerHTML;
	debug.innerHTML = "";
	debug.innerHTML = tmp+getVarInfo(my_var);
}

/*
	Name : getVarInfo
	Param : my_var
	Return : Une chaine de caractere formattée html avec le type et le contenu de la variable
*/
function getVarInfo(my_var) {
	var tmp, type, i;
	if (my_var==null) return "XXX NO VAR XXX";;
	type = typeof(my_var);
	//tmp = "###Var_dump()###";
	//tmp+= "<br>[Type] : " + type;
	//String
	if (type=="string" || type=="number" || type=="boolean") {
		tmp+= "<br>[Value] : " + my_var ;
	}
	
	//tableau
	if (my_var.length && type=="object") {
		var size = my_var.length;
		tmp+= "<br>[Size] : " + size;
		//On affiche tout le contenu
		for (var i in my_var) {
			if (typeof(my_var[i])!="function") tmp+= "<br>array["+i+"] : " + my_var[i];			
		}

	}
	return tmp+"<br>";
}


function vd_node(node) {
	var tmp;
	
	if (node.nodeName) tmp+= "<br>Node name : "+node.nodeName;
	if (node.getAttribute("id")) tmp+= "<br>Node id : "+node.getAttribute("id");
	//text.innerHTML+= "<br>Attributes : "+node.attributes;
	//text.innerHTML+= "<br>nbr Attributes : "+node.attributes.length;
	//vd_attr(node.attributes);
	if (node.nodeValue) tmp+= "<br>Node value : "+node.nodeValue;
	if (node.nodeType) tmp+= "<br>Node type : "+node.nodeType;
	//text.innerHTML+= "<br>Parent node : "+node.parentNode;
	var nbr = node.childNodes.length;
	tmp+= "<br>Node type : "+nbr;
	for (var i=0; i!=nbr; i++) tmp+= "<br>&nbsp;&nbsp;&nbsp;"+node.childNodes[i].nodeName+ " => "+node.childNodes[i].nodeValue;
	
	//text.innerHTML+= "<br>fisrt child : "+node.firstChild;
	//text.innerHTML+= "<br>last child : "+node.lastChild;
	//text.innerHTML+= "<br>previous sibling : "+node.previousSibling;
	//text.innerHTML+= "<br>next sibling : "+node.nextSibling;
	
	tmp+= "<br><br>Node value "+node.firstChild;
	vd(tmp);
	
	
}
function vd_attr(attribute_node) {
	var nbr = attribute_node.length;
	var tmp;
	for (var i=0; i!=nbr; i++) tmp+= "<br>&nbsp;&nbsp;&nbsp;"+attribute_node[i].nodeName+ " => "+attribute_node[i].nodeValue;
	vd(tmp);
}


	
