/**
 * 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')));}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(){$('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-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').hide();if(settings.imageArray[settings.activeImage][1]){$('#lightbox-image-details-caption').html(settings.imageArray[settings.activeImage][1]).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();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();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();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();return false;});}}
_enable_keyboard_navigation();}
function _enable_keyboard_navigation(){$(document).keydown(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=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(){$('#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);

// -----------------------------------------------------------------------
// eros@recoding.it
// showcase 1.0
//
// 27/07/2009 - Added asynchronous loading of images
// 26/06/2009 - some new implementations
// 19/06/2009 - standardization
// 08/06/2009 - Initial sketch
//
// requires jQuery 1.3.x
//------------------------------------------------------------------------
(function($) {
    $.fn.showcase = function (options) {
        var $container = this;
        // Retrieve options
        var opt;
        opt = $.extend({}, $.fn.showcase.defaults, options);
        if (options && options.animation) {  
            opt.animation = $.extend({}, $.fn.showcase.defaults.animation, options.animation); 
            if (!/horizontal-slider|vertical-slider|fade/.test(opt.animation.type)) 
            {
                opt.animation.type = "horizontal-slider";
            }
        }
        if (options && options.navigator) { 
            opt.navigator = $.extend({}, $.fn.showcase.defaults.navigator, options.navigator); 

            if (options.navigator.item) { opt.navigator.item = $.extend({}, $.fn.showcase.defaults.navigator.item, options.navigator.item);  }
        }
        if (options && options.titleBar) { 
            opt.titleBar = $.extend({}, $.fn.showcase.defaults.titleBar, options.titleBar); 
            if (options.titleBar.css) { opt.titleBar.css = $.extend({}, $.fn.showcase.defaults.titleBar.css, options.titleBar.css);  }
        }
        
        // Check loading mode.
        // If there's something in opt.images[], I'll load them asynchronously, 
        // it will be nice to have opt.width and opt.height setted, in order to define the $container sizes
        
        if(typeof(opt.images) == 'string'){
            $.getJSON(opt.images, function(js){
                opt.images = js;
                $container.css({ width: opt.width, height: opt.height, overflow: "hidden" });
                
                for (var i in opt.images) {
                    var img = new Image();
                    img.src = opt.images[i].url;
                    img.alt = opt.images[i].description || "";
                    var $link = $("<a />").attr("href", opt.images[i].link || "#").css({position:"absolute",display:"none"});
                    if(i == 0) $link.css({display:"none"});
                    $link.append(img);;
                    $container.append($link);
                    
                }   
                // Check loading state of #1 image
                if ($container.find("img:first")[0].complete) {
                    $.fn.showcase.start($container, opt);
                	
                }
                else {
                    $container.find("img:first").load( function() {
                        $.fn.showcase.start($container, opt);
                    });
                }
            });
            
        } else {
            if (opt.images.length != 0) {
            $container.css({ width: opt.width, height: opt.height, overflow: "hidden" });
            for (var i in opt.images) {
                var img = new Image();
                img.src = opt.images[i].url;
                img.alt = opt.images[i].description || "";
                var $link = $("<a />").attr("href", opt.images[i].link || "#").css({position:"absolute",display:"none"});
                if(i == 0) $link.css({display:"block"});
                $link.append(img);
                $container.append($link);
            }
            // Check loading state of #1 image
            if ($container.find("img:first")[0].complete) {
                $.fn.showcase.start($container, opt);
            }
            else {
                $container.find("img:first").load( function() {
                    $.fn.showcase.start($container, opt);
                });
            }
        }
        }
        
        
       
    }
    
    $.fn.showcase.start = function($container, opt) {
        // Define local vars
        var index = 0;                             
        var nImages = $container.find("img").length;
        var $fi = $container.find("img:first");

        var imagesize = {width: $fi.removeAttr("width").width(), height: $fi.removeAttr("height").height() };
        var slideshowpause = false;
   
        $container.css({ 
                         overflow: "hidden",
                         width: opt.width,
                         height: opt.height,
                         border: opt.border,
                         position: 'relative' })
                .find("a").css({ top: "0", left: "0",'max-width':opt.width+"px", 'max-height':opt.height+"px" })
                .find("img").css({border: "0 none", 'max-width':opt.width+"px", 'max-height':opt.height+"px"});
        
        $container.find("a:first").css({ "z-index": "1000", opacity: 1, display:"block" });
        var w = $fi.css({margin:0}).width();
        var h = $fi.height();
        var l = (opt.width/2) - (w/2);
        var t = (opt.height/2) - (h/2);
        $fi.css({'max-width':opt.width+'px', 'max-height':opt.height+'px'})
        $container.find("a:first").css({top: t+'px', left: l + 'px', margin: 0});
        
        var $divNavigator = $("<div id='navigator' />").css({
            position: "absolute", 
            "z-index": 1000,
            border: opt.navigator.border,
            padding: opt.navigator.padding
        });
        
        
        
        var $player = $("<div id='video-player'><img id='video-player-back' src='http://websites-for-photographers.co.uk/images/video_buttons/back.png' /><img id='video-player-play' src='http://websites-for-photographers.co.uk/images/video_buttons/pause.png' /><img id='video-player-forward' src='http://websites-for-photographers.co.uk/images/video_buttons/forward.png' /></div>")
        .css({left:opt.width/2-84+'px'})
        .appendTo($container);
        
        if(opt.height < 320 || opt.width < 480){
            
            if(opt.width > opt.height){
                //adjust by height
                var h = Math.round((opt.height/320)*48);
                $player.find('img').css('height', h);
                var pw = $player.width();
                $player.css({left:opt.width/2-pw/2+'px'});
            } else {
               var w = Math.round((opt.width/480)*48);
               $player.find('img').css('width', w);
               var pw = $player.width();
               $player.css({left:opt.width/2-pw/2+'px'});
            }
        }
        
        
        $('#video-player-play').click(function(){
           if(slideshowpause){
               $(this).attr({src: 'http://websites-for-photographers.co.uk/images/video_buttons/pause.png'});
               intervalTimer = setInterval( function() { 
                if (!$container.data("isMouseHover") || !opt.animation.stopOnHover) 
                    $.fn.showcase.showImage(++index % nImages, $container, imagesize, opt); 
                }, 3000);
               slideshowpause = false;
           } else {
               $(this).attr({src: 'http://websites-for-photographers.co.uk/images/video_buttons/play.png'});
               clearInterval(intervalTimer);
               slideshowpause = true;
           }
           
        });
        
        $('#video-player-forward').click(function(){
           index++;
           if(index >= nImages) index = 0;
           $.fn.showcase.showImage(index, $container, imagesize, opt); 
        });
        
        $('#video-player-back').click(function(){
           index--;
           window.location.href.hash = index;
           if(index < 0) index = nImages-1;
           $.fn.showcase.showImage(index, $container, imagesize, opt); 
        });
        
        $container.append($divNavigator).hover(
            function() { 
                $('#video-player').fadeIn(333);
                
                $(this).data("isMouseHover", true);
            },
            function() { 
                $('#video-player').fadeOut(333);
                
                $(this).data("isMouseHover", false);
            }
        );
        
    
        
        if (opt.animation.autoCycle) {
            var intervalTimer = setInterval( function() { 
                if (!$container.data("isMouseHover") || !opt.animation.stopOnHover) 
                    $.fn.showcase.showImage(++index % nImages, $container, imagesize, opt); 
            }, 3000
            );
        }
    }
    
    $.fn.showcase.showImage = function(i, $container, imagesize, opt) {
        var $a = $container.find("a");
        switch (opt.animation.type)
        { 
            case "horizontal-slider": $container.find("#slider").animate({ left: - (i*imagesize.width) }, opt.animation.speed, opt.animation.easefunction);
                break;
            case "vertical-slider": $container.find("#slider").animate({ top: - (i*imagesize.height) }, opt.animation.speed, opt.animation.easefunction);
                break;
            case "fade":
                $container.css({ "z-index": "1001" });
                if ($a.eq(i).css("z-index") != "1000") 
                {
                    $a.eq(i).css({ "z-index": "1000", opacity: 0, display:"block" });
                    $a.eq(i).find('img').removeAttr('width').removeAttr('height').css({'max-width':opt.width+'px', 'max-height':opt.height+'px'});
                    var w = $a.eq(i).find('img').css({margin:0}).width();
                    var h = $a.eq(i).find('img').height();
                    var l = (opt.width/2) - (w/2);
                    var t = (opt.height/2) - (h/2);
                    
                    $a.eq(i).css({top: t+'px', left: l + 'px', margin: 0});
					
                    $a.not($container.find("a").eq(i)).each( function() {
						if ($(this).css("z-index") != "auto")
							$(this).css("z-index", parseInt($(this).css("z-index"), 10) - 1);
                    });
                    
                    $a.eq(i).animate({opacity: 1 }, opt.animation.speed, opt.animation.easefunction);
                    
                     $a.not($container.find("a").eq(i)).each( function() {
							$(this).fadeOut(750);
                    });
                }
                break;
        }
		
	};
    
    $.fn.showcase.defaults = {
        images: [],
        width: "480",
        height: "320",
        animation: { autoCycle: true,
                     stopOnHover: true,
                     interval: 5000,
                     speed: 750,
                     easefunction: "swing",
                     type: "horizontal-slider" },
		border: "0",
		navigator: { position: "top-right",
		             orientation: "horizontal",
		             autoHide: false,
		             showNumber: false,
		             showMiniature: false,
		             border: "none",
		             padding: "0px",
		             item: { cssClass: null,
		                     selectedCssClass: null,
		                     selectedBGColor: "#ffffff",
		                     color: "#000000",
		                     textDecoration: "none",
		                     width: "12px", 
		                     height: "12px", 
		                     lineHeight: "12px",
		                     verticalAlign: "middle",
		                     backgroundColor: "#cdcdcd",
		                     padding: "3px",
		                     margin: "0px 3px 0px 0px",
		                     border: "solid 1px #acacac",
		                     borderRounded: true }
		           },
		titleBar: { autoHide: true,
		            cssClass: null,
		            css: { opacity: 0.75,
		                   backgroundColor: "#ffffff",
		                   height: "48px",
		                   fontColor: "#444444",
		                   fontStyle: "italic",
		                   fontWeight: "bold",
		                   fontSize: "1em" } }
	};
	
})(jQuery);