var LA_Carousel = function(params) {
  this.params = {
    selector: '#slides ul',
    ready_container: '#slides'

  };
  jQuery.extend(false, this.params, params);

  this.itemList = [];

  this.initCallback = function(csc, carousel) {
    $(csc.params.selector).children().each(function() {
        csc.itemList.push(this.innerHTML);
    });
    $(csc.params.selector).html('');

    $('div.slide img.bw').hide();
    $('div.slide div.content').hide();

    $(csc.params.ready_container).show();
  }

  this.itemVisibleInCallback = function(csc, carousel, item, i, state, evt) {
    // The index() method calculates the index from a
    // given index who is out of the actual item range.
    if (csc.itemList.length > 1 || i == 1) {
      var idx = carousel.index(i, csc.itemList.length);
      var s = carousel.add(i, csc.itemList[idx - 1]);
      $(s).find('img.bw').hide();
      $(s).find('div.content').hide();
    }
  };

  this.itemVisibleOutCallback = function(carousel, item, i, state, evt) {
    carousel.remove(i);
  };

  this.clear_selected = function(csc, carousel, item, i, state) {
    var idx = carousel.index(i+1, csc.itemList.length);
    $('#slide'+idx+' img.bw').fadeOut('fast');
    $('#slide'+idx+' div.content').fadeOut('fast');
  }

  this.activate_image = function(csc, carousel, item, i, state) {
    var idx = carousel.index(i+1, csc.itemList.length);
    $('#slide'+idx+' img.bw').fadeIn('slow');
    $('#slide'+idx+' div.content').fadeIn('slow');
  }

  csc = this;
  $(this.params.selector).jcarousel({
    scroll: 1,
    offset: 3,
    start: 1,
    initCallback: function(carousel) { csc.initCallback(csc, carousel); },
    itemFirstOutCallback: { onBeforeAnimation: function(carousel, item, i, state) { csc.clear_selected(csc, carousel, item, i, state); } },
    itemFirstInCallback: { onAfterAnimation: function(carousel, item, i, state) { csc.activate_image(csc, carousel, item, i, state); } },
    wrap: 'circular',
    itemVisibleInCallback: {onBeforeAnimation: function(carousel, item, i, state, evt) { csc.itemVisibleInCallback(csc, carousel, item, i, state, evt); }},
    itemVisibleOutCallback: {onAfterAnimation: csc.itemVisibleOutCallback}
  });

}

$(document).ready(function() { 
    new LA_Carousel(); 

    $('.jcarousel-skin-home .jcarousel-next-horizontal').hover(function() {
      $(this).fadeTo('fast', 1.0);
    }, function() {
      $(this).fadeTo('fast', 0);
    });
    $('.jcarousel-skin-home .jcarousel-next-horizontal').fadeTo(30, 0);
    $('.jcarousel-skin-home .jcarousel-prev-horizontal').hover(function() {
      $(this).fadeTo('fast', 1.0);
    }, function() {
      $(this).fadeTo('fast', 0);
    });
    $('.jcarousel-skin-home .jcarousel-prev-horizontal').fadeTo(30, 0);

    var resize_window = function() {
      var w = Math.max(1200, $(window).width());
      var l = Math.min(925, Math.round((3050 - w) / 2)) - 15;
      $('#slide_container').width(w);
      $('#slides').css('left', '-'+l+'px');
    }
    $(window).resize(resize_window);
    resize_window();
  });

