///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
// vignette_bank.js
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////

function oVignetteBank()
{
	this.nbVignette = -1;
	this.displayType = 0;
	this.timerON = false;
	this.lastScrollTime = 0;
	this.lastScrollPos = 0;
	this.redSquare = false;
	this.displayMode = 'big';
	this.tVignette = [];
    this.keepHighLight = null;
	this.oHighlight = null;
	this.htmlObj = null;
}

function GVB_LoadVignette(aVignBnk)
{
	var result = aVignBnk;
	//var result = initVignBnk;
	//var result = window.oAjax.Ajax('LoadVignette');
	var tRes = eval(result);
	this.nbVignette = tRes[0];
	var v;
//	debug(tRes);
    this.tVignette = [];
	for (v = 0 ; (v < this.nbVignette) ;  v++)
		this.tVignette[v] = new oVignette(tRes[1][v]);
}
oVignetteBank.prototype.LoadVignette = GVB_LoadVignette;

// Petite bidouille pour Ie !!! pas glop.
function GVB_SetImages()
{
	var v, again = false;
	var nbl = 0;
	var nbx = 0;
	var info = this.tVignette.length;
	for (v = 0 ; v < this.tVignette.length ; v++)
	{
		if (this.tVignette[v].loaded)
			nbl++;
		else if (this.tVignette[v].load)
		{
			if (this.tVignette[v].image.complete)
			{
				var im = getObj('imgb' + v);
				if (im)
				{
				    if (this.tVignette[v].type == 'V')
    					im.src = window.rsc_localpath + partnerName + '/p_video.gif';
				    else if (this.tVignette[v].type == 'P')
    					im.src = window.rsc_localpath + partnerName + '/p_photo.gif';
    				else
    					im.src = window.rsc_localpath + partnerName + '/p_photo.gif';
                    im.style.backgroundImage = 'url(' + window.oVignBnk.tVignette[v].url + ')';
					window.oVignBnk.tVignette[v].loaded = true;
				}
				nbl++;
			}
			else
				nbx++;
		}
	}
//	window.status = info + '-' + nbl + '-' + nbx;
	if (nbx > 0)
		window.setTimeout('window.oVignBnk.SetImages()', 500);
}
oVignetteBank.prototype.SetImages = GVB_SetImages;

/*
 * GVB_CheckStopScroll()
 * 
 * Cette methode est appel�e lrsque l'on arrete de bougr le scroll
 * Comme cet evenement n'existe pas on utilise la variable this.lastScrollTime
 * cette variable est r�initialis�e dans la methode StartScroll
 * L'affichage ne se fait que si une demi seconde s'est ecoul�e entre l'appel de StartScroll et celui de CheckStopScroll
 */
function GVB_CheckStopScroll()
{
	var base = new Date();
	var v;
	if (this.htmlObj == null)
		this.htmlObj = getObj('vign_bnk');

// on récupère dans le css la hauteur du div.
	var hdiv = parseInt(getCSSValue('div.fvign' + this.displayType, 'height'), 10);

// si il s'est ecoulé au moins une demi seconde et que le scroll a bougé !
	if (((base.getTime() - this.lastScrollTime) >= 500) && (this.htmlObj.scrollTop == this.lastScrollPos))
	{
// on coupe le timer.
// il sera réinitialisé par StartScroll au prochain déplacement de la scrollbar !!!
		this.timerON = false;

// on calcul les bornes.
// comme les images on du être affichées par StartScroll...
		var firstVign = Math.floor((this.htmlObj.scrollTop - hdiv)* this.nbVignette / this.htmlObj.scrollHeight);
		var lastVign = Math.ceil((this.htmlObj.scrollTop + this.htmlObj.clientHeight + hdiv) * this.nbVignette / this.htmlObj.scrollHeight);
		if (firstVign < 0) firstVign = 0;
		if (lastVign > this.nbVignette) lastVign = this.nbVignette;
// ...on se contente d'appeler la methode Load qui va indiqué que les images sont en cours de chargement si besoin.
		for (v = firstVign ; v < lastVign ; v++)
			this.tVignette[v].Load(v);

// on utilise une timer pour regarder si les images sont arrivées.
// j'ai fais ca car il y avait une couille sous IE lorsque j'utilisait la callback du chargement
// sauf que visiblement mathieu, lui, a réussi... il est fort ce Mathieu ;)
		window.setTimeout('window.oVignBnk.SetImages()', 500);
	}
	else
		window.setTimeout('window.oVignBnk.CheckStopScroll()', 200);
}
oVignetteBank.prototype.CheckStopScroll = GVB_CheckStopScroll;

