/*
 * jQuery PageGalery
 * http://crgdesign.com.br/blog/
 *
 * Copyright (c) 2009 Carlos Roberto Gomes Júnior
 * Licensed under CreativeCommons License.
 * 
 * Version: 1.0.0
 */
(function() {

jQuery.fn.pagegalery = function(options) {

   settings = jQuery.extend({
      opacity:0.6,
      width:700,
      height:480,
      preloaderText:'Carregando...',
      preloaderOpacity:0.6,
      preloaderTime:400,
      autoPlay:false,
      autoPlayInterval: 2500,
      playPauseControl:'#control',
      playControl:'#play',
      pauseControl:'#pause',
      type: 'json',
      imagelist: [{name:'01.jpg'}, {name:'02.jpg'}, {name:'03.jpg'}, {name:'04.jpg'}, {name:'05.jpg'}, {name:'06.jpg'}, {name:'07.jpg'}],
      useTumbList:false,
      thumbList:'#thumbs',
      firstImageIndex:0,
      animationTime:'medium',
      nextButton:'#next',
      prevButton:'#prev',
      nextButtonDisableClass:'disable',
      prevButtonDisableClass:'disable',
      enableImageNextLink:false
   }, options);
   
  var atualImage = settings.firstImageIndex;
  var _self = this;
   
  function getImageList(type){
    images = new Array();
    
    switch (type){
      case 'json':
        images = settings.imagelist;
      break;
      
      case 'list':
         $(settings.imagelist).find('a').each(function(i){
            var anchor = $(this);
            var src = anchor.attr("href");
            var title = anchor.text();
            images.push(eval('({"name":"'+src+'", "title":"'+title+'"})'));
         });
         $(settings.imagelist).hide();
      break;
   
      case 'thumbs':
         $(settings.imagelist).find('a').each(function(i){
            var anchor = $(this);
            var src = anchor.attr("href");
            var title = anchor.attr("title");
            images.push(eval('({"name":"'+src+'", "title":"'+title+'"})'));
         });
      break;
    }
    return images;
  }
  
  var arrayImages = getImageList(settings.type);
  

  function loadImage(i){

    var numImages = arrayImages.length;
    var imgUrl = arrayImages[i].name;
    var title = arrayImages[i].title;
    var args = [i, title, numImages];
    var img = new Image();
    $("#page-galery-preloader").animate({opacity:settings.preloaderOpacity}, settings.preloaderTime);
    $(img)
    .load(function () {
      $("#page-galery-preloader").animate({opacity:0}, settings.preloaderTIme);
        img = this;
        if($("#page-galery-image img").length == 1) {
          $("#page-galery-image img").fadeOut(settings.animationTime, function(){
            $('#page-galery-image').empty().append(img);
            $(img).hide().fadeIn(settings.animationTime); 
          });
          $(_self).trigger('imagechange', args);  
        } else {
          $('#page-galery-image').empty().append(img);
          $(_self).trigger('init', args);
        }
      
    })    
    .error(function () {
    //tratar o erro!
    alert("Erro ao carregar a imagem!");
    })
    .attr('src', imgUrl);
  }
  
  function nextImage(cycle) {
    if( atualImage < (arrayImages.length-1) ) {
      loadImage(atualImage + 1);
      atualImage++;
      
      if(  $(settings.prevButton).hasClass(settings.prevButtonDisableClass) ) {
        $(settings.prevButton).removeClass(settings.prevButtonDisableClass);
      }
    } else if(cycle) {
      atualImage = 0;
      loadImage(atualImage);
      $(settings.nextButton).removeClass(settings.nextButtonDisableClass);
    }
    
    if( ! $(settings.nextButton).hasClass(settings.nextButtonDisableClass) && atualImage == (arrayImages.length-1) ) {
      $(settings.nextButton).addClass(settings.nextButtonDisableClass);
    }      
    
  }
  
  function prevImage() {
    if( atualImage > 0 ) {
      loadImage(atualImage - 1);
      atualImage--;
      
      if(  $(settings.nextButton).hasClass(settings.nextButtonDisableClass) ) {
        $(settings.nextButton).removeClass(settings.nextButtonDisableClass);
      }
    }
  
    if( ! $(settings.prevButton).hasClass(settings.prevButtonDisableClass) && atualImage == 0 ) {
      $(settings.prevButton).addClass(settings.prevButtonDisableClass);
    } 
  }

  $(settings.nextButton).bind('click', function(e){
    nextImage(false);
    e.preventDefault();
  });
    
  $(settings.prevButton).bind('click', function(e){
    prevImage();
    e.preventDefault();
  });
  
  
  if( settings.useThumbList ) {
      var thumbAnchor = $( settings.imagelist ).find('a');
      thumbAnchor.bind('click', function( e ){
         var index = thumbAnchor.index(this);
         e.preventDefault();
         loadImage( index );
      });
      
  } 
  
  
  var player =  {
   
   idInterval:false,
   
   autoPlay:function(){
      this.idInterval = window.setInterval(function(){ nextImage( true ) }, settings.autoPlayInterval);
   },
   
   play:function(){
         if( this.idInterval == false ) {
         nextImage( true );
         this.autoPlay();
      }
   },
   
   pause:function(){
      if ( this.idInterval != false ) {
         window.clearInterval(this.idInterval);
         this.idInterval = false;     
      }

   }
   
  }
  
  function init(target){
    if ($('#pagegalery').length == 0){
      target.append('<div id="pagegalery"><div id="page-galery-loading"><div id="page-galery-preloader">'+settings.preloaderText+'</div></div><div id="page-galery-image"></div></div>');
    }
    
    if( arrayImages.length > 1) {
      $(settings.prevButton).addClass(settings.prevButtonDisableClass);
      $(settings.nextButton).removeClass(settings.nextButtonDisableClass);
    } else {
      $(settings.prevButton).addClass(settings.prevButtonDisableClass);
      $(settings.nextButton).addClass(settings.nextButtonDisableClass);
    }

      
    $("#pagegalery").css({ width:settings.width, height:settings.height });
    $("#page-galery-loading").css({ width:settings.width });
    $("#page-galery-preloader").css({ top:(settings.height/2), opacity:settings.opacity }).css({opacity:0});
    loadImage(settings.firstImageIndex);
    

   $(settings.playControl).bind('click', function(){
      player.play();
   });
   
   $(settings.pauseControl).bind('click', function(){
      player.pause();
   });
   
   $( settings.playPauseControl ).bind('click', function(){
      if( ! player.idInterval ) {
         player.play();
      } else {
         player.pause();
      }
   });
      
      
    if( settings.autoPlay ){
      $(_self).bind('init', function(){
         player.autoPlay();
      });
    }
    
    
    if( settings.enableImageNextLink && arrayImages.length > 1 ){
      $("#pagegalery").css({cursor:'pointer'});
      $("#pagegalery img").live('click', function(e){
        nextImage(true);
      });      
    }

  }
  
  this.bind('remove', function(){
      $('#pagegalery').remove();
  });
  
   return this.each(function(){
        init($(this));
   });
  
};

})(jQuery);

