/*
 * Note:
 * The array named "Pictures" was generated by the PHP code and contains all available pictures
 * Additionally the PHP generates the preview container and sets the idīs of each preview images "prev0", "prev1", ....
*/
var firstPrev = 0;
var stepsPrev = 5;
var pageCurr = 1;
var pageMax;
var presentShownImage=0;
var obj;
var ImgPreload = new Array(5);
var ImgPreviewPreload = new Array(5);
var pagesize;
var onloadstatus = 0;
window.onload=function(){

	if( document.getElementById('gallery') )
	{
		var pagesize = getPageSize();
		var pageInformation = document.getElementById('pageInformation');
		var gallery = document.getElementById('gallery');
		gallery.style.height = (pagesize[1] + 'px');
		gallery.style.width = (pagesize[2] + 'px');
	
		// data for page selection bar
		pageMax = Math.ceil(Pictures.length/stepsPrev); 
		// hide jump to left button because the first call shows the first image
	   	document.getElementById('jumpLeft').style.visibility = 'hidden';
		pageInformation.innerHTML = pageCurr +" / "+ pageMax;
		
		// preload first page of preview images
		for(i=0; i<stepsPrev; i++)
		{
			ImgPreviewPreload[firstPrev+i] = new Image();
			ImgPreviewPreload[firstPrev+i] = "/images/gallery.php?img="+ Pictures[firstPrev+i] +"&_w=130&_h=110&q=95";
		}
		onloadstatus = 1;
	}
}
function nextImg()
{
	// shows the next image - occured by clicking the image
	// if the the picture is from the next preview picture site also forward the preview page
	if( (presentShownImage+1) == stepsPrev && pageCurr == pageMax )
	{
		// reached end of gallery
	}
	else if( (presentShownImage+1) == stepsPrev )
	{
		presentShownImage=0;
		previewJumpRight();
		switchImg(document.getElementById( 'prev0' ));
	}
	else
		switchImg(document.getElementById( 'prev'+(presentShownImage+1) ));

}
function previewJumpRight()
{
	// jump to the next Preview Pictures
	firstPrev+=stepsPrev;
	pageCurr++;
	document.getElementById('jumpLeft').style.visibility = 'visible';
	if( pageCurr == pageMax )
		document.getElementById('jumpRight').style.visibility = 'hidden';		
	else
		document.getElementById('jumpRight').style.visibility = 'visible';		

	presentShownImage=-1;
	buildPreview();
}
function previewJumpLeft()
{
	// jump to the Preview Pictures before
	firstPrev-=stepsPrev;
	pageCurr--;
	document.getElementById('jumpRight').style.visibility = 'visible';
	if( pageCurr == 1 )
		document.getElementById('jumpLeft').style.visibility = 'hidden';		
	else
		document.getElementById('jumpLeft').style.visibility = 'visible';		

	presentShownImage=-1;
	buildPreview()
}
function buildPreview()
{
	// change the shown preview images
	// depends just on the "firstPrev" value
	for( i=0; i<stepsPrev; i++ )
	{
		if( Pictures[firstPrev+i] )
		{		
			if( ImgPreviewPreload[firstPrev+i] )
				document.getElementById('prev'+i).src = ImgPreviewPreload[firstPrev+i];
			else
				document.getElementById('prev'+i).src = "/images/gallery.php?img="+ Pictures[firstPrev+i] +"&_w=130&_h=110&q=95";

			document.getElementById('prev'+i).style.visibility = 'visible';	
			document.getElementById('prev'+i).name="/images/gallery.php?img="+ Pictures[firstPrev+i] +"&_w=800&_h=500&q=95";
			
			// mark the image if it is presently selected
			if( document.getElementById('prev'+i).name == document.getElementById('presentImg').name )
				document.getElementById('prev'+i).className='prevActive';
			else
				document.getElementById('prev'+i).className='prevNoActive';
		}
		else
			document.getElementById('prev'+i).style.visibility = 'hidden';
	}
	for( i=0; i<stepsPrev; i++ )
	{	
		// preload next preview images - first initialisation made by init()
		ImgPreviewPreload[firstPrev+i+stepsPrev] = new Image();
		ImgPreviewPreload[firstPrev+i+stepsPrev] = "/images/gallery.php?img="+ Pictures[firstPrev+i+stepsPrev] +"&_w=130&_h=110&q=95";
	}
	
	var pageInformation = document.getElementById('pageInformation');
	pageInformation.innerHTML = pageCurr +" / "+ pageMax;
	
	return;
}
function switchImg(incomming)
{
	obj = incomming;
	var Img = document.getElementById('presentImg');

	// change the shown image to the selected
	Img.src = obj.name;
	Img.name = obj.name;

	// mark the selected image in the preview bar
	for( i=0; i<stepsPrev; i++ )
	{
		if( document.getElementById('prev'+i).name == obj.name )
		{
			presentShownImage = i;
			document.getElementById('prev'+i).className='prevActive';
		}
		else
			document.getElementById('prev'+i).className='prevNoActive';
	}
}
function init()
{
	if( onloadstatus == 0)
	{
		// if page could not fully loaded reset the init properties
		pagesize = getPageSize();
		var pageInformation = document.getElementById('pageInformation');
		var gallery = document.getElementById('gallery');
		gallery.style.height = (pagesize[1] + 'px');
		gallery.style.width = (pagesize[2] + 'px');
	
		// data for page selection bar
		pageMax = Math.ceil(Pictures.length/stepsPrev); 
		// hide jump to left button because the first call shows the first image
	   	document.getElementById('jumpLeft').style.visibility = 'hidden';
		pageInformation.innerHTML = pageCurr +" / "+ pageMax;
		onloadstatus = 1;
	}

	// show the image
	document.getElementById('imageview').style.visibility = 'visible';
    document.getElementById('gallery').style.display='block';

	buildPreview();
	return;
}
function showGallery()
{
	var select = document.getElementsByTagName("select");
	var flash = document.getElementsByTagName("object");
	var gallery_bg = document.getElementById('gallery_bg');
	var pagesize = getPageSize();

    gallery_bg.style.display='block';
    gallery_bg.style.height = (pagesize[1] + 'px');
    gallery_bg.style.width = (pagesize[2] + 'px');

	// Elements such as Selects and Flash must be hidden, because the layer can not overlay these
    for (i=0; i!=select.length; i++) {
		select[i].style.visibility = "hidden";
    }
    for (i=0; i!=flash.length; i++) {
		flash[i].style.visibility = "hidden";
    }
	init();
}
function closeGallery()
{
	var gallery = document.getElementById('gallery');
	var gallery_bg = document.getElementById('gallery_bg');
	var select = document.getElementsByTagName("select");
	var flash = document.getElementsByTagName("object");

	document.getElementById('imageview').style.visibility = 'hidden';
    gallery.style.display='none';
    gallery_bg.style.display='none';

	// Elements such as Selects and Flash must be visible again
    for (i=0; i!=select.length; i++) {
		select[i].style.visibility = "visible";
    }
    for (i=0; i!=flash.length; i++) {
		flash[i].style.visibility = "visible";
    }
}

//
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
//
function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}

	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}