/* ------------------------------------------------------------------------
  Class: prettyPhoto
  Use: Lightbox clone for jQuery
  Author: Stephane Caron (http://www.no-margin-for-errors.com)
  Version: 2.2.2
------------------------------------------------------------------------- */

  $.fn.prettyPhoto = function(settings) {
    // global Variables
    var isSet = false; /* Total position in the array */
    var setCount = 0; /* Total images in the set */
    var setPosition = 0; /* Position in the set */
    var arrayPosition = 0; /* Total position in the array */
    var hasTitle = false;
    var caller = 0;
    var doresize = true;
    var imagesArray = [];

    $(window).scroll(function(){ _centerPicture(); });
    $(window).resize(function(){ _centerPicture(); _resizeOverlay(); });
    $(document).keyup(function(e){
      switch(e.keyCode){
        case 37:
          if (setPosition == 1) return;
          changePicture('previous');
          break;
        case 39:
          if (setPosition == setCount) return;
          changePicture('next');
          break;
        case 27:
          close();
          break;
      };
      });


    settings = jQuery.extend({
      animationSpeed: 'normal', /* fast/slow/normal */
      padding: 20, /* padding for each side of the picture */
      opacity: 0.35, /* Value betwee 0 and 1 */
      showTitle: true, /* true/false */
      allowresize: false, /* true/false */
      counter_separator_label: '/' /* Teh separator for the gallery counter 1 "of" 2 */
    }, settings);

    $(this).each(function(){
      imagesArray[imagesArray.length] = this;
      $(this).bind('click',function(){
        open(this); return false;
      });
    });

    function open(el) {
      caller = $(el);

      if (group = caller.attr('rel').match(/appendtogroup\(([^\]]+)\)/)){
        group = group[1];
        nodes = $("a[rel^='prettyPhoto["+group+"]']");
        for (var i=0; i<nodes.length; i++){
          if (nodes[i].href == el.href){
            return open(nodes[i]);
          }
        }
      }

      // Find out if the picture is part of a set
      theRel = $(caller).attr('rel');
      galleryRegExp = /\[(?:.*)\]/;
      theGallery = galleryRegExp.exec(theRel);

      // Find out the type of content
      contentType = "image";
      if($(caller).attr('href').indexOf('.swf') > 0){ hasTitle = false; contentType = 'flash'; };

      // Calculate the number of items in the set, and the position of the clicked picture.
      isSet = false;
      setCount = 0;
      for (i = 0; i < imagesArray.length; i++){
        if($(imagesArray[i]).attr('rel').indexOf(theGallery) != -1){
        //  if ($(imagesArray[i]).attr('rel').indexOf('ignore') == -1){
            setCount++;
            if(setCount > 1) isSet = true;

            if($(imagesArray[i]).attr('href') == $(el).attr('href')){
              setPosition = setCount;
              arrayPosition = i;
            };
        //  };
        };
      };

      _buildOverlay(isSet);

      // Display the current position
      $('div.pictureHolder p.currentTextHolder').text(setPosition + settings.counter_separator_label + setCount);

      // Position the picture in the center of the viewing area
      _centerPicture();

      $('div.pictureHolder #fullResImageContainer').hide();
      $('.loaderIcon').show();

      // Display the correct type of information
      (contentType == 'image') ? _preload() : _writeFlash();
    };

    showimage = function(width,height,containerWidth,containerHeight,contentHeight,contentWidth,resized){
      $('.loaderIcon').hide();
      var scrollPos = _getScroll();

      if($.browser.opera) {
        windowHeight = window.innerHeight;
        windowWidth = window.innerWidth;
      }else{
        windowHeight = $(window).height();
        windowWidth = $(window).width();
      };

      $('div.pictureHolder .content').animate({'height':contentHeight,'width':containerWidth},settings.animationSpeed);

      projectedTop = scrollPos['scrollTop'] + ((windowHeight/2) - (containerHeight/2));
      if(projectedTop < 0) projectedTop = 0 + $('div.prettyPhotoTitle').height();

      // Resize the holder
      $('div.pictureHolder').animate({
        'top': projectedTop,
        'left': ((windowWidth/2) - (containerWidth/2)),
        'width': containerWidth
      },settings.animationSpeed,function(){
        $('#fullResImage').attr({
          'width':width,
          'height':height
        });

        $('div.pictureHolder').width(containerWidth);
        $('div.pictureHolder .hoverContainer').height(height).width(width);

        // Show the nav elements
        _shownav();

        // Fade the new image
        $('div.pictureHolder #fullResImageContainer').fadeIn(settings.animationSpeed);

        // Fade the resizing link if the image is resized
        if(resized) $('a.expand,a.contract').fadeIn(settings.animationSpeed);
      });
    };

    function changePicture(direction){
      if(direction == 'previous') {
        arrayPosition--;
        setPosition--;
      }else{
        arrayPosition++;
        setPosition++;
      };

      // Allow the resizing of the images
      if(!doresize) doresize = true;

      // Fade out the current picture
      $('div.pictureHolder .hoverContainer,div.pictureHolder .details').fadeOut(settings.animationSpeed);
      $('div.pictureHolder #fullResImageContainer').fadeOut(settings.animationSpeed,function(){
        $('.loaderIcon').show();

        // Preload the image
        _preload();
      });

      _hideTitle();
      $('a.expand,a.contract').fadeOut(settings.animationSpeed,function(){
        $(this).removeClass('contract').addClass('expand');
      });
    };

    function close(){
      $('div.pictureHolder,div.prettyPhotoTitle').fadeOut(settings.animationSpeed, function(){
        $('div.prettyPhotoOverlay').fadeOut(settings.animationSpeed, function(){
          $('div.prettyPhotoOverlay,div.pictureHolder,div.prettyPhotoTitle').remove();

          // To fix the bug with IE select boxes
          if($.browser.msie && $.browser.version == 6){
            $('select').css('visibility','visible');
          };
        });
      });
    };

    function _checkPosition(){
      // If at the end, hide the next link
      if(setPosition == setCount) {
        $('div.pictureHolder a.next').css('visibility','hidden');
        $('div.pictureHolder a.arrow_next').addClass('disabled').unbind('click');
      }else{
        $('div.pictureHolder a.next').css('visibility','visible');
        $('div.pictureHolder a.arrow_next.disabled').removeClass('disabled').bind('click',function(){
          changePicture('next');
          return false;
        });
      };

      // If at the beginning, hide the previous link
      if(setPosition == 1) {
        $('div.pictureHolder a.previous').css('visibility','hidden');
        $('div.pictureHolder a.arrow_previous').addClass('disabled').unbind('click');
      }else{
        $('div.pictureHolder a.previous').css('visibility','visible');
        $('div.pictureHolder a.arrow_previous.disabled').removeClass('disabled').bind('click',function(){
          changePicture('previous');
          return false;
        });
      };

      // Change the current picture text
      $('div.pictureHolder p.currentTextHolder').text(setPosition + settings.counter_separator_label + setCount);

      (isSet) ? $c = $(imagesArray[arrayPosition]) : $c = $(caller);

      if($c.attr('title')){
        $('div.pictureHolder .description').show().html(unescape($c.attr('title')));
      }else{
        $('div.pictureHolder .description').hide().text('');
      };
      if($c.find('img').attr('alt') && settings.showTitle){
        hasTitle = true;
        $('div.prettyPhotoTitle .prettyPhotoTitleContent').html(unescape($c.find('img').attr('alt')));
      }else{
        hasTitle = false;
      };
    };

    function _fitToViewport(width,height){
      hasBeenResized = false;

      $('div.pictureHolder .details').width(width); /* To have the correct height */
      $('div.pictureHolder .details p.description').width(width - parseFloat($('div.pictureHolder .nav').css('width'))); /* So it doesn't overlap the button */

      // Get the container size, to resize the holder to the right dimensions
      contentHeight = height + parseFloat($('div.pictureHolder .details').height()) + parseFloat($('div.pictureHolder .details').css('margin-top')) + parseFloat($('div.pictureHolder .details').css('margin-bottom'));
      contentHeight += parseFloat($('div.pictureHolder .headerblock').height());
      contentWidth = width;

      containerHeight = height + parseFloat($('div.prettyPhotoTitle').height()) + parseFloat($('div.pictureHolder .top').height()) + parseFloat($('div.pictureHolder .bottom').height());

      containerWidth = width + settings.padding;

      // Define them in case there's no resize needed
      imageWidth = width;
      imageHeight = height;

      if($.browser.opera) {
        windowHeight = window.innerHeight;
        windowWidth = window.innerWidth;
      }else{
        windowHeight = $(window).height();
        windowWidth = $(window).width();
      };

      if( ((containerWidth > windowWidth) || (containerHeight > windowHeight)) && doresize && settings.allowresize) {
        hasBeenResized = true;

        if((containerWidth > windowWidth) && (containerHeight > windowHeight)){
          // Get the original geometry and calculate scales
          var xscale =  (containerWidth + 200) / windowWidth;
          var yscale = (containerHeight + 200) / windowHeight;
        }else{
          // Get the original geometry and calculate scales
          var xscale = windowWidth / containerWidth;
          var yscale = windowHeight / containerHeight;
        }

        // Recalculate new size with default ratio
        if (yscale>xscale){
          imageWidth = Math.round(width * (1/yscale));
          imageHeight = Math.round(height * (1/yscale));
        } else {
          imageWidth = Math.round(width * (1/xscale));
          imageHeight = Math.round(height * (1/xscale));
        };

        // Define the new dimensions
        contentHeight = imageHeight + parseFloat($('div.pictureHolder .details').height()) + parseFloat($('div.pictureHolder .details').css('margin-top')) + parseFloat($('div.pictureHolder .details').css('margin-bottom'));
        contentHeight += parseFloat($('div.pictureHolder .headerblock').height());
        contentWidth = imageWidth;
        containerHeight = imageHeight + parseFloat($('div.prettyPhotoTitle').height()) + parseFloat($('div.pictureHolder .top').height()) + parseFloat($('div.pictureHolder .bottom').height());

        containerWidth = imageWidth + settings.padding;

        $('div.pictureHolder .details').width(contentWidth); /* To have the correct height */
        $('div.pictureHolder .details p.description').width(contentWidth - parseFloat($('div.pictureHolder a.close').css('width'))); /* So it doesn't overlap the button */
      };

      return {
        width:imageWidth,
        height:imageHeight,
        containerHeight:containerHeight,
        containerWidth:containerWidth,
        contentHeight:contentHeight,
        contentWidth:contentWidth,
        resized:hasBeenResized
      };
    };

    function _centerPicture(){
      //Make sure the gallery is open
      if($('div.pictureHolder').size() > 0){

        var scrollPos = _getScroll();

        if($.browser.opera) {
          windowHeight = window.innerHeight;
          windowWidth = window.innerWidth;
        }else{
          windowHeight = $(window).height();
          windowWidth = $(window).width();
        };

        if(doresize) {
          projectedTop = (windowHeight/2) + scrollPos['scrollTop'] - ($('div.pictureHolder').height()/2);
          if(projectedTop < 0) projectedTop = 0 + $('div.prettyPhotoTitle').height();

          $('div.pictureHolder').css({
            'top': projectedTop,
            'left': (windowWidth/2) + scrollPos['scrollLeft'] - ($('div.pictureHolder').width()/2)
          });

          $('div.prettyPhotoTitle').css({
            'top' : $('div.pictureHolder').offset().top - $('div.prettyPhotoTitle').height(),
            'left' : $('div.pictureHolder').offset().left + (settings.padding/2)
          });
        };
      };
    };

    function _shownav(){
      if(isSet) $('div.pictureHolder .hoverContainer').fadeIn(settings.animationSpeed);
      $('div.pictureHolder .details').fadeIn(settings.animationSpeed);

      _showTitle();
    };

    function _showTitle(){
      if(settings.showTitle && hasTitle){
        $('div.prettyPhotoTitle').css({
          'top' : $('div.pictureHolder').offset().top,
          'left' : $('div.pictureHolder').offset().left + (settings.padding/2),
          'display' : 'block'
        });

        $('div.prettyPhotoTitle div.prettyPhotoTitleContent').css('width','auto');

        if($('div.prettyPhotoTitle').width() > $('div.pictureHolder').width()){
          $('div.prettyPhotoTitle div.prettyPhotoTitleContent').css('width',$('div.pictureHolder').width() - (settings.padding * 2));
        }else{
          $('div.prettyPhotoTitle div.prettyPhotoTitleContent').css('width','');
        };

        $('div.prettyPhotoTitle').animate({'top':($('div.pictureHolder').offset().top - 22)},settings.animationSpeed);
      };
    };

    function _hideTitle() {
      $('div.prettyPhotoTitle').animate({'top':($('div.pictureHolder').offset().top)},settings.animationSpeed,function() { $(this).css('display','none'); });
    };

    function _preload(){
      // Hide the next/previous links if on first or last images.
      _checkPosition();

      // Set the new image
      imgPreloader = new Image();

      // Preload the neighbour images
      nextImage = new Image();
      if(isSet) nextImage.src = $(imagesArray[arrayPosition + 1]).attr('href');
      prevImage = new Image();
      if(isSet && imagesArray[arrayPosition - 1]) prevImage.src = $(imagesArray[arrayPosition - 1]).attr('href');

      $('div.pictureHolder .content').css('overflow','hidden');

      if(isSet) {
        $('div.pictureHolder #fullResImage').attr('src',$(imagesArray[arrayPosition]).attr('href'));
      }else{
        $('div.pictureHolder #fullResImage').attr('src',$(caller).attr('href'));
      };

      imgPreloader.onload = function(){
        var correctSizes = _fitToViewport(imgPreloader.width,imgPreloader.height);
        imgPreloader.width = correctSizes['width'];
        imgPreloader.height = correctSizes['height'];

        // Need that small delay for the anim to be nice
        setTimeout('showimage(imgPreloader.width,imgPreloader.height,'+correctSizes["containerWidth"]+','+correctSizes["containerHeight"]+','+correctSizes["contentHeight"]+','+correctSizes["contentWidth"]+','+correctSizes["resized"]+')',500);
      };

      (isSet) ? imgPreloader.src = $(imagesArray[arrayPosition]).attr('href') : imgPreloader.src = $(caller).attr('href');
    };

    function _getScroll(){
      scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0;
      scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || 0;
      return {scrollTop:scrollTop,scrollLeft:scrollLeft};
    };

    function _resizeOverlay() {
      $('div.prettyPhotoOverlay').css({
        'height':$(document).height(),
        'width':$(window).width()
      });
    };

    function _writeFlash(){
      flashParams = $(caller).attr('rel').split(';');
      $(flashParams).each(function(i){
        // Define the width and height
        if(flashParams[i].indexOf('width') >= 0) flashWidth = flashParams[i].substring(flashParams[i].indexOf('width') + 6, flashParams[i].length);
        if(flashParams[i].indexOf('height') >= 0) flashHeight = flashParams[i].substring(flashParams[i].indexOf('height') + 7, flashParams[i].length);
        if(flashParams[i].indexOf('flashvars') >= 0) flashVars = flashParams[i].substring(flashParams[i].indexOf('flashvars') + 10, flashParams[i].length);
      });

      $('.pictureHolder #fullResImageContainer').append('<embed width="'+flashWidth+'" height="'+flashHeight+'" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" wmode="opaque" name="prettyFlash" flashvars="'+flashVars+'" allowscriptaccess="always" bgcolor="#FFFFFF" quality="high" src="'+$(caller).attr('href')+'"/>');
      $('#fullResImage').hide();

      contentHeight = parseFloat(flashHeight) + parseFloat($('div.pictureHolder .details').height()) + parseFloat($('div.pictureHolder .details').css('margin-top')) + parseFloat($('div.pictureHolder .details').css('margin-bottom'));
      contentWidth = parseFloat(flashWidth)+ parseFloat($('div.pictureHolder .details').width()) + parseFloat($('div.pictureHolder .details').css('margin-left')) + parseFloat($('div.pictureHolder .details').css('margin-right'));
      containerHeight = contentHeight + parseFloat($('div.pictureHolder .top').height()) + parseFloat($('div.pictureHolder .bottom').height());
      containerWidth = parseFloat(flashWidth) + parseFloat($('div.pictureHolder .content').css("padding-left")) + parseFloat($('div.pictureHolder .content').css("padding-right")) + settings.padding;

      setTimeout('showimage('+flashWidth+','+flashHeight+','+containerWidth+','+containerHeight+','+contentHeight+','+contentWidth+')',500);
    };

    function _buildOverlay(){

      // Build the background overlay div
      backgroundDiv = "<div class='prettyPhotoOverlay'></div>";
      $('body').append(backgroundDiv);
      $('div.prettyPhotoOverlay').css('height',$(document).height()).bind('click',function(){
        close();
      });

      // Basic HTML for the picture holder
      pictureHolder = '<div class="pictureHolder"><div class="top"><div class="left"></div><div class="middle"></div><div class="right"></div></div><div class="content"><div class="headerblock"><a href="#" class="close" title="Close">X</a></div><div class="loaderIcon"></div><div class="hoverContainer"><a class="next" href="#">&gt;&gt;</a><a class="previous" href="#">&lt;&lt;</a></div><div id="fullResImageContainer"><img id="fullResImage" src="/wm/f/e.gif" /></div><div class="details clearfix" style="height: 44px;"><a class="close" href="#" style="display: none;">X</a><p class="description"></p><div class="nav"><a href="#" class="arrow_next">&gt;&gt;</a><a href="#" class="arrow_previous">&lt;&lt;</a></div><p class="currentTextHolder">0'+settings.counter_separator_label+'0</p></div></div><div class="bottom"><div class="left"></div><div class="middle"></div><div class="right"></div></div></div>';

      // Basic html for the title holder
      titleHolder = '<div class="prettyPhotoTitle"><div class="prettyPhotoTitleLeft"></div><div class="prettyPhotoTitleContent"></div><div class="prettyPhotoTitleRight"></div></div>';

      $('body').append(pictureHolder).append(titleHolder);

      $('.pictureHolder,.titleHolder').css({'opacity': 0});
      $('a.close').bind('click',function(){ close(); return false; });
      $('a.expand').bind('click',function(){

        // Expand the image
        if($(this).hasClass('expand')){
          $(this).removeClass('expand').addClass('contract');
          doresize = false;
        }else{
          $(this).removeClass('contract').addClass('expand');
          doresize = true;
        };

        _hideTitle();
        $('div.pictureHolder .hoverContainer,div.pictureHolder #fullResImageContainer').fadeOut(settings.animationSpeed);
        $('div.pictureHolder .details').fadeOut(settings.animationSpeed,function(){
          _preload();
        });

        return false;
      });

      $('.pictureHolder .previous,.pictureHolder .arrow_previous').bind('click',function(){
        changePicture('previous');
        return false;
      });

      $('.pictureHolder .next,.pictureHolder .arrow_next').bind('click',function(){
        changePicture('next');
        return false;
      });

      $('.hoverContainer').css({
        'margin-left': settings.padding/2
      });

      $('.hoverContainer').css({
        'top': $('div.pictureHolder .headerblock').height()
      });


      // If it's not a set, hide the links
      if(!isSet) {
        $('.hoverContainer,.nav').hide();
      };


      // To fix the bug with IE select boxes
      if($.browser.msie && $.browser.version == 6){
        $('select').css('visibility','hidden');
      };

      // Then fade it in
      $('div.prettyPhotoOverlay').css('opacity',0).fadeTo(settings.animationSpeed,settings.opacity, function(){
        $('div.pictureHolder').css('opacity',0).fadeIn(settings.animationSpeed,function(){
          // To fix an IE bug
          $('div.pictureHolder').attr('style','left:'+$('div.pictureHolder').css('left')+';top:'+$('div.pictureHolder').css('top')+';');
        });
      });
    };
  };


$(function() {
  $("a[rel^='prettyPhoto']").prettyPhoto();

  // disable prettyphoto for the small images...
  if (window.bind_click)
    window.bind_click();
});
