
// ---------------------------------------------------------------------------------------------------- //

// options: some of them are overwritten in gallery.php !
var minWidth = 300;
var minHeight = 200;
var fmrg = 3; // cannot be less than 1
var fmrgOuter = 1;
var fmrgAdditional = 0;
var fmrgColor = "#FFFFFF";
var fmrgOuterColor = "#FFFFFF";
var footer = 20;
var info_correction = -4; // bottom position correction for info, name and x divs (can be negative)
var fadeTransTime = 250;
var show_bottom_navigation = true;
var show_hover_navigation = true;
var show_x_close = true;
var show_info = true;
var show_name = true;
var closeon_bk_click = true; // close gview on background click
var closeon_image_click = true; // close gview on image click
var name_method = "rev+title"; // name creation method: "title", "name", "rev", "rev+title" (attributes to extract name from); if none matches the string is used as it is
//var name_method = "title";
var categorize_by_rev = false; // gview loops only through links with the same rev attribute

// internal variables
var path_loader;
var path_spacer;
var optional_hide = ""; // additional objects to hide (php: OptionalHide)

var gviewStatus = 0;
var currentImage;
var loaderImage;
var galleryLoaderTimer;
var galleryResizeTimer;
var imgLinks = new Array();
var windowWidth;
var windowHeight;
var imgIsFirst;
var imgIsLast;
var leftArrowHeight;
var rightArrowHeight;
var hover_navigation_blocked = false;

leftArrowHeight = 64;
rightArrowHeight = 64;

windowWidth = $(document).width();
windowHeight = $(document).height();

$.each($.browser, function(i) {
  if($.browser.msie){
  	isIE = 1;
  }else{
  	isIE = 0;
  }
});

// ---------------------------------------------------------------------------------------------------- //

$.preloadControls = function() {
	$("<img>").attr("src", path_loader);
	$("<img>").attr("src", path_spacer);
	$("<img>").attr("src", path_gallery+"img/close.gif");
	$("<img>").attr("src", path_gallery+"img/right.gif");
	$("<img>").attr("src", path_gallery+"img/left.gif");
	$("<img>").attr("src", path_gallery+"img/left_arrow.png");
	$("<img>").attr("src", path_gallery+"img/right_arrow.png");
	}

$.preloadImages = function() {
	for(var i = 0; i<imgLinks.length; i++) {
		$("<img>").attr("src", imgLinks[i]);
		}
	}

$.preloadImages_big = function() {
	for(var i = 0; i<preload_array_big.length; i++) {
		$("<img>").attr("src", preload_array_big[i]);
	}}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  //

function gviewCreate()
	{
//	var htmlgen = "<div id='gview'><a class='gview_button' id='gview_close'>X</a><img id='gview_img' src='' /><div id='gview_name'></div><div id='gview_info'>info</div></div>"+
//	"<div id='gview_bk'></div>"+
//	"<a class='gview_button' id='gview_left'><img src='"+path_gallery+"left.gif' /></a><a class='gview_button' id='gview_right'><img src='"+path_gallery+"right.gif' /></a>";

	var htmlgen = "<div id='gview_bk'></div>"+
	"<div class='gview_buttons nonselectableobject' id='gview_buttons' onselectstart='javascript:return false;'><div class='gview_bbox' id='gview_bbox'>"+
		"<a class='gview_button' id='gview_left'><img src='"+path_gallery+"img/left.gif' /></a>"+
		"<a class='gview_button' id='gview_close'><img src='"+path_gallery+"img/close.gif' /></a>"+
		"<a class='gview_button' id='gview_right'><img src='"+path_gallery+"img/right.gif' /></a>"+
	"</div></div>"+
	"<div id='gview_frame'>"+
		"<div id='gview' class='nonselectableobject' onselectstart='javascript:return false;'>"+
			"<div id='gview_nav_left'><a><img src='"+path_gallery+"img/left_arrow.png' /></a></div>"+
			"<div id='gview_nav_right'><a><img src='"+path_gallery+"img/right_arrow.png' /></a></div>"+
			"<img id='gview_img' src='"+path_spacer+"' />"+
			"<div id='gview_x' title='close'><a>X</a></div>"+
			"<div id='gview_name'>name</div>"+
			"<div id='gview_info'>info</div>"+
		"</div>"+
	"</div>";

	if ($("#gview_frame").length == 0) $("body").append(htmlgen);

	$("#gview_bk").css({
		"opacity": "0.8",
		"z-index": "17000"
		});
	$("#gview_nav_left a img").css({
		"opacity": "0.7"
		});
	$("#gview_nav_right a img").css({
		"opacity": "0.7"
		});
	$("#gview_nav_left").css({
		"z-index": "19100"
		});
	$("#gview_nav_right").css({
		"z-index": "19110"
		});
	$("#gview_frame").css({
		"z-index": "19000"
		});
	$("#gview_buttons").css({
		"z-index": "28000"
		});
	$("#gview_bbox").css({
		"z-index": "28100"
		});

//	$("#gview").css({
//		"opacity": "1"
//		});
//	$("#gview_nav_left").css({
//		"opacity": "0.8"
//		});
//	$("#gview_nav_right").css({
//		"opacity": "0.8"
//		});

	$("#gview_frame").supersleight({shim: path_gallery+"img/bk.gif"});

	}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  //

