/**
 * jQuery Skitter Slideshow
 * @name jquery.skitter.js
 * @description Slideshow
 * @author Thiago Silva Ferreira - http://thiagosf.net
 * @version 4.4.0
 * @created August 04, 2010
 * @updated July 01, 2015
 * @copyright (c) 2010 Thiago Silva Ferreira - http://thiagosf.net
 * @license Dual licensed under the MIT or GPL Version 2 licenses
 * @example http://thiagosf.net/projects/jquery/skitter/
 */
;(function($) {
  
  var number_skitter = 0,
    skitters = [];
  
  $.fn.skitter = function(options) {
    return this.each(function() {
      if ( $(this).data('skitter_number') == undefined ) {
        $(this).data('skitter_number', number_skitter);
        skitters.push(new $sk(this, options, number_skitter));
        ++number_skitter;
      }
    });
  };
  
  var defaults = {
    // Animation velocity
    velocity:         1,

    // Interval between transitions
    interval:         2500, 

    // Default animation
    animation:        '',

    // Numbers display
    numbers:        true,

    // Navigation display
    navigation:       true,

    // Label display
    label:          true,

    // Easing default
    easing_default:     '',

    // The skitters box (internal)
    box_skitter:      null,

    // @deprecated
    time_interval:      null,

    // Image link (internal)
    images_links:       null,

    // Actual image (internal)
    image_atual:      null,

    // Actual link (internal)
    link_atual:       null,

    // Actual label (internal)
    label_atual:      null,

    // Actual target (internal)
    target_atual:       '_self',

    // Skitter width (internal)
    width_skitter:      null,

    // Skitter height (internal)
    height_skitter:     null,

    // Image number loop (internal)
    image_i:        1,

    // Is animating (internal)
    is_animating:       false,

    // Is hover box_skitter (internal)
    is_hover_box_skitter:   false,

    // Smart randomly (internal)
    random_ia:        null,

    // Randomly sliders
    show_randomly:      false,

    // Navigation with thumbs
    thumbs:         false,

    // Animation/style number/dot
    animateNumberOut:     false,

    // Animation/style hover number/dot
    animateNumberOver:    false,

    // Animation/style active number/dot
    animateNumberActive:  false,

    // Hide numbers and navigation
    hideTools:        false,

    // Fullscreen mode
    fullscreen:       false,

    // Loading data from XML file
    xml:          false,

    // Navigation with dots
    dots:           false,

    // Width label
    width_label:      null,

    // Final opacity of elements in hideTools
    opacity_elements:   0.75,

    // Interval animation hover elements hideTools 
    interval_in_elements: 200, 

    // Interval animation out elements hideTools
    interval_out_elements:  300, 

    // Onload Callback
    onLoad:         null,

    // Function call to change image
    imageSwitched:      null,

    // @deprecated
    max_number_height:    20,

    // Alignment of numbers/dots/thumbs
    numbers_align:      'left',

    // Preview with dots
    preview:        false,

    // Focus slideshow
    focus:          false,

    // Focus active (internal)
    foucs_active:     false,

    // Position of button focus slideshow
    focus_position:     'center',

    // Option play/pause manually
    controls:       false,

    // Position of button controls
    controls_position:    'center',

    // Displays progress bar
    progressbar:      false,

    // CSS progress bar
    progressbar_css:    {},

    // Is paused (internal)
    is_paused:        false,

    // Is blur (internal)
    is_blur:        false,

    // Is paused time (internal)
    is_paused_time:     false,

    // Time start (internal)
    timeStart:        0,

    // Elapsed time (internal)
    elapsedTime:      0,

    // Stop animation to move mouse over it.
    stop_over:        true,

    // Enable navigation keys
    enable_navigation_keys: false,

    // Specific animations
    with_animations:    [],

    // Function call to go over the navigation buttons
    // mouseOverButton:     function() { $(this).stop().animate({opacity:0.5}, 200); }, 
    mouseOverButton:    null, 

    // Function call to go out the navigation buttons
    // mouseOutButton:    function() { $(this).stop().animate({opacity:1}, 200); }, 
    mouseOutButton:     null, 

    // Sets whether the slideshow will start automatically
    auto_play:        true, 

    // Label animation type
    labelAnimation:     'slideUp', 

    // Theme
    theme: null, 

    // Structure (internal)
    structure:          '<a href="#" class="prev_button">prev</a>'
                + '<a href="#" class="next_button">next</a>'
                + '<span class="info_slide"></span>'
                + '<div class="container_skitter">'
                  + '<div class="image">'
                    + '<a href=""><img class="image_main" /></a>'
                    + '<div class="label_skitter"></div>'
                  + '</div>'
                + '</div>'
    
  };
  
  $.skitter = function(obj, options, number) {
    this.box_skitter = $(obj);
    this.timer = null;
    this.settings = $.extend({}, defaults, options || {});
    this.number_skitter = number;
    this.setup();
  };
  
  // Shortcut
  var $sk = $.skitter;
  
  $sk.fn = $sk.prototype = {};
  
  $sk.fn.extend = $.extend;
  
  $sk.fn.extend({
    
    /**
     * Init
     */
    setup: function() 
    {
      var self = this;

      // Fullscreen
      if (this.settings.fullscreen) {
        var width = $(window).width();
        var height = $(window).height();
        this.box_skitter.width(width).height(height);
        this.box_skitter.css({'position':'absolute', 'top':0, 'left':0, 'z-index':1000});
        this.settings.stop_over = false;
        $('body').css({'overflown':'hidden'});
      }
      
      this.settings.width_skitter   = parseFloat(this.box_skitter.css('width'));
      this.settings.height_skitter  = parseFloat(this.box_skitter.css('height'));
      
      if (!this.settings.width_skitter || !this.settings.height_skitter) {
        console.warn('Width or height size is null! - Skitter Slideshow');
        return false;
      }

      // Theme
      if ( this.settings.theme ) {
        this.box_skitter.addClass('skitter-' + this.settings.theme);
      }
      
      // Structure html
      this.box_skitter.append(this.settings.structure);
      
      // Settings
      this.settings.easing_default  = this.getEasing(this.settings.easing);
            
      if (this.settings.velocity >= 2) this.settings.velocity = 1.3;
      if (this.settings.velocity <= 0) this.settings.velocity = 1;
      
      this.box_skitter.find('.info_slide').hide();
      this.box_skitter.find('.label_skitter').hide();
      this.box_skitter.find('.prev_button').hide();
      this.box_skitter.find('.next_button').hide();
            
      this.box_skitter.find('.container_skitter').width(this.settings.width_skitter);
      this.box_skitter.find('.container_skitter').height(this.settings.height_skitter);
      
      var width_label = this.settings.width_label ? this.settings.width_label : this.settings.width_skitter;
      this.box_skitter.find('.label_skitter').width(width_label);
      
      var initial_select_class = ' image_number_select', u = 0;
      this.settings.images_links = new Array();
      
      // Add image, link, animation type and label
      var addImageLink = function (link, src, animation_type, label, target) {
        self.settings.images_links.push([src, link, animation_type, label, target]);
        if (self.settings.thumbs) {
          var dimension_thumb = '';
          if (self.settings.width_skitter > self.settings.height_skitter) {
            dimension_thumb = 'height="100"';
          } 
          else {
            dimension_thumb = 'width="100"';
          }
          self.box_skitter.find('.info_slide').append(
            '<span class="image_number'+initial_select_class+'" rel="'+(u - 1)+'" id="image_n_'+u+'_'+self.number_skitter+'">'
              +'<img src="'+src+'" '+dimension_thumb+' />'
              +'</span> '
          );
        }
        else {
          self.box_skitter.find('.info_slide').append(
            '<span class="image_number'+initial_select_class+'" rel="'+(u - 1)+'" id="image_n_'+u+'_'+self.number_skitter+'">'+u+'</span> '
          );
        }
        initial_select_class = '';
      };

      // Load from XML
      if (this.settings.xml) {
        $.ajax({
          type: 'GET',
          url: this.settings.xml,
          async: false,
          dataType: 'xml',
          success: function(xml) {
            var ul = $('<ul></ul>');
            $(xml).find('skitter slide').each(function(){
              ++u;
              var link      = ($(this).find('link').text()) ? $(this).find('link').text() : '#';
              var src       = $(this).find('image').text();
              var animation_type  = $(this).find('image').attr('type');
              var label       = $(this).find('label').text();
              var target      = ($(this).find('target').text()) ? $(this).find('target').text() : '_self';
              addImageLink(link, src, animation_type, label, target);
            });
          }
        });
      }
      // Load from json
      else if (this.settings.json) {
        
      }
      // Load from HTML
      else {
        this.box_skitter.find('ul li').each(function(){
          ++u;
          var link      = ($(this).find('a').length) ? $(this).find('a').attr('href') : '#';
          var src       = $(this).find('img').attr('src');
          var animation_type  = $(this).find('img').attr('class');
          var label       = $(this).find('.label_text').html();
          var target      = ($(this).find('a').length && $(this).find('a').attr('target')) ? $(this).find('a').attr('target') : '_self';
          addImageLink(link, src, animation_type, label, target);
        });
      }
      
      // Thumbs
      if (self.settings.thumbs && !self.settings.fullscreen) 
      {
        // New animation
        self.settings.animateNumberOut = {opacity:0.3};
        self.settings.animateNumberOver = {opacity:0.5};
        self.settings.animateNumberActive = {opacity:1};
        
        self.box_skitter.find('.info_slide').addClass('info_slide_thumb');
        var width_info_slide = (u + 1) * self.box_skitter.find('.info_slide_thumb .image_number').width();
        self.box_skitter.find('.info_slide_thumb').width(width_info_slide);
        self.box_skitter.css({height:self.box_skitter.height() + self.box_skitter.find('.info_slide').height()});
        
        self.box_skitter.append('<div class="container_thumbs"></div>');
        var copy_info_slide = self.box_skitter.find('.info_slide').clone();
        self.box_skitter.find('.info_slide').remove();
        self.box_skitter.find('.container_thumbs')
          .width(self.settings.width_skitter)
          .append(copy_info_slide);
        
        // Scrolling with mouse movement
        var width_image = 0, 
          width_skitter = this.settings.width_skitter,
          height_skitter = this.settings.height_skitter, 
          w_info_slide_thumb = 0,
          info_slide_thumb = self.box_skitter.find('.info_slide_thumb'),
          x_value = 0,
          y_value = self.box_skitter.offset().top;
          
        info_slide_thumb.find('.image_number').each(function(){
          width_image += $(this).outerWidth();
        });
        
        info_slide_thumb.width(width_image+'px');
        w_info_slide_thumb = info_slide_thumb.width();
        width_value = this.settings.width_skitter;
        
        width_value = width_skitter - 100;
        
        if (width_info_slide > self.settings.width_skitter) {
          self.box_skitter.mousemove(function(e){
            x_value = self.box_skitter.offset().left + 90;
            
            var x = e.pageX, y = e.pageY, new_x = 0;
            
            x = x - x_value;
            y = y - y_value;
            novo_width = w_info_slide_thumb - width_value;
            new_x = -((novo_width * x) / width_value);
            
            if (new_x > 0) new_x = 0;
            if (new_x < -(w_info_slide_thumb - width_skitter)) new_x = -(w_info_slide_thumb - width_skitter);
            
            if (y > height_skitter) {
              info_slide_thumb.css({left: new_x});
            }
          });
        }
        
        self.box_skitter.find('.scroll_thumbs').css({'left':10});
        
        if (width_info_slide < self.settings.width_skitter) {
          self.box_skitter.find('.info_slide').width('auto');
          self.box_skitter.find('.box_scroll_thumbs').hide();
          
          var class_info = '.info_slide';
          switch (self.settings.numbers_align) {
            case 'center' : 
              var _vleft = (self.settings.width_skitter - self.box_skitter.find(class_info).width()) / 2;
              self.box_skitter.find(class_info).css({'left':_vleft});
              break;
              
            case 'right' : 
              self.box_skitter.find(class_info).css({'left':'auto', 'right':'-5px'});
              break;
              
            case 'left' : 
              self.box_skitter.find(class_info).css({'left':'0px'});
              break;
          }
        }
        
      }
      else 
      {
        var class_info = '.info_slide';
        
        if (self.settings.dots) {
          self.box_skitter.find('.info_slide').addClass('info_slide_dots').removeClass('info_slide');
          class_info = '.info_slide_dots';
        }
        
        switch (self.settings.numbers_align) {
          case 'center' : 
            var _vleft = (self.settings.width_skitter - self.box_skitter.find(class_info).width()) / 2;
            self.box_skitter.find(class_info).css({'left':_vleft});
            break;
            
          case 'right' : 
            self.box_skitter.find(class_info).css({'left':'auto', 'right':'15px'});
            break;
            
          case 'left' : 
            self.box_skitter.find(class_info).css({'left':'15px'});
            break;
        }
        
        if (!self.settings.dots) {
          if (self.box_skitter.find('.info_slide').height() > 20) {
            self.box_skitter.find('.info_slide').hide();
          }
        }
      }
      
      this.box_skitter.find('ul').hide();
      
      if (this.settings.show_randomly)
      this.settings.images_links.sort(function(a,b) {return Math.random() - 0.5;});
      
      this.settings.image_atual   = this.settings.images_links[0][0];
      this.settings.link_atual  = this.settings.images_links[0][1];
      this.settings.label_atual   = this.settings.images_links[0][3];
      this.settings.target_atual  = this.settings.images_links[0][4];
      
      if (this.settings.images_links.length > 1) 
      {
        this.box_skitter.find('.prev_button').click(function() {
          if (self.settings.is_animating == false) {
            
            self.settings.image_i -= 2;
            
            if (self.settings.image_i == -2) {
              self.settings.image_i = self.settings.images_links.length - 2;
            } 
            else if (self.settings.image_i == -1) {
              self.settings.image_i = self.settings.images_links.length - 1;
            }
            
            self.jumpToImage(self.settings.image_i);
          }
          return false;
        });
        
        this.box_skitter.find('.next_button').click(function() {
          self.jumpToImage(self.settings.image_i);
          return false;
        });
        
        self.box_skitter.find('.next_button, .prev_button').bind('mouseover', self.settings.mouseOverButton);
        self.box_skitter.find('.next_button, .prev_button').bind('mouseleave', self.settings.mouseOutButton);
        
        this.box_skitter.find('.image_number').hover(function() {
          if ($(this).attr('class') != 'image_number image_number_select') {
            if ( self.settings.animateNumberOver ) {
              $(this).stop().animate(self.settings.animateNumberOver, 300);
            }
            // $(this).stop().animate(self.settings.animateNumberOver, 300);
          }
        }, function(){
          if ($(this).attr('class') != 'image_number image_number_select') {
            if ( self.settings.animateNumberOut ) {
              $(this).stop().animate(self.settings.animateNumberOut, 500);
            }
            // $(this).stop().animate(self.settings.animateNumberOut, 500);
          }
        });
        
        this.box_skitter.find('.image_number').click(function(){
          if ($(this).attr('class') != 'image_number image_number_select') {
            var imageNumber = parseInt($(this).attr('rel'));
            self.jumpToImage(imageNumber);
          }
          return false;
        });
        
        if ( self.settings.animateNumberOut ) {
          this.box_skitter.find('.image_number').css(self.settings.animateNumberOut);
        }

        if ( self.settings.animateNumberActive ) {
          this.box_skitter.find('.image_number:eq(0)').css(self.settings.animateNumberActive);
        }

        // this.box_skitter.find('.image_number').css(self.settings.animateNumberOut);
        // this.box_skitter.find('.image_number:eq(0)').css(self.settings.animateNumberActive);
        
        // Preview with dots
        if (self.settings.preview && self.settings.dots) 
        {
          var preview = $('<div class="preview_slide"><ul></ul></div>');
          
          for (var i = 0; i < this.settings.images_links.length; i++) {
            var li = $('<li></li>');
            var img = $('<img />');
            img.attr('src', this.settings.images_links[i][0]);
            li.append(img);
            preview.find('ul').append(li);
          }
          
          var width_preview_ul = parseInt(this.settings.images_links.length * 100);
          preview.find('ul').width(width_preview_ul);
          $(class_info).append(preview);
          
          self.box_skitter.find(class_info).find('.image_number').mouseenter(function() {
            var _left_info = parseFloat(self.box_skitter.find(class_info).offset().left);
            var _left_image = parseFloat($(this).offset().left);
            var _left_preview = (_left_image - _left_info) - 43;
            
            var rel = parseInt($(this).attr('rel'));
            var image_current_preview = self.box_skitter.find('.preview_slide_current img').attr('src');
            var _left_ul = -(rel * 100);
            
            self.box_skitter.find('.preview_slide').find('ul').animate({left: _left_ul}, {duration:200, queue: false, easing: 'easeOutSine'});
            self.box_skitter.find('.preview_slide').fadeTo(1,1).animate({left: _left_preview}, {duration:200, queue: false});
          });
          
          self.box_skitter.find(class_info).mouseleave(function() {
            $('.preview_slide').animate({opacity: 'hide'}, {duration: 200, queue: false});
          });
        }
      }
      
      // Focus
      if (self.settings.focus) {
        self.focusSkitter();
      }
      
      // Constrols
      if (self.settings.controls) {
        self.setControls();
      }
      
      // Progressbar
      if (self.settings.progressbar && self.settings.auto_play) {
        self.addProgressBar();
      }

      // hideTools
      if (self.settings.hideTools) {
        self.hideTools();
      }

      // Navigation keys
      if (self.settings.enable_navigation_keys) {
        self.enableNavigationKeys();
      }
      
      this.loadImages();
    },
    
    /**
     * Load images
     */
    loadImages: function () 
    {
      var self = this;
      
      var loading = $('<div class="loading">Loading</div>');
      this.box_skitter.append(loading);
      var total = this.settings.images_links.length;
      
      var u = 0;
      $.each(this.settings.images_links, function(i)
      {
        var self_il = this;
        var loading = $('<span class="image_loading"></span>');
        loading.css({position:'absolute', top:'-9999em'});
        self.box_skitter.append(loading);
        var img = new Image();
        
        $(img).load(function () {
          ++u;
          if (u == total) {
            self.box_skitter.find('.loading').remove();
            self.box_skitter.find('.image_loading').remove();
            self.start();
          }
        }).error(function () {
          self.box_skitter.find('.loading, .image_loading, .image_number, .next_button, .prev_button').remove();
          self.box_skitter.html('<p style="color:white;background:black;">Error loading images. One or more images were not found.</p>');
        }).attr('src', self_il[0]);
      });
    }, 
    
    /**
     * Start skitter
     */
    start: function()
    {
      var self = this;
      var init_pause = false;

      if (this.settings.numbers || this.settings.thumbs) this.box_skitter.find('.info_slide').fadeIn(500);
      if (this.settings.dots) this.box_skitter.find('.info_slide_dots').fadeIn(500);
      if (this.settings.label) this.box_skitter.find('.label_skitter').show();
      if (this.settings.navigation) {
        this.box_skitter.find('.prev_button').fadeIn(500);
        this.box_skitter.find('.next_button').fadeIn(500);
      }
      
      if (self.settings.auto_play) {
        self.startTime();
      }

      self.windowFocusOut();
      self.setLinkAtual();
      
      self.box_skitter.find('.image a img').attr({'src': self.settings.image_atual});
      img_link = self.box_skitter.find('.image a');
      img_link = self.resizeImage(img_link);
      img_link.find('img').fadeIn(1500);
      
      self.setValueBoxText();
      self.showBoxText();
      
      if (self.settings.auto_play) {
        self.stopOnMouseOver();
      }

      var mouseOverInit = function() {
        if (self.settings.stop_over) {
          init_pause = true;
          self.settings.is_hover_box_skitter = true;
          self.clearTimer(true);
          self.pauseProgressBar();
        }
      };

      self.box_skitter.mouseover(mouseOverInit);
      self.box_skitter.find('.next_button').mouseover(mouseOverInit);
      
      if (self.settings.images_links.length > 1 && !init_pause) {
        if (self.settings.auto_play) {
          self.timer = setTimeout(function() { self.nextImage(); }, self.settings.interval);
        }
      } 
      else {
        self.box_skitter.find('.loading, .image_loading, .image_number, .next_button, .prev_button').remove();
      }
      
      if ($.isFunction(self.settings.onLoad)) self.settings.onLoad(self);
    },
    
    /**
     * Jump to image
     */
    jumpToImage: function(imageNumber) 
    {
      if (this.settings.is_animating == false) {
        this.settings.elapsedTime = 0;
        this.box_skitter.find('.box_clone').stop();
        this.clearTimer(true);
        this.settings.image_i = Math.floor(imageNumber);
        
        this.box_skitter.find('.image a').attr({'href': this.settings.link_atual});
        this.box_skitter.find('.image_main').attr({'src': this.settings.image_atual});
        this.box_skitter.find('.box_clone').remove();

        this.nextImage();
      }
    },
    
    /**
     * Next image
     */
    nextImage: function() 
    {
      var self = this;
      
      animations_functions = [
        'cube', 
        'cubeRandom', 
        'block', 
        'cubeStop', 
        'cubeStopRandom', 
        'cubeHide', 
        'cubeSize', 
        'horizontal', 
        'showBars', 
        'showBarsRandom', 
        'tube',
        'fade',
        'fadeFour',
        'paralell',
        'blind',
        'blindHeight',
        'blindWidth',
        'directionTop',
        'directionBottom',
        'directionRight',
        'directionLeft',
        'cubeSpread',
        'glassCube',
        'glassBlock',
        'circles',
        'circlesInside',
        'circlesRotate',
        'cubeShow',
        'upBars', 
        'downBars', 
        'hideBars', 
        'swapBars', 
        'swapBarsBack', 
        'swapBlocks',
        'cut'
      ];
            
      if (self.settings.progressbar) self.hideProgressBar();
      
      animation_type = (this.settings.animation == '' && this.settings.images_links[this.settings.image_i][2]) ? 
        this.settings.images_links[this.settings.image_i][2] : (this.settings.animation == '' ? 'default' : this.settings.animation);
      
      // RandomUnique
      if (animation_type == 'randomSmart') 
      {
        if (!this.settings.random_ia) {
          animations_functions.sort(function() {
            return 0.5 - Math.random();
          });
          this.settings.random_ia = animations_functions;
        }
        animation_type = this.settings.random_ia[this.settings.image_i];
      }
      // Random
      else if (animation_type == 'random') 
      {
        var random_id = parseInt(Math.random() * animations_functions.length);
        animation_type = animations_functions[random_id];
      }
      // Specific animations
      else if (self.settings.with_animations.length > 0)
      {
        var total_with_animations = self.settings.with_animations.length;
        if (this.settings._i_animation == undefined) {
          this.settings._i_animation = 0;
        }
        animation_type = self.settings.with_animations[this.settings._i_animation];
        ++this.settings._i_animation;
        if (this.settings._i_animation >= total_with_animations) this.settings._i_animation = 0;
      }
      
      switch (animation_type) 
      {
        case 'cube' : 
          this.animationCube();
          break;
        case 'cubeRandom' : 
          this.animationCube({random:true});
          break;
        case 'block' : 
          this.animationBlock();
          break;
        case 'cubeStop' : 
          this.animationCubeStop();
          break;
        case 'cubeStopRandom' : 
          this.animationCubeStop({random:true});
          break;
        case 'cubeHide' : 
          this.animationCubeHide();
          break;
        case 'cubeSize' : 
          this.animationCubeSize();
          break;
        case 'horizontal' : 
          this.animationHorizontal();
          break;
        case 'showBars' : 
          this.animationShowBars();
          break;
        case 'showBarsRandom' : 
          this.animationShowBars({random:true});
          break;
        case 'tube' : 
          this.animationTube();
          break;
        case 'fade' : 
          this.animationFade();
          break;
        case 'fadeFour' : 
          this.animationFadeFour();
          break;
        case 'paralell' : 
          this.animationParalell();
          break;
        case 'blind' : 
          this.animationBlind();
          break;
        case 'blindHeight' : 
          this.animationBlindDimension({height:true});
          break;
        case 'blindWidth' : 
          this.animationBlindDimension({height:false, time_animate:400, delay:50});
          break;
        case 'directionTop' : 
          this.animationDirection({direction:'top'});
          break;
        case 'directionBottom' : 
          this.animationDirection({direction:'bottom'});
          break;
        case 'directionRight' : 
          this.animationDirection({direction:'right', total:5});
          break;
        case 'directionLeft' : 
          this.animationDirection({direction:'left', total:5});
          break;
        case 'cubeSpread' : 
          this.animationCubeSpread();
          break;
        case 'cubeJelly' : 
          this.animationCubeJelly();
          break;
        case 'glassCube' : 
          this.animationGlassCube();
          break;
        case 'glassBlock' : 
          this.animationGlassBlock();
          break;
        case 'circles' : 
          this.animationCircles();
          break;
        case 'circlesInside' : 
          this.animationCirclesInside();
          break;
        case 'circlesRotate' : 
          this.animationCirclesRotate();
          break;
        case 'cubeShow' : 
          this.animationCubeShow();
          break;
        case 'upBars' : 
          this.animationDirectionBars({direction: 'top'});
          break;
        case 'downBars' : 
          this.animationDirectionBars({direction: 'bottom'});
          break;
        case 'hideBars' : 
          this.animationHideBars();
          break;
        case 'swapBars' : 
          this.animationSwapBars();
          break;
        case 'swapBarsBack' : 
          this.animationSwapBars({easing: 'easeOutBack'});
          break;
        case 'swapBlocks' : 
          this.animationSwapBlocks();
          break;
        case 'cut' : 
          this.animationCut();
          break;
        default : 
          this.animationTube();
          break;
      }
    },
    
    animationCube: function (options)
    {
      var self = this;
      
      var options = $.extend({}, {random: false}, options || {});
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutExpo' : this.settings.easing_default;
      var time_animate = 700 / this.settings.velocity;
      
      this.setActualLevel();
      
      var division_w  = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 8));
      var division_h  = Math.ceil(this.settings.height_skitter / (this.settings.height_skitter / 3));
      var total   = division_w * division_h;
      
      var width_box   = Math.ceil(this.settings.width_skitter / division_w);
      var height_box  = Math.ceil(this.settings.height_skitter / division_h);
      
      var init_top  = this.settings.height_skitter + 200;
      var init_left   = this.settings.height_skitter + 200;
      
      var col_t = 0;
      var col = 0;
      
      for (i = 0; i < total; i++) {
        
        init_top      = (i % 2 == 0) ? init_top : -init_top;
        init_left       = (i % 2 == 0) ? init_left : -init_left;

        var _vtop       = init_top + (height_box * col_t) + (col_t * 150);
        var _vleft      = -self.settings.width_skitter;
        //var _vleft      = (init_left + (width_box * col)) + (col * 50);
        
        var _vtop_image   = -(height_box * col_t);
        
        var _vleft_image  = -(width_box * col);
        var _btop       = (height_box * col_t);
        var _bleft      = (width_box * col);
        
        var box_clone     = this.getBoxClone();
        box_clone.hide();
        
        var delay_time = 50 * (i);
        
        if (options.random) {
          delay_time = 40 * (col);
          box_clone.css({left:_vleft+'px', top:_vtop+'px', width:width_box, height:height_box});
        } 
        else {
          time_animate = 500;
          //box_clone.css({left:(this.settings.width_skitter / 2), top:this.settings.height_skitter + 50, width:width_box, height:height_box});
          box_clone.css({left:(this.settings.width_skitter) + (width_box * i), top:this.settings.height_skitter + (height_box * i), width:width_box, height:height_box});
        }
        
        //box_clone.find('img').css({left:_vleft_image, top:_vtop_image});
        //box_clone.find('img').css({left:_vleft_image+100, top:_vtop_image});
        
        this.addBoxClone(box_clone);
        
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.show().delay(delay_time).animate({top:_btop+'px', left:_bleft+'px'}, time_animate, easing, callback);
        
        if (options.random) {
          box_clone.find('img').css({left:_vleft_image+100, top:_vtop_image+50});
          box_clone.find('img').delay(delay_time+(time_animate/2)).animate({left:_vleft_image, top:_vtop_image}, 1000, 'easeOutBack');
        }
        else {
          box_clone.find('img').css({left:_vleft_image, top:_vtop_image});
          box_clone.find('img').delay(delay_time+(time_animate/2)).fadeTo(100, 0.5).fadeTo(300, 1);
        }
        
        col_t++;
        if (col_t == division_h) {
          col_t = 0;
          col++;
        }
      }
    },
    
    animationBlock: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutQuad' : this.settings.easing_default;
      var time_animate = 500 / this.settings.velocity;
      
      this.setActualLevel();
      
      var total     = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 15));
      var width_box   = Math.ceil(this.settings.width_skitter / total);
      var height_box  = (this.settings.height_skitter);
      
      for (i = 0; i < total; i++) {
        
        var _bleft = (width_box * (i));
        var _btop = 0;
        
        var box_clone = this.getBoxClone();
        box_clone.css({left: this.settings.width_skitter + 100, top:0, width:width_box, height:height_box});
        box_clone.find('img').css({left:-(width_box * i)});
        
        this.addBoxClone(box_clone);
        
        var delay_time = 80 * (i);
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        //box_clone.delay(delay_time).animate({top:_btop, left:_bleft, opacity:'show'}, time_animate, easing, callback);
        
        box_clone.show().delay(delay_time).animate({top:_btop, left:_bleft}, time_animate, easing);
        box_clone.find('img').hide().delay(delay_time+100).animate({opacity:'show'}, time_animate+300, easing, callback);
      }
      
    },
    
    animationCubeStop: function(options)
    {
      var self = this;

      var options = $.extend({}, {random: false}, options || {});

      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeInQuad' : this.settings.easing_default;
      var time_animate = 300 / this.settings.velocity;

      var image_old = this.box_skitter.find('.image_main').attr('src');

      this.setActualLevel();

      this.setLinkAtual();
      this.box_skitter.find('.image_main').attr({'src':this.settings.image_atual});

      var division_w = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 8));
      var division_h = Math.ceil(this.settings.height_skitter / (this.settings.width_skitter / 8));
      var total = division_w * division_h;

      var width_box = Math.ceil(this.settings.width_skitter / division_w);
      var height_box = Math.ceil(this.settings.height_skitter / division_h);

      var init_top = 0;
      var init_left = 0;

      var col_t = 0;
      var col = 0;
      var _ftop = this.settings.width_skitter / 16;

      for (i = 0; i < total; i++) {
        init_top = (i % 2 == 0) ? init_top : -init_top;
        init_left = (i % 2 == 0) ? init_left : -init_left;

        var _vtop = init_top + (height_box * col_t);
        var _vleft = (init_left + (width_box * col));
        var _vtop_image = -(height_box * col_t);

        var _vleft_image = -(width_box * col);
        var _btop = _vtop - _ftop;
        var _bleft = _vleft - _ftop;

        var box_clone = this.getBoxCloneImgOld(image_old);
        box_clone.css({left:_vleft+'px', top:_vtop+'px', width:width_box, height:height_box});
        box_clone.find('img').css({left:_vleft_image, top:_vtop_image});

        this.addBoxClone(box_clone);
        box_clone.show();

        var delay_time = 50 * i;

        if (options.random) {
          time_animate = (400 * (self.getRandom(2) + 1)) / this.settings.velocity;
          _btop = _vtop;
          _bleft = _vleft;
          delay_time = Math.ceil( 30 * self.getRandom(30) );
        }
        
        if (options.random && i == (total - 1)) {
          time_animate = 400 * 3;
          delay_time = 30 * 30;
        }

        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.delay(delay_time).animate({opacity:'hide', top:_btop+'px', left:_bleft+'px'}, time_animate, easing, callback);

        col_t++;
        if (col_t == division_h) {
          col_t = 0;
          col++;
        }
      }
    },
    
    animationCubeHide: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutQuad' : this.settings.easing_default;
      var time_animate = 500 / this.settings.velocity;
      
      var image_old = this.box_skitter.find('.image_main').attr('src');
      
      this.setActualLevel();
      
      this.setLinkAtual();
      this.box_skitter.find('.image_main').attr({'src':this.settings.image_atual});
      
      var division_w  = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 8));
      var division_h  = Math.ceil(this.settings.height_skitter / (this.settings.height_skitter / 3));
      var total   = division_w * division_h;
      
      var width_box   = Math.ceil(this.settings.width_skitter / division_w);
      var height_box  = Math.ceil(this.settings.height_skitter / division_h);
      
      var init_top  = 0;
      var init_left   = 0;
      
      var col_t     = 0;
      var col     = 0;
      
      for (i = 0; i < total; i++) {
        
        init_top      = (i % 2 == 0) ? init_top : -init_top;
        init_left       = (i % 2 == 0) ? init_left : -init_left;

        var _vtop       = init_top + (height_box * col_t);
        var _vleft      = (init_left + (width_box * col));
        var _vtop_image   = -(height_box * col_t);
        
        var _vleft_image  = -(width_box * col);
        var _btop       = _vtop - 50;
        var _bleft      = _vleft - 50;
        
        var box_clone = this.getBoxCloneImgOld(image_old);
        box_clone.css({left:_vleft+'px', top:_vtop+'px', width:width_box, height:height_box});
        box_clone.find('img').css({left:_vleft_image, top:_vtop_image});
        
        this.addBoxClone(box_clone);
        box_clone.show();
        
        var delay_time = 50 * i;
        delay_time = (i == (total - 1)) ? (total * 50) : delay_time;
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        
        box_clone.delay(delay_time).animate({opacity:'hide'}, time_animate, easing, callback);
        
        col_t++;
        if (col_t == division_h) {
          col_t = 0;
          col++;
        }
      }
      
    },
    
    animationCubeJelly: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeInBack' : this.settings.easing_default;
      var time_animate = 300 / this.settings.velocity;
      
      var image_old = this.box_skitter.find('.image_main').attr('src');
      
      this.setActualLevel();
      
      this.setLinkAtual();
      this.box_skitter.find('.image_main').attr({'src':this.settings.image_atual});
      
      var division_w  = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 8));
      var division_h  = Math.ceil(this.settings.height_skitter / (this.settings.height_skitter / 3));
      var total   = division_w * division_h;
      
      var width_box   = Math.ceil(this.settings.width_skitter / division_w);
      var height_box  = Math.ceil(this.settings.height_skitter / division_h);
      
      var init_top  = 0;
      var init_left   = 0;
      
      var col_t     = 0;
      var col     = 0;
      var u     = -1;
      
      for (i = 0; i < total; i++) {
      
        if (col % 2 != 0) {
          if (col_t == 0) {
            u = u + division_h + 1;
          }
          u--;
        } 
        else {
          if (col > 0 && col_t == 0) {
            u = u + 2;
          }
          u++;
        }
      
        init_top      = (i % 2 == 0) ? init_top : -init_top;
        init_left       = (i % 2 == 0) ? init_left : -init_left;

        var _vtop       = init_top + (height_box * col_t);
        var _vleft      = (init_left + (width_box * col));
        var _vtop_image   = -(height_box * col_t);
        
        var _vleft_image  = -(width_box * col);
        var _btop       = _vtop - 50;
        var _bleft      = _vleft - 50;
        
        var box_clone = this.getBoxCloneImgOld(image_old);
        box_clone.css({left:_vleft+'px', top:_vtop+'px', width:width_box, height:height_box});
        box_clone.find('img').css({left:_vleft_image, top:_vtop_image});
        
        this.addBoxClone(box_clone);
        box_clone.show();
        
        var delay_time = (50 * i);
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        
        box_clone.delay(delay_time).animate({width:'+=100px', height:'+=100px', top:'-=20px',  left: '-=20px', opacity:'hide'}, time_animate, easing, callback);
        col_t++;
        
        if (col_t == division_h) {
          col_t = 0;
          col++;
        }
        
      }
    },
    
    animationCubeSize: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeInOutQuad' : this.settings.easing_default;
      var time_animate = 600 / this.settings.velocity;
      
      var image_old = this.box_skitter.find('.image_main').attr('src');
      
      this.setActualLevel();
      
      this.setLinkAtual();
      this.box_skitter.find('.image_main').attr({'src':this.settings.image_atual});
      
      var division_w  = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 8));
      var division_h  = Math.ceil(this.settings.height_skitter / (this.settings.height_skitter / 3));
      var total   = division_w * division_h;
      
      var width_box   = Math.ceil(this.settings.width_skitter / division_w);
      var height_box  = Math.ceil(this.settings.height_skitter / division_h);
      
      var init_top  = 0;
      var init_left   = 0;
      
      var col_t     = 0;
      var col     = 0;
      var _ftop   = Math.ceil(this.settings.width_skitter / 6);
      
      for (i = 0; i < total; i++) {
        
        init_top      = (i % 2 == 0) ? init_top : -init_top;
        init_left       = (i % 2 == 0) ? init_left : -init_left;

        var _vtop       = init_top + (height_box * col_t);
        var _vleft      = (init_left + (width_box * col));
        var _vtop_image   = -(height_box * col_t);
        
        var _vleft_image  = -(width_box * col);
        var _btop       = _vtop - _ftop;
        var _bleft      = _vleft - _ftop;
        
        var box_clone = this.getBoxCloneImgOld(image_old);
        box_clone.css({left:_vleft, top:_vtop, width:width_box, height:height_box});
        box_clone.find('img').css({left:_vleft_image, top:_vtop_image});
        
        this.addBoxClone(box_clone);
        box_clone.show();
        
        var delay_time = 50 * i;
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.delay(delay_time).animate({
          opacity:'hide',width:'hide',height:'hide',top:_vtop+(width_box*1.5),left:_vleft+(height_box*1.5)
        }, time_animate, easing, callback);
        
        col_t++;
        if (col_t == division_h) {
          col_t = 0;
          col++;
        }
      }
      
    },
    
    animationHorizontal: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutExpo' : this.settings.easing_default;
      var time_animate = 700 / this.settings.velocity;
      
      this.setActualLevel();
      
      var total     = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 7));
      var width_box   = (this.settings.width_skitter);
      var height_box  = Math.ceil(this.settings.height_skitter / total);
      
      for (i = 0; i < total; i++) {
        var _bleft = (i % 2 == 0 ? '' : '') + width_box;
        var _btop = (i * height_box);
        
        var box_clone = this.getBoxClone();
        
        box_clone.css({left:_bleft+'px', top:_btop+'px', width:width_box, height:height_box});
        box_clone.find('img').css({left:0, top:-_btop});
        
        this.addBoxClone(box_clone);
        
        var delay_time = 90 * i;
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.delay(delay_time).animate({opacity:'show', top:_btop, left:0}, time_animate, easing, callback);
      }
    },
    
    animationShowBars: function(options)
    {
      var self = this;
      
      var options = $.extend({}, {random: false}, options || {});
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutQuad' : this.settings.easing_default;
      var time_animate = 400 / this.settings.velocity;
      
      this.setActualLevel();
      
      var total     = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 10));
      var width_box   = Math.ceil(this.settings.width_skitter / total);
      var height_box  = (this.settings.height_skitter);
      
      for (i = 0; i < total; i++) {
        
        var _bleft = (width_box * (i));
        var _btop = 0;
        
        var box_clone = this.getBoxClone();
        
        box_clone.css({left:_bleft, top:_btop - 50, width:width_box, height:height_box});
        box_clone.find('img').css({left:-(width_box * i), top:0});
        
        this.addBoxClone(box_clone);
        
        if (options.random) {
          var random = this.getRandom(total);
          var delay_time = 50 * random;
          delay_time = (i == (total - 1)) ? (50 * total) : delay_time;
        }
        else {
          var delay_time = 70 * (i);
          time_animate = time_animate - (i * 2);
        }
        
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.delay(delay_time).animate({
          opacity:'show', top:_btop+'px', left:_bleft+'px'
        }, time_animate, easing, callback);
      }
      
    },
    
    animationTube: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutElastic' : this.settings.easing_default;
      var time_animate = 600 / this.settings.velocity;
      
      this.setActualLevel();
      
      var total     = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 10));
      var width_box   = Math.ceil(this.settings.width_skitter / total);
      var height_box  = this.settings.height_skitter;
      
      for (i = 0;i<total;i++) {
        var _btop = 0;
        var _vtop = height_box;
        var vleft = width_box * i;
      
        var box_clone = this.getBoxClone();
        
        box_clone.css({left:vleft,top: _vtop, height:height_box, width: width_box});
        box_clone.find('img').css({left:-(vleft)});
        
        this.addBoxClone(box_clone);
        
        var random = this.getRandom(total);
        var delay_time = 30 * random;
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.show().delay(delay_time).animate({top:_btop}, time_animate, easing, callback);
      }
    },
    
    animationFade: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutQuad' : this.settings.easing_default;
      var time_animate = 800 / this.settings.velocity;
      
      this.setActualLevel();
      
      var width_box   = this.settings.width_skitter;
      var height_box  = this.settings.height_skitter;
      var total     = 2;
      
      for (i = 0;i<total;i++) {
        var _vtop = 0;
        var _vleft = 0;
      
        var box_clone = this.getBoxClone();
        box_clone.css({left:_vleft, top:_vtop, width:width_box, height:height_box});
        this.addBoxClone(box_clone);

        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.animate({opacity:'show', left:0, top:0}, time_animate, easing, callback);
      }
    },
    
    animationFadeFour: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutQuad' : this.settings.easing_default;
      var time_animate = 500 / this.settings.velocity;
      
      this.setActualLevel();
      
      var width_box   = this.settings.width_skitter;
      var height_box  = this.settings.height_skitter;
      var total     = 4;
      
      for (i = 0;i<total;i++) {
        
        if (i == 0) {
          var _vtop = '-100px';
          var _vleft = '-100px';
        } else if (i == 1) {
          var _vtop = '-100px';
          var _vleft = '100px';
        } else if (i == 2) {
          var _vtop = '100px';
          var _vleft = '-100px';
        } else if (i == 3) {
          var _vtop = '100px';
          var _vleft = '100px';
        }
      
        var box_clone = this.getBoxClone();
        box_clone.css({left:_vleft, top:_vtop, width:width_box, height:height_box});
        this.addBoxClone(box_clone);
        
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.animate({opacity:'show', left:0, top:0}, time_animate, easing, callback);
      }
    },
    
    animationParalell: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutQuad' : this.settings.easing_default;
      var time_animate = 400 / this.settings.velocity;
      
      this.setActualLevel();
      
      var total     = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 16));
      var width_box   = Math.ceil(this.settings.width_skitter / total);
      var height_box  = this.settings.height_skitter;
      
      for (i = 0; i < total; i++) {
        
        var _bleft = (width_box * (i));
        var _btop = 0;
        
        var box_clone = this.getBoxClone();
        
        box_clone.css({left:_bleft, top:_btop - this.settings.height_skitter, width:width_box, height:height_box});
        box_clone.find('img').css({left:-(width_box * i), top:0});
        
        this.addBoxClone(box_clone);
        
        var delay_time;
        if (i <= ((total / 2) - 1)) {
          delay_time = 1400 - (i * 200);
        }
        else if (i > ((total / 2) - 1)) {
          delay_time = ((i - (total / 2)) * 200);
        }
        delay_time = delay_time / 2.5;
        
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.delay(delay_time).animate({
          top:_btop+'px', left:_bleft+'px', opacity: 'show'
        }, time_animate, easing, callback);
      }
      
    },
    
    animationBlind: function(options)
    {
      var self = this;
      
      var options = $.extend({}, {height: false}, options || {});
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutQuad' : this.settings.easing_default;
      var time_animate = 400 / this.settings.velocity;
      
      this.setActualLevel();
      
      var total     = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 16));
      var width_box   = Math.ceil(this.settings.width_skitter / total);
      var height_box  = this.settings.height_skitter;
      
      for (i = 0; i < total; i++) {
        
        var _bleft = (width_box * (i));
        var _btop = 0;
        
        var box_clone = this.getBoxClone();
        
        box_clone.css({left:_bleft, top:_btop, width:width_box, height:height_box});
        box_clone.find('img').css({left:-(width_box * i), top:0});
        
        this.addBoxClone(box_clone);
        
        var delay_time;
        
        if (!options.height) {
          if (i <= ((total / 2) - 1)) {
            delay_time = 1400 - (i * 200);
          }
          else if (i > ((total / 2) - 1)) {
            delay_time = ((i - (total / 2)) * 200);
          }
          var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        }
        else {
          if (i <= ((total / 2) - 1)) {
            delay_time = 200 + (i * 200);
          }
          else if (i > ((total / 2) - 1)) {
            delay_time = (((total / 2) - i) * 200) + (total * 100);
          }
          var callback = (i == (total / 2)) ? function() { self.finishAnimation(); } : '';
        }
        
        delay_time = delay_time / 2.5;
        
        if (!options.height) {
          box_clone.delay(delay_time).animate({
            opacity:'show',top:_btop+'px', left:_bleft+'px', width:'show'
          }, time_animate, easing, callback);
        }
        else {
          time_animate = time_animate + (i * 2);
          var easing = 'easeOutQuad';
          box_clone.delay(delay_time).animate({
            opacity:'show',top:_btop+'px', left:_bleft+'px', height:'show'
          }, time_animate, easing, callback);
        }
      }
      
    },
    
    animationBlindDimension: function(options)
    {
      var self = this;
      
      var options = $.extend({}, {height: true, time_animate: 500, delay: 100}, options || {});
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutQuad' : this.settings.easing_default;
      var time_animate = options.time_animate / this.settings.velocity;
      
      this.setActualLevel();
      
      var total     = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 16));
      var width_box   = Math.ceil(this.settings.width_skitter / total);
      var height_box  = this.settings.height_skitter;
      
      for (i = 0; i < total; i++) {
        
        var _bleft = (width_box * (i));
        var _btop = 0;
        
        var box_clone = this.getBoxClone();
        
        box_clone.css({left:_bleft, top:_btop, width:width_box, height:height_box});
        box_clone.find('img').css({left:-(width_box * i), top:0});
        
        this.addBoxClone(box_clone);
        
        var delay_time = options.delay * i;
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        
        if (!options.height) {
          box_clone.delay(delay_time).animate({
            opacity:'show',top:_btop+'px', left:_bleft+'px', width:'show'
          }, time_animate, easing, callback);
        }
        else {
          var easing = 'easeOutQuad';
          box_clone.delay(delay_time).animate({
            opacity:'show',top:_btop+'px', left:_bleft+'px', height:'show'
          }, time_animate, easing, callback);
        }
      }
      
    },
    
    animationDirection: function(options)
    {
      var self = this;
      
      var options = $.extend({}, {direction: 'top', delay_type: 'sequence', total: 7}, options || {});
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeInOutExpo' : this.settings.easing_default;
      var time_animate = 1200 / this.settings.velocity;
      
      var image_old = this.box_skitter.find('.image_main').attr('src');
      
      this.setActualLevel();
      
      this.setLinkAtual();
      this.box_skitter.find('.image_main').attr({'src':this.settings.image_atual});
      this.box_skitter.find('.image_main').hide();
      
      var total     = options.total;
      
      for (i = 0; i < total; i++) {
        
        switch (options.direction)
        {
          default : case 'top' : 
            
            var width_box     = Math.ceil(this.settings.width_skitter / total);
            var height_box    = this.settings.height_skitter;
            
            var _itopc      = 0;
            var _ileftc     = (width_box * i);
            var _ftopc      = -height_box;
            var _fleftc     = _ileftc;
            
            var _itopn      = height_box;
            var _ileftn     = _ileftc;
            var _ftopn      = 0;
            var _fleftn     = _ileftc;
            
            var _vtop_image   = 0;
            var _vleft_image  = -_ileftc;
            
            break;
            
          case 'bottom' : 
          
            var width_box     = Math.ceil(this.settings.width_skitter / total);
            var height_box    = this.settings.height_skitter;
            
            var _itopc      = 0;
            var _ileftc     = (width_box * i);
            var _ftopc      = height_box;
            var _fleftc     = _ileftc;
            
            var _itopn      = -height_box;
            var _ileftn     = _ileftc;
            var _ftopn      = 0;
            var _fleftn     = _ileftc;
            
            var _vtop_image   = 0;
            var _vleft_image  = -_ileftc;
            
            break;
            
          case 'right' : 
          
            var width_box     = this.settings.width_skitter;
            var height_box    = Math.ceil(this.settings.height_skitter / total);
            
            var _itopc      = (height_box * i);
            var _ileftc     = 0;
            var _ftopc      = _itopc;
            var _fleftc     = width_box;
            
            var _itopn      = _itopc;
            var _ileftn     = -_fleftc;
            var _ftopn      = _itopc;
            var _fleftn     = 0;
            
            var _vtop_image   = -_itopc;
            var _vleft_image  = 0;
            
            break;
            
          case 'left' : 
          
            var width_box     = this.settings.width_skitter;
            var height_box    = Math.ceil(this.settings.height_skitter / total);
            
            var _itopc      = (height_box * i);
            var _ileftc     = 0;
            var _ftopc      = _itopc;
            var _fleftc     = -width_box;
            
            var _itopn      = _itopc;
            var _ileftn     = -_fleftc;
            var _ftopn      = _itopc;
            var _fleftn     = 0;
            
            var _vtop_image   = -_itopc;
            var _vleft_image  = 0;
            
            break;
            
        }
        
        switch (options.delay_type) 
        {
          case 'zebra' : default : var delay_time = (i % 2 == 0) ? 0 : 150; break;
          case 'random' : var delay_time = 30 * (Math.random() * 30); break;
          case 'sequence' : var delay_time = i * 100; break;
        }
        
        var box_clone = this.getBoxCloneImgOld(image_old);
        box_clone.find('img').css({left:_vleft_image, top:_vtop_image});
        
        box_clone.css({top:_itopc, left:_ileftc, width:width_box, height:height_box});
        
        this.addBoxClone(box_clone);
        box_clone.show();
        box_clone.delay(delay_time).animate({ top:_ftopc, left:_fleftc }, time_animate, easing);
        
        // Next image
        var box_clone_next = this.getBoxClone();
        box_clone_next.find('img').css({left:_vleft_image, top:_vtop_image});
        
        box_clone_next.css({top:_itopn, left:_ileftn, width:width_box, height:height_box});
        
        this.addBoxClone(box_clone_next);
        box_clone_next.show();
        
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone_next.delay(delay_time).animate({ top:_ftopn, left:_fleftn }, time_animate, easing, callback);
        
      }
    },
    
    animationCubeSpread: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutQuad' : this.settings.easing_default;
      var time_animate = 700 / this.settings.velocity;
      
      this.setActualLevel();
      
      var division_w  = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 8));
      var division_h  = Math.ceil(this.settings.height_skitter / (this.settings.width_skitter / 8));
      var total   = division_w * division_h;
      
      var width_box   = Math.ceil(this.settings.width_skitter / division_w);
      var height_box  = Math.ceil(this.settings.height_skitter / division_h);
      
      var init_top  = 0;
      var init_left   = 0;
      
      var col_t     = 0;
      var col     = 0;
      var order     = new Array;
      var spread    = new Array;
      
      // Make order
      for (i = 0; i < total; i++) {
        init_top      = (i % 2 == 0) ? init_top : -init_top;
        init_left       = (i % 2 == 0) ? init_left : -init_left;

        var _vtop       = init_top + (height_box * col_t);
        var _vleft      = (init_left + (width_box * col));
        
        order[i] = [_vtop, _vleft];
        
        col_t++;
        if (col_t == division_h) {
          col_t = 0;
          col++;
        }
      }
      
      // Reset col and col_t
      col_t = 0;
      col = 0;
      
      // Make array for spread
      for (i = 0; i < total; i++) {
        spread[i] = i;
      };
      
      // Shuffle array
      var spread = self.shuffleArray(spread);
      
      for (i = 0; i < total; i++) {
        init_top      = (i % 2 == 0) ? init_top : -init_top;
        init_left       = (i % 2 == 0) ? init_left : -init_left;

        var _vtop       = init_top + (height_box * col_t);
        var _vleft      = (init_left + (width_box * col));
        var _vtop_image   = -(height_box * col_t);
        
        var _vleft_image  = -(width_box * col);
        var _btop       = _vtop;
        var _bleft      = _vleft;
        
        _vtop         = order[spread[i]][0];
        _vleft        = order[spread[i]][1];
        
        var box_clone     = this.getBoxClone();
        
        box_clone.css({left:_vleft+'px', top:_vtop+'px', width:width_box, height:height_box});
        box_clone.find('img').css({left:_vleft_image, top:_vtop_image});
        
        this.addBoxClone(box_clone);
        
        var delay_time = 30 * (Math.random() * 30);
        if (i == (total-1)) delay_time = 30 * 30;
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.delay(delay_time).animate({opacity:'show',top:_btop+'px', left:_bleft+'px'}, time_animate, easing, callback);
        
        col_t++;
        if (col_t == division_h) {
          col_t = 0;
          col++;
        }
      }
    }, 
    
    animationGlassCube: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutExpo' : this.settings.easing_default;
      var time_animate = 500 / this.settings.velocity;
      
      this.setActualLevel();
      
      var total     = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 10)) * 2;
      var width_box   = Math.ceil(this.settings.width_skitter / total) * 2;
      var height_box  = (this.settings.height_skitter) / 2;
      var col     = 0;
      
      for (i = 0; i < total; i++) {
        mod = (i % 2) == 0 ? true : false;
        
        var _ileft = (width_box * (col));
        var _itop = (mod) ? -self.settings.height_skitter : self.settings.height_skitter;
        
        var _fleft = (width_box * (col));
        var _ftop = (mod) ? 0 : (height_box);
        
        var _bleft = -(width_box * col);
        var _btop = (mod) ? 0 : -(height_box);
        
        var delay_time = 120 * col;
        
        var box_clone = this.getBoxClone();
        box_clone.css({left: _ileft, top:_itop, width:width_box, height:height_box});
        
        box_clone
          .find('img')
          .css({left: _bleft + (width_box / 1.5), top: _btop})
          .delay(delay_time)
          .animate({left: _bleft, top: _btop}, (time_animate * 1.9), 'easeOutQuad');
        
        this.addBoxClone(box_clone);
        
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.show().delay(delay_time).animate({top:_ftop, left:_fleft}, time_animate, easing, callback);
        
        if ((i % 2) != 0) col++;
      }
    },
    
    animationGlassBlock: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutExpo' : this.settings.easing_default;
      var time_animate = 700 / this.settings.velocity;
      
      this.setActualLevel();
      
      var total     = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 10));
      var width_box   = Math.ceil(this.settings.width_skitter / total);
      var height_box  = (this.settings.height_skitter);
      
      for (i = 0; i < total; i++) {
        var _ileft = (width_box * (i));
        var _itop = 0;
        
        var _fleft = (width_box * (i));
        var _ftop = 0;
        
        var _bleft = -(width_box * (i));
        var _btop = 0;
        
        var delay_time = 100 * i;
        
        var box_clone = this.getBoxClone();
        box_clone.css({left: _ileft, top:_itop, width:width_box, height:height_box});
        
        box_clone
          .find('img')
          .css({left: _bleft + (width_box / 1.5), top: _btop})
          .delay(delay_time)
          .animate({left: _bleft, top: _btop}, (time_animate * 1.1), 'easeInOutQuad');
        
        this.addBoxClone(box_clone);
        
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.delay(delay_time).animate({top:_ftop, left:_fleft, opacity: 'show'}, time_animate, easing, callback);
        
      }
    },
    
    animationCircles: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeInQuad' : this.settings.easing_default;
      var time_animate = 500 / this.settings.velocity;
      
      this.setActualLevel();
      
      var total     = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 10));
      var size_box  = 100;
      
      var radius    = Math.sqrt(Math.pow((this.settings.width_skitter), 2) + Math.pow((this.settings.height_skitter), 2));
      var radius    = Math.ceil(radius);
      
      for (i = 0; i < total; i++) {
        var _ileft = (self.settings.width_skitter / 2) - (size_box / 2);
        var _itop = (self.settings.height_skitter / 2) - (size_box / 2);
        
        var _fleft = _ileft; 
        var _ftop = _itop; 
        var box_clone = null;

        box_clone = this.getBoxCloneBackground({
          image:    self.settings.image_atual,
          left:     _ileft, 
          top:    _itop, 
          width:    size_box, 
          height:   size_box,
          position: {
            top:    -_itop, 
            left:   -_ileft
          }
        }).css3({
          'border-radius': radius+'px'
        });
        
        size_box += 100;
        
        this.addBoxClone(box_clone);
        
        var delay_time = 70 * i;
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.delay(delay_time).animate({top: _ftop, left: _fleft, opacity: 'show'}, time_animate, easing, callback);
        
      }
    },
    
    animationCirclesInside: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeInQuad' : this.settings.easing_default;
      var time_animate = 500 / this.settings.velocity;
      
      var image_old = this.box_skitter.find('.image_main').attr('src');
      
      this.setActualLevel();
      
      this.setLinkAtual();
      this.box_skitter.find('.image_main').attr({'src':this.settings.image_atual});
      
      var total     = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 10));
      
      var radius    = Math.sqrt(Math.pow((this.settings.width_skitter), 2) + Math.pow((this.settings.height_skitter), 2));
      var radius    = Math.ceil(radius);
      var size_box  = radius;
      
      for (i = 0; i < total; i++) {
        var _ileft = (self.settings.width_skitter / 2) - (size_box / 2);
        var _itop = (self.settings.height_skitter / 2) - (size_box / 2);
        
        var _fleft = _ileft; 
        var _ftop = _itop; 
        var box_clone = null;

        box_clone = this.getBoxCloneBackground({
          image:    image_old,
          left:     _ileft, 
          top:    _itop, 
          width:    size_box, 
          height:   size_box,
          position: {
            top:    -_itop, 
            left:   -_ileft
          }
        }).css3({
          'border-radius': radius+'px'
        });
        
        size_box -= 100;
        
        this.addBoxClone(box_clone);
        box_clone.show();
        
        var delay_time = 70 * i;
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.delay(delay_time).animate({top: _ftop, left: _fleft, opacity: 'hide'}, time_animate, easing, callback);
        
      }
    },

    animationCirclesRotate: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutQuad' : this.settings.easing_default;
      var time_animate = 500 / this.settings.velocity;
      
      var image_old = this.box_skitter.find('.image_main').attr('src');
      
      this.setActualLevel();
      
      this.setLinkAtual();
      this.box_skitter.find('.image_main').attr({'src':this.settings.image_atual});
      
      var total     = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 10));
      
      var radius    = Math.sqrt(Math.pow((this.settings.width_skitter), 2) + Math.pow((this.settings.height_skitter), 2));
      var radius    = Math.ceil(radius);
      var size_box  = radius;
      
      for (i = 0; i < total; i++) {
        var _ileft = (self.settings.width_skitter / 2) - (size_box / 2);
        var _itop = (self.settings.height_skitter / 2) - (size_box / 2);
        
        var _fleft = _ileft; 
        var _ftop = _itop; 
        var box_clone = null;

        box_clone = this.getBoxCloneImgOld(image_old);
        box_clone.css({left: _ileft, top:_itop, width:size_box, height:size_box}).css3({
          'border-radius': radius+'px'
        });
        box_clone.find('img').css({left: -_ileft, top: -_itop});
        
        size_box -= 100;
        
        this.addBoxClone(box_clone);
        box_clone.show();
        
        var delay_time = 100 * i;
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        var _rotate = (i % 2 == 0) ? '20deg' : '-20deg';
        box_clone.delay(delay_time).animate({top: _ftop, left: _fleft, opacity: 'hide', rotate: _rotate}, time_animate, easing, callback);
      }
    },
    
    animationCubeShow: function(options)
    {
      var self = this;
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutQuad' : this.settings.easing_default;
      var time_animate = 400 / this.settings.velocity;
      
      this.setActualLevel();
      
      var division_w    = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 8));
      var division_h    = Math.ceil(this.settings.height_skitter / (this.settings.height_skitter / 4));
      var total     = division_w * division_h;
      
      var width_box     = Math.ceil(this.settings.width_skitter / division_w);
      var height_box    = Math.ceil(this.settings.height_skitter / division_h);
      
      var last      = false;
      
      var _btop       = 0;
      var _bleft      = 0;
      var line      = 0;
      var col       = 0;
      
      for (i = 0; i < total; i++) {
        
        _btop = height_box * line;
        _bleft = width_box * col;
        
        var delay_time = 30 * (i);
        
        var box_clone     = this.getBoxClone();
        box_clone.css({left:_bleft, top:_btop, width:width_box, height:height_box}).hide();
        box_clone.find('img').css({left:-_bleft, top:-_btop});
        this.addBoxClone(box_clone);
        
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        box_clone.delay(delay_time).animate({width:'show', height:'show'}, time_animate, easing, callback);
        
        line++;
        if (line == division_h) {
          line = 0;
          col++;
        }
      }
    },
    
    animationDirectionBars: function(options)
    {
      var self = this;
      
      var options = $.extend({}, {direction: 'top'}, options || {});
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeInOutQuad' : this.settings.easing_default;
      var time_animate = 400 / this.settings.velocity;
      
      var image_old = this.box_skitter.find('.image_main').attr('src');
      
      this.setActualLevel();
      
      this.setLinkAtual();
      this.box_skitter.find('.image_main').attr({'src':this.settings.image_atual});
      
      var total   = 12;
      var width_box   = Math.ceil(this.settings.width_skitter / total);
      var height_box  = this.settings.height_skitter;
      var _ftop   = (options.direction == 'top') ? -height_box : height_box;
      
      for (i = 0; i < total; i++) {
        var _vtop       = 0;
        var _vleft      = (width_box * i);
        var _vtop_image   = 0;
        var _vleft_image  = -(width_box * i);

        var box_clone = this.getBoxCloneImgOld(image_old);
        box_clone.css({left:_vleft+'px', top:_vtop+'px', width:width_box, height:height_box});
        box_clone.find('img').css({left:_vleft_image, top:_vtop_image});
        
        this.addBoxClone(box_clone);
        box_clone.show();
        
        var delay_time = 70 * i;
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        
        box_clone.delay(delay_time).animate({top:_ftop}, time_animate, easing, callback);
      }
      
    },

    animationHideBars: function(options)
    {
      var self = this;

      var options = $.extend({}, {random: false}, options || {});

      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? 'easeOutCirc' : this.settings.easing_default;
      var time_animate = 700 / this.settings.velocity;

      var image_old = this.box_skitter.find('.image_main').attr('src');

      this.setActualLevel();

      this.setLinkAtual();
      this.box_skitter.find('.image_main').attr({'src':this.settings.image_atual});

      var division_w = Math.ceil(this.settings.width_skitter / (this.settings.width_skitter / 10));
      var total = division_w;

      var width_box = Math.ceil(this.settings.width_skitter / division_w);
      var height_box = this.settings.height_skitter;

      for (i = 0; i < total; i++) {
        var _vtop = 0;
        var _vleft = width_box * i;

        var _vtop_image = 0;
        var _vleft_image = -(width_box * i);

        var _fleft = '+='+width_box;

        var box_clone = this.getBoxCloneImgOld(image_old);
        box_clone.css({left:0, top:0, width:width_box, height:height_box});
        box_clone.find('img').css({left:_vleft_image, top:_vtop_image});

        var box_clone_main = this.getBoxCloneImgOld(image_old);
        box_clone_main.css({left:_vleft+'px', top:_vtop+'px', width:width_box, height:height_box});
        box_clone_main.html(box_clone);

        this.addBoxClone(box_clone_main);
        box_clone.show();
        box_clone_main.show();

        var delay_time = 50 * i;
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';
        
        box_clone.delay(delay_time).animate({left:_fleft}, time_animate, easing, callback);
      }
    },

    animationSwapBars: function(options)
    {
      var self = this;
      
      var options = $.extend({}, {direction: 'top', delay_type: 'sequence', total: 7, easing: 'easeOutCirc'}, options || {});
      
      this.settings.is_animating = true;
      var easing = (this.settings.easing_default == '') ? options.easing : this.settings.easing_default;
      var time_animate = 500 / this.settings.velocity;
      
      var image_old = this.box_skitter.find('.image_main').attr('src');
      
      this.setActualLevel();
      
      this.setLinkAtual();
      this.box_skitter.find('.image_main').attr({'src':this.settings.image_atual});
      this.box_skitter.find('.image_main').hide();
      
      var total     = options.total;
      
      for (i = 0; i < total; i++) {

        var width_box     = Math.ceil(this.settings.width_skitter / total);
        var height_box    = this.settings.height_skitter;
        
        var _itopc      = 0;
        var _ileftc     = (width_box * i);
        var _ftopc      = -height_box;
        var _fleftc     = _ileftc + width_box ;
        
        var _itopn      = height_box;
        var _ileftn     = _ileftc;
        var _ftopn      = 0;
        var _fleftn     = _ileftc;
        
        var _vtop_image   = 0;
        var _vleft_image  = -_ileftc;
        
        switch (options.delay_type) 
        {
          case 'zebra' : default : var delay_time = (i % 2 == 0) ? 0 : 150; break;
          case 'random' : var delay_time = 30 * (Math.random() * 30); break;
          case 'sequence' : var delay_time = i * 100; break;
        }

        // Old image
        var box_clone = this.getBoxCloneImgOld(image_old);
        box_clone.find('img').css({left:_vleft_image, top:0});
        box_clone.css({top:0, left:0, width:width_box, height:height_box});

        // Next image
        var box_clone_next = this.getBoxClone();
        box_clone_next.find('img').css({left:_vleft_image, top:0});
        box_clone_next.css({top:0, left:-width_box, width:width_box, height:height_box});
        
        // Container box images
        var box_clone_container = this.getBoxClone();
        box_clone_container.html('').append(box_clone).append(box_clone_next);
        box_clone_container.css({top:0, left:_ileftc, width:width_box, height:height_box});
        
        // Add containuer
        this.addBoxClone(box_clone_container);

        // Show boxes
        box_clone_container.show();
        box_clone.show();
        box_clone_next.show();
        
        // Callback
        var callback = (i == (total - 1)) ? function() { self.finishAnimation(); } : '';

        // Animations
        box_clone.delay(delay_time).animate({ left: width_box }, time_animate, easing);
        box_clone_next.delay(delay_time).animate({ left:0 }, time_animate, easing, callback);
      }
    },

    animationSwapBlocks: function(options)
    {
      var self = this;
      
      var options = $.extend({}, {easing_old: 'easeInOutQuad', easing_new: 'easeOutQuad'}, options || {});
      
      this.settings.is_animating = true;
      var easing_old = (this.settings.easing_default == '') ? options.easing_old : this.settings.easing_default;
      var easing_new = (this.settings.easing_default == '') ? options.easing_new : this.settings.easing_default;
      var time_animate = 800 / this.settings.velocity;
      
      var image_old = this.box_skitter.find('.image_main').attr('src');
      
      this.setActualLevel();
      
      this.setLinkAtual();
      this.box_skitter.find('.image_main').attr({'src':this.settings.image_atual});
      this.box_skitter.find('.image_main').hide();
      
      var total       = 2;
      var width_box     = this.settings.width_skitter;
      var height_box    = Math.ceil(this.settings.height_skitter / total);

      // Old image
      var box_clone1 = this.getBoxCloneImgOld(image_old), box_clone2 = this.getBoxCloneImgOld(image_old);
      box_clone1.find('img').css({left:0, top:0});
      box_clone1.css({top:0, left:0, width:width_box, height:height_box});

      box_clone2.find('img').css({left:0, top:-height_box});
      box_clone2.css({top:height_box, left:0, width:width_box, height:height_box});

      // Next image
      var box_clone_next1 = this.getBoxClone(), box_clone_next2 = this.getBoxClone();
      box_clone_next1.find('img').css({left:0, top:height_box});
      box_clone_next1.css({top:0, left:0, width:width_box, height:height_box});

      box_clone_next2.find('img').css({left:0, top: -(height_box * total) });
      box_clone_next2.css({top:height_box, left:0, width:width_box, height:height_box});

      // Add boxes
      this.addBoxClone(box_clone_next1);
      this.addBoxClone(box_clone_next2);
      this.addBoxClone(box_clone1);
      this.addBoxClone(box_clone2);

      // Show boxes
      box_clone1.show();
      box_clone2.show();
      box_clone_next1.show();
      box_clone_next2.show();

      // Callback
      var callback = function() { self.finishAnimation(); };

      // Animations
      box_clone1.find('img').animate({ top: height_box }, time_animate, easing_old, function() {
        box_clone1.remove();
      });
      box_clone2.find('img').animate({ top: -(height_box * total) }, time_animate, easing_old, function() {
        box_clone2.remove();
      });
      box_clone_next1.find('img').animate({ top: 0 }, time_animate, easing_new);
      box_clone_next2.find('img').animate({ top: -height_box }, time_animate, easing_new, callback);
    },

    animationCut: function(options)
    {
      var self = this;
      
      var options = $.extend({}, {easing_old: 'easeInOutExpo', easing_new: 'easeInOutExpo'}, options || {});
      
      this.settings.is_animating = true;
      var easing_old = (this.settings.easing_default == '') ? options.easing_old : this.settings.easing_default;
      var easing_new = (this.settings.easing_default == '') ? options.easing_new : this.settings.easing_default;
      var time_animate = 900 / this.settings.velocity;
      
      var image_old = this.box_skitter.find('.image_main').attr('src');
      
      this.setActualLevel();
      
      this.setLinkAtual();
      this.box_skitter.find('.image_main').attr({'src':this.settings.image_atual});
      this.box_skitter.find('.image_main').hide();
      
      var total       = 2;
      var width_box     = this.settings.width_skitter;
      var height_box    = Math.ceil(this.settings.height_skitter / total);

      // Old image
      var box_clone1 = this.getBoxCloneImgOld(image_old), box_clone2 = this.getBoxCloneImgOld(image_old);
      box_clone1.find('img').css({left:0, top:0});
      box_clone1.css({top:0, left:0, width:width_box, height:height_box});

      box_clone2.find('img').css({left:0, top:-height_box});
      box_clone2.css({top:height_box, left:0, width:width_box, height:height_box});

      // Next image
      var box_clone_next1 = this.getBoxClone(), box_clone_next2 = this.getBoxClone();
      //box_clone_next1.find('img').css({left:0, top:height_box});
      box_clone_next1.find('img').css({left:0, top:0});
      box_clone_next1.css({top:0, left:width_box, width:width_box, height:height_box});

      //box_clone_next2.find('img').css({left:0, top: -(height_box * total) });
      box_clone_next2.find('img').css({left:0, top: -height_box });
      box_clone_next2.css({top:height_box, left:-width_box, width:width_box, height:height_box});

      // Add boxes
      this.addBoxClone(box_clone_next1);
      this.addBoxClone(box_clone_next2);
      this.addBoxClone(box_clone1);
      this.addBoxClone(box_clone2);

      // Show boxes
      box_clone1.show();
      box_clone2.show();
      box_clone_next1.show();
      box_clone_next2.show();

      // Callback
      var callback = function() { self.finishAnimation(); };

      // Animations
      box_clone1.animate({ left: -width_box }, time_animate, easing_old, function() {
        box_clone1.remove();
      });
      box_clone2.animate({ left: width_box }, time_animate, easing_old, function() {
        box_clone2.remove();
      });
      box_clone_next1.animate({ left: 0 }, time_animate, easing_new);
      box_clone_next2.animate({ left: 0 }, time_animate, easing_new, callback);
    },
    
    // End animations ----------------------
    
    // Finish animation
    finishAnimation: function (options) 
    {
      var self = this;
      this.box_skitter.find('.image_main').show();
      this.showBoxText();
      this.settings.is_animating = false;
      this.box_skitter.find('.image_main').attr({'src': this.settings.image_atual});
      this.box_skitter.find('.image a').attr({'href': this.settings.link_atual});
      
      if (!this.settings.is_hover_box_skitter && !this.settings.is_paused && !this.settings.is_blur) {
        this.timer = setTimeout(function() { self.completeMove(); }, this.settings.interval);
      }
      
      self.startTime();
    },

    // Complete move
    completeMove: function () 
    {
      this.clearTimer(true);
      this.box_skitter.find('.box_clone').remove();
      if (!this.settings.is_paused && !this.settings.is_blur) this.nextImage();
    },

    // Actual config for animation
    setActualLevel: function() {
      if ($.isFunction(this.settings.imageSwitched)) this.settings.imageSwitched(this.settings.image_i, this);
      this.setImageLink();
      this.addClassNumber();
      this.hideBoxText();
      this.increasingImage();
    },

    // Set image and link
    setImageLink: function()
    {
      var name_image = this.settings.images_links[this.settings.image_i][0];
      var link_image = this.settings.images_links[this.settings.image_i][1];
      var label_image = this.settings.images_links[this.settings.image_i][3];
      var target_link = this.settings.images_links[this.settings.image_i][4];
      
      this.settings.image_atual = name_image;
      this.settings.link_atual = link_image;
      this.settings.label_atual = label_image;
      this.settings.target_atual = target_link;
    },

    // Add class for number
    addClassNumber: function () 
    {
      var self = this;
      // this.box_skitter.find('.image_number_select').animate(self.settings.animateNumberOut, 500).removeClass('image_number_select');
      // $('#image_n_'+(this.settings.image_i+1)+'_'+self.number_skitter).animate(self.settings.animateNumberActive, 700).addClass('image_number_select');
      this.box_skitter.find('.image_number_select').removeClass('image_number_select');
      $('#image_n_'+(this.settings.image_i+1)+'_'+self.number_skitter).addClass('image_number_select');
    },

    // Increment image_i
    increasingImage: function()
    {
      this.settings.image_i++;
      if (this.settings.image_i == this.settings.images_links.length) {
        this.settings.image_i = 0;
      }
    },
    
    // Get box clone
    getBoxClone: function()
    {
      if (this.settings.link_atual != '#') {
        var img_clone = $('<a href="'+this.settings.link_atual+'"><img src="'+this.settings.image_atual+'" /></a>');
        img_clone.attr({ 'target': this.settings.target_atual });
      } 
      else {
        var img_clone = $('<img src="'+this.settings.image_atual+'" />');
      }
      
      img_clone = this.resizeImage(img_clone);
      var box_clone = $('<div class="box_clone"></div>');
      box_clone.append(img_clone);
      return box_clone;
    },
    
    // Get box clone
    getBoxCloneImgOld: function(image_old)
    {
      if (this.settings.link_atual != '#') {
        var img_clone = $('<a href="'+this.settings.link_atual+'"><img src="'+image_old+'" /></a>');
        img_clone.attr({ 'target': this.settings.target_atual });
      } 
      else {
        var img_clone = $('<img src="'+image_old+'" />');
      }
      
      img_clone = this.resizeImage(img_clone);
      var box_clone = $('<div class="box_clone"></div>');
      box_clone.append(img_clone);
      return box_clone;
    },
    
    // Redimensiona imagem
    resizeImage: function(img_clone) 
    {
      if (this.settings.fullscreen) {
        img_clone.find('img').height(this.settings.height_skitter);
      }
      return img_clone;
    }, 

    // Add box clone in box_skitter
    addBoxClone: function(box_clone)
    {
      this.box_skitter.find('.container_skitter').append(box_clone);
    },
    
    // Get accepts easing 
    getEasing: function(easing)
    {
      var easing_accepts = [
        'easeInQuad',     'easeOutQuad',    'easeInOutQuad', 
        'easeInCubic',    'easeOutCubic',   'easeInOutCubic', 
        'easeInQuart',    'easeOutQuart',   'easeInOutQuart', 
        'easeInQuint',    'easeOutQuint',   'easeInOutQuint', 
        'easeInSine',     'easeOutSine',    'easeInOutSine', 
        'easeInExpo',   'easeOutExpo',    'easeInOutExpo', 
        'easeInCirc',     'easeOutCirc',    'easeInOutCirc', 
        'easeInElastic',  'easeOutElastic',   'easeInOutElastic', 
        'easeInBack',     'easeOutBack',    'easeInOutBack', 
        'easeInBounce',   'easeOutBounce',  'easeInOutBounce', 
      ];
      
      if (jQuery.inArray(easing, easing_accepts) > 0) {
        return easing;
      }
      else {
        return '';
      }
    },
    
    // Get random number
    getRandom: function (i) 
    {
      return Math.floor(Math.random() * i);
    },

    // Set value for text
    setValueBoxText: function () 
    {
      this.box_skitter.find('.label_skitter').html(this.settings.label_atual);
    },
    
    // Show box text
    showBoxText: function () 
    {
      var self = this;

      if ( this.settings.label_atual != undefined && this.settings.label_atual != '' && self.settings.label ) {

        switch ( self.settings.labelAnimation ) {

          case 'slideUp' : default : 
            self.box_skitter.find('.label_skitter').slideDown(400);
            break;

          case 'left' : case 'right' : 
            self.box_skitter.find('.label_skitter').animate({ left: 0 }, 400, 'easeInOutQuad');
            break;

          case 'fixed' : 
            // null
            break;
        }
      }
    },
    
    // Hide box text
    hideBoxText: function () 
    {
      var self = this;

      switch ( self.settings.labelAnimation ) {

        case 'slideUp' : default : 
          this.box_skitter.find('.label_skitter').slideUp(200, function() {
            self.setValueBoxText();
          });
          break;

        case 'left' : case 'right' : 
          var _left = ( self.settings.labelAnimation == 'left' ) ? -(self.box_skitter.find('.label_skitter').width()) : (self.box_skitter.find('.label_skitter').width());
          self.box_skitter.find('.label_skitter').animate({ left: _left }, 400, 'easeInOutQuad', function() {
            self.setValueBoxText();
          });
          break;

        case 'fixed' : 
          self.setValueBoxText();
          break;
      }
    },
    
    // Stop time to get over box_skitter
    stopOnMouseOver: function () 
    {
      var self = this;

      if ( self.settings.stop_over ) 
      {
        self.box_skitter.hover(function() {
          
          if (self.settings.stop_over) self.settings.is_hover_box_skitter = true;
          
          if (!self.settings.is_paused_time) {
            self.pauseTime();
          }
          
          self.setHideTools('hover');
          self.clearTimer(true);
          
        }, function() {
          if (self.settings.stop_over) self.settings.is_hover_box_skitter = false;
          
          if (self.settings.elapsedTime == 0 && !self.settings.is_animating && !self.settings.is_paused) {
            self.startTime();
          }
          else if (!self.settings.is_paused) {
            self.resumeTime();
          }
          
          self.setHideTools('out');
          self.clearTimer(true);
          
          if (!self.settings.is_animating && self.settings.images_links.length > 1) {
            self.timer = setTimeout(function() { self.completeMove(); }, self.settings.interval - self.settings.elapsedTime);
            self.box_skitter.find('.image_main').attr({'src': self.settings.image_atual});
            self.box_skitter.find('.image a').attr({'href': self.settings.link_atual});
          }
        });
      }
      else
      {
        self.box_skitter.hover(function() {
          self.setHideTools('hover');
        }, function() {
          self.setHideTools('out');
        });
      }
    }, 

    // Hover/out hideTools
    setHideTools: function( type ) {
      var self = this;
      var opacity_elements = self.settings.opacity_elements;
      var interval_in_elements = self.settings.interval_in_elements;
      var interval_out_elements = self.settings.interval_out_elements;

      if ( type == 'hover' ) {
        if (self.settings.hideTools) {
          if (self.settings.numbers) {
            self.box_skitter
              .find('.info_slide')
              .show()
              .css({opacity:0})
              .animate({opacity: opacity_elements}, interval_in_elements);
          }
          
          if (self.settings.navigation) {
            self.box_skitter
              .find('.prev_button, .next_button')
              .show()
              .css({opacity:0})
              .animate({opacity: opacity_elements}, interval_in_elements);
          }

          if (self.settings.focus && !self.settings.foucs_active) {
            self.box_skitter
              .find('.focus_button')
              .stop()
              .show().css({opacity:0})
              .animate({opacity:opacity_elements}, interval_in_elements);
          }
          
          if (self.settings.controls) {
            self.box_skitter
            .find('.play_pause_button')
            .stop()
            .show().css({opacity:0})
            .animate({opacity:opacity_elements}, interval_in_elements);
          }
        }

        if (self.settings.focus && !self.settings.foucs_active && !self.settings.hideTools) {
          self.box_skitter
            .find('.focus_button')
            .stop()
            .animate({opacity:1}, interval_in_elements);
        }
        
        if (self.settings.controls && !self.settings.hideTools) {
          self.box_skitter
            .find('.play_pause_button')
            .stop()
            .animate({opacity:1}, interval_in_elements);
        }
      }
      else {
        if (self.settings.hideTools) {
          if (self.settings.numbers) {
            self.box_skitter
              .find('.info_slide')
              .queue("fx", [])
              .show()
              .css({opacity: opacity_elements})
              .animate({opacity:0}, interval_out_elements);
          }
          
          if (self.settings.navigation) {
            self.box_skitter
              .find('.prev_button, .next_button')
              .queue("fx", [])
              .show()
              .css({opacity: opacity_elements})
              .animate({opacity:0}, interval_out_elements);
          }

          if (self.settings.focus && !self.settings.foucs_active) {
            self.box_skitter
              .find('.focus_button')
              .stop()
              .css({opacity: opacity_elements})
              .animate({opacity:0}, interval_out_elements);
          }

          if (self.settings.controls) {
            self.box_skitter
              .find('.play_pause_button')
              .stop()
              .css({opacity: opacity_elements})
              .animate({opacity:0}, interval_out_elements);
          }
        }
        
        if (self.settings.focus && !self.settings.foucs_active && !self.settings.hideTools) {
          self.box_skitter
            .find('.focus_button')
            .stop()
            .animate({opacity:0.3}, interval_out_elements);
        }
        
        if (self.settings.controls && !self.settings.hideTools) {
          self.box_skitter
            .find('.play_pause_button')
            .stop()
            .animate({opacity:0.3}, interval_out_elements);
        }
      }
    },
    
    // Stop timer
    clearTimer: function (force) {
      var self = this;
      clearInterval(self.timer);
    },
    
    // Set link atual
    setLinkAtual: function() {
      if (this.settings.link_atual != '#' && this.settings.link_atual != '') {
        this.box_skitter.find('.image a').attr({'href': this.settings.link_atual, 'target': this.settings.target_atual});
      }
      else {
        this.box_skitter.find('.image a').removeAttr('href');
      }
    },
    
    // Hide tools
    hideTools: function() {
      this.box_skitter.find('.info_slide').fadeTo(0, 0);
      this.box_skitter.find('.prev_button').fadeTo(0, 0);
      this.box_skitter.find('.next_button').fadeTo(0, 0);
      this.box_skitter.find('.focus_button').fadeTo(0, 0);
      this.box_skitter.find('.play_pause_button').fadeTo(0, 0);
    }, 
    
    // Focus Skitter
    focusSkitter: function() {
      var self = this;
      
      var focus_button = $('<a href="#" class="focus_button">focus</a>');
      self.box_skitter.append(focus_button);
      
      var _left = (self.settings.width_skitter - focus_button.width()) / 2;
      var _space = 0;
      
      if (self.settings.controls) _left -= 25;
      if (self.settings.controls_position == self.settings.focus_position) _space = focus_button.width() + 5;
      
      var cssPosition = {left: _left};
      
      switch (self.settings.focus_position)
      {
        case 'leftTop'    : cssPosition = {left: 5 + _space, top: 30}; break;
        case 'rightTop'   : cssPosition = {right: 5 + _space, top: 30}; break;
        case 'leftBottom'   : cssPosition = {left: 5 + _space, bottom: 5, top: 'auto'}; break;
        case 'rightBottom'  : cssPosition = {right: 5 + _space, bottom: 5, top: 'auto'}; break;
      }
      
      focus_button
        .css(cssPosition)
        .animate({opacity:0.3}, self.settings.interval_in_elements);
      
      $(document).keypress(function(e) {
        var code = (e.keyCode ? e.keyCode : e.which);
        if (code == 27) $('#overlay_skitter').trigger('click');
      });

      var _top = $('.box_skitter').offset().top;
      var _left = $('.box_skitter').offset().left;
      
      self.box_skitter.find('.focus_button').click(function() {
        if ( self.settings.foucs_active ) return false;
        self.settings.foucs_active = true;
        
        $(this).stop().animate({opacity:0}, self.settings.interval_out_elements);
        
        var div = $('<div id="overlay_skitter"></div>')
          .height( $(document).height() )
          .hide()
          .fadeTo(self.settings.interval_in_elements, 0.98);
          
        var _topFinal = (($(window).height() - $('.box_skitter').height()) / 2) + $(document).scrollTop();
        var _leftFinal = ($(window).width() - $('.box_skitter').width()) / 2;
        
        self.box_skitter.before('<div id="mark_position"></div>');
        $('body').prepend(div);
        $('body').prepend(self.box_skitter);
        self.box_skitter
          .css({'top':_top, 'left':_left, 'position':'absolute', 'z-index':9999})
          .animate({'top':_topFinal, 'left':_leftFinal}, 2000, 'easeOutExpo');
        
        $('#mark_position') 
          .width($('.box_skitter').width())
          .height($('.box_skitter').height())
          .css({'background':'none'})
          .fadeTo(300,0.3);
        
        return false;
      });

      $(document).on('click', '#overlay_skitter', function() {
        if ( $(this).hasClass('finish_overlay_skitter') ) return false;
        
        self.settings.foucs_active = false;
        $(this).addClass('finish_overlay_skitter');
        
        if (!self.settings.hideTools) self.box_skitter.find('.focus_button').animate({opacity:0.3}, 200);
        
        self.box_skitter
          .stop()
          .animate({'top':_top, 'left':_left}, 200, 'easeOutExpo', function() {
            $('#mark_position').before(self.box_skitter);
            $(this).css({'position':'relative', 'top':0, 'left': 0});
            $('#mark_position').remove();
          });
        
        $('#overlay_skitter').fadeTo(self.settings.interval_out_elements, 0, function() {
          $(this).remove();
        });
        
        return false;
      });
    },
    
    /**
     * Controls: play and stop
     */
    setControls: function() {
      var self = this;
      
      var play_pause_button = $('<a href="#" class="play_pause_button">pause</a>');
      self.box_skitter.append(play_pause_button);
      
      var _left = (self.settings.width_skitter - play_pause_button.width()) / 2;
      
      if (self.settings.focus) _left += 25;
      
      var cssPosition = {left: _left};
      
      switch (self.settings.controls_position)
      {
        case 'leftTop'    : cssPosition = {left: 5, top: 30}; break;
        case 'rightTop'   : cssPosition = {right: 5, top: 30}; break;
        case 'leftBottom'   : cssPosition = {left: 5, bottom: 5, top: 'auto'}; break;
        case 'rightBottom'  : cssPosition = {right: 5, bottom: 5, top: 'auto'}; break;
      }
      
      play_pause_button
        .css(cssPosition)
        .animate({opacity:0.3}, self.settings.interval_in_elements);
      
      play_pause_button.click(function() {
        if (!self.settings.is_paused) {
          $(this).html('play');
          $(this).fadeTo(100, 0.5).fadeTo(100, 1);
          
          $(this).addClass('play_button');
          self.pauseTime();
          self.settings.is_paused = true;
          self.clearTimer(true);
        }
        else {
          if (!self.settings.is_animating && !self.box_skitter.find('.progressbar').is(':visible')) {
            self.settings.elapsedTime = 0;
          }
          else {
            self.resumeTime();
          }
          
          if (!self.settings.progressbar) self.resumeTime();
          
          self.settings.is_paused = false;
          
          $(this).html('pause');
          $(this).fadeTo(100, 0.5).fadeTo(100, 1);
          $(this).removeClass('play_button');
          
          if (!self.settings.stop_over) { 
            self.clearTimer(true);
            if (!self.settings.is_animating && self.settings.images_links.length > 1) {
              self.timer = setTimeout(function() { self.completeMove(); }, self.settings.interval - self.settings.elapsedTime);
              self.box_skitter.find('.image_main').attr({'src': self.settings.image_atual});
              self.box_skitter.find('.image a').attr({'href': self.settings.link_atual});
            }
          }
        }
        
        return false;
      });
    },
        
    /**
     * Object size
     */
    objectSize: function(obj) {
      var size = 0, key;
      for (key in obj) { if (obj.hasOwnProperty(key)) size++; }
      return size;
    },
    
    /**
     * Add progress bar
     */
    addProgressBar: function() {
      var self = this;
      
      var progressbar = $('<div class="progressbar"></div>');
      self.box_skitter.append(progressbar);
      
      if (self.objectSize(self.settings.progressbar_css) == 0)  {
        if (parseInt(progressbar.css('width')) > 0) {
          self.settings.progressbar_css.width = parseInt(progressbar.css('width'));
        }
        else {
          self.settings.progressbar_css = {width: self.settings.width_skitter, height:5};
        }
      }
      if (self.objectSize(self.settings.progressbar_css) > 0 && self.settings.progressbar_css.width == undefined) {
        self.settings.progressbar_css.width = self.settings.width_skitter;
      }
      
      progressbar.css(self.settings.progressbar_css).hide();
    },
    
    /**
     * Start progress bar
     */
    startProgressBar: function() {
      var self = this;
      if (self.settings.is_hover_box_skitter || self.settings.is_paused || self.settings.is_blur || !self.settings.progressbar) return false;
      self.box_skitter.find('.progressbar')
        .hide()
        .dequeue()
        .width(self.settings.progressbar_css.width)
        .animate({width:'show'}, self.settings.interval, 'linear');
    },
    
    /**
     * Pause progress bar
     */
    pauseProgressBar: function() {
      var self = this;
      if (!self.settings.is_animating) {
        self.box_skitter.find('.progressbar').stop();
      }
    },
    
    /**
     * Resume progress bar
     */
    resumeProgressBar: function() {
      var self = this;
      
      if (self.settings.is_hover_box_skitter || self.settings.is_paused || !self.settings.progressbar) return false;
      
      self.box_skitter.find('.progressbar').dequeue().animate({width: self.settings.progressbar_css.width}, (self.settings.interval - self.settings.elapsedTime), 'linear');
    },
    
    /**
     * Hide progress bar
     */
    hideProgressBar: function() {
      var self = this;
      
      if (!self.settings.progressbar) return false;
      
      self.box_skitter.find('.progressbar').stop().fadeOut(300, function() {
        $(this).width(self.settings.progressbar_css.width);
      });
    },

    /**
     * Start time
     */
    startTime: function() {
      var self = this;
      
      self.settings.is_paused_time = false;
      
      var date = new Date();
      self.settings.elapsedTime = 0;
      self.settings.timeStart = date.getTime();
      
      // Start progress bar
      self.startProgressBar();
    }, 
    
    /**
     * Pause time
     */
    pauseTime: function() {
      var self = this;
      
      if (self.settings.is_paused_time) return false;
      self.settings.is_paused_time = true;
      
      var date = new Date();
      self.settings.elapsedTime += date.getTime() - self.settings.timeStart;
      
      // Pause progress bar
      self.pauseProgressBar();
    }, 
    
    /**
     * Resume time
     */
    resumeTime: function() {
      var self = this;
      
      self.settings.is_paused_time = false;
      
      var date = new Date();
      self.settings.timeStart = date.getTime();
      
      // Resume progress bar
      self.resumeProgressBar();
    }, 

    /**
     * Enable navigation keys
     */
    enableNavigationKeys: function() {
      var self = this;
      $(window).keydown(function(e) {
        // Next
        if (e.keyCode == 39 || e.keyCode == 40) {
          self.box_skitter.find('.next_button').trigger('click');
        }
        // Prev
        else if (e.keyCode == 37 || e.keyCode == 38) {
          self.box_skitter.find('.prev_button').trigger('click');
        }
      });
    },
    
    /**
     * Get box clone with background image
     */
    getBoxCloneBackground: function(options)
    {
      var box_clone = $('<div class="box_clone"></div>');

      box_clone.css({
        'left':         options.left, 
        'top':          options.top, 
        'width':        options.width, 
        'height':         options.height,
        'background-image':   'url('+options.image+')', 
        'background-position':  options.position.left+'px '+options.position.top+'px'
      });

      return box_clone;
    }, 

    /**
     * Shuffle array
     * @author Daniel Castro Machado <daniel@cdt.unb.br>
     */
    shuffleArray: function (arrayOrigem) {
      var self = this;
      var arrayDestino = new Array();
      var indice;
      while (arrayOrigem.length > 0) {
        indice = self.randomUnique(0, arrayOrigem.length - 1);
        arrayDestino[arrayDestino.length] = arrayOrigem[indice];
        arrayOrigem.splice(indice, 1);
      }
      return arrayDestino;
    }, 
    
    /**
     * Gera números aleatórios inteiros entre um intervalo
     * @author Daniel Castro Machado <daniel@cdt.unb.br>
     */
    randomUnique: function (valorIni, valorFim) {
      var numRandom;
      do numRandom = Math.random(); while (numRandom == 1); // Evita gerar o número valorFim + 1
      return (numRandom * (valorFim - valorIni + 1) + valorIni) | 0;
    },
    
    /** 
     * Stop on window focus out
     * @author Dan Partac (http://thiagosf.net/projects/jquery/skitter/#comment-355473307)
     */
    windowFocusOut: function () {
      var self = this;
      $(window).bind('blur', function(){
        self.settings.is_blur = true;
        self.pauseTime();
        self.clearTimer(true);
      });
      $(window).bind('focus', function(){
        if ( self.settings.images_links.length > 1 ) {
          self.settings.is_blur = false;  
          
          if  (self.settings.elapsedTime == 0) {
            self.startTime();
          }
          else {
            self.resumeTime();
          }
          
          if (self.settings.elapsedTime <= self.settings.interval) {
            self.clearTimer(true); // Fix bug IE: double next
            self.timer = setTimeout(function() { self.completeMove(); }, self.settings.interval - self.settings.elapsedTime);
            self.box_skitter.find('.image_main').attr({'src': self.settings.image_atual});
            self.box_skitter.find('.image a').attr({'href': self.settings.link_atual});
          }
        }
      });
    }
    
  });
  
  /**
   * Helper function for cross-browser CSS3 support, prepends all possible prefixes to all properties passed in
   * @param {Object} props Ker/value pairs of CSS3 properties
   */
  $.fn.css3 = function(props) {
    var css = {};
    var prefixes = ['moz', 'ms', 'o', 'webkit'];
    for(var prop in props) {
      // Add the vendor specific versions
      for(var i=0; i<prefixes.length; i++)
        css['-'+prefixes[i]+'-'+prop] = props[prop];
      // Add the actual version 
      css[prop] = props[prop];
    }
    this.css(css);
    return this;
  };
  
  // Monkey patch jQuery 1.3.1+ to add support for setting or animating CSS
  // scale and rotation independently.
  // 2009-2010 Zachary Johnson www.zachstronaut.com
  // Updated 2010.11.06
  var rotateUnits = 'deg';
  
  $.fn.rotate = function (val) {
    var style = $(this).css('transform') || 'none';
    if (typeof val == 'undefined') {
      if (style) {
        var m = style.match(/rotate\(([^)]+)\)/);
        if (m && m[1]) {
          return m[1];
        }
      }
      return 0;
    }
    var m = val.toString().match(/^(-?\d+(\.\d+)?)(.+)?$/);
    if (m) {
      if (m[3]) rotateUnits = m[3];
      $(this).css('transform',
        style.replace(/none|rotate\([^)]*\)/, '') + 'rotate(' + m[1] + rotateUnits + ')'
      );
    }
    
    return this;
  };
  
  // Note that scale is unitless.
  $.fn.scale = function (val, duration, options) {
    var style = $(this).css('transform');
    if (typeof val == 'undefined') {
      if (style) {
        var m = style.match(/scale\(([^)]+)\)/);
        if (m && m[1]) {
          return m[1];
        }
      }
      return 1;
    }
    $(this).css('transform',
      style.replace(/none|scale\([^)]*\)/, '') + 'scale(' + val + ')'
    );
    return this;
  };

  // fx.cur() must be monkey patched because otherwise it would always
  // return 0 for current rotate and scale values
  var curProxied = $.fx.prototype.cur;
  $.fx.prototype.cur = function () {
    if (this.prop == 'rotate') {
      return parseFloat($(this.elem).rotate());
    }
    else if (this.prop == 'scale') {
      return parseFloat($(this.elem).scale());
    }
    return curProxied.apply(this, arguments);
  };
  
  $.fx.step.rotate = function (fx) {
    $(fx.elem).rotate(fx.now + rotateUnits);
  };
  
  $.fx.step.scale = function (fx) {
    $(fx.elem).scale(fx.now);
  };
  
  var animateProxied = $.fn.animate;
  $.fn.animate = function (prop) {
    if (typeof prop['rotate'] != 'undefined') {
      var m = prop['rotate'].toString().match(/^(([+-]=)?(-?\d+(\.\d+)?))(.+)?$/);
      if (m && m[5]) {
        rotateUnits = m[5];
      }
      prop['rotate'] = m[1];
    }
    
    return animateProxied.apply(this, arguments);
  };
  
  // Monkey patch jQuery 1.3.1+ css() method to support CSS 'transform'
  // property uniformly across Safari/Chrome/Webkit, Firefox 3.5+, IE 9+, and Opera 11+.
  // 2009-2011 Zachary Johnson www.zachstronaut.com
  // Updated 2011.05.04 (May the fourth be with you!)
  function getTransformProperty(element) {
    var properties = ['transform', 'WebkitTransform', 'msTransform', 'MozTransform', 'OTransform'];
    var p;
    while (p = properties.shift()) {
      if (typeof element.style[p] != 'undefined') {
        return p;
      }
    }
    return 'transform';
  };
  
  var _propsObj = null;
  
  var proxied = $.fn.css;
  $.fn.css = function (arg, val) {
    if (_propsObj === null) {
      if (typeof $.cssProps != 'undefined') {
        _propsObj = $.cssProps;
      }
      else if (typeof $.props != 'undefined') {
        _propsObj = $.props;
      }
      else {
        _propsObj = {};
      }
    }
    if
    (
      typeof _propsObj['transform'] == 'undefined'
      &&
      (
        arg == 'transform'
        ||
        (
          typeof arg == 'object'
          && typeof arg['transform'] != 'undefined'
        )
      )
    ) {
      _propsObj['transform'] = getTransformProperty(this.get(0));
    }
    if (_propsObj['transform'] != 'transform') {
      // Call in form of css('transform' ...)
      if (arg == 'transform') {
        arg = _propsObj['transform'];
        if (typeof val == 'undefined' && jQuery.style) {
          return jQuery.style(this.get(0), arg);
        }
      }
      // Call in form of css({'transform': ...})
      else if
      (
        typeof arg == 'object'
        && typeof arg['transform'] != 'undefined'
      ) {
        arg[_propsObj['transform']] = arg['transform'];
        delete arg['transform'];
      }
    }
    return proxied.apply(this, arguments);
  };

})(jQuery);