function Portfolio(xmlURI, langue) {
	this.fichier   = xmlURI;
	this.langue    = langue;
	
	this.categorie = new String();
	
	this.ecrireMenu       = Portfolio_EcrireMenu;
	this.ecrireMenuOutput = Portfolio_EcrireMenuOutput;
	
	this.ecrireContenu       = Portfolio_EcrireContenu;
	this.ecrireContenuOutput = Portfolio_EcrireContenuOutput;
}





function Portfolio_EcrireMenu(eMenu, baseURI) {
	this.menu = new Object();
	this.menu.baseURI = baseURI;
	
	this.GET = Portfolio_GetObject();
	
	
	if ( this.menu.eMenu = document.getElementById(eMenu) )
		new XMLLoader(this.fichier, "ecrireMenuOutput", this);
	else
		delete this.menu
}





function Portfolio_EcrireMenuOutput(xmlData) {
	this.menu.sections = new Array();
	
	for ( var cNodes = 0; cNodes < xmlData.childNodes.length; cNodes++ ) {
		var node = xmlData.childNodes[cNodes];
		if ( node.nodeType == 1 ) {
			this.menu.sections.push({
										titre:  node.attributes.getNamedItem("titre_" + this.langue).value,
										xmluri: node.attributes.getNamedItem("xmluri").value.substring(node.attributes.getNamedItem("xmluri").value.lastIndexOf("/") + 1, node.attributes.getNamedItem("xmluri").value.lastIndexOf(".xml"))
									});
		}
	}
	
	
	if ( this.menu.sections.length ) {
		var ul = document.createElement("ul");
		for ( var cSections = 0; cSections < this.menu.sections.length; cSections++ ) {
			var section = this.menu.sections[cSections];
			var li    = document.createElement("li");
			// S'il s'agit du menu courant, nous l'activons
			if ( this.GET.categorie == section.xmluri )
				li.className = "actif";
			
			var ancre = document.createElement("a");
				ancre.href = this.menu.baseURI + "?categorie=" + section.xmluri;
			var texte = document.createTextNode(section.titre);
			
			ancre.appendChild(texte);
			li.appendChild(ancre);
			ul.appendChild(li);
		}
		this.menu.eMenu.appendChild(ul);
	}
	
	delete this.eMenu;
}





function Portfolio_EcrireContenu(eContenu, baseURI) {
	this.contenu = new Object();
	this.contenu.xmlURI = this.fichier.substring(0, this.fichier.lastIndexOf("/") + 1) + baseURI + this.GET.categorie + ".xml";
	
	if ( this.contenu.eContenu = document.getElementById(eContenu) )
		new XMLLoader(this.contenu.xmlURI, "ecrireContenuOutput", this);
	else
		delete this.contenu;
	
}





function Portfolio_EcrireContenuOutput(xmlData) {
	this.contenu.categorie = xmlData.attributes.getNamedItem("titre_" + this.langue).value;
	this.contenu.pieces = new Array();
	this.contenu.pieceDemandee = this.GET.piece ? this.GET.piece : null;
	
	var piecesID = 0;
	for ( var cPieces = 0; cPieces < xmlData.childNodes.length; cPieces++ ) {
		var node = xmlData.childNodes[cPieces];
		if ( node.nodeType == 1 ) {
			// Va chercher le node de la description
			var description = new String("");
			for ( var cLangues = 0; cLangues < node.childNodes.length; cLangues++ ) {
				var nodeLangue = node.childNodes[cLangues];
				if ( nodeLangue.nodeType == 1 ) {
					if ( nodeLangue.nodeName.substring(nodeLangue.nodeName.lastIndexOf("_") + 1) == this.langue ) {
						for ( var cNodesDescription = 0; cNodesDescription < nodeLangue.childNodes.length; cNodesDescription++ )
						if ( nodeLangue.childNodes[cNodesDescription].nodeType == 4 ) {
							description = nodeLangue.childNodes[cNodesDescription].nodeValue;
							cNodesDescription = nodeLangue.childNodes.length;
						}
						cLangues = node.childNodes.length;
					}
				}
			}
			
			// Ajoute la pièce
			this.contenu.pieces.push({
									 		id:          piecesID,
											titre:       node.attributes.getNamedItem("titre_" + this.langue).value,
											thumbnail:   node.attributes.getNamedItem("thumbnail").value,
											media:       node.attributes.getNamedItem("media_" + this.langue).value,
											width:       node.attributes.getNamedItem("width") ? node.attributes.getNamedItem("width").value : null,
											height:      node.attributes.getNamedItem("height") ? node.attributes.getNamedItem("height").value : null,
											description: description
									 });
			
			piecesID++;
		}
	}
	
	
	if ( this.contenu.pieces.length ) {
		// Ecrit la catégorie
		var h2 = document.createElement("h2");
			h2.appendChild( document.createTextNode(this.contenu.categorie) );
		this.contenu.eContenu.appendChild(h2);
		
		// Ecrit la liste des pièces
		var ul = document.createElement("ul");
		for ( var cPieces = 0; cPieces < this.contenu.pieces.length; cPieces++ ) {
			var piece = this.contenu.pieces[cPieces];
			var li    = document.createElement("li");
				// S'il s'agit de la pièce courante, on l'active
				if ( this.contenu.pieceDemandee == piece.id )
					li.className = "actif";
			var ancre = document.createElement("a");
				ancre.title = piece.titre;
				ancre.href  = "?categorie=" + this.GET.categorie + "&piece=" + piece.id;
			var image = document.createElement("img");
				image.src = piece.thumbnail;
				image.alt = piece.titre;
			
			ancre.appendChild(image);
			li.appendChild(ancre);
			ul.appendChild(li);
		}
		this.contenu.eContenu.appendChild(ul);
		
		// Écrit la pièce demandée
		if ( this.contenu.pieces[this.contenu.pieceDemandee] ) {
			var piece = this.contenu.pieces[this.contenu.pieceDemandee];
			var extension = piece.media.substring(piece.media.lastIndexOf(".") + 1).toLowerCase();
			var media = document.createElement("div");
				media.id = "media";
				
			// Insère une image
			if ( extension == "png" || extension == "gif" || extension == "jpg" || extension == "jpeg" ) {
				var img = document.createElement("img");
					img.src = piece.media;
					img.alt = piece.titre;
				
				media.appendChild(img);
				this.contenu.eContenu.appendChild(media);
			} else {
				this.contenu.eContenu.appendChild(media);
				
				var params = null;
				if ( extension == "mov" ) params = "controller=true, autoplay=true";
				new InsererMedia(piece.media, piece.width ? Number(piece.width) : 100, piece.width ? Number(piece.height) : 100, params, "media");
			}
		}
		
		// Écrit le titre de la pièce
		if ( this.contenu.pieces[this.contenu.pieceDemandee] ) {
			var h3 = document.createElement("h3");
				h3.appendChild(document.createTextNode(piece.titre));
			this.contenu.eContenu.appendChild(h3);
		}
		
		// Écrit la description de la pièce
		if ( this.contenu.pieces[this.contenu.pieceDemandee] ) {
			var description = document.createElement("p");
				description.innerHTML = this.contenu.pieces[this.contenu.pieceDemandee].description;
			this.contenu.eContenu.appendChild(description)
		}
	}
	
	
	delete this.contenu;
}





function Portfolio_GetObject() {
	var oGet = new Object();
	var search_str = location.search.substring(1).split("&");
	
	for ( var cSearch = 0; cSearch < search_str.length; cSearch++ ) {
		var prop = search_str[cSearch].split("=");
		oGet[prop[0]] = prop[1];
	}
	
	return oGet;
}