/* ImagesSlideshow - nicely displays images
   Copyright (C) 2009 Wojciech Wiœniewski (mailbox@wojwis.com)

   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License
   as published by the Free Software Foundation; either version 2
   of the License, or (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/
var galleryviewer_webpageaddress = "http://www.wbp.olsztyn.pl/"; //address of webpage that contains images to display with ending '/'
var galleryviewer_imageschangeinterval = false; //pointer to interval for image changer
var galleryviewer_changeOpacityFunction; //function that changes opacity depending on browser
var galleryviewer_oktostartinterval = true; //indicator that previous interval of galleryviewer_changeOpacityFunction has finished. At this
                                            //moment none of browsers will alow to start next interval until previous wasn't finished, but
                                            //we cant be sure this behavior :)
/*
 galleryviewer_parameters - stores parameters for each gallery vievers (i is number of slideshow on page):
 [i][0] - containter where images from [i][1] are displayed taken from galleryviewer_imagescontainer
 [i][1] - array of addresses of images to be displayed in container [i][0] converted from galleryviewer_imagesdirectory
 [i][2] - array of two images to display in [i][0]
 [i][3] - time in miliseconds to display one image taken from variable galleryviewer_imagechangetime
 [i][4] - counter of time fo display image from [i][3], each interval (- 40 ms)
 [i][5] - opacity change step value
 [i][6] - opacity counter (current opacity value, if 0, and [i][4] < 0 start changing images)
 [i][7] - is image changing indicator - 0: enabling [i][2][0], disabling enabling [i][2][1]
                                        1: enabling [i][2][1], disabling enabling [i][2][0]
                                        2: initial start of image changing (start display first image)
 [i][8] - image to be next displayed from [i][1]
 [i][9] - are displaying images link to somewhere (true if galleryviewer_link defined)
 [i][10] - images "title" and "alt" properties (only "alt" if no galleryviewer_link defined)
 [i][11] - container width 
 [i][12] - container height
 */
var galleryviewer_parameters = new Array();

/*
 galleryviewer_imagescontainer - id of container that displays images
 galleryviewer_imagestitle - images "title" and "alt" properties (only "alt" if no galleryviewer_link defined)
 galleryviewer_link - link to where images point to (if required)
 galleryviewer_imagesdirectory - directory on server that contains images
 galleryviewer_imageslist - list of coma separated thumbnails of images in "g_XX.jpg" format
 galleryviewer_imagechangetime - time in miliseconds to display one image
 */
var GalleryViewer = function(galleryviewer_imagescontainer, galleryviewer_imagestitle, galleryviewer_link, galleryviewer_imagesdirectory, galleryviewer_imageslist, galleryviewer_imagechangetime, galleryviewer_imageopacitychangesteps){
	var positioninarray = galleryviewer_parameters.length;
	galleryviewer_parameters[positioninarray] = new Array();

	galleryviewer_parameters[positioninarray][0] = document.getElementById(galleryviewer_imagescontainer);

	//Convert from galleryviewer_imageslist numbers to image source addresses
	galleryviewer_parameters[positioninarray][1] = galleryviewer_imageslist.split(',');
	for(var i in galleryviewer_parameters[positioninarray][1]) galleryviewer_parameters[positioninarray][1][i] = galleryviewer_webpageaddress + galleryviewer_imagesdirectory + "g_" + galleryviewer_parameters[positioninarray][1][i] + ".jpg";

	galleryviewer_parameters[positioninarray][11] = galleryviewer_parameters[positioninarray][0].offsetWidth;
	galleryviewer_parameters[positioninarray][12] = galleryviewer_parameters[positioninarray][0].offsetHeight;
	
	//Check if slideshow is linking to somewhere
	galleryviewer_parameters[positioninarray][9] = false;
	if(galleryviewer_link.length > 0){
		var gallerylink = document.createElement("a");
		gallerylink.setAttribute("href", galleryviewer_link);
		galleryviewer_parameters[positioninarray][0].appendChild(gallerylink);
		galleryviewer_parameters[positioninarray][0] = gallerylink;
		galleryviewer_parameters[positioninarray][9] = true;
	}

	galleryviewer_parameters[positioninarray][10] = galleryviewer_imagestitle;

	galleryviewer_parameters[positioninarray][2] = new Array();
	for (var i in new Array(0,1)){
		galleryVieverCreateImage(positioninarray, i, i);
		galleryviewer_parameters[positioninarray][0].appendChild(galleryviewer_parameters[positioninarray][2][i]);
	}

	galleryviewer_parameters[positioninarray][3] = galleryviewer_imagechangetime;
	galleryviewer_parameters[positioninarray][4] = 0;

	galleryviewer_parameters[positioninarray][5] = 100 / galleryviewer_imageopacitychangesteps;
	galleryviewer_parameters[positioninarray][6] = 0;

	galleryviewer_parameters[positioninarray][7] = 2;

	galleryviewer_parameters[positioninarray][8] = 1;

	if(!galleryviewer_imageschangeinterval) {
		if (document.all) galleryviewer_changeOpacityFunction = galleryVieverChangeOpacityIE;
		else galleryviewer_changeOpacityFunction = galleryVieverChangeOpacity;
		galleryviewer_imageschangeinterval = setInterval("galleryVieverImageChanger()",40);
	}
}

