﻿//
// vision_scale.js   ph. chappuis 2006-07
//
// ***********************************************************
	/*

	pour la partie opacite variable et imbrication des div :

	(C) www.dhtmlgoodies.com, June 2006
	This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.	
	Terms of use:
	You are free to use this script as long as the copyright message is kept intact. However, you may not
	redistribute, sell or repost it without our permission.
	www.dhtmlgoodies.com
	Alf Magne Kalleland

	pour le passage a 160 x 120 et la mise à l echelle des images sans deformation

	(C) http://philippe.chappuis.googlepages.com juillet 2006

	*/

// idee:  l objet image contient la taille de la source
// c est image.src qui declenche le load
// il faut attendre le chargement complet par le test image.complete

// wait_iok est INDISPENSABLE car les scripts du header se terminent APRES
// l affichage des objets du body  !!!! 
// 1.2 mega sur imageshack env 2 min !!
//
// ***********************************************************
//
// var globales 

window.status='Images en cours de chargement ...';

	var zw = 0;
	var zh = 0;
	var icur = 0;
	var iok = 0;
	var iretry = 0;

// traitement grandes images

	var iG = new Array();
	var igw = new Array();
	var igh = new Array();
	var igsrc = new Array();

	var ifirst = 0;

// legende avec url actives

	var regx = /(http:\/\/\S+)/g;
	var texto = ' ';


	var opacitySpeed = 4;	// Speed of opacity - switching between large images - Lower = faster 2
	var opacitySteps = 6; 	// Also speed of opacity - Higher = faster  6
	var slideSpeed = 8;	// Speed of thumbnail slide - Lower = faster  8 
	
	/* Don't change anything below here */
	var iw_largeImage = false;
	var iw_imageToShow = false;
	var iw_currentOpacity = 100;
	var iw_slideWidth = false;
	var iw_thumbTotalWidth = false;
	var iw_viewableWidth = false;
	
	var currentUnqiueOpacityId = false;
	var iw_currentActiveImage = false;
	var iw_thumbDiv = false;
	var iw_thumbSlideInProgress = false;
	
	var browserIsOpera = navigator.userAgent.indexOf('Opera')>=0?true:false;
	var dir_leftObj;
	var dir_rightObj;

	var ip1; /* rendre global path et obj evite de passer param avec setTimeout */
	var ip2;

//
// preparer tableau des grandes images
//

for (i=0; i<inb; i++)
{
iG[i] = new Image();
igsrc[i]='';

}

// mettre la premiere grande image

igsrc[0]=gr_image;


// petites images a afficher


icur=0;
iretry = 0;

var iObjx = new Array();
iObjx[icur] = new Image();

iObjx[icur].src=imsrc[icur];

window.status='Images en cours de chargement ...' + String(icur) + ' / ' + String(inb);

setTimeout('img_wait_load(icur)',500);


// attendre au plus 3 minutes

function img_wait_load(i)
{

if (!iObjx[i].complete )

	{
	if (iretry < 3600)
		{
		iretry = iretry + 1; 
		setTimeout('img_wait_load(' + i + ')',50);
		return;	
		}
	else
		{
		clearTimeout();
		alert(iObjx[i].src + ' n\'existe pas !');

		imw[i]=160; 
		imh[i]=120;


		}

	}
else
	{
	clearTimeout();
	img_scale(iObjx[i].width,iObjx[i].height);

	imw[i]=zw; 
	imh[i]=zh;


	}

// i traite


icur = i + 1;

if (icur < inb)
	{

	window.status='Images en cours de chargement ...' + String(icur) + ' / ' + String(inb);

	iretry = 0;
	iObjx[icur] = new Image();
	iObjx[icur].src=imsrc[icur];

	setTimeout('img_wait_load(' + icur +')',50);
	return;
	}

// fin des vignettes


// premiere grande image

clearTimeout();

window.status='Grande image en cours de chargement ...' + igsrc[0];

icur = 0;
iretry = 0;

iG[icur].src=igsrc[icur];

ifirst=0;
setTimeout('img_wait_gload()',500);

return;

}



// attention set_scale doit attendre la fin des scripts du header !!

function wait_iok()
{

if (iok==1)
	{
	clearTimeout();
	set_scale();
	document.getElementById('aloader').innerHTML='';
	return;
	}

setTimeout('wait_iok()',500);

}



function img_scale(wx,hx)
{

//


if (wx > 160)
{
	zh = Math.floor(((hx * 160.0) / wx) + 0.9 ) ;
	zw = 160.0;

}

if (hx > 120)
{
	zw = Math.floor(((wx * 120.0) / hx) + 0.9) ;
	zh = 120.0;
}


if (hx <= 120 && wx <= 160 )
	{
		zw = wx ;
		zh = hx ;
	}
	
if (zh > 120)
{
	zw = Math.floor( ((zw * 120.0) / zh) + 0.9 );
	zh = 120.0;
}

if (zw > 160)
{
	zh = Math.floor(((zh * 160.0) / zw) + 0.9);
	zw = 160.0;
}


}

function imgr_scale(wx,hx)
{

//


if (wx > 480)
{
	zh = Math.floor(((hx * 480.0) / wx) + 0.9 ) ;
	zw = 480.0;

}

if (hx > 360)
{
	zw = Math.floor(((wx * 360.0) / hx) + 0.9) ;
	zh = 360.0;
}


if (hx <= 360 && wx <= 480 )
	{
		zw = wx ;
		zh = hx ;
	}
	
if (zh > 360)
{
	zw = Math.floor( ((zw * 360.0) / zh) + 0.9 );
	zh = 360.0;
}

if (zw > 480)
{
	zh = Math.floor(((zh * 480.0) / zw) + 0.9);
	zw = 480.0;
}

}


// mettre a l echelle les images de la page

function set_scale()
{
	var ix;
	var s= '';

// vignettes

for (i=0; i< inb;i++)
{
	s =  'im' + String(i+1);

	ix = document.getElementById(s);
	ix.width = imw[i];   
	ix.height = imh[i];  
	ix.style.visibility = "visible";		
	

}

// grande image

	ix = document.getElementById('im00');
	ix.width = igw[icur];   
	ix.height = igh[icur];   
	ix.style.visibility = "visible";		


// initialisations variables de travail

	Main_init();

// message termine

	window.status = 'Images disponibles !';

}


// mise a l echelle et attente big image max 3 minutes 

function get_big_image()
{

// trouver le icur dans tableau des grandes images

for (i=0; i<inb; i++)
{
if (igsrc[i]=='')
	{
	igsrc[i] = ip1;
	icur=i;
	break;
	}

if (igsrc[i]==ip1)
	{
	icur=i;
	break;
	}
}

iretry = 0;

window.status='Image en cours de chargement ...' + igsrc[icur];

iG[icur].src=igsrc[icur];

setTimeout('img_wait_gload(icur)',50);

return;
}

function img_wait_gload()
{

if (!iG[icur].complete)
	{
	if (iretry < 3600)
		{
		iretry = iretry + 1;	
		setTimeout('img_wait_gload()',50);
		return;	
		}
	else
		{

		clearTimeout();
		alert(igsrc[icur] + ' n\'existe pas !');

		igw[icur]=480; 
		igh[icur]=360;


		}

	}
else
	{
	clearTimeout();
	img_gscale(iG[icur].width,iG[icur].height);

	igw[icur]=zw; 
	igh[icur]=zh;

	}

// ok terminer suite de showPreview si pas premiere fois

if (ifirst==0)
{

// signaler fin script du header

	iok = 1;
	ifirst=1;
	return;
}

clearTimeout();

showPreview2();

return;

}


function img_gscale(wx,hx)
{

//


if (wx > 480)
{
	zh = Math.floor(((hx * 480.0) / wx) + 0.9 ) ;
	zw = 480.0;

}

if (hx > 360)
{
	zw = Math.floor(((wx * 360.0) / hx) + 0.9) ;
	zh = 360.0;
}


if (hx <= 360 && wx <= 480 )
	{
		zw = wx ;
		zh = hx ;
	}
	
if (zh > 360)
{
	zw = Math.floor( ((zw * 360.0) / zh) + 0.9 );
	zh = 360.0;
}

if (zw > 480)
{
	zh = Math.floor(((zh * 480.0) / zw) + 0.9);
	zw = 480.0;
}

}


//- texte barre etat

function onmover()
{
	
	window.status = 'Cliquer pour visionner l\'image à droite';
	return ;
}

function onmout()		
{
	window.status = " ";
	return ;
}


/*   INITIALISATION */

function Main_init()
	{

// les fleches avant et arriere
		dir_leftObj = document.getElementById('iw_dir_left');		
		dir_leftObj.style.visibility='hidden';
		dir_rightObj = document.getElementById('iw_dir_right');	
		
		if (inb <= 6) {dir_rightObj.style.visibility='hidden';}


		dir_leftObj.style.cursor = 'pointer';	
		dir_rightObj.style.cursor = 'pointer';	
		dir_leftObj.onclick = moveThumbnails;
		dir_rightObj.onclick = moveThumbnails;
//
		iw_largeImage = document.getElementById('iw_largeImage').getElementsByTagName('img')[0];
// main sur grande image
		iw_largeImage.style.cursor = 'pointer';
// changer lien sur grande image
		iw_largeImage.onclick = call_img;
		
		var innerDiv = document.getElementById('iw_thumbs_inner');
		iw_slideWidth = innerDiv.getElementsByTagName('div')[0].offsetWidth;


		iw_thumbDiv = document.getElementById('iw_thumbs_inner');
		iw_thumbDiv.style.left = '0px';

		var subDivs = iw_thumbDiv.getElementsByTagName('div');
		iw_thumbTotalWidth = 0;
		for(var no=0;no<subDivs.length;no++){
			if(subDivs[no].className=='strip_of_thumbnails')iw_thumbTotalWidth = iw_thumbTotalWidth + iw_slideWidth;
		}

		iw_viewableWidth = document.getElementById('iw_thumbs').offsetWidth; 
		
		
		iw_currentActiveImage = iw_thumbDiv.getElementsByTagName('a')[0].getElementsByTagName('img')[0];
		iw_currentActiveImage.className='activeImage';
	}
	