function gviewShow()
	{
	if (gviewStatus==0)
		{
		$("#gview_window").show();
		$("#gview_bk").fadeIn(fadeTransTime);
		$("#gview_frame").fadeIn(fadeTransTime);
		currentImage.fadeIn(fadeTransTime);
//		loaderImage.fadeIn("fast");

		if (show_bottom_navigation) $("#gview_buttons").fadeIn(fadeTransTime);

//		if (show_hover_navigation)
//			{
//			$("#gview_nav_left a").show();
//			$("#gview_nav_right a").show();
//			leftArrowHeight = $("#gview_nav_left a img").height();
//			rightArrowHeight = $("#gview_nav_right a img").height();
//			}
		$('#gview_left').hide();
		$('#gview_right').hide();
		$('#gview_nav_left a').hide();
		$('#gview_nav_right a').hide();

		$(optional_hide).hide();

		gviewStatus = 1;
		}
	else if (gviewStatus==2)
		{
		currentImage.fadeIn(fadeTransTime);
		gviewStatus = 1;
		}

	gviewCenter(currentImage);
	}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  //

function gviewCenter(imgObj){
	var imgWidth = imgObj.width();
	var imgHeight = imgObj.height();
	var gvWidth = imgWidth+fmrg*2;
	var gvHeight = imgHeight+fmrg*2;
//	var gvWidth = isIE?imgWidth+fmrg*2+4:imgWidth+fmrg*2+2;
//	var gvHeight = isIE?imgHeight+fmrg*2+4:imgHeight+fmrg*2+2;

	// TODO: next 2 lines causing severe problems
//	gvWidth = gvWidth>=minWidth?gvWidth:minWidth;
//	gvHeight = gvHeight>=minHeight?gvHeight:minHeight;

	windowWidth = $(window).width();
	windowHeight = $(window).height();
//	windowWidth = $("body").width();
//	windowHeight = $("body").height();
//	alert ($(document).height());


	if (show_name) $("#gview_name").css({
		"visibility": "visible",
		"bottom": "-"+($("#gview_name").height()-info_correction)+"px"
		});

	if (show_info) $("#gview_info").css({
		"visibility": "visible",
		"bottom": "-"+($("#gview_info").height()-info_correction)+"px"
		});

	if (show_x_close)
		{
		$("#gview_x").css({
			"visibility": "visible",
			"bottom": "-"+($("#gview_name").height()-info_correction)+"px"
//			"top": "-"+($("#gview_name").height())+"px"
			});

		$("#gview_info").css({
			"right": "30px"
			});
		}

//debugPrint(windowWidth/2-gvWidth/2-fmrgAdditional+", "+windowWidth+", "+gvWidth+", "+", "+", ");

	$("#gview_frame").css({
//		"left": windowWidth/2-gvWidth/2,
//		"right": windowWidth/2-gvWidth/2-fmrgAdditional,
		"top": (show_bottom_navigation)?(windowHeight/2-gvHeight/2-footer/2+fmrgOuter-$("#gview_buttons").height()/2):(windowHeight/2-gvHeight/2-footer/2+fmrgOuter),
//		"top": 40,
		"width": gvWidth+fmrgOuter*2,//+$("#gview_frame").attr("border-left-width")+$("#gview_frame").attr("border-right-width"),
		"height": gvHeight+fmrgOuter*2+((show_name||show_info||show_x_close)?$("#gview_name").height():0),
		"background-color": fmrgOuterColor
//		"left": windowWidth/2-imgWidth/2-fmrg,
//		"top": windowHeight/2-imgHeight/2-fmrg-footer/2
		});

//alert (gvHeight+fmrgOuter*2+((show_name||show_info||show_x_close)?$("#gview_name").height():0));

	$("#gview").css({
		"left": fmrgOuter,
		"top": fmrgOuter,
		"width": gvWidth,
		"height": gvHeight,
		"background-color": fmrgColor
		});

	imgObj.css({
		"top": ($("#gview").height()-imgObj.height())/2,
		"left": ($("#gview").width()-imgObj.width())/2
		});

	loaderImage.css({
		"top": ($("#gview").height()-loaderImage.height())/2,
		"left": ($("#gview").width()-loaderImage.width())/2
		});


//	$("#gview_bk").css({
//		"height": "100%"
//		"height": windowHeight
//		"width": windowWidth-3
//		});

	$("#gview_buttons").css({
		"left": windowWidth/2-$("#gview_buttons").width()/2
		});

	$("#gview_close").css({
		"left": $("#gview_buttons").width()/2-$("#gview_right").width()/2
		});


	if (show_hover_navigation) {
		$("#gview_nav_left").css({
			"width": gvWidth/2,
			"height": gvHeight,
			"z-index": "2011",
			"left": "0"
			});
	
		$("#gview_nav_right").css({
			"width": gvWidth/2,
			"height": gvHeight,
			"z-index": "2012",
			"right": "0"
			});

		$("#gview_nav_left a img").css({
			"left": "20px",
//			"z-index": "1005",
			"top": $("#gview_nav_left a").height()/2-leftArrowHeight/2
			});

		$("#gview_nav_right a img").css({
			"right": "20px",
//			"z-index": "1006",
			"top": $("#gview_nav_right a").height()/2-rightArrowHeight/2
			});
		}
	}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  //

