/* Made by Ben, www.ai-development.com, 2007 */
/* 
	<script src="bloom.js" type="text/javascript"></script>
	<link href='CSSGallery.css' rel='stylesheet' type='text/css' />
	<img src="gallery/thumbs/pic.jpg" name="" alt="" onclick="gallery.bloom(src, asSet, container, picName)" />
*/
var gallery = new gallery();
window.onload = function(){	gallery.setUp();}
function gallery()
{
	/*--- Config ---*/var folder = 'gallery/pic/'; //folder of your large pictures
	var time;//interval to check picture loading
	var imagePrev = new Image();
	var image = new Image();//image holder
	image.onload = function(){time = window.setInterval("this.charge()",300); if(isPartSet == true) preload();}
	var imageNext = new Image();
	var isPartSet = true;
	var imgName;
	var imgNum;//Number of the current image
	var arrElements; //Array  of the pictures in the div container
	var intElements; //nb Pictures in container;
	var bloomOp = new opacity();//opacity manager object
	/*@cc_on
		/*@if (@_jscript)
			this.ie = (document.all && !window.opera) ? true : false;
		/*@else @*/
			this.ie = false;
		/*@end
	@*/
	this.ie7 = (this.ie && window.XMLHttpRequest);
	//add gallery divs at the end of the body
	this.setUp = function()
	{
		var objBody = document.getElementsByTagName("body").item(0);
		var objOverlay = document.createElement("div");
			objOverlay.setAttribute('id','bg');
			if ((this.ie && !this.ie7) || (this.ie7 && document.compatMode == 'BackCompat')) 
			{
				objOverlay.style.position = 'absolute';
			}
			else objOverlay.style.position = 'fixed';
			objOverlay.style.display = 'none';
			if(this.ie) objOverlay.style.filter = 'alpha(opacity=50)';
			else objOverlay.style.opacity = '0.5';
			objBody.appendChild(objOverlay);
		var objBloom = document.createElement("div");
			objBloom.setAttribute('id','bloom');
			objBloom.style.display = 'none';
			objBody.appendChild(objBloom);
		var objTitle = document.createElement("div");
			objTitle.setAttribute('id','title');
			objBloom.appendChild(objTitle);
		var objCloseImg = document.createElement("img");
			objCloseImg.setAttribute('src', 'gallery/close.jpg');
			objTitle.appendChild(objCloseImg);
		var objImgName = document.createElement("span");
			objImgName.setAttribute('id', 'imgName');
			objTitle.appendChild(objImgName);
		var objImgHolder = document.createElement("div");
			objImgHolder.setAttribute('id','imgHolder');
			objBloom.appendChild(objImgHolder);
		var objImg = document.createElement("img");
			objImg.setAttribute('id','image');
			if(this.ie) objImg.style.filter = 'alpha(opacity=0)';
			else objImg.style.opacity = '0';
			objImg.style.display = 'none';
			objImgHolder.appendChild(objImg);		
		var objNav = document.createElement("div");
			objNav.setAttribute('id','display');
			objBloom.appendChild(objNav);		
		var objPrevImg = document.createElement("img");
			objPrevImg.setAttribute('src', 'gallery/prevBtn.jpg');
			objPrevImg.setAttribute('id', 'prev');
			objPrevImg.setAttribute('alt', 'Previous');
			objPrevImg.onclick = function(){previous()};
			objNav.appendChild(objPrevImg);
		var objNextImg = document.createElement("img");
			objNextImg.setAttribute('src', 'gallery/nextBtn.jpg');
			objNextImg.setAttribute('id', 'next');
			objNextImg.setAttribute('alt', 'Next');
			objNextImg.onclick = function(){next()};
			objNav.appendChild(objNextImg);						
		var objCount = document.createElement("span");
			objCount.setAttribute('id', 'imgNumber');
			objNav.appendChild(objCount);
	}
	//Check if the picture is loaded and display it if it is
	charge = function()
	{
		if(image.complete)
		{
			window.clearInterval(time);
			displayPic();
		}
		else return false;
	}
	//launch the display
	this.bloom = function(src, asSet, container, picName)
	{
		if(picName) imgName = picName;
		else imgName = 'Gallery';	
		if(asSet == true)
		{
			getCurrentImg(src, container, 'img');
			positioning('bloom', 48, 48, 0);
		}
		else
		{
			isPartSet = false;
			positioning('bloom', 48, 48, 0);
			var arrayPath = src.split('/');
			image.src = folder+arrayPath[arrayPath.length-1];
			imgName = picName;
			setBloomDiv();
		}
	}	
	//diplay gallery div
	function setBloomDiv()
	{			
		document.getElementById('bg').style.display = '';
		document.getElementById('bloom').style.display = '';
		if(document.all && !window.XMLHttpRequest) document.getElementById('bg').style.top = document.documentElement.scrollTop+'px';
	}	
	//add the picture in the div and start to increase it opacity
	function displayPic()
	{
		positioning('bloom', image.height, image.width, 0);		
		document.getElementById('bloom').style.width = image.width+'px';
		if(isPartSet)
		{
			document.getElementById('bloom').style.height = image.height+40+'px';
		}
		else 
		{
			document.getElementById('bloom').style.height = image.height+20+'px';
		}
		//document.getElementById('bloom').style.display = '';
		document.getElementById('title').onclick = function(){fetch()};
		document.getElementById('image').onclick = function(){fetch()};
				
		if(document.all && !window.XMLHttpRequest)
		{
			document.getElementById('bg').style.top = document.documentElement.scrollTop+'px';
		}
				
		document.getElementById('image').src = image.src;
		document.getElementById('image').style.display = '';		
		bloomOp.upOpacity('image', 1);		
		document.getElementById('image').style.marginTop = '0';		
		document.getElementById('title').style.display = 'block';
		document.getElementById('imgName').innerHTML = imgName;
		if(isPartSet)
		{
			document.getElementById('display').style.display = 'block';
			document.getElementById('imgNumber').innerHTML = 'image '+(imgNum+1)+' of '+intElements;
		}
	}
	//Get the number of the current picture in the picture table
	function getCurrentImg(src,container,element) 
	{	
		var strContainer = document.getElementById(container);
		arrElements = strContainer.getElementsByTagName(element);
		intElements = arrElements.length;
		imgNum = 0;
		while((arrElements[imgNum].src != src) && (imgNum < intElements)){imgNum++;}
		changePic();
	}		
	function changePic()
	{
		if(document.all){document.getElementById('image').filters.alpha.opacity = 0;}
		else {document.getElementById('image').style.opacity = 0;}
		bloomOp.clearTimeInterval();
		var arrayPath = arrElements[imgNum].src.split('/');
		image.src = folder+arrayPath[arrayPath.length-1];
		setBloomDiv();
	}	
	//preload previous and next picture
	function preload()
	{
		////Preload
		if(imgNum < intElements-1)//preload next picture if applicable
		{
			var arrayNext = arrElements[imgNum+1].src.split('/');
			imageNext.src = folder+arrayNext[arrayNext.length-1];
		}
		if(imgNum != 0)//preload previous picture if applicable 
		{
			var arrayPrev = arrElements[imgNum-1].src.split('/');
			imagePrev.src = folder+arrayPrev[arrayPrev.length-1];
		}
	}
	//move to next picture in the gallery
	next = function()
	{
		if(imgNum < intElements-1)
		{
			imgNum++;
			changePic();
		}
	}
	//move to previous picture in the gallery
	previous = function()
	{
		if(imgNum>0)
		{
			imgNum--;			
			changePic();
		}
	}
	//clear the holder of the picture (bloom div)
	function fetch()
	{
		bloomOp.clearTimeInterval();
		window.clearInterval(time);
		if(document.all){document.getElementById('image').filters.alpha.opacity=0;}
		else {document.getElementById('image').style.opacity = 0;}
		document.getElementById('image').style.display = 'none';
		document.getElementById('bg').style.display = 'none';
		document.getElementById('title').style.display = 'none';
		document.getElementById('display').style.display = 'none';
		document.getElementById('image').style.marginTop = '20px';
		document.getElementById('bloom').style.display = 'none';
		document.getElementById('bloom').style.height = '40px';
		document.getElementById('bloom').style.width = '40px';
		isPartSet = true;
	}
	//put an element in the centre of the screen
	function positioning(element, height, width, moreHeight)
	{
		if(document.all)
		{
			document.getElementById(element).style.left = (document.documentElement.offsetWidth/2) - (width/2)+document.documentElement.scrollLeft+'px';
			document.getElementById(element).style.top = (document.documentElement.offsetHeight/2) - ((height+moreHeight)/2)+document.documentElement.scrollTop+'px';
		}
		else
		{
			document.getElementById(element).style.left = (window.innerWidth - width)*0.5+'px';
			document.getElementById(element).style.top = ((window.innerHeight - (height+moreHeight))/2+window.pageYOffset)+'px';
		}
	}
}
//Class manager of the opacity; can change the opacity of an object until it reach the end value;
function opacity()
{
	var o = 0;
	var timeOp;//timer for opacity thread
	this.upOpacity = function upOpacity(id, end)
	{
		timeOp = setInterval('this.increaseOp(\''+id +'\', '+end+')', 60);
	}	
	increaseOp = function(id, end)
	{
		if(o > end)
		{
			window.clearInterval(timeOp);
			if(document.all){document.getElementById(id).filters.alpha.opacity=o*100;}
			else {document.getElementById(id).style.opacity = o;}
			o = 0;
		}
		else
		{
			o = o+0.08;
			if(document.all){document.getElementById(id).filters.alpha.opacity=o*100;}
			else {document.getElementById(id).style.opacity = o;}
		}
	}	
	this.clearTimeInterval = function()
	{
		window.clearInterval(timeOp);
		o = 0;
	}	
}
/* Made by Ben, www.ai-development.com, 2007 */
