// jQuery "litebox" plugin, based on v0.5 of Leandro Vieira Pinho's jQuery Lightbox plugin: http://leandrovieira.com/projects/jquery/lightbox/
// which was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)

// license: http://creativecommons.org/licenses/by-sa/2.5/br/deed.en_US


(function($) {

  $.fn.litebox = function(settings) {

    // settings to configure the jQuery lightBox plugin
    settings = jQuery.extend({

      // (string) Background color to overlay; inform a hexadecimal value like: #RRGGBB. Where RR, GG, and BB are the hexadecimal values for the red, green, and blue values of the color.
      overlayBgColor:      '#000',    
      
      // (integer) Opacity value to overlay from 0 to 1.0
      overlayOpacity:       0.8,    

      // (integer) Specify the resize duration of container image. These number are milliseconds. 400 is default.
      containerResizeSpeed: 600    

    }, settings);

    function _initialize() {

      // Hide some elements to avoid conflict with overlay in IE. These elements appear above the overlay.
      $('embed, object, select').css({ 'visibility' : 'hidden' });
      
      // Apply the following HTML markup into body tag
      // <div id="jquery-overlay"></div>  
      // <div id="jquery-lightbox">
      //   <img src="../fotos/XX.jpg" id="lightbox-image">
      // </div>

      $('body').append('<div id="jquery-overlay" style="position:absolute;top:0;left:0;z-index:90;width:100%;height:500px;"></div><div id="jquery-lightbox" style="position:absolute;top:0;left:0;z-index:100;width:100%;margin:0 auto;text-align:center;cursor:pointer;"><img id="lightbox-image" title="Click to close"></div>');
      
      $('#lightbox-image').hide();
      
      // Get page sizes
      var arrPageSizes = ___getPageSize();

      // Style overlay and show it
      $('#jquery-overlay').css({
        backgroundColor:  settings.overlayBgColor,
        opacity:          settings.overlayOpacity,
        width:            arrPageSizes[0],
        height:            arrPageSizes[1]
      }).fadeIn();

      // Get page scroll
      var arrPageScroll = ___getPageScroll();

      // Assigning click events in elements to close overlay
      $('#jquery-overlay,#jquery-lightbox').click(function() {
        _finish();                  
      });

      // If window was resized, calculate the new overlay dimensions
      $(window).resize(function() {
        // Get page sizes
        var arrPageSizes = ___getPageSize();
        // Style overlay and show it
        $('#jquery-overlay').css({
          width:  arrPageSizes[0],
          height: arrPageSizes[1]
        });
        // Get page scroll
        var arrPageScroll = ___getPageScroll();
        // Calculate top and left offset for the jquery-lightbox div object and show it
        $('#jquery-lightbox').css({
          top:  arrPageScroll[1] + ((arrPageSizes[3] - $('#lightbox-image').height()) / 2),
          left: arrPageScroll[0]
        });
      });  
      
      // preload the image (in this context 'this' is the object that was clicked)
      var objImagePreloader = new Image();
      objImagePreloader.src = this.getAttribute('href');

      objImagePreloader.onload = function() {
        $('#lightbox-image').attr('src', objImagePreloader.src)
      
        // Calculate top and left offset for the jquery-lightbox div object and show it
        $('#jquery-lightbox').css({
          top:  arrPageScroll[1] + ((arrPageSizes[3] - objImagePreloader.height) / 2),
          left: arrPageScroll[0]
        }).show();

        //  clear onLoad, IE behaves irratically with animated gifs otherwise
        objImagePreloader.onload=function(){};
      };

      $('#lightbox-image').fadeIn(settings.containerResizeSpeed);

      // Avoid the browser following the link
      return false; 
    }

    /**
     * Remove jQuery lightBox plugin HTML markup
     *
     */
    function _finish() {
      $('#jquery-lightbox').remove();
      $('#jquery-overlay').fadeOut(function() { $('#jquery-overlay').remove(); });
      $('embed, object, select').css({ 'visibility' : 'visible' });
    }


    /**
     / THIRD FUNCTION
     * getPageSize() by quirksmode.com
     *
     * @return Array Return an array with page width, height and window width, height
     */
    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){ // all but Explorer Mac
        xScroll = document.body.scrollWidth;
        yScroll = document.body.scrollHeight;
      } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
        xScroll = document.body.offsetWidth;
        yScroll = document.body.offsetHeight;
      }
      var windowWidth, windowHeight;
      if (self.innerHeight) {  // all except Explorer
        if(document.documentElement.clientWidth){
          windowWidth = document.documentElement.clientWidth; 
        } else {
          windowWidth = self.innerWidth;
        }
        windowHeight = self.innerHeight;
      } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
        windowWidth = document.documentElement.clientWidth;
        windowHeight = document.documentElement.clientHeight;
      } else if (document.body) { // other Explorers
        windowWidth = document.body.clientWidth;
        windowHeight = document.body.clientHeight;
      }  
      // for small pages with total height less then height of the viewport
      if(yScroll < windowHeight){
        pageHeight = windowHeight;
      } else { 
        pageHeight = yScroll;
      }
      // for small pages with total width less then width of the viewport
      if(xScroll < windowWidth){  
        pageWidth = xScroll;    
      } else {
        pageWidth = windowWidth;
      }
      arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);
      return arrayPageSize;
    };
    /**
     / THIRD FUNCTION
     * getPageScroll() by quirksmode.com
     *
     * @return Array Return an array with x,y page scroll values.
     */
    function ___getPageScroll() {
      var xScroll, yScroll;
      if (self.pageYOffset) {
        yScroll = self.pageYOffset;
        xScroll = self.pageXOffset;
      } else if (document.documentElement && document.documentElement.scrollTop) {   // Explorer 6 Strict
        yScroll = document.documentElement.scrollTop;
        xScroll = document.documentElement.scrollLeft;
      } else if (document.body) {// all other Explorers
        yScroll = document.body.scrollTop;
        xScroll = document.body.scrollLeft;  
      }
      arrayPageScroll = new Array(xScroll,yScroll);
      return arrayPageScroll;
    };
    // Return the jQuery object for chaining. The unbind method is used to avoid click conflict when the plugin is called more than once
    return this.unbind('click').click(_initialize);
  };
})(jQuery); // Call and execute the function immediately passing the jQuery object