function galleryVieverImageChanger() {
	if(galleryviewer_oktostartinterval){
		galleryviewer_oktostartinterval = false; //lock interval to not do this loop several times at once
		for(var positioninarray in galleryviewer_parameters) {
			if(galleryviewer_parameters[positioninarray][4] <= 0) { //check timer counter
				if(galleryviewer_parameters[positioninarray][6] == 0) { //check opacity counter
					var areimagesloaded = true;
					for(var j in galleryviewer_parameters[positioninarray][2]) {
						if(!galleryviewer_parameters[positioninarray][2][j].complete) areimagesloaded = false;
					}
					if(areimagesloaded) {
						galleryVieverChangeOpacityParameters(positioninarray);

						if(galleryviewer_parameters[positioninarray][7] == 0) {
							galleryviewer_parameters[positioninarray][7] = 1;
							galleryviewer_changeOpacityFunction(galleryviewer_parameters[positioninarray][7], (galleryviewer_parameters[positioninarray][7]^1), positioninarray);
							galleryviewer_parameters[positioninarray][2][1].style.visibility="visible";
							gallerySlideshowCenterImage(positioninarray,1);
						} else if(galleryviewer_parameters[positioninarray][7] == 1) {
							galleryviewer_parameters[positioninarray][7] = 0;
							galleryviewer_changeOpacityFunction(galleryviewer_parameters[positioninarray][7], (galleryviewer_parameters[positioninarray][7]^1), positioninarray);
							galleryviewer_parameters[positioninarray][2][0].style.visibility="visible";
							gallerySlideshowCenterImage(positioninarray,0);
						} else {
							galleryviewer_parameters[positioninarray][7] = 0;
							galleryviewer_changeOpacityFunction(galleryviewer_parameters[positioninarray][7], (galleryviewer_parameters[positioninarray][7]^1), positioninarray);
							galleryviewer_parameters[positioninarray][2][0].style.visibility="visible";
							gallerySlideshowCenterImage(positioninarray,0);
						}
					}
				} else {
					galleryviewer_changeOpacityFunction(galleryviewer_parameters[positioninarray][7], (galleryviewer_parameters[positioninarray][7]^1), positioninarray);
					if(galleryviewer_parameters[positioninarray][6] == 100){
						galleryviewer_parameters[positioninarray][6] = 0;
						//Create new image
						galleryVieverCreateImage(positioninarray, galleryviewer_parameters[positioninarray][8], (galleryviewer_parameters[positioninarray][7]^1));
						//Replace current image by newly created element
						galleryviewer_parameters[positioninarray][0].replaceChild(galleryviewer_parameters[positioninarray][2][(galleryviewer_parameters[positioninarray][7]^1)], galleryviewer_parameters[positioninarray][0].getElementsByTagName("img")[(galleryviewer_parameters[positioninarray][7]^1)]);
						galleryviewer_parameters[positioninarray][8]++;
						if(galleryviewer_parameters[positioninarray][8] == galleryviewer_parameters[positioninarray][1].length) galleryviewer_parameters[positioninarray][8] = 0;

						galleryviewer_parameters[positioninarray][4] = galleryviewer_parameters[positioninarray][3];
					}
				}
			}
		}
		galleryviewer_oktostartinterval = true;
	}
	for(var positioninarray in galleryviewer_parameters) {
		if(galleryviewer_parameters[positioninarray][4] > 0) galleryviewer_parameters[positioninarray][4]-=40;
		else if(galleryviewer_parameters[positioninarray][6] > 0) galleryVieverChangeOpacityParameters(positioninarray);
	}
}

