/**
 * jQuery Lightbox Plugin by Garoo
 * Copyright (C) 2008 Dendrocom
 *
 * Based on:
 * FancyBox - http://fancy.klade.lv/
 * Copyright (c) 2008 Janis Skarnelis
 * 
 * And:
 * http://jquery.com/plugins/project/jquerylightbox_bal
 * Copyright (C) 2008 Benjamin Arthur Lupton
 *
 * Licensed on Whatever License
 */

function GetElementPosition(obj) //http://www.quirksmode.org/js/findpos.html
{
	var curleft = curtop = 0;
	if (obj.offsetParent) 
	{
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while(obj = obj.offsetParent) 
		{
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	return [curleft,curtop];
}

function GetElementSize(obj)
{
	var w = obj.offsetWidth;
	var h = obj.offsetHeight;
	return [w,h];
}	

function GetWindowSize()
{
	if(window.innerWidth) return [window.innerWidth,window.innerHeight];
	if(document.documentElement) return [document.documentElement.clientWidth,document.documentElement.clientHeight];
	if(document.body) return [document.body.clientWidth,document.body.clientHeight];
}

(function($)
{	
	$.fn.lightbox = function(settings) 
	{
		$.fn.lightbox.opt = $.extend({}, $.fn.lightbox.optdefaults, settings);
		
		if(navigator.userAgent.indexOf('MSIE 6') >= 0 ) $.fn.lightbox.legacyBrowser = true;
		else if(navigator.userAgent.indexOf('MSIE 5') >= 0 ) return; 

		$('#lightboxoverlay').remove();
		$('body').append(
			'<div id="lightboxspinner" style="display: none;"></div>'+
			'<div id="lightboxoverlay" style="display: none;">'+
			'<div id="lightboxoverlayclose"><a href="javascript:void(0);" onclick="$.fn.lightbox.close();"></a></div>'+
			'<div id="lightboxclose"><a href="javascript:void(0);" onclick="$.fn.lightbox.close();"><img src="'+$.fn.lightbox.opt.path+'fancy_closebox.png" width="30" height="30" border="0" style="border: none;" /></a></div>'+
			//'<div id="lightboxprev"><a href="javascript:void(0);"><img src="'+$.fn.lightbox.opt.path+'fancy_left.gif" width="30" height="30" border="0" /></a></div>'+
			//'<div id="lightboxnext"><a href="javascript:void(0);"><img src="'+$.fn.lightbox.opt.path+'fancy_right.gif" width="30" height="30" border="0" /></a></div>'+
			'<div id="lightbox" align="center">'+
				'<div id="lightboximageprev"><a href="javascript:void(0);"></a></div>'+
				'<div id="lightboximagenext"><a href="javascript:void(0);"></a></div>'+
				'<div id="lightboxcontents"></div>'+
				'<div id="lightboxcaption"></div>'+
			'</div>'+
			'</div>'+
			'');
			
		if($.fn.lightbox.legacyBrowser)
		{
			$('#lightboxoverlay').css('position', 'absolute');
			/*
			$('#lightboxoverlay').css({
				position:	'absolute',
				top:		"expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop  ? document.documentElement.scrollTop  : document.body.scrollTop ) ) + 'px')",
				left:		"expression( ( 0 + ( ignoreMe = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px')"
			});
			*/
		}
		
		if(!$.fn.lightbox.opt.overlayShow)
			$('#lightboxoverlay').css('background', 'none');
		
		$.fn.lightbox.traverseDOM();
		
		$(window).resize(function() { if(!$.fn.lightbox.isVisible) return; $.fn.lightbox.resizeOverlay(); $.fn.lightbox.resizeContents(); });
		
		return true;
	};
	
	$.fn.lightbox.opt = { };
	
	$.fn.lightbox.optdefaults = { 
		rel:				'lightbox',
		path:				'',
		hideOnContentClick:	true,
		zoomSpeedIn:		500,
		zoomSpeedOut:		500,
		overlayShow:		true };
		
	$.fn.lightbox.legacyBrowser = false;

	$.fn.lightbox.groups = [];
	$.fn.lightbox.isAnimating = false;
	$.fn.lightbox.isVisible = false;

	$.fn.lightbox.currentGroup = '';
	$.fn.lightbox.currentImage = -1;
	$.fn.lightbox.prevImage = -1;
	$.fn.lightbox.nextImage = -1;
	
	$.fn.lightbox.traverseDOM = function()
	{
		var num = 0;
		var groupid = '';
		var img = '';
		var html = '';
		$.each($('[@rel^='+$.fn.lightbox.opt.rel+']'), function(index, obj)
		{
			var groupid = $(obj).attr('rel');

			if(groupid == $.fn.lightbox.opt.rel) // no grouping (rel="lightbox")
				groupid = 'individualimage'+(num++);

			if(typeof($.fn.lightbox.groups[groupid]) === 'undefined') // first image in that group
				$.fn.lightbox.groups[groupid] = [];
				
			var pos = $.fn.lightbox.groups[groupid].length;
			
			img = html = htmlwidth = htmlheight = '';
			if($(obj).attr('href')) img = $(obj).attr('href');
			else if($(obj).attr('html')) { html = $(obj).attr('html'); htmlwidth = $(obj).attr('htmlwidth'); htmlheight = $(obj).attr('htmlheight'); }
			else if($(obj).attr('src')) img = $(obj).attr('src');

			if($(obj).attr('href')) $(obj).attr('href', 'javascript:void(0);'); // syntax error in IE6 if you set href when there's no href
			$(obj).css('cursor', 'pointer');
			$(obj).click(function() { $.fn.lightbox.showImage(groupid, pos); });
			$(obj).addClass('lightboxenabled');

			$.fn.lightbox.groups[groupid].push({ image:img, html:html, htmlwidth:htmlwidth*1, htmlheight:htmlheight*1, caption:$(obj).attr('title') });
		});
		
		return true;
	}
	
	$.fn.lightbox.showImage = function(groupid, pos) 
	{
		if ($.fn.lightbox.isAnimating) return false;
		
		$.fn.lightbox.spinner.show();
		
		if(! $.fn.lightbox.isVisible)
		{
			$('#lightboxcontents').hide();
			$('#lightboxcontents').css({ width:'5px', height:'5px' });
			$.fn.lightbox.resizeContents();

			$.fn.lightbox.resizeOverlay();
			$('#lightboxoverlay').show();
			$('#lightboxcontents').fadeIn();
			$.fn.lightbox.isVisible = true;

			$('embed, object, select').css('visibility', 'hidden');
		}
		
		$.fn.lightbox.currentGroup = groupid;
		$.fn.lightbox.currentImage = pos;
		$.fn.lightbox.prevImage = pos - 1;
		$.fn.lightbox.nextImage = (pos < 0 || pos > $.fn.lightbox.groups[groupid].length-2 ? -1 : pos + 1);
		
		// the blur()s fix an ant-line bug in mozilla
		if($.fn.lightbox.prevImage < 0) 
			$('#lightboximageprev a').removeClass('hasaprevimage').unbind('click').click(function() { $(this).blur(); return $.fn.lightbox.close(); });
		else
			$('#lightboximageprev a').addClass('hasaprevimage').unbind('click').click(function() { $(this).blur(); $.fn.lightbox.showImage($.fn.lightbox.currentGroup, $.fn.lightbox.prevImage); });
		
		if($.fn.lightbox.nextImage < 0) 
			$('#lightboximagenext a').removeClass('hasanextimage').unbind('click').click(function() { $(this).blur(); return $.fn.lightbox.close(); });
		else
			$('#lightboximagenext a').addClass('hasanextimage').unbind('click').click(function() { $(this).blur(); $.fn.lightbox.showImage($.fn.lightbox.currentGroup, $.fn.lightbox.nextImage); });

		if($.fn.lightbox.groups[groupid][pos].image)
		{
			var img = new Image;
			$(img).load(function()
			{
				$('#lightboxcontents').html($(this));
				$.fn.lightbox.resizeContents();
				$.fn.lightbox.spinner.hide();
				$('#lightboxcaption').html($.fn.lightbox.groups[groupid][pos].caption);
				$('#lightboximageprev, #lightboximagenext').show();
				$('#lightboximageprev, #lightboximagenext, #lightboximageprev a, #lightboximagenext a').css('z-index', 30000);
			})
			$(img).error(function()
			{
				$.fn.lightbox.close();
			});
			$(img).attr('src', $.fn.lightbox.groups[groupid][pos].image);
		}
		else if($.fn.lightbox.groups[groupid][pos].html)
		{
			$('#lightboxcontents').html($.fn.lightbox.groups[groupid][pos].html);
			$.fn.lightbox.resizeContentsFixed($.fn.lightbox.groups[groupid][pos].htmlwidth, $.fn.lightbox.groups[groupid][pos].htmlheight);
			$('#lightboximageprev, #lightboximagenext').hide();
			$.fn.lightbox.spinner.hide();
			$('#lightboxcaption').html($.fn.lightbox.groups[groupid][pos].caption);
		}
		
		return true;
	}
	
	$.fn.lightbox.close = function()
	{
		$('embed, object, select').css('visibility', 'visible');

		$('#lightboxoverlay').hide();
		$('#lightboxcaption').html('');
		$.fn.lightbox.isVisible = false;
		
		$.fn.lightbox.spinner.hide();

		return true;
	}
	
	$.fn.lightbox.resizeOverlay = function()
	{
		var windowsize = GetWindowSize();
		$('#lightboxoverlay,#lightboxoverlayclose a').css({ width:windowsize[0]+'px',  height:windowsize[1]+'px' });
		if($.fn.lightbox.legacyBrowser) $('#lightboxoverlay').css('top', (document.documentElement.scrollTop  ? document.documentElement.scrollTop  : document.body.scrollTop)+'px');

		$('#lightboxprev,#lightboxnext').css({ top:(windowsize[1]/2-15)+'px' });
		$('#lightboxspinner').css({ left:(windowsize[0]/2-20)+'px', top:(windowsize[1]/2-20)+'px' });

		return true;
	}

	$.fn.lightbox.resizeContents = function()
	{
		var windowsize = GetWindowSize();
		var border = 4;
		var w = $('#lightboxcontents img').width() + 2*border;
		var h = $('#lightboxcontents img').height() + 2*border;
		var x = (windowsize[0]-w)/2;
		var y = (windowsize[1]-h)/2;
		
		$('#lightbox').animate({ left:x+'px', top:y+'px', width:w+'px' }, 'fast');
		$('#lightboxcontents').animate({ width:w+'px', height:h+'px' }, 'fast');

		//$('#lightboximageprev a,#lightboximagenext a').css({ width:(w/2)+'px', height:h+'px' });
		$('#lightboximageprev a,#lightboximagenext a').html('<img src="'+$.fn.lightbox.opt.path+'_.gif" width="'+(w/2)+'" height="'+h+'" border="0" style="border: none;" />'); // otherwise MSIE just ignores the empty link
		//$('#lightboximageprev').css({ left:x+4+'px', top:y+'px' });
		//$('#lightboximagenext').css({ right:x+5+'px', top:y+'px' });

		return true;
	}
	$.fn.lightbox.resizeContentsFixed = function(w, h)
	{
		var windowsize = GetWindowSize();
		var border = 4;
		var x = (windowsize[0]-w)/2;
		var y = (windowsize[1]-h)/2;
		
		border = 0;
		
		$('#lightbox').animate({ left:x+'px', top:y+'px', width:(w+8)+'px' }, 'fast');
		$('#lightboxcontents').animate({ width:w+'px', height:h+'px' }, 'fast');

		//$('#lightboximageprev a,#lightboximagenext a').css({ width:(w/2)+'px', height:h+'px' });
		$('#lightboximageprev a,#lightboximagenext a').html('<img src="'+$.fn.lightbox.opt.path+'_.gif" width="'+(w/2)+'" height="'+h+'" border="0" style="border: none;" />'); // otherwise MSIE just ignores the empty link
		//$('#lightboximageprev').css({ left:x+4+'px', top:y+'px' });
		//$('#lightboximagenext').css({ right:x+5+'px', top:y+'px' });

		return true;
	}
	
	
	
	
	$.fn.lightbox.spinner = function()
	{
	}
	
	$.fn.lightbox.spinner.interval = null;
	$.fn.lightbox.spinner.current = 0;
	
	$.fn.lightbox.spinner.animate = function()
	{
		top = ($.fn.lightbox.spinner.current - 40) % 480;
		
		//MSIE7 crashes there
		$('#lightboxspinner').css('background-position', '0 '+top+'px');

		$.fn.lightbox.spinner.current = top;
	}

	$.fn.lightbox.spinner.show = function()
	{
		if($.fn.lightbox.spinner.interval) clearInterval($.fn.lightbox.spinner.interval);
		
		if(!($.fn.lightbox.legacyBrowser || navigator.userAgent.indexOf('MSIE')))
		{
			$.fn.lightbox.spinner.animate();
			$.fn.lightbox.spinner.interval = setInterval("$.fn.lightbox.spinner.animate();", 100);
		}

		$('#lightboxspinner').show();
	}

	$.fn.lightbox.spinner.hide = function()
	{
		if($.fn.lightbox.spinner.interval) clearInterval($.fn.lightbox.spinner.interval);
		
		$('#lightboxspinner').fadeOut('fast');
	}

})(jQuery);
