// manipulation du DOM
tagDate = false;
tagNom = false;
tagType = false;
tagPoids = false;

if(!window.Element){
    Element = new Object();
}

Element.getLeft = function(element) {
    var offsetLeft = 0;
    while(element != null){
	offsetLeft += element.offsetLeft;
	element = element.offsetParent;
    };
    return offsetLeft;
}

Element.getTop = function(element) {
    var offsetTop = 0;
    while(element != null){
	offsetTop += element.offsetTop;
	element = element.offsetParent;
    };
    return offsetTop;
}

Element.setStyle = function(element, style) {
    for (directive in style) {
	element.style[directive] = style[directive];
    };
}

Element.getChildElements = function(element, tagName){
    var resultat = new Array();
    var nom = tagName.toLowerCase();
    var n = element.childNodes.length;
    for(var i=0; i<n; i++){
	var enfant = element.childNodes[i];
	if(enfant.nodeType == 1){
	    if (nom == "*" || enfant.nodeName.toLowerCase() == nom){
		resultat.push(enfant);
	    };
	};
    };
    return resultat;
}

Element.cleanWhitespace = function(element) {
    for(var i=0; i<element.childNodes.length; i++){
	var node = element.childNodes[i];
	if(node.nodeType == 3 && !/\S/.test(node.nodeValue)){
	    element.removeChild(node);
	};
    };
}

Log = {
    error: function(msg) {
	alert("Erreur: \n" + msg);
    }
}

// gestionnaires AJAX

function Moteur(corps, visualisateur, type){
    this.type = type;
    this.corps = corps;
    this.visualisateur = visualisateur;
    this.requete = this.recupRequete();
    this.reponse = '';
    if(this.requete != null){
	try {
	    this.requete.open("POST", "engine.php", true);
	    this.requete.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	    var courant = this;
	    this.requete.onreadystatechange = function(){
		if(courant.requete.readyState == 4 && courant.requete.status == 200){
		    courant.extradeResult();
		};
	    };
	    this.requete.send(this.corps);
	    this.enAttente();
	} catch (exc) {
	    alert('pas bon!');
	};
    };
    return true;
}

Moteur.prototype = {
    
    iconLoadURL: "medias/standard/images/load.gif",

    recupRequete: function(){
	var result = this.requete;
	if(result == null){
	    if(window.XMLHttpRequest) {
		result = new XMLHttpRequest();
	    } else if (window.ActiveXObject) {
		result = new ActiveXObject("Microsoft.XMLHTTP");
	    };
	}	
	return result;
    },
    
    enAttente: function(){
	this.cadre = document.getElementById(this.visualisateur);
	this.iconWait = document.createElement('img');
	this.iconWait.src = this.iconLoadURL;
	this.visualisateur.innerHTML = "";
	this.visualisateur.appendChild(this.iconWait);
    },
    
    extradeResult: function(){
	switch(this.type){
	    case 'TXT': 	this.visualisateur.innerHTML = this.requete.responseText;	// affiche directement la chaine dans la cible
			    break;
	    case 'XML':		reponse = this.requete.responseText;			// pas encore au point ... (XML + JSON)
				this.reponse = reponse;
			    break;
	    case 'FIC':		this.visualisateur.appendChild(this.requete.responseText);
			    break;
	};
    }
}

Moteur.prototype.constructor = Moteur;

// generalite

function traduire(lang){
    document.location='?lang='+lang;
}

function load(idElement, rubrique, theme, rep){
    (rubrique != null) ? itemRub = rubrique : itemRub = 'liste';
    corps = "idElement="+idElement+"&type=Modules&rubrique="+itemRub;
    if(theme != null) corps += "&theme="+theme;
    if(rep) corps += "&rep="+encodeURIComponent(rep);
    visualisateur = document.getElementById('module');
    new Moteur(corps, visualisateur,'TXT');
}

function loadFic(idElement, rubrique, theme, fic){
    (rubrique != null) ? itemRub = rubrique : itemRub = 'liste';
    visualisateur = document.getElementById('module');
    creaFormFic(idElement, itemRub, theme, fic);
}

function creaFormFic(idElement, rubrique, theme, fic){
    formulaire = document.createElement('form');
    formulaire.action = 'engine.php';
    formulaire.method = 'post';
    formulaire.appendChild(creaChampInput('hidden', 'idElement', idElement));
    formulaire.appendChild(creaChampInput('hidden', 'type', 'Modules'));
    formulaire.appendChild(creaChampInput('hidden', 'rubrique', rubrique));
    formulaire.appendChild(creaChampInput('hidden', 'theme', theme));
    formulaire.appendChild(creaChampInput('hidden', 'fic', fic));
    document.body.appendChild(formulaire);
    formulaire.submit();
}