/*
 * GVB_StartScroll()
 * 
 * Cette methode est appelée juste apres l'initialisation du la vignette bank.
 * Elle est egalement appelée chaque fois que l'on bouge la scroll bar
 * elle se charge de trouver toutes les images visible a l'ecran en fonction de la position de la scrollbar.
 * pour faire cela elle utilise la hauteur d'une vignette, lui permettant de trouver une approximation de
 * - la premiere vignette visible
 * - la derniere vignette visible
 * Une fois les bornes trouvées elle affiche les vignettes dont l'etat sera sans doute au depart (non charg�e)
 */
function GVB_StartScroll()
{
	if (this.htmlObj == null)
		this.htmlObj = getObj('vign_bnk');

// on r�cup�re dans le css la hauteur du div.
	var hdiv = parseInt(getCSSValue('div.fvign' + this.displayType, 'height'), 10);

// on conserve le temps et la position du scroll pour all�ger un poil le travail de la methode CheckStopScroll
	var base = new Date();
	this.lastScrollTime = base.getTime();
	this.lastScrollPos = this.htmlObj.scrollTop;

// Calcul des bornes des images
	var firstVign = Math.floor((this.htmlObj.scrollTop - hdiv)* this.nbVignette / this.htmlObj.scrollHeight);
	var lastVign = Math.ceil((this.htmlObj.scrollTop + this.htmlObj.clientHeight + hdiv) * this.nbVignette / this.htmlObj.scrollHeight);
	if (firstVign < 0) firstVign = 0;
	if (lastVign > this.nbVignette) lastVign = this.nbVignette;

// On affiche les images visible
	for (v = firstVign ; v < lastVign ; v++)
		this.tVignette[v].Display(v, this.displayType);

// puis on lance le timer car c'est la methode CheckStopScroll qui va remplacer les "loading" par les images d�finitives
	if (!this.timerON)
	{
		this.timerON = true;
		window.setTimeout('window.oVignBnk.CheckStopScroll()', 200);
	}
}
oVignetteBank.prototype.StartScroll = GVB_StartScroll;

function GVB_ReSize(mode)
{
	this.displayMode = mode;
	if (this.htmlObj == null)
		this.htmlObj = getObj('vign_bnk');

	if (this.displayMode == 'small')
	{
		if (this.htmlObj){
     		this.htmlObj.className = 'sml_bnk';
     		var mediumInfo = $('mediuminfo')
     		if (mediumInfo) {
     		  mediumInfo.removeClassName('small');
     		}
		}

	}
	else
	{
		if (this.htmlObj){
         	this.htmlObj.className = 'big_bnk';
          mediumInfo = $('mediuminfo')
     		  if (mediumInfo) {
     		    mediumInfo.addClassName('small');
     		  }
		}

	}
	this.SpecificDisplay();
	this.StartScroll();
}
oVignetteBank.prototype.ReSize = GVB_ReSize;

/*
 * function GVB_InitDisplay(dtype)
 * /in [integer] dtype : dtype specify le format d'affichage
 * 
 * Cette fonction initialize la vignette bank.
 * Elle crée les div en fonction du nombre de vignette à afficher.
 * Par contre elle ne remplit pas les div avec les informations des images.
 * Ce sont les fonction de scroll StartScroll et CheckStopScroll qui vont charger uniquement
 * les images visible à l'ecran.
 */
