/**
*	Affichage d'un tableau dynamique javascript
*
**/

var dt ;
var filtreColor = '#00FFFF' ;
var indice = 0 ;

function montre(id) {
	var oElt = document.getElementById(id);
	if (oElt) {oElt.style.display='block';}
}

function cache(id) {
	var oElt = document.getElementById(id);
	if (oElt) {oElt.style.display='none';}
}


/* FILTRE (facultatif) de recherche */
function Filtre(colonne,filtre){
	this.colonneFiltre=colonne;
	this.valeurFiltre=filtre;
}

function Affichage(){
	this.fixe='';
	this.scrollable='';
}

function diff(a, b) {
	return parseFloat(a)-parseFloat(b) ;
}

/*	ENTETE COLONNE (TH) */
function Entete(valeur, largeur, couleur, position, filtrable, numColonne, arrayLang) {
	this.position = position ;
	this.valeur = valeur ;
	this.numColonne = numColonne ;
	this.largeur = parseInt(largeur) ;
	this.bgcolor = couleur ;
	this.filtrable = filtrable ;
	this.arrayFiltre = null ;
	this.colonneFiltre = false ;
	this.valeurFiltre = null ;
	this.arrayLang = arrayLang ;

	this.addLang = function(key, val) {
		this.arrayLang[key] = val ;
	}

	this.setAffichageFiltre = function(bool, val){
		this.colonneFiltre = bool;
		if (bool){this.valeurFiltre=val;} else {this.valeurFiltre=null;}
	}

	this.getLargeur = function(){
		return this.largeur;
	}

	this.affiche = function(arrayFiltre) {
		var col = '' ;
		var html = '' ;
		var texte = '' ;
		var background = '' ;
		if (this.largeur){
			col += ' width="'+ this.largeur + '"' ;
	 	}
		if (this.colonneFiltre){
			col += ' bgcolor="' + filtreColor + '"' ;
		} else if (this.bgcolor!='0'){
			col += ' bgcolor="#' + this.bgcolor + '"' ;
		}

		html += '<th nowrap="nowrap" align="center" ' + col + '>' ; ;
		if ( this.filtrable && this.valeur.length && arrayFiltre.length>1 ) {
			html += '<select onchange="dt.filtre('+this.numColonne+', this.value);return false;">' ;
			html += '<option value="none">' + this.valeur + '</option>' ;
			var tiret = '' ;
			for ( var i=0;i<this.valeur.length;i++) {
				tiret += '--' ;
			}
			html += '<option value="none">' + tiret + '</option>' ;
			html += '<option value="none">' + this.arrayLang['tout'] + '</option>' ;
			for ( var i=0;i<arrayFiltre.length;i++) {
				if ( arrayFiltre[i].match(/(|in)dispo/) ) {
					if ( arrayFiltre[i].match(/indispo/) ) {
						texte = this.arrayLang['indispo'] ;
					} else {
						texte = this.arrayLang['dispo'] ;
					}
				} else {
					texte = arrayFiltre[i] ;
				}
				background = (this.valeurFiltre==arrayFiltre[i]) ? ' style="background-color: ' + filtreColor + ';" ' : '' ;
				html += '<option value="'+ arrayFiltre[i] +'"' + background + '>' + texte + '</option>' ;
			}
			html += '</select>' ;
		} else {
			html += this.valeur ;
		}
		html += '</th>' ;

		return html ;
	}

}

