/*
 * Thickbox 2.0 - One Box To Rule Them All.
 * Strongly modified by Karel Fučík 10/2006  
 * By Cody Lindley (http://www.codylindley.com)
 * Copyright (c) 2006 cody lindley
 * Licensed under the MIT License:
 *   http://www.opensource.org/licenses/mit-license.php
 * Thickbox is built on top of the very light weight jQuery library.
 */

tb = 
{
	imageArray: null,
	imageGroup:  false,
	currentImage: null,
	boxWidth: 400 + 40,
	boxHeight: 400 + 40,
	langcode: "cs",
	lang: {
		cs: { close: "Zavt", prev: "pedchoz", next: "dal" },
		en: { close: "Close", prev: "previous", next: "next" }
	},
	isHistory: false,
	oldHash: "",
	historyCount: 0,
	
	init: function()
	{
		$("a.thickbox").click(tb.clickLink);
		tb.langcode = $("html").attr("xml:lang");
		tb.oldHash = document.location.href;
		if(document.getElementById('TB_overlay')) $('#TB_window,#TB_overlay,#TB_HideSelect').remove(); 
		
		dhtmlHistory.initialize();  
	  	dhtmlHistory.addListener(tb.historyChange);
	},
	
	isOpen: function()
	{
		if(!document.getElementById("#TB_overlay")) return false;
		else return true; 
	},

	openBookmark: function()
	{
		var hash = window.location.hash;
		var re1=/(\w+)-(\w+)-(\d+)/;
		var result1 = hash.match(re1);
		if(result1[1] == "image") tb.goImage(result1[2], result1[3] - 1);
	},

	historyChange: function(newLocation, historyData)
	{
		if(historyData != null)
		{
			tb.currentImage = historyData.imageNumber;
			tb.isHistory = true;
			tb.historyCount = historyData.hisCount;
			tb.goImage(historyData.imageGroup, historyData.imageNumber);
			return true;
		}
		else 
		{
			tb.remove();
			return false;
		}
	},
	
	goImage: function(imgGroup, imgNumber)
	{
		tb.imageGroup = imgGroup;
		tb.currentImage = imgNumber;
		if(document.getElementById('TB_overlay')) $('#TB_window,#TB_overlay,#TB_HideSelect').remove(); 
		tb.showSkelet();

		//code to show images
		htmlPaging =  "<div id='TB_secondLine'><div id='prevnext'><a href='#' id='TB_prev' rel=''>" + tb.lang[tb.langcode]["prev"] + "</a><a href='#' id='TB_next' rel=''>" + tb.lang[tb.langcode]["next"] + "</a></div><div id='TB_pages'></div></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='" + tb.lang[tb.langcode]["close"] + "'>" + tb.lang[tb.langcode]["close"] + "</a></div><div class='break'></div><h2 id='TB_caption'></h2> <div id='TB_desc'></div> <a href='' id='TB_ImageOff' title='" + tb.lang[tb.langcode]["close"] + "'></a>";
		$("#TB_window").empty();
		$("#TB_window").append(htmlPaging);
		tb.positionBox();

		htmlPages = "";
		
		if(tb.imageGroup)
		{
			tb.imageArray = $("a[@rel= "+ tb.imageGroup + "]");
			tb.imageArray.each(function(i)
			{ 
				htmlPages += " <a href='#' rel='" + (i + 1) + "'>" + (i + 1) + "</a> ";
			});
			if(tb.imageArray.length > 1)
			{
				$("#TB_pages").append(htmlPages); 
				$("#TB_prev").click(tb.clickNumber);
				$("#TB_next").click(tb.clickNumber);
				$("#TB_pages a").click(tb.clickNumber);
			}
		}
		else return false;

		$("#TB_closeWindowButton").click(tb.close);
		tb.showImage(tb.currentImage);
		return false;
	},


	clickNumber: function()
	{
		tb.showImage(this.rel - 1);
		return false;
	},

	clickLink: function()
	{
		tb.imageGroup = this.rel || false;
		var urlString = /\.jpg|\.jpeg|\.png|\.gif/g;
		var urlType = this.href.toLowerCase().match(urlString);
		
		if(urlType)
		{
			//code to show images
			imageArray = $("a[@rel= "+ tb.imageGroup + "]");
			var href= this.href;
			var currentImage = 0;
			tb.history++;

			$("a[@rel= "+ tb.imageGroup + "]").each(function(i)
			{ 
				if(this.href == href) currentImage = i;
			});
			
			return tb.goImage(tb.imageGroup, currentImage);
		}
		else
		{
			//code to show html pages
		}

		return false;
	},

	showSkelet: function()
	{
		if(!tb.isOpen()) 
		{
			$("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>");
			$("#TB_overlay").click(tb.close);
			tb.overlaySize();
		}
	},
	
	zoomImage: function(img, zoom)
	{
		tb.zoom = zoom; 
		if(tb.naturalWidth == 'undefined')
		{
			tb.naturalWidth = $('#TB_Image').width();
			tb.naturalHeight = $('#TB_Image').height();		
		}		
		if(zoom == 'fit')
		{
			imgSize = {w: tb.naturalWidth, h: tb.naturalHeight};
			boxSize = {w: $("#tbxpan").width(), h: $("#tbxpan").height() };
			if(imgSize.w/imgSize.h > boxSize.w/boxSize.h)
			{
				img.width = boxSize.w;
				img.height = boxSize.w / imgSize.w * imgSize.h; 
			}
			else 
			{
				img.height = boxSize.h;
				img.width = boxSize.h / imgSize.h * imgSize.w;
			}
		}
		else 
		{
			img.width = tb.naturalWidth * zoom;
			img.height = tb.naturalHeight * zoom;
		}
	},	
	
	checkImageSize: function()
	{
		var w = $('#TB_Image').width();
		var h = $('#TB_Image').height();
		if(w > 800 && h > 600)
		{
			clearInterval(tb.checkSizeInt);
			tb.naturalWidth = w;
			tb.naturalHeight = h;
			$("#TB_ImageOff").css({position: 'static'})
			tb.zoomImage($('#TB_Image').get(0), 'fit');
			tb.showTools();
			$("#tbxpan").overflow("auto");
		}
	},
	
	showTools: function()
	{
		$('#TB_window').append('<div id="TB_tools"><p><a id="TB_zoom" href="#"></a><a id="TB_openImg" href="#">Ulozit obrazek</a></p></div>');
		$('#TB_zoom').addClass('zoom-1');
		$('#TB_zoom').title('Zobrazit 1:1');
		$('#TB_zoom').html('Zobrazit 1:1');
		$('#TB_openImg').href($('#TB_Image').src());
		$('#TB_caption').css('margin-right', '150px');
		$('#TB_zoom').click(function(){
			if(tb.zoom === 'fit')
			{
				tb.zoomImage($('#TB_Image').get(0), 1);
				this.className = 'zoom-fit';
				this.title = 'Zobrazit cely snimek';
				this.innerHTML = 'Zobrazit cely snimek';
			}
			else
			{
				tb.zoomImage($('#TB_Image').get(0), 'fit');
				this.className = 'zoom-1';
				this.title = 'Zobrazit 1:1';
				this.innerHTML = 'Zobrazit 1:1';
			}
			return false;
		});	
	},
	
	showImage: function(i)
	{
		$(document).unkeyup();
		tb.currentImage = i;
	
		// Add history item:
		if(!tb.isHistory) {
			tb.historyCount--;
			dhtmlHistory.add( "image-" + tb.imageGroup + "-" + (i + 1), { imageGroup: tb.imageGroup, imageNumber: i, hisCount: tb.historyCount });
		}
		tb.isHistory = false;
		
		if(ioff = document.getElementById('TB_ImageOff'))
		{ 
			$(ioff).height( ioff.offsetHeight + "px");
		}
		$("#TB_Image").remove();

		if(tb.imageGroup == "dia")
		{
			$("#TB_tools").remove();

			var oThis = tb.imageArray.get(i);
			var oPrev = tb.imageArray.get(i - 1);
			var oNext = tb.imageArray.get(i + 1);	
			
			var pagesize = tb.getPageSize();
			var x = pagesize[0] - 150;
			var y = pagesize[1] - 150;

			url = tb.imageArray.get(i).href;
			caption = tb.imageArray.get(i).alt;
            desc = tb.imageArray.get(i).title;
		
			var psize = tb.getPageSize();
			var wwidth = psize[0] - 100;
			var wheight = psize[1] - 180;
			
			tb.boxWidth = wwidth + 2*15+10; 
			$(ioff).height( wheight + "px");
			tb.positionBox();

			$("#TB_ImageOff").css({position: 'absolute', top: '-10000px' }).height("auto").width("auto").html("<img id='TB_Image' src='" + url + "' alt='" + caption + "'/>").click(function(){
				return tb.close();
			});
			$("#TB_Image").click(function(){
				return tb.close();
			});
			$("#TB_Image").load(function()
			{
				$("#tbxpan").addClass('no-loading');
			});
			tb.checkSizeInt = setInterval(tb.checkImageSize, 50);
			
			if(!document.getElementById('tbxpan')) $("#TB_ImageOff").wrap("<div id='tbxpan'></div>");
			
			$("#tbxpan").css("display", "block").height(wheight + "px").width(wwidth + "px").overflow("hidden").css("background-position", parseInt(wwidth/2) + "px " + parseInt(wheight/2) + "px");
			$("#tbxpan").removeClass('no-loading');
			
			$("#TB_pages a").removeClass("active").eq(i).addClass("active");				
		
			if(oPrev)
			{ 
				$("#TB_prev").removeClass("hidden").rel(i - 1 + 1);
				$(document).keyup( function(e){ if(e.keyCode == 37) tb.showImage(i - 1); });		
			}
			else $("#TB_prev").addClass("hidden");
		
			if(oNext)
			{ 
				$("#TB_next").removeClass("hidden").rel(i + 1 + 1);
				$(document).keyup( function(e){ if(e.keyCode == 39) tb.showImage(i + 1); });		
			}
			else $("#TB_next").addClass("hidden");
			
			//if(caption) $("#TB_caption").removeClass("hidden").html(caption);
			//else $("#TB_caption").addClass("hidden").html(caption);
			
			if(desc)	$("#TB_desc").removeClass("hidden").html(desc);
			else $("#TB_desc").addClass("hidden").html(desc);
			
		}
		else
		{
			imgPreloader = new Image();
			imgPreloader.onload = tb.imgLoad;
			imgPreloader.src = tb.imageArray.get(i).href;
		}
	},
	
	imgLoad: function()
	{
		var i = tb.currentImage;
		var oThis = tb.imageArray.get(i);
		var oPrev = tb.imageArray.get(i - 1);
		var oNext = tb.imageArray.get(i + 1);
		
		this.onload = null;
		
		var pagesize = tb.getPageSize();
		var x = pagesize[0] - 150;
		var y = pagesize[1] - 150;
		var imageWidth = imgPreloader.width;
		var imageHeight = imgPreloader.height;
		
        url = oThis.href;
        caption = oThis.firstChild.title;
        desc = oThis.title;
		
		$("#TB_pages a").removeClass("active").eq(i).addClass("active");
	
		if(oPrev)
		{ 
			$("#TB_prev").removeClass("hidden").rel(i - 1 + 1);
			$(document).keyup( function(e){ if(e.keyCode == 37) tb.showImage(i - 1); });		
		}
		else $("#TB_prev").addClass("hidden");
	
		if(oNext)
		{ 
			$("#TB_next").removeClass("hidden").rel(i + 1 + 1);
			$(document).keyup( function(e){ if(e.keyCode == 39) tb.showImage(i + 1); });
		}
		else $("#TB_next").addClass("hidden");
		
		//if(caption) $("#TB_caption").removeClass("hidden").html(caption);
		//else $("#TB_caption").addClass("hidden").html(caption);
		
		//if(desc)	$("#TB_desc").removeClass("hidden").html(desc);
		//else $("#TB_desc").addClass("hidden").html(desc);
        
        if (!caption) {
            $("#TB_desc").empty();
            $("#TB_desc").append("<div class='thick_nazev_konf'>" + desc + "</div>");
        }
        else if (desc) {
            $("#TB_desc").empty();
            $("#TB_desc").append("<a href='" + desc +"'>Detaily produktu " + caption + "</a>");
        }
        
		tbw = document.getElementById("TB_window");
		ioff = document.getElementById('TB_ImageOff');
		
		tb.boxWidth = (tbw.offsetWidth - ioff.offsetWidth) + imageWidth + 2*15+10;
		if(tb.boxWidth < 500) tb.boxWidth = 500;
		
		tb.positionBox();
		
		$("#TB_ImageOff").height("auto").append("<img id='TB_Image' src='" + url + "' width='" + imageWidth + "' height='" + imageHeight + "' alt='" + caption + "'/>").click(tb.close);
							
		$("#TB_window").css({display:"block"}); //for safari using css instead of show			
		
		var marg = parseInt( (tb.boxWidth - imageWidth)/2);
		
		$("#TB_Image").css("margin-left", marg + "px");
		
		tb.overlaySize();
	},
	
	remove: function() 
	{
		// $("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').remove();});
		$('#TB_window,#TB_overlay,#TB_HideSelect').remove();
		tb.historyCount = 0;
		$(document).unkeyup();
		return false;
	},
	
	close: function() 
	{
		//history.go(tb.historyCount);
		tb.remove();
		return false;
	},
	
	positionBox: function() 
	{	
		var arrayPageScroll = tb.getPageScrollTop();
		var pagesize = tb.getPageSize();
		$("#TB_window").css({marginLeft: '-' + parseInt(tb.boxWidth / 2) + 'px', width: tb.boxWidth + 'px', top: (arrayPageScroll[1] + 40)+"px"});
	},
	
	overlaySize: function()
	{
		if (window.innerHeight && window.scrollMaxY) 
		{
			yScroll = window.innerHeight + window.scrollMaxY;
		}
		else if (document.body.scrollHeight > document.body.offsetHeight)
		{	// all but Explorer Mac
			yScroll = document.body.scrollHeight;
		} 
		else 
		{	// Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			yScroll = document.body.offsetHeight;
	  }
		$("#TB_overlay").css("height",yScroll + 10 + "px");
		$("#TB_HideSelect").css("height",yScroll +"px");
	},
	

	getPageScrollTop: function ()
	{
		var yScrolltop;
		if (self.pageYOffset) 
		{
			yScrolltop = self.pageYOffset;
		} 
		else if (document.documentElement && document.documentElement.scrollTop)
		{	// Explorer 6 Strict
			yScrolltop = document.documentElement.scrollTop;
		} 
		else if (document.body) 
		{	// all other Explorers
			yScrolltop = document.body.scrollTop;
		}
		arrayPageScroll = new Array('',yScrolltop) 
		return arrayPageScroll;
	},

	getPageSize: function()
	{
		var de = document.documentElement;
		var w = window.innerWidth || self.innerWidth || (de && de.clientWidth) || document.body.clientWidth;
		var h = window.innerHeight || self.innerHeight || (de && de.clientHeight) || document.body.clientHeight;		
		arrayPageSize = new Array(w, h);
		return arrayPageSize;
	},

	strPos: function(str, ch) 
	{
		for (var i = 0; i < str.length; i++) if (str.substring(i, i+1) == ch) return i;
		return -1;
	},

	
	parseQuery: function(query) 
	{
		var Params = new Object();
		if (!query) return Params; // return empty object
		var Pairs = query.split(/[;&]/);
		for (var i = 0; i < Pairs.length; i++) 
		{
		  var KeyVal = Pairs[i].split('=');
		  if(!KeyVal || KeyVal.length != 2) continue;
		  var key = unescape(KeyVal[0]);
		  var val = unescape(KeyVal[1]);
		  val = val.replace(/\+/g, ' ');
		  Params[key] = val;
		}
		return Params;
	},
	
	checkUrlHash: function()
	{
		if(document.location.hash != "#popup"){
			clearInterval(tb.urlTimer);
			tb.remove();
		}
	}
};

$(document).ready(function()
	{
		tb.init();
	});