function GVB_InitDisplay(dtype)
{
	var v;
	var x, y, html, cci, img, iname, inote, isize;
	htmlBig = '';
	htmlSml = '';
	html = '';
	this.displayType = dtype;

// this.tVignette contient la liste complète des vignettes retournée par la methode LoadVignette
// On crée alors tous les div en leur donnant le style fvign{dtype} qui fournit leur hauteur entre autre
// REM : ces style sont les le fichier public/stylesheet/lightbox.css
	for (v = 0 ; v < this.tVignette.length ; v++)
	{
		this.tVignette[v].pos = v;
		this.tVignette[v].drawed = false;
		html += "<div class='fvign" + this.displayType + "' id='b" + v + "'></div>";
	}

// c'est parti on crée le code HTML de la vignette bank
	if (this.htmlObj == null)
		this.htmlObj = getObj('vign_bnk');
  	this.htmlObj.innerHTML = html;
	
	this.SpecificDisplay();
}
oVignetteBank.prototype.InitDisplay = GVB_InitDisplay;

/*
 * function GVB_SpecificDisplay()
 * 
 * Cette method est appelée chaque fois que le rendu des vignettes est modifié i.e:
 * - Initialisation de la VignetteBank
 * - Modification de la taille de la VignetteBank
 * - Changement de displayType
 * 
 * Son but est d'apporter une modification sur le rendu des vignettes. Typiquement, l'alternance des couleurs ligne par ligne ou pour fabriquer un damier.
 */
function GVB_SpecificDisplay()
{
	switch(this.displayType)
	{
	case 0:
	case 1:
	case 2:
		break;
	case 3:
	case 4:
		var tClass = ['fvign3a', 'fvign3b'];
		//var sClass = 1;
		var flag = 0; //
		var hVign = 0;
		for (var v = 0 ; v < this.tVignette.length ; v++)
		{
			var oV = getObj('b' + v);
			//var tPos = getAbsoluteOffset(oV);
			//if (tPos[1] != hVign)
			//{
			//	hVign = tPos[1];
			//	sClass = 1 - sClass;

			if (flag == 1){ //
				flag = 0 //
			} //
			else{ //
				flag = 1; //
			} //
			//oV.className = tClass[sClass];
			oV.className = tClass[flag]; //
		}
		break;
	}
}
oVignetteBank.prototype.SpecificDisplay = GVB_SpecificDisplay;

function GVB_Display()
{
}
oVignetteBank.prototype.Display = GVB_Display;

function GVB_ChangeDisplayMode(mode)
{
    this.InitDisplay(mode);
    this.StartScroll();
    this.oHighlight = null;
    this.HighlightMedia();
    return false;
}
oVignetteBank.prototype.ChangeDisplayMode = GVB_ChangeDisplayMode;

function GVB_HighlightMedia(idvn)
{
    if ((idvn == null) && (this.keepHighLight != null))
        idvn = this.keepHighLight;

	if (this.oHighlight)
	{
		if (getObj('b' + this.oHighlight.pos))
		{
			var className = getObj('b' + this.oHighlight.pos).className;
			className = className.replace(/fvignmov/g, 'fvign');
			getObj('b' + this.oHighlight.pos).className = className
		}
		this.oHighlight = null;
	}

	for (var v = 0 ; v < this.tVignette.length ; v++)
	{
		if (this.tVignette[v].idvign == idvn)
		{
			this.oHighlight = this.tVignette[v];
           	this.keepHighLight = idvn;
			if (getObj('b' + this.oHighlight.pos))
			{
				var className = getObj('b' + this.oHighlight.pos).className;
				className = className.replace(/fvign/g, 'fvignmov');
				getObj('b' + this.oHighlight.pos).className = className
			}
			return;
		}
	}
}
oVignetteBank.prototype.HighlightMedia = GVB_HighlightMedia;

window.oVignBnk = new oVignetteBank();