/* CASE (TD) */
function Detail( valeur, couleur, position, largeur) {
	this.promotion=false;
	this.nouveaute=false;
	this.information=false;
	this.position=position;
	this.valeur=valeur;
	this.bgcolor=couleur;
	this.largeur=largeur;
	this.setInformation=function(bool){this.information=bool;}
	this.getInformation=function(){return this.information;}
	this.setPromotion=function(bool){this.promotion=bool;}
	this.getPromotion=function(){return this.promotion;}
	this.setNouveaute=function(bool){this.nouveaute=bool;}
	this.getNouveaute=function(){return this.nouveaute;}

	this.getLargeur = function() {
		return this.largeur ? ' width="'+parseInt(this.largeur)+'" ' : '' ;
	}
	this.affichePromotion = function(){
		return this.promotion ? '<img src="' + _jspath['images'] + 'site/p-mini.gif" style="vertical-align: -4px;" />' : '' ;
	}
	this.afficheNouveaute = function(){
		return this.nouveaute ? '<img src="' + _jspath['images'] + 'site/n-mini.gif" style="vertical-align: -4px;" />' : '' ;
	}
	this.afficheInformation = function(){
		return this.information ? '<a href="#"><img src="' + _jspath['images'] + 'site/i-mini.gif" style="vertical-align: -4px;" /></a>' : '' ;
	}
	this.affiche = function() {
		var col='';
		if ( this.bgcolor ){ col = 'bgcolor="#'+this.bgcolor+'"' ; }
		return '<td nowrap="nowrap" align="center" '+col+'>'+this.afficheInformation()+this.afficheNouveaute()+this.affichePromotion()+this.valeur+'</td>\n';
	}
}


/* LIGNE (TR)*/
function Ligne(){
	this.arrayFiltres=new Array();
	this.numLigne=0;
	this.details= new Array();

	this.setNumL = function(numLigne){
		this.numLigne=numLigne%2;
	}
	this.addD = function(detail){
		this.details[this.details.length]=detail;
	}
	this.affiche = function(arrayFiltres, indice){
		var affichage = new Affichage();
		var couleur = (indice%2) ? '#FDFCFC' : '#E8E7E7' ;

		if ( this.isAffichable(arrayFiltres) ) {
			affichage.scrollable = '<tr bgcolor="' + couleur + '" height="25">\n';
			affichage.fixe = '\t\t<tr bgcolor="' + couleur + '" height="25">';
			for (var i=0;i<this.details.length;i++){
				if ( this.details[i].position ){
					affichage.scrollable+=this.details[i].affiche();
				}else{
					affichage.fixe+=this.details[i].affiche();
				}
			}
			affichage.scrollable+='\t\t</tr>\n';
			affichage.fixe+='\t\t</tr>\n';
		}
		return affichage ;
	}
	this.isAffichable = function(arrayFiltres){
		if (arrayFiltres)	this.arrayFiltres = arrayFiltres;
		var nbLigne = 0 ;
		var ligneAffichable = true ;
		if ( this.arrayFiltres && this.arrayFiltres.length!=0 ){
			for (var numFiltre=0;numFiltre<this.arrayFiltres.length;numFiltre++){
				if (this.arrayFiltres[numFiltre]!=null){
					if( this.arrayFiltres[numFiltre].valeurFiltre!=this.details[this.arrayFiltres[numFiltre].colonneFiltre].valeur ){
						return false ;
					}
				}
			}
		}
		return true ;
	}
}