function creaChampInput(type, nom, valeur){
    champ = document.createElement('input');
    champ.type = type;
    champ.name = nom;
    champ.value = valeur;
    return champ;
}

function trie(item) {
    liste = Element.getChildElements(document.getElementById('contenuRepertoire'),'TR');
    switch(item) {
	case 0 : 	liste.sort(TrieType);
			document.getElementById('contenuRepertoire').innerHTML = '';
			if(tagType){
			    for(i=0; i < liste.length; i++){
				document.getElementById('contenuRepertoire').appendChild(liste[i]);
			    };
			    tagType = false;
			} else {
			    for(i = liste.length - 1; i>=0 ; i--){
				document.getElementById('contenuRepertoire').appendChild(liste[i]);
			    };
			    tagType = true;
			};

			break;
	case 1 : 	liste.sort(TrieNom);
			document.getElementById('contenuRepertoire').innerHTML = '';
			if(tagNom){
			    for(i=0; i < liste.length; i++){
				document.getElementById('contenuRepertoire').appendChild(liste[i]);
			    };
			    tagNom = false;
			} else {
			    for(i = liste.length - 1; i>=0 ; i--){
				document.getElementById('contenuRepertoire').appendChild(liste[i]);
			    };
			    tagNom = true;
			};
			break;
	case 2 :	liste.sort(TrieDate);
			document.getElementById('contenuRepertoire').innerHTML = '';
			if(tagDate){
			    for(i=0; i < liste.length; i++){
				document.getElementById('contenuRepertoire').appendChild(liste[i]);
			    };
			    tagDate = false;
			} else {
			    for(i = liste.length - 1; i>=0 ; i--){
				document.getElementById('contenuRepertoire').appendChild(liste[i]);
			    };
			    tagDate = true;
			};
			break;
	case 3 :	liste.sort(TriePoids);
			document.getElementById('contenuRepertoire').innerHTML = '';
			if(tagPoids){
			    for(i=0; i < liste.length; i++){
				document.getElementById('contenuRepertoire').appendChild(liste[i]);
			    };
			    tagPoids = false;
			} else {
			    for(i = liste.length - 1; i>=0 ; i--){
				document.getElementById('contenuRepertoire').appendChild(liste[i]);
			    };
			    tagPoids = true;
			};

		    break;
    };
}

function TrieDate(colonne1, colonne2){
    n1 = colonne1.id;
    n2 = colonne2.id;
    if(n1 < n2){
	return -1;
    } else if(n1 > n2){
	return 1;
    } else {
	return 0;
    };
}

function TrieType(colonne1, colonne2){
    n1 = colonne1.title;
    n2 = colonne2.title;
    if(n1 < n2){
	return -1;
    } else if(n1 > n2){
	return 1;
    } else {
	return 0;
    };
}

function TrieNom(colonne1, colonne2){
    tmp = Element.getChildElements(colonne1,"td")[1];
    n1 = Element.getChildElements(tmp,"a")[0].innerHTML;
    tmp = Element.getChildElements(colonne2,"td")[1];
    n2 = Element.getChildElements(tmp,"a")[0].innerHTML;
    if(n1 < n2){
	return -1;
    } else if(n1 > n2){
	return 1;
    } else {
	return 0;
    };
}

function TriePoids(colonne1, colonne2){
    tmp1 = Element.getChildElements(colonne1,"td")[3].innerHTML.split(' ');
    tmp2 = Element.getChildElements(colonne2,"td")[3].innerHTML.split(' ');
    switch(tmp1[1]){
	case 'o' :	n1 = tmp1[0];
			break;
	case 'Ko':	n1 = 1024 * tmp1[0];
			break;
	case 'Mo':	n1 = 1024 * 1024 * tmp1[0];
			break;
	case 'Go':	n1 = 1024 * 1024 * 1024 * tmp1[0];
			break;
	default	 :	n1 = 0;
    };
    switch(tmp2[1]){
	case 'o' :	n2 = tmp2[0];
			break;
	case 'Ko':	n2 = 1024 * tmp2[0];
			break;
	case 'Mo':	n2 = 1024 * 1024 * tmp2[0];
			break;
	case 'Go':	n2 = 1024 * 1024 * 1024 * tmp2[0];
			break;
	default	 :	n2 = 0;
    };
    if(n1 < n2){
	return -1;
    } else if(n1 > n2){
	return 1;
    } else {
	return 0;
    };
}