function gviewClose(){
//	if(gviewStatus==1){
		$("#gview_bk").fadeOut(fadeTransTime);
		$("#gview_buttons").fadeOut(fadeTransTime);
		$("#gview_frame").fadeOut(fadeTransTime, function () {
			$("#gview_window").hide();
			$(optional_hide).show();
			});
		if (typeof(loaderImage) != 'undefined') loaderImage.hide();
		gviewStatus = 0;

		if (top.window.current_hash !== undefined) {
		  var as = top.window.current_hash.split("#");
		  if (as.length > 1 && as.indexOf("view") != -1) {
			as.splice(as.indexOf("view"), 1);
			top.window.hash_silentset (as.join("#"));
			}
		  }
//		}
	}  

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  //

function gviewNext(direction){
	if(gviewStatus==1)
		{
		for (var i=0; i<imgLinks.length; i++)
			{
			if (imgLinks[i].attr('href') == currentImage.attr('src'))
				{
				if (direction == "right" && i < imgLinks.length-1)
					{
					currentImage.fadeOut(fadeTransTime);
					gviewStatus = 2;
					loadImg (imgLinks[i+1]);
					}
				else if (direction == "left" && i > 0)
					{
					currentImage.fadeOut(fadeTransTime);
					gviewStatus = 2;
					loadImg (imgLinks[i-1]);
					}
				break;
				}
			}
		}
	}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  //