/*	TABLEAU */
function DetailsTechniques (){

	this.nbLigne=null;
	this.nbPage=null;
	this.nbParPage=null;
	this.nbDebut=null;
	this.numPageCourante=null;
	this.listeEntete=new Array();
	this.lignes=new Array();
	this.lignesAffichees=new Array();
	this.arrayFiltres=new Array();
	this.arrayLang=new Array() ;
	this.arrayListeFiltres=new Array() ;

	this.addLang = function(key, val) {
		this.arrayLang[key] = val ;
	}
	this.setNbLigne = function(int) {
		this.nbLigne = parseInt(int ? int : 0) ;
	}
	this.setNbDebut = function(int) {
		this.nbDebut = parseInt(int ? int : 0) ;
	}
	this.setNbPage = function(int) {
		this.nbPage = parseInt(int ? int : 1) ;
	}
	this.setNumPageCourante = function(int) {
		this.numPageCourante = parseInt(int ? int : 1) ;
	}
	this.setNbParPage = function(int) {
		this.nbParPage = parseInt(int ? int : 0) ;
	}

	this.getLigneAffichees = function() {
		this.lignesAffichees = new Array() ;
		for ( var i=0 ; i < this.lignes.length ; i++ ) {
			if ( this.lignes[i].isAffichable() ) {
				this.lignesAffichees[this.lignesAffichees.length] = this.lignes[i] ;
			}
		}
		return this.lignesAffichees.length ;
	}

	this.addE = function (valeur, largeur, couleur, position, filtrable) {
		this.listeEntete[this.listeEntete.length] = new Entete(valeur, largeur, couleur, position, filtrable, this.listeEntete.length, this.arrayLang);
	}

	this.addL = function(ligne) {
		this.lignes[this.lignes.length] = ligne;
	}

	this.addFiltre=function(filtre){
		if (this.arrayFiltres[filtre.colonneFiltre]!=null){
			if (this.arrayFiltres[filtre.colonneFiltre].valeurFiltre==filtre.valeurFiltre){
				this.arrayFiltres[filtre.colonneFiltre]=null;
			}else{
				this.arrayFiltres[filtre.colonneFiltre]=filtre;
			}
		}else{
			this.arrayFiltres[filtre.colonneFiltre]=filtre;
		}
	}

	this.removeFiltre = function(colonne) {
		this.arrayFiltres[colonne] = null ;
	}

	this.resetFiltres = function() {
		this.arrayFiltres=new Array() ;
	}

	this.setFiltreValeurs=function(){
		var valeur ;
		for ( var i=0 ; i < this.listeEntete.length ; i++ ) {
			if ( this.listeEntete[i].filtrable ) {
				if ( !this.arrayListeFiltres[i] ) {
					this.arrayListeFiltres[i] = new Array();
					for (var j=0;j<this.lignes.length; j++) {
						valeur = this.lignes[j].details[i].valeur ;
						if ( !this.arrayListeFiltres[i].in_array(valeur) ) {
							this.arrayListeFiltres[i][this.arrayListeFiltres[i].length] = valeur ;
						}
					}
				}
			}
		}
	}

	this.filtre = function (col, valeur) {
		if ( encodeURI(valeur)=='%C2%A0' ) valeur = '&nbsp;' ;
		if ( col && valeur ) {
			this.nbDebut = 0 ;
			if (valeur=='none') {
				this.removeFiltre(col) ;
			} else {
				this.addFiltre(new Filtre(col,valeur)) ;
			}
		}
		this.affiche() ;
	}

	/* Entete du tableau */
	this.afficheEntete = function(){
		/* mise en cache de la liste des filtres */
		this.setFiltreValeurs() ;

		/* mise en évidence des entetes des colonnes filtrées */
		for (var i=0;i<this.listeEntete.length;i++) {
			this.listeEntete[i].setAffichageFiltre(false);
		}
		for (var i=0;i<this.arrayFiltres.length;i++) {
			if (this.arrayFiltres[i]!=null){
				this.listeEntete[i].setAffichageFiltre(true,this.arrayFiltres[i].valeurFiltre);
			}
		}
		var affichage = new Affichage();
		affichage.scrollable = '<table cellspacing="0" cellpadding="0" class="table1">\n'+
									'<thead>\n'+
									'<tr bgcolor="#E8E7E7" height="30">\n';
		affichage.fixe = '<table cellspacing="0" cellpadding="0" class="table1">\n'+
									'<thead>\n'+
									'<tr bgcolor="#E8E7E7" height="30">\n';
		for (var i=0;i<this.listeEntete.length;i++) {
			if ( this.listeEntete[i].position ) {
				affichage.scrollable += this.listeEntete[i].affiche(this.arrayListeFiltres[i]);
			} else {
				affichage.fixe += this.listeEntete[i].affiche(this.arrayListeFiltres[i]);
			}
		}
		affichage.scrollable+='</tr>\n</thead>\n';
		affichage.fixe+='</tr>\n</thead>\n';
		return affichage;
	}

	/* Ligne du tableau */
	this.afficheLignes = function() {
		var indice = 0 ;
		var indice_2 = 0 ;
		var html_scrollable ;
		var html_fixe ;
		var affichage= new Affichage();

		affichage.scrollable = '<tbody>\n' ;
		affichage.fixe = '<tbody>\n' ;
		for ( var i=0 ; i < this.lignes.length ; i++ ) {
			html_scrollable = '' ;
			html_fixe = '' ;
			if ( this.lignes[i].isAffichable(this.arrayFiltres) ) {
				indice_2++ ;
				if ( (indice_2 > this.nbDebut) && (!this.nbParPage || indice < this.nbParPage) ) {
					indice++ ;
					affichage.scrollable += this.lignes[i].affiche(this.arrayFiltres, indice).scrollable ;
					affichage.fixe += this.lignes[i].affiche(this.arrayFiltres, indice).fixe ;
				}
			}
		}
		affichage.scrollable += '</tbody>\n</table>';
		affichage.fixe += '</tbody>\n</table>';
		return affichage;
	}

	this.affichePagination=function(){
		var html = '' ;
		var sClass ;

		if ( this.nbParPage ) {
			this.nbPage = Math.ceil(this.nbLigne/this.nbParPage);
			this.numPageCourante = Math.ceil(this.nbDebut/this.nbParPage)+1;
		}

		if ( this.nbPage>1 ) {
			html += '<div class="element"><div id="choixPageArticle">' ;
			html += '<div class="item" style="width: 11px;">' ;
			if ( this.nbDebut ) {
				html += '<a href="#" onclick="dt.setNbDebut('+(this.nbDebut-this.nbParPage)+');dt.affiche();return false;" title=""><img src="' + _jspath['images'] + 'site/liste_article_prec.gif" alt="" /></a>' ;
			} else {
				html += '&nbsp;' ;
			}
			html += '</div>' ;
			html += '<div class="item">[</div>' ;
			for ( var i=1;i<=this.nbPage;i++ ) {
				sClass = (this.numPageCourante==i) ? ' select' : '' ;
				html += '<div class="item' + sClass + '">' ;
				if ( i!=this.numPageCourante ) {
					html += '<a href="#" onclick="dt.setNbDebut('+((i-1)*this.nbParPage)+');dt.affiche();return false;">' ;
				}
				html += i ;
				if ( i!=this.numPageCourante ) {
					html += '</a>' ;
				}
				html += '</div>' ;
			}
			html += '<div class="item">]</div>' ;
			html += '<div class="item" style="width: 11px;">' ;
			if ( (this.nbLigne>this.nbParPage) && (this.nbDebut < this.nbLigne-this.nbParPage)) {
				html += '<a href="#" onclick="dt.setNbDebut('+(this.nbDebut+this.nbParPage)+');dt.affiche();return false;" title=""><img src="' + _jspath['images'] + 'site/liste_article_suiv.gif" alt="" /></a>' ;
			} else {
				html += '&nbsp;' ;
			}
			html += '</div></div></div>' ;
		}
		return html ;
	}

	this.initScroll = function () {
		var oTable = document.getElementById('scroll').getElementsByTagName('table')[0] ;
		if ( oTable && oTable.offsetWidth > 380 ) {
			document.getElementById('scroll').style.width = '380px' ;
		}
	}

	/* Affichage Tableau Entier */
	this.affiche = function(){

		var nbLigne = this.getLigneAffichees() ;
		this.setNbLigne(nbLigne) ;

		document.getElementById('fixe').innerHTML = this.afficheEntete().fixe+this.afficheLignes().fixe;
		document.getElementById('scroll').innerHTML = this.afficheEntete().scrollable + this.afficheLignes().scrollable;
		document.getElementById('pagination').innerHTML = this.affichePagination() ;

		this.initScroll() ;
	}
}