/**
 * jQuery lightBox plugin
 * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)
 * and adapted to me for use like a plugin from jQuery.
 * @name jquery-lightbox-0.5.js
 * @author Leandro Vieira Pinho - http://leandrovieira.com
 * @version 0.5
 * @date April 11, 2008
 * @category jQuery plugin
 * @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com)
 * @license CC Attribution-No Derivative Works 2.5 Brazil - http://creativecommons.org/licenses/by-nd/2.5/br/deed.en_US
 * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin
 */
(function($){
	$.fn.lightBox=function(settings){
		settings=jQuery.extend({
			overlayBgColor:'#000',
			overlayOpacity:0.8,
			fixedNavigation:false,
			imageLoading:'images/lightbox-ico-loading.gif',
			imageBtnPrev:'images/lightbox-btn-prev.gif',
			imageBtnNext:'images/lightbox-btn-next.gif',
			imageBtnClose:'images/lightbox-btn-close.gif',
			imageBlank:'images/lightbox-blank.gif',
			containerBorderSize:10,
			containerResizeSpeed:400,
			txtImage:'Image',
			txtOf:'of',
			keyToClose:'c',
			keyToPrev:'p',
			keyToNext:'n',
			imageArray:[],
			activeImage:0
		},settings);
		var jQueryMatchedObj=this;
		function _initialize(){
			_start(this,jQueryMatchedObj);
			return false;
		}
		function _start(objClicked,jQueryMatchedObj){
			$('embed, object, select').css({
				'visibility':'hidden'
			});
			_set_interface();
			settings.imageArray.length=0;
			settings.activeImage=0;
			if(jQueryMatchedObj.length==1){
				settings.imageArray.push(new Array(objClicked.getAttribute('href'),objClicked.getAttribute('title'),objClicked.getAttribute('data-desc'),objClicked.getAttribute('data-author')));
			}else{
				for(var i=0;i<jQueryMatchedObj.length;i++){
					settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('href'),jQueryMatchedObj[i].getAttribute('title'),jQueryMatchedObj[i].getAttribute('data-desc'),jQueryMatchedObj[i].getAttribute('data-author')));
				}
				}
		while(settings.imageArray[settings.activeImage][0]!=objClicked.getAttribute('href')){
			settings.activeImage++;
		}
		_set_image_to_view();
	}
	function _set_interface(){
		$('body').append('<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><img id="lightbox-image"><div style="" id="lightbox-nav"><a href="#" id="lightbox-nav-btnPrev"></a><a href="#" id="lightbox-nav-btnNext"></a></div><div id="lightbox-loading"><a href="#" id="lightbox-loading-link"><img src="'+settings.imageLoading+'"></a></div></div></div><div id="lightbox-container-image-data-box"><div id="lightbox-container-image-data"><div id="lightbox-image-details"><span id="lightbox-image-details-caption"></span><span id="lightbox-image-details-desc"></span><span id="lightbox-image-details-author"></span><span id="lightbox-image-details-currentNumber"></span></div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnClose"><img src="'+settings.imageBtnClose+'"></a></div></div></div></div>');
		var arrPageSizes=___getPageSize();
		$('#jquery-overlay').css({
			backgroundColor:settings.overlayBgColor,
			opacity:settings.overlayOpacity,
			width:arrPageSizes[0],
			height:arrPageSizes[1]
			}).fadeIn();
		var arrPageScroll=___getPageScroll();
		$('#jquery-lightbox').css({
			top:arrPageScroll[1]+(arrPageSizes[3]/10),
			left:arrPageScroll[0]
			}).show();
		$('#jquery-overlay,#jquery-lightbox').click(function(){
			_finish();
		});
		$('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function(){
			_finish();
			return false;
		});
		$(window).resize(function(){
			var arrPageSizes=___getPageSize();
			$('#jquery-overlay').css({
				width:arrPageSizes[0],
				height:arrPageSizes[1]
				});
			var arrPageScroll=___getPageScroll();
			$('#jquery-lightbox').css({
				top:arrPageScroll[1]+(arrPageSizes[3]/10),
				left:arrPageScroll[0]
				});
		});
	}
	function _set_image_to_view(){
		$('#lightbox-loading').show();
		if(settings.fixedNavigation){
			$('#lightbox-image,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();
		}else{
			$('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();
		}
		var objImagePreloader=new Image();
		objImagePreloader.onload=function(){
			$('#lightbox-image').attr('src',settings.imageArray[settings.activeImage][0]);
			_resize_container_image_box(objImagePreloader.width,objImagePreloader.height);
			objImagePreloader.onload=function(){};

	};

	objImagePreloader.src=settings.imageArray[settings.activeImage][0];
};

function _resize_container_image_box(intImageWidth,intImageHeight){
	var intCurrentWidth=$('#lightbox-container-image-box').width();
	var intCurrentHeight=$('#lightbox-container-image-box').height();
	var intWidth=(intImageWidth+(settings.containerBorderSize*2));
	var intHeight=(intImageHeight+(settings.containerBorderSize*2));
	var intDiffW=intCurrentWidth-intWidth;
	var intDiffH=intCurrentHeight-intHeight;
	$('#lightbox-container-image-box').animate({
		width:intWidth,
		height:intHeight
	},settings.containerResizeSpeed,function(){
		_show_image();
	});
	if((intDiffW==0)&&(intDiffH==0)){
		if($.browser.msie){
			___pause(250);
		}else{
			___pause(100);
		}
	}
$('#lightbox-container-image-data-box').css({
	width:intImageWidth
});
$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({
	height:intImageHeight+(settings.containerBorderSize*2)
	});
};

function _show_image(){
	$('#lightbox-loading').hide();
	$('#lightbox-image').fadeIn(function(){
		_show_image_data();
		_set_navigation();
	});
	_preload_neighbor_images();
};

function _show_image_data(){
	$('#lightbox-container-image-data-box').slideDown('fast');
	$('#lightbox-image-details-caption, #lightbox-image-details-desc, #lightbox-image-details-author').hide();
	if(settings.imageArray[settings.activeImage][1]){
		$('#lightbox-image-details-caption').html(settings.imageArray[settings.activeImage][1]).show();
		$('#lightbox-image-details-desc').html(settings.imageArray[settings.activeImage][2]).show();
		$('#lightbox-image-details-author').html(settings.imageArray[settings.activeImage][3]).show();
	}
	if(settings.imageArray.length>1){
		$('#lightbox-image-details-currentNumber').html(settings.txtImage+' '+(settings.activeImage+1)+' '+settings.txtOf+' '+settings.imageArray.length).show();
	}
}
function _set_navigation(){
	$('#lightbox-nav').show();
	$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({
		'background':'transparent url('+settings.imageBlank+') no-repeat'
		});
	if(settings.activeImage!=0){
		if(settings.fixedNavigation){
			$('#lightbox-nav-btnPrev').css({
				'background':'url('+settings.imageBtnPrev+') left 15% no-repeat'
				}).unbind().bind('click',function(){
				settings.activeImage=settings.activeImage-1;
				_set_image_to_view();
				_disable_keyboard_navigation();
				return false;
			});
		}else{
			$('#lightbox-nav-btnPrev').unbind().hover(function(){
				$(this).css({
					'background':'url('+settings.imageBtnPrev+') left 15% no-repeat'
					});
			},function(){
				$(this).css({
					'background':'transparent url('+settings.imageBlank+') no-repeat'
					});
			}).show().bind('click',function(){
				settings.activeImage=settings.activeImage-1;
				_set_image_to_view();
				_disable_keyboard_navigation();
				return false;
			});
		}
	}
if(settings.activeImage!=(settings.imageArray.length-1)){
	if(settings.fixedNavigation){
		$('#lightbox-nav-btnNext').css({
			'background':'url('+settings.imageBtnNext+') right 15% no-repeat'
			}).unbind().bind('click',function(){
			settings.activeImage=settings.activeImage+1;
			_set_image_to_view();
			_disable_keyboard_navigation();
			return false;
		});
	}else{
		$('#lightbox-nav-btnNext').unbind().hover(function(){
			$(this).css({
				'background':'url('+settings.imageBtnNext+') right 15% no-repeat'
				});
		},function(){
			$(this).css({
				'background':'transparent url('+settings.imageBlank+') no-repeat'
				});
		}).show().bind('click',function(){
			settings.activeImage=settings.activeImage+1;
			_set_image_to_view();
			_disable_keyboard_navigation();
			return false;
		});
	}
}
_enable_keyboard_navigation();
}
function _enable_keyboard_navigation(){
	$(document).keyup(function(objEvent){
		_keyboard_action(objEvent);
	});
}
function _disable_keyboard_navigation(){
	$(document).unbind();
}
function _keyboard_action(objEvent){
	if(objEvent==null){
		keycode=event.keyCode;
		escapeKey=27;
	}else{
		keycode=objEvent.keyCode;
		escapeKey=27;
//		escapeKey=objEvent.DOM_VK_ESCAPE;
	}
	key=String.fromCharCode(keycode).toLowerCase();
	if((key==settings.keyToClose)||(key=='x')||(keycode==escapeKey)){
		_finish();
	}
	if((key==settings.keyToPrev)||(keycode==37)){
		if(settings.activeImage!=0){
			
			settings.activeImage=settings.activeImage-1;
			_set_image_to_view();
			_disable_keyboard_navigation();

		}
	}
if((key==settings.keyToNext)||(keycode==39)){
	if(settings.activeImage!=(settings.imageArray.length-1)){
		
		settings.activeImage=settings.activeImage+1;
		_set_image_to_view();
		_disable_keyboard_navigation();
	}
}
}
function _preload_neighbor_images(){
	if((settings.imageArray.length-1)>settings.activeImage){
		objNext=new Image();
		objNext.src=settings.imageArray[settings.activeImage+1][0];
	}
	if(settings.activeImage>0){
		objPrev=new Image();
		objPrev.src=settings.imageArray[settings.activeImage-1][0];
	}
}
function _finish(){
	_disable_keyboard_navigation();
	$('#jquery-lightbox').remove();
	$('#jquery-overlay').fadeOut(function(){
		$('#jquery-overlay').remove();
	});
	$('embed, object, select').css({
		'visibility':'visible'
	});
}
function ___getPageSize(){
	var xScroll,yScroll;
	if(window.innerHeight&&window.scrollMaxY){
		xScroll=window.innerWidth+window.scrollMaxX;
		yScroll=window.innerHeight+window.scrollMaxY;
	}else if(document.body.scrollHeight>document.body.offsetHeight){
		xScroll=document.body.scrollWidth;
		yScroll=document.body.scrollHeight;
	}else{
		xScroll=document.body.offsetWidth;
		yScroll=document.body.offsetHeight;
	}
	var windowWidth,windowHeight;
	if(self.innerHeight){
		if(document.documentElement.clientWidth){
			windowWidth=document.documentElement.clientWidth;
		}else{
			windowWidth=self.innerWidth;
		}
		windowHeight=self.innerHeight;
	}else if(document.documentElement&&document.documentElement.clientHeight){
		windowWidth=document.documentElement.clientWidth;
		windowHeight=document.documentElement.clientHeight;
	}else if(document.body){
		windowWidth=document.body.clientWidth;
		windowHeight=document.body.clientHeight;
	}
	if(yScroll<windowHeight){
		pageHeight=windowHeight;
	}else{
		pageHeight=yScroll;
	}
	if(xScroll<windowWidth){
		pageWidth=xScroll;
	}else{
		pageWidth=windowWidth;
	}
	arrayPageSize=new Array(pageWidth,pageHeight,windowWidth,windowHeight);
	return arrayPageSize;
};

function ___getPageScroll(){
	var xScroll,yScroll;
	if(self.pageYOffset){
		yScroll=self.pageYOffset;
		xScroll=self.pageXOffset;
	}else if(document.documentElement&&document.documentElement.scrollTop){
		yScroll=document.documentElement.scrollTop;
		xScroll=document.documentElement.scrollLeft;
	}else if(document.body){
		yScroll=document.body.scrollTop;
		xScroll=document.body.scrollLeft;
	}
	arrayPageScroll=new Array(xScroll,yScroll);
	return arrayPageScroll;
};

function ___pause(ms){
	var date=new Date();
	curDate=null;
	do{
		var curDate=new Date();
	}
	while(curDate-date<ms);
};

return this.unbind('click').click(_initialize);
};

})(jQuery);