function loadImg (imgA) {
	var img = new Image();

//	loaderImage.fadeIn("slow");
	clearTimeout(galleryLoaderTimer);
	galleryLoaderTimer = setTimeout(function () {
		clearTimeout(galleryLoaderTimer);
		loaderImage.fadeIn("fast");
//		loaderImage.show();
		$('#gview_name').html("loading ...");
		$('#gview_info').html("");
		hover_navigation_blocked = true;
		}, 100);


	$(img)
		.load(function () {
			var newImg = $(this);

//			loaderImage.hide();
			clearTimeout(galleryLoaderTimer);
			loaderImage.hide();
//			loaderImage.fadeOut("fast");

			if (gviewStatus == 0) return (false);
			newImg.hide();
			$('#gview').append(newImg);
			newImg.attr('id', 'gview_img');

			switch (name_method) {
			  case "title": $('#gview_name').html(imgA.attr("title")); break;
			  case "name": $('#gview_name').html(imgA.attr("name")); break;
			  case "rev": $('#gview_name').html(imgA.attr("rev")); break;
			  case "rev+title": $('#gview_name').html(imgA.attr("rev")+imgA.attr("title")); break;
			  default: $('#gview_name').html(name_method); break;
			  }

//debugPrint("title: "+imgA.attr("title"));
//debugPrint("name: "+imgA.attr("name"));
//debugPrint("rev: "+imgA.attr("rev"));

			if (typeof(currentImage) != 'undefined') currentImage.remove();
			currentImage = newImg;

			if (categorize_by_rev) {
			  imgLinks.length = 0;
			  $("a[rel='thumbnail']").each(function(){
				if ($(this).attr('rev') == imgA.attr('rev')) imgLinks.push($(this));
				});
			  }


//			currentImage.click(function(){ gviewClose(); });
			for (var i=0; i<imgLinks.length; i++) {
				if (imgLinks[i].attr('href') == imgA.attr('href'))
					{
					if (imgLinks.length == 1)
						{
						imgIsFirst = true;
						imgIsLast = true;
						}
					else if (i == imgLinks.length-1)
						{
						imgIsFirst = false;
						imgIsLast = true;
						}
					else if (i == 0)
						{
						imgIsFirst = true;
						imgIsLast = false;
						}
					else
						{
						imgIsFirst = false;
						imgIsLast = false;
						}

					$('#gview_info').html((i+1)+" / "+imgLinks.length);
					break;
					}}

			$('#gview_left').show();
			$('#gview_right').show();

			if (imgIsFirst)
				{
				if (show_hover_navigation) $('#gview_nav_left a').hide();
				$('#gview_left').hide();
				}
			if (imgIsLast)
				{
				if (show_hover_navigation) $('#gview_nav_right a').hide();
				$('#gview_right').hide();
				}

			hover_navigation_blocked = false;

			gviewShow();
			gviewCenter(newImg);
			return (false);
			})
		.attr('src', imgA.attr("href"))
		.error(function () {});
//		.error(function () {alert ("error encountered: load trigger unsuccessful")});
	}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  //

function firstLoadImg (imgStart) {
	hover_navigation_blocked = true;

//		$("body").css ({
//		  "overflow":"hidden"
//		  });

//	currentImage.css({
//		"width": "300px",
//		"height": "200px"
//		});

	loaderImage.show();
	gviewShow();
	gviewCenter(currentImage);

	gviewStatus = 2;
	if (typeof(currentImage) != 'undefined') currentImage.remove();
	loadImg (imgStart);
	}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  //

function onResize () {
	if (gviewStatus != 0)
		{
		gviewCenter(currentImage);
//		alert ("resize");
		}
	}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  //

