/**
 * jQuery lightBox plugin
 * This jQuery plugin was inspired and based on Lightbox by Leandro Vieira Pinho - http://leandrovieira.com
 * versao: PubDesign.0
 */
(function($){
	$.fn.lightBox=function(settings){
		settings=jQuery.extend({
			overlayBgColor:'#000',
			overlayOpacity:0.8,
			loadingType:'swf', /*'image' || 'swf'*/
			loadingSwf:{
				w:'70px',
				h:'120px',
				id:'fla_lightbox-loading',
				swf:'/media/swf/carregandoPe.swf'
			},
			imageLoading:'/media/img/lightbox/ico-loading.gif', /* usado caso loadingType seja 'image' */
			imageBtnPrev:'/media/img/lightbox/btn-prev.gif',
			imageBtnNext:'/media/img/lightbox/btn-next.gif',
			imageBtnClose:'/media/img/lightbox/btn-close.gif', /* usado caso showImageData = true, caso contrário é usado o css #lightbox-closeBtnTop */
			imageBlank:'/media/img/lightbox/blank.gif',
			containerBorderSize:10,
			txtImage:'Imagem',
			txtOf:'de',
			imageArray:[],
			activeImage:0,
			showImageData:false,
			imageData:{
				showCurrentNumber:false,
				showCaption:false
			},
			visType:'sample' /*'sample' || 'gallery'*/
		},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')
					)
				);
			}else{
				for(var i=0;i<jQueryMatchedObj.length;i++){
					settings.imageArray.push(
						new Array(
							jQueryMatchedObj[i].getAttribute('href'),
							jQueryMatchedObj[i].getAttribute('title')
						)
					);
				}
			}
			
			while(settings.imageArray[settings.activeImage][0]!=objClicked.getAttribute('href')){
				settings.activeImage++;
			}

			_set_image_to_view();
		}

		function _set_interface(){
			var html ='';
			html += '<div id="jquery-overlay"></div>'
			html += '<div id="jquery-lightbox">'
			html += '		<div id="lightbox-closeBtnTop">'
			html += '			<a href="#" id="lightbox-secNav-btnCloseTop" style=""></a>'
			html += '		</div>'
			html += '	<div id="lightbox-container-image-box">'
			html += '		<div id="lightbox-container-image">'
			html += '			<img id="lightbox-image">'
			html += '			<div style="" id="lightbox-nav">'
			html += '				<a href="#" id="lightbox-nav-btnPrev"></a>'
			html += '				<a href="#" id="lightbox-nav-btnNext"></a>'
			html += '			</div>'
			html += '			<div id="lightbox-loading">'
			if (settings.loadingType == 'image')
			{
				html += '				<a href="#" id="lightbox-loading-link"><img src="'+settings.imageLoading+'"></a>'
			}
			html += '			</div>'
			html += '		</div>'
			html += '	</div>'
			html += '	<div id="lightbox-container-image-data-box">'
			html += '		<div id="lightbox-container-image-data">'
			html += '			<div id="lightbox-image-details">'
			html += '				<span id="lightbox-image-details-caption"></span>'
			html += '				<span id="lightbox-image-details-currentNumber"></span>'
			html += '			</div>'
			html += '			<div id="lightbox-secNav">'
			html += '				<a href="#" id="lightbox-secNav-btnClose"><img src="'+settings.imageBtnClose+'"></a>'
			html += '			</div>'
			html += '		</div>'
			html += '	</div>'
			html += '</div>'
			$('body').append(html);
			
			if (settings.loadingType == 'swf') {
				$("#lightbox-loading").flash({ 
					swf: settings.loadingSwf.swf,
					id: settings.loadingSwf.id,
					width: settings.loadingSwf.w,
					height: settings.loadingSwf.w,
					params:{ wmode:'transparent' }
				});
			}
			
			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]/20),
				left:arrPageScroll[0]
			}).show();
			
			$('#jquery-overlay, #jquery-lightbox').click(function(){
				_finish();
			});
			
			$('#lightbox-loading-link, #lightbox-secNav-btnClose, #lightbox-secNav-btnCloseTop').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]/20),
					left:arrPageScroll[0]
				});
			});
		}

		function _set_image_to_view(){
			$('#lightbox-loading').show();
			
			$('#lightbox-image, #lightbox-nav, #lightbox-nav-btnPrev, #lightbox-nav-btnNext, #lightbox-container-image-data-box, #lightbox-image-details-currentNumber, #lightbox-closeBtnTop').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
			}, 400, 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(){
				if (settings.showImageData) {
					_show_image_data();
				}
				if (settings.visType != 'sample') {
					_set_navigation();
				} else {
					$('#lightbox-closeBtnTop').fadeIn('fast');
				}
			});
			if (settings.visType != 'sample') {
				_preload_neighbor_images();
			}
		};

		function _show_image_data(){
			//$('#lightbox-container-image-data-box').slideDown('fast');
			$('#lightbox-container-image-data-box').show();
			$('#lightbox-image-details-caption').hide();

			if(settings.imageArray[settings.activeImage][1] && settings.imageData.showCaption){
				$('#lightbox-image-details-caption').html(
					settings.imageArray[settings.activeImage][1]
				).show();
			}

			if(settings.imageArray.length>1 && settings.imageData.showCurrentNumber){
				$('#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){
				$('#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();
						return false;
					}
				);
			}

			if(settings.activeImage!=(settings.imageArray.length-1)){
				$('#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();
					return false;
				});
			}
		}

		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(){
			$('#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);