// appel image plein ecran

function call_img()
{

var ax = document.getElementById('a00');
ax.title=texto;
ax.href=iw_largeImage.src;
return;
}

//
function moveThumbnails()
	{
// evite double click
		if(iw_thumbSlideInProgress)return;
		iw_thumbSlideInProgress = true;
//
		if(this.id=='iw_dir_left'){
			dir_rightObj.style.visibility='visible';
			if(iw_thumbDiv.style.left.replace('px','')/1>=0){
				dir_leftObj.style.visibility='hidden';
				iw_thumbSlideInProgress = false;
				return;
			}
			slideThumbs(slideSpeed,0);
			
		}else{
			dir_leftObj.style.visibility='visible';
			var left = iw_thumbDiv.style.left.replace('px','')/1;			
			if(iw_thumbTotalWidth + left - iw_slideWidth <= iw_viewableWidth){
				dir_rightObj.style.visibility='hidden';
				iw_thumbSlideInProgress = false;
				return;
			}	
			slideThumbs(-slideSpeed,0);
		}	
		
	}
	
	function slideThumbs(speed,currentPos)
	{
		var leftPos = iw_thumbDiv.style.left.replace('px','')/1;  
		currentPos = currentPos + Math.abs(speed);		
		leftPos = leftPos + speed;
		iw_thumbDiv.style.left = leftPos + 'px'; 
		if(currentPos < iw_slideWidth) {
						

					setTimeout('slideThumbs(' + speed + ',' + currentPos + ')',2);


						}
		else	{
			

			if(iw_thumbDiv.style.left.replace('px','')/1>=0)	{
				document.getElementById('iw_dir_left').style.visibility='hidden';
								}	
			var left = iw_thumbDiv.style.left.replace('px','')/1;		
			if(iw_thumbTotalWidth + left - iw_slideWidth <= iw_viewableWidth)
								{
				document.getElementById('iw_dir_right').style.visibility='hidden';
								}					
			iw_thumbSlideInProgress = false;
			}
	
	}
	
	function showPreview(imagePath,inputObj)
	{		
		if(iw_currentActiveImage){
			if(iw_currentActiveImage==inputObj.getElementsByTagName('img')[0])return;
			iw_currentActiveImage.className='';
		}
		iw_currentActiveImage = inputObj.getElementsByTagName('img')[0];
		iw_currentActiveImage.className='activeImage';

//
// mise a l echelle de la grande image sans deformation attraper la legende = title du a
//


		texto = inputObj.title;

		iretry=0; 
		ip1=imagePath; ip2=inputObj;
// load image

//		ix.src = ip1;
//		window.status=ix.src + ' en cours de chargement ...';
//		setTimeout("get_big_image()",2000);

		setTimeout('get_big_image()',1000);
//		get_big_image();

//
		
}
	function showPreview2()
	{

		window.status=' ';

		imagePath=ip1;
		inputObj=ip2;

		iw_imageToShow = imagePath;  
		var tmpImage = new Image();    /* ??? tmpImage inutile ? */
		tmpImage.src = imagePath;
//
	
		
		currentUnqiueOpacityId = Math.random();
		moveOpacity(opacitySteps*-1,currentUnqiueOpacityId);
	}
	
	function setOpacity()
	{
		if(document.all)
		{
			iw_largeImage.style.filter = 'alpha(opacity=' + iw_currentOpacity + ')';
		}else{
			iw_largeImage.style.opacity = iw_currentOpacity/100;
		}		

	}



	function moveOpacity(speed,uniqueId)
	{
		
		if(browserIsOpera){
			iw_largeImage.src = iw_imageToShow;
			return;
		}
		
		iw_currentOpacity = iw_currentOpacity + speed;
		if(iw_currentOpacity<=5 && speed<0){
		
			var tmpParent = iw_largeImage.parentNode; 
			iw_largeImage.parentNode.removeChild(iw_largeImage);
			iw_largeImage = document.createElement('img');

			tmpParent.appendChild(iw_largeImage);
			setOpacity();
//			iw_largeImage.src = iw_imageToShow;

//			iw_largeImage.src = ix.src;
			iw_largeImage.src = igsrc[icur]; 

//
// dimension sans deformation max 480 x 360 
//
			iw_largeImage.width=igw[icur]; iw_largeImage.height=igh[icur];


//
// legende
//
		document.getElementById("legende").innerHTML=texto.replace(regx,'<a href="$1" title="$1" target="_blank">$1</a>');

// main sur grande image
		iw_largeImage.style.cursor = 'pointer';
// changer lien sur grande image
		call_img();

			speed=opacitySteps;
		}
		if(iw_currentOpacity>=99 && speed>0)iw_currentOpacity=99;		
		setOpacity();	
		if(iw_currentOpacity>=99 && speed>0)return;		
		if(uniqueId==currentUnqiueOpacityId)setTimeout('moveOpacity(' + speed + ',' + uniqueId + ')',opacitySpeed);		

	}