function initGallery () {
	gviewCreate();

	var ltimg = new Image();
	$(ltimg)
		.load(function () {
			return (false);
			})
		.attr('src', path_loader)
		.error(function () {});

	currentImage = $('#gview_img');

	loaderImage = $(ltimg);
	$('#gview').append(loaderImage);
	loaderImage.attr('id', 'gview_loader');
//	$('#gview_name').html("loading ...");
//	$('#gview_info').html("");


	$(".gview_button").hover(
		function () { 
			$(this).css({
				"backgroundColor": "#CCC"
			});
		}, 
		function () {
			$(this).css({
				"backgroundColor": "#FFF"
			});
		}
    );

	if (show_hover_navigation)
		{
		$("#gview_nav_left").hover(
			function () { 
//				if (! imgIsFirst) $('#gview_nav_left a').fadeIn("fast");
				if (! imgIsFirst && ! hover_navigation_blocked) $('#gview_nav_left a').show();
			}, 
			function () {
//				$('#gview_nav_left a').fadeOut("fast");
				$('#gview_nav_left a').hide();
			}
    	);

		$("#gview_nav_right").hover(
			function () { 
//				if (! imgIsLast) $('#gview_nav_right a').fadeIn("fast");
				if (! imgIsLast && ! hover_navigation_blocked) $('#gview_nav_right a').show();
			}, 
			function () {
//				$('#gview_nav_right a').fadeOut("fast");
				$('#gview_nav_right a').hide();
			}
    	); 
	}

	$("#gview_nav_left").click(function(e){ gviewNext("left"); e.stopPropagation(); });
	$("#gview_nav_right").click(function(e){ gviewNext("right"); e.stopPropagation(); });
	$("#gview_left").click(function(e){ gviewNext("left"); e.stopPropagation(); });
	$("#gview_right").click(function(e){ gviewNext("right"); e.stopPropagation(); });
	$("#gview_close").click(function(e){ gviewClose(); });
	$("#gview_x a").click(function(e){ gviewClose(); });
	if (closeon_bk_click) $("#gview_bk").click(function(e){ gviewClose(); });
	if (closeon_image_click) $("#gview_frame").click(function(e){ gviewClose(); });
	if (show_bottom_navigation || show_hover_navigation) $(document).keypress(function(e){
		if (e.keyCode==27 && gviewStatus==1) gviewClose();
		if (e.keyCode==37 && gviewStatus==1) gviewNext("left");
		if (e.keyCode==39 && gviewStatus==1) gviewNext("right");
		if (gviewStatus==1) event.preventDefault();
		});
	else $("#gview_frame").click(function(){ gviewClose(); });

	$("a[rel='thumbnail']").click(function(event) {
		event.preventDefault();
		if ($(this).attr("rel") == "thumbnail")
			{
			firstLoadImg ($(this));

			if (top.window.current_hash !== undefined) {
			  var as = top.window.current_hash.split("#");
			  if (as.length > 1 && as.indexOf("view") != -1) {
				as.splice(as.indexOf("view"), 1);
				}
			  top.window.hash_silentset (as.join("#")+'#view');
			  }

			}
		});
	}

// ---------------------------------------------------------------------------------------------------- //

$(document).ready(function(){

//	$.preloadControls();
	initGallery();

//	$.preloadImages_big();
//	$.preloadImages();

	if ($('#thumbs_loader').length == 0) {
		$('#thumbs_box').show();
		}

	$("a[rel='thumbnail']").each(function(){ 
		imgLinks.push($(this));
   	    });

	$(window).load(function(){

		$(window).bind('resize', function() {
		    if (galleryResizeTimer) clearTimeout(galleryResizeTimer);
    		galleryResizeTimer = setTimeout(onResize, 100);
			});

////		$('#thumbs_box').hide();
////		$('#gview_buttons').hide();

		$('#thumbs_loader').hide();
		$('#thumbs_box').fadeIn('fast');
		});

	});

// ---------------------------------------------------------------------------------------------------- //

function debugPrint (debugString) {
	var debugConsoleHTML = "<div id='debug_window' class='debug_window'>"+
	"</div>";

	if (! $("#debug_window").length) {
		$("body").append(debugConsoleHTML);
		}

	$("#debug_window").append("<p>"+debugString+"</p>");

	$("#debug_window p").siblings().css({"color":"#000"});
	$("#debug_window").scrollTop(10000);
	$("#debug_window p:last-child").css({"color":"#F00"});

	}

// ---------------------------------------------------------------------------------------------------- //

