/* -----------------------------------------------------------
/* ------------------------- cLone ----------------------------
*/
function Slider(element, slide_num, num_vis) {
  var self = this;
  this.root = element;
  this.slide_offset = 0;
  this.items = this.root.children();
  this.speed = this.items.eq(0).outerWidth(true) / 2;
  this.centered = true;
  this.home_local = 0;
  this.direction = 1;
  this.silde_amount = slide_num;
  this.number_visible = num_vis;
  
  this.root.wrap('<div class="smart_button" style="width:100%;"></div>');
  this.smart_button = self.root.parent();
  this.smart_button.data('iter', -1);
  this.content_reload = function() {
    self.items = self.root.children();
    var outerWidth = 0;
    for (var i = 0; i < self.items.length; i++) {
      self.first_visible = self.items.eq(0);
      self.items.eq(i).data('iter', i);
      self.items.eq(i).data('lefter', i * -self.items.eq(i).outerWidth(true));
      outerWidth += self.items.eq(i).outerWidth(true);
    }
    self.root.wrapInner('<div class="smart_wrap" style="width:' + outerWidth + 'px;" ></div>')
    self.slide_left = self.root.parent().offset().left;
    self.slide_right = self.root.offset().left + self.root.outerWidth();
    self.root_width = self.root.outerWidth(true);
  }  
  
  this.pre_load = function() {
    var iter = self.active.data('iter');
    for (var i = iter; i < iter + self.slide_amount; i++) {
      
    }
  }

  this.set_current = function(current) {
    if (current.data('iter') == undefined) {
      self.set_current(current.parent());
    } else if (current.data('iter') < self.silde_amount && self.direction > 0) {
      self.first_visible = self.items.eq(0);
    } else if (current.data('iter') > self.items.length - self.number_visible && self.direction < 0) {
      self.first_visible = self.items.eq(self.items.length - self.number_visible);
    } else {
      self.first_visible = self.items.eq(current.data('iter') - (self.silde_amount * self.direction));
    }
  }

  this.move_on = function(e) {
    var me = $(e.target);
    if (e.target != e.currentTarget) {
      self.set_current(me);
    } else {
      self.set_current(self.first_visible);
    }
    self.big_move();
  }
  
  this.big_move = function() {
    self.root.children().animate({
      left: self.first_visible.data('lefter')
    }, {duration: 350, 
      easing: "easeOutQuad",
      queue: false
    });
  }

  this.back_home = function() {
    if (self.centered) {
      return;
    }
    self.smart_button.removeClass('left');
    self.smart_button.removeClass('right');
    self.big_move();
    self.centered = true;
  }
  this.little_move = function() {
    self.root.children().animate({
      left: self.first_visible.data('lefter') + (self.speed * self.direction)
    }, {duration: 350, 
      easing: "easeOutQuad",
      queue: false
    });
    self.centered = false;
  }
  this.half_way_hover = function(e) {
    if (e.pageX <= (self.slide_left + self.slide_offset) && !self.smart_button.hasClass('left')) {
      self.smart_button.removeClass('right');
      self.smart_button.addClass('left');
      self.direction = 1;
      self.little_move();
    } else if (e.pageX >= (self.slide_right - self.slide_offset) && !self.smart_button.hasClass('right')) {
      self.smart_button.removeClass('left');
      self.smart_button.addClass('right');
      self.direction = -1;
      self.little_move();
    } else if ((e.pageX < self.slide_right - self.speed - self.slide_offset) && (e.pageX > self.slide_left + self.speed + self.slide_offset) && !self.centered) {
      self.direction = 1;
      self.back_home();
    }
  }
  this.content_reload();
  this.smart_button.bind('mouseleave', this.back_home);
  this.smart_button.bind('mousemove', this.half_way_hover);
  this.smart_button.bind('click', this.move_on);
}
