// (c) 2009 profi-studio.ru # kostya makarchev

ImgPanel = function(options) { this.init(options); }
$.extend(ImgPanel.prototype, {

  init: function(options) {
    this.current_img = null;
    this.in_animation = 0;
    this.imgs_count = options.imgs_count || 1;

    this.main_pic = $('#current_img');
    this.track = $("#img_panel");
    this.frame = $('#frame');
    this.elements = $('#img_panel > li');

    this.preload_count = 6;

    if (options.selected != undefined) {
      li = this.elements[ options.selected || 0 ];
      this.choose(li);
    }
  },

  choose: function(element) {
    element = $(element)
    if (element.hasClass('selected')) {return;}

    src = element.attr("big_src");

    this.main_pic.hide();
    this.main_pic.attr('src', src).load(function() {
      $(this).fadeIn(1000);
    });

    element.addClass('selected');
    if (this.current_img) { this.current_img.removeClass('selected'); }
    this.current_img = element;

    this.animate_to(element);
    if (this.onChoose) this.onChoose(element);
  },

  next: function() { // На следующий слайд
    if (this.current_img) {
      next = this.current_img.next('li');
      if (next.size() > 0) { this.choose(next); }      
    }
  },

  prev: function() { // На предыдущий слайд
    if (this.current_img) {
      prev = this.current_img.prev('li');
      if (prev.size() > 0) { this.choose(prev); }      
    }
  },

  animate_to: function(element) { // Выполнить анимацию к нужному слайду на панельке картинок
    this.slide_width = element.context.offsetWidth;
    slide_width = this.slide_width;
    slide_x = element.attr('number') * slide_width;
    slide_center_x = slide_x + slide_width / 2

    track_left = parseFloat(this.track.css('left'));
    track_width = this.imgs_count * slide_width;

    frame_width = parseFloat(this.frame.css('width'));
    frame_center = frame_width / 2;

    frame_center_on_track = frame_center - track_left;
    offset = frame_center_on_track - slide_center_x;
    lft = track_left + offset;

    if (lft < (frame_width - track_width)) { lft = frame_width - track_width; }
    if (lft > 0) {lft = 0;}

    this.reload_mini_imgs(lft);

    this.track.addClass('moving');
    this.track.animate( {left: lft + 'px'}, 600, function() {
      $(this).removeClass('moving');
    } );
  },

  delta: function(offset) {
    if (this.track.hasClass('moving')) {return}

    track_left = parseFloat(this.track.css('left'));
    frame_width = parseFloat(this.frame.css('width'));
    frame_center = frame_width / 2;

    lft = track_left + offset * 80;
    if (lft < (frame_width - track_width)) { lft = frame_width - track_width; }
    if (lft > 0) {lft = 0;}

    this.reload_mini_imgs(lft);

    this.track.css('left', lft + 'px');
  },

  reload_mini_imgs: function(lft) {
    pos = Math.ceil(-lft / this.slide_width);

    // Получаем список тех лишек, у которых надо обновить src
    for (var i = pos + 1; (i < this.elements.length) && (i < pos + this.preload_count + 1); i++ ) {
      var li = $(this.elements[i]);
      var el = li.children('p').children('img');

      if (el.attr('src') != li.attr("mini_src")){
        el.attr('src', li.attr("mini_src"));
      }
    }
  }

});