function gallerySlideshowCenterImage(positioninarray, imagenumber){
// 	var containerheight;
// 	var containerwidth;
// 	if (galleryviewer_parameters[positioninarray][9]){
// 		containerwidth = galleryviewer_parameters[positioninarray][0].parentNode.offsetWidth;
// 		containerheight = galleryviewer_parameters[positioninarray][0].parentNode.offsetHeight;
// 	} else {
// 		containerwidth = galleryviewer_parameters[positioninarray][0].offsetWidth;
// 		containerheight = galleryviewer_parameters[positioninarray][0].offsetHeight;
// 	}
// 
// 	galleryviewer_parameters[positioninarray][2][imagenumber].style.left = Math.round((containerwidth - galleryviewer_parameters[positioninarray][2][imagenumber].width)/2) +"px";
// 	galleryviewer_parameters[positioninarray][2][imagenumber].style.top = Math.round((containerheight - galleryviewer_parameters[positioninarray][2][imagenumber].height)/2) +"px";
	
 	galleryviewer_parameters[positioninarray][2][imagenumber].style.left = Math.round((galleryviewer_parameters[positioninarray][11] - galleryviewer_parameters[positioninarray][2][imagenumber].width)/2) +"px";
 	galleryviewer_parameters[positioninarray][2][imagenumber].style.top = Math.round((galleryviewer_parameters[positioninarray][12] - galleryviewer_parameters[positioninarray][2][imagenumber].height)/2) +"px";

}


function galleryVieverCreateImage(positioninarray, imagenumber, imagetoreplace){
	galleryviewer_parameters[positioninarray][2][imagetoreplace] = document.createElement("img");
	galleryviewer_parameters[positioninarray][2][imagetoreplace].src = galleryviewer_parameters[positioninarray][1][imagenumber];
	galleryviewer_parameters[positioninarray][2][imagetoreplace].style.position = "absolute";
	galleryviewer_parameters[positioninarray][2][imagetoreplace].style.visibility = "hidden";
	galleryviewer_parameters[positioninarray][2][imagetoreplace].style.borderLeftWidth = "0px";
	galleryviewer_parameters[positioninarray][2][imagetoreplace].style.borderTopWidth = "0px";
	galleryviewer_parameters[positioninarray][2][imagetoreplace].style.borderRightWidth = "0px";
	galleryviewer_parameters[positioninarray][2][imagetoreplace].style.borderBottomWidth = "0px";
	galleryviewer_parameters[positioninarray][2][imagetoreplace].style.width = "auto";
	galleryviewer_parameters[positioninarray][2][imagetoreplace].style.height = "auto";
	galleryviewer_parameters[positioninarray][2][imagetoreplace].style.zIndex = "8";
	galleryviewer_parameters[positioninarray][2][imagetoreplace].setAttribute("alt", galleryviewer_parameters[positioninarray][10]);

	//Set different parameters if images are link to somewhere
	if(galleryviewer_parameters[positioninarray][9]){
		galleryviewer_parameters[positioninarray][2][imagetoreplace].setAttribute("title", galleryviewer_parameters[positioninarray][10]);
		if(galleryviewer_parameters[positioninarray][2][imagetoreplace].style.cursor) galleryviewer_parameters[positioninarray][2][imagetoreplace].style.cursor = "pointer";
	} else {
		galleryviewer_parameters[positioninarray][2][imagetoreplace].setAttribute("title", "");
		if(galleryviewer_parameters[positioninarray][2][imagetoreplace].style.cursor) galleryviewer_parameters[positioninarray][2][imagetoreplace].style.cursor = "default";
	}
}

function galleryVieverChangeOpacityParameters(positioninarray){
	galleryviewer_parameters[positioninarray][6] += galleryviewer_parameters[positioninarray][5];
	if (galleryviewer_parameters[positioninarray][6] > 100) galleryviewer_parameters[positioninarray][6] = 100;
}

function galleryVieverChangeOpacity(imagenumbertoenable, imagenumbertodisable, positioninparameters){
	galleryviewer_parameters[positioninparameters][2][imagenumbertodisable].style.opacity = Math.round(100-galleryviewer_parameters[positioninparameters][6])/100;
	galleryviewer_parameters[positioninparameters][2][imagenumbertoenable].style.opacity = Math.round(galleryviewer_parameters[positioninparameters][6])/100;
}

function galleryVieverChangeOpacityIE(imagenumbertoenable, imagenumbertodisable, positioninparameters){
	galleryviewer_parameters[positioninparameters][2][imagenumbertodisable].style.filter = "alpha(opacity="+ Math.round(100-galleryviewer_parameters[positioninparameters][6]) + ")";
	galleryviewer_parameters[positioninparameters][2][imagenumbertoenable].style.filter = "alpha(opacity="+ Math.round(galleryviewer_parameters[positioninparameters][6]) + ")";
}