$(function() {

  //cache the ticker
  var ticker = $("#ticker");

  //wrap dt:dd pairs in divs
  ticker.children().filter("dt").each(function() {

    var dt = $(this),
            container = $("<div>");

    dt.next().appendTo(container);
    dt.prependTo(container);

    container.appendTo(ticker);
  });

  //hide the scrollbar
  ticker.css("overflow", "hidden");

  //animator function
  function animator(currentItem) {

    //work out new anim duration
    var distance = currentItem.height();
    duration = (distance + parseInt(currentItem.css("marginTop"))) / 0.025;

    //animate the first child of the ticker
    currentItem.animate({ marginTop: -distance }, duration, "linear", function() {

      //move current item to the bottom
      currentItem.appendTo(currentItem.parent()).css("marginTop", 0);

      //recurse
      animator(currentItem.parent().children(":first"));
    });
  };

  //start the ticker
  animator(ticker.children(":first"));

  //set mouseenter
  ticker.mouseenter(function() {

    //stop current animation
    ticker.children().stop();

  });

  //set mouseleave
  ticker.mouseleave(function() {

    //resume animation
    animator(ticker.children(":first"));

  });
  
  //cache the ticker
  var ticker2 = $("#ticker3");

  //wrap dt:dd pairs in divs
  ticker2.children().filter("dt").each(function() {

    var dt = $(this),
            container = $("<div>");

    dt.next().appendTo(container);
    dt.prependTo(container);

    container.appendTo(ticker2);
  });

  //hide the scrollbar
  ticker2.css("overflow", "hidden");

  //animator function
  function animator(currentItem) {

    //work out new anim duration
    var distance = currentItem.height();
    duration = (distance + parseInt(currentItem.css("marginTop"))) / 0.025;

    //animate the first child of the ticker2
    currentItem.animate({ marginTop: -distance }, duration, "linear", function() {

      //move current item to the bottom
      currentItem.appendTo(currentItem.parent()).css("marginTop", 0);

      //recurse
      animator(currentItem.parent().children(":first"));
    });
  };

  //start the ticker2
  animator(ticker2.children(":first"));

  //set mouseenter
  ticker2.mouseenter(function() {

    //stop current animation
    ticker2.children().stop();

  });

  //set mouseleave
  ticker2.mouseleave(function() {

    //resume animation
    animator(ticker2.children(":first"));

  });
});
