$(function() {
  var config = {
    slides : $("#home_slide_image > ul"),
    left   : $("#control_left > a"),
    right  : $("#control_right > a"),
    text   : $("#control_text > p"),
    link   : $("#home_slide_mask > a"),
    timeout: 7000
  };
  var slides = [];
  var liWidth = 0;
  var liCount = 0;
  var timeout = false;
  
  function move(dir, automated) {
    if (timeout) clearTimeout(timeout);
    if (config.slides.filter(":animated").length) return;
    if (config.text.filter(":animated").length) return;
    
    var curLeft = parseInt(config.slides.css("margin-left"));
    
    if (dir == -1 && curLeft == "0") return;
    if (dir == 1 && curLeft == -liWidth * (liCount - 1)) {
      var curr = 0;
      var dest = 0
    } else {
      var curr = (curLeft == 0 ? 0 : -curLeft/liWidth) + dir;
      var dest = (dir==1?"-":"+")+"="+liWidth;
    }

    var coord = $.coordinate(2, function() {
      config.text.text(slides[curr].caption).fadeIn();
      config.link.attr("href", slides[curr].href);
      if (typeof(automated) != "undefined") {
        timeout = setTimeout(function() {
          move(1, 1);
        }, config.timeout);
      }
    });
    
    config.slides.animate({"margin-left" : dest}, coord);
    config.text.fadeOut(coord);
  }

  $.extend({
    slide : function(data, settings) {
      if (settings) $.extend(config, settings);
      slides = data;
      liWidth = config.slides.find("li").outerWidth();
      liCount = config.slides.find("li").length;

      config.left.bind("click", function() {
        move(-1);
        return false;
      });
      config.right.bind("click", function() {
        move(1);
        return false;
      });
      
      timeout = setTimeout(function() {
        move(1, 1);
      }, config.timeout);
    }
  });
});
