/* 
 * Ce fichier contient les fonctions necessaire pour l'affichage
 * conditionnel (Contenu Variable) d'element dependant de l'espace 
 * accessible.
 *
 * _______________________________________________________
 * | class="bcv"                                         |
 * |_______________________   _________________________  |
 * ||class="bcv-reference |   |class="bcv-source-999" |  |
 * ||                     |   |                       |  |
 * ||                     |   |                       |  |
 * ||                     |   |                       |  |
 * |-----------------------   -------------------------  |
 * |                                                     |
 * -------------------------------------------------------
 * 
 * bcv: Base Contenu Variable
 *  C'est l'element de base qui contient des elements devant etre
 *  affiche conditionnelement a l'espace disponible.
 * bcv-reference: 
 *  C'est l'element de reference pour determiner l'espace disponible.
 * bcv-source-999:
 *  Ou 999 doit etre remplace par la taille minimum necessaire qui
 *  doit etre disponible pour afficher cet element.
 *  
 * L'element "bcv-source-999" indique que l'espace minimum dont
 * il a besoin, a l'interieur de l'element "bcv" est de '999' pixel.
 * Pour calculer l'espace disponible dans "bcv" on se sert de: 
 * 1) La position droite de l'element "bcv-reference"; la position droite
 *         est calculer a partir de offsetLeft + clientWidth.
 * 2) La largeur de l'element "bcv" (clientWidth).
 *
 * NOTE: Ce module necessite le module "GetElement.js"
 */

var elementsBCV= new Array();
/* Constante pour trouver les elements de base des contenus variable */
var BCV_CLASSE= "bcv";
/* Constante pour trouver les elements references. */
var BCV_CLASSE_REF= "bcv-reference";
/* Constantes pour trouver les elements SUJET (ceux qui peuvent etre caches). */
var BCV_CLASSE_SUJET= "bcv-sujet-(\\d+)";
var BCV_CLASSE_SUJET_RE= new RegExp("(^| )"+BCV_CLASSE_SUJET+"( |$)");

/**
 * Initialise les elements pour lesquels on desire avoir un affichage 
 * optionnel de certain element selon l'espace disponible pour l'affichage.
 * Les classes a utiliser: 
 *     bcv: Element contenant un ou plusieurs elements affichable selon l'espace 
 *        disponible.
 *  bcv-reference: L'element "fix" servant a determiner l'espace restant
 *  bcv-sujet-<999>: L'element a affichage conditionnel; <999> est l'espace 
 *        en pixel minimum restant pour que cet element soit affiche.
 */
function InitialiseBCV() {
    // On trouve les elements pour lesquels on desire appliquer le comportement
    var elementsList= findElementsForClass(document, BCV_CLASSE);

    if ( elementsList && elementsList.length > 0) {
        for( var i= 0; i < elementsList.length; i++) {
            var elementContenant= elementsList[i];
            // On trouve l'element reference pour permettre de calculer l'espace restant.
            var elementsReference= findElementsForClass(elementContenant, BCV_CLASSE_REF);
			var elementReference= null;

            if ( elementsReference && elementsReference.length > 0) {
                elementReference= elementsReference[0];
			}

			var elementsSujet= findElementsForClass(elementContenant, BCV_CLASSE_SUJET);

			if ( elementsSujet && elementsSujet.length > 0) {

				for( var sujet= 0; sujet < elementsSujet.length; sujet++) {
					var resultat= BCV_CLASSE_SUJET_RE.exec( elementsSujet[sujet].className);
					if ( resultat && resultat.length==4) {
						var largeurMin= resultat[2];
						var elementSujet= elementsSujet[sujet];
						if ( elementReference) {
							elementSujet.crgl.bcvReference= elementReference;
						}
						elementSujet.crgl.bcvContenant= elementContenant;
						elementSujet.crgl.bcvLargeur= parseInt(largeurMin);
						elementsBCV.push( elementSujet);
					}
				}

			}
        }
    }

    TraiterBCV();    
}

/* Cette fonction sert a evaluer si les elements a affichage conditionnel 
 * doivent etre affiches ou non.
 */
function TraiterBCV() {
    if ( elementsBCV && elementsBCV.length > 0) {
        for( var i= 0; i < elementsBCV.length; i++) {
            var sujet= elementsBCV[i];
            
            if ( sujet.crgl && sujet.crgl.bcvReference) {
                var contenant= sujet.crgl.bcvContenant;
                var largeurContenant= contenant.clientWidth;
				var largeurRestante= largeurContenant;

				// Soit que l'espace disponible est evalue a partir
				// de l'element reference...
				var reference= sujet.crgl.bcvReference;
				var positionDroiteRef= (reference.offsetLeft?reference.offsetLeft:0) 
						+ (reference.clientWidth?reference.clientWidth:0);
				largeurRestante= largeurContenant - positionDroiteRef;
            
                if ( largeurRestante < sujet.crgl.bcvLargeur) {
                    if ( sujet.crgl.style.display!='none') {
                        sujet.crgl.bcvSavedDisplay= sujet.crgl.style.display;
                        sujet.crgl.style.display= 'none'
                    }
                } else if ( typeof(sujet.crgl.bcvSavedDisplay) != 'undefined') {
                    sujet.crgl.style.display= sujet.crgl.bcvSavedDisplay;
                } else {
                    sujet.crgl.style.display= '';
                }
            }
        }
    }
}

/* Initialisation des evenements... */
window['onload']= InitialiseBCV;
window['onresize']= TraiterBCV;
