jQuery.fn.marquee = function(settings) {

  settings = jQuery.extend({
    speed: 30,
    direction: "up"
  }, settings);

  return this.each(function(){

    var scroller = $(this);
    scroller.wrap("<div></div>");

    var wrapper = scroller.parent();
    wrapper.addClass("marquee_wrapper");
    wrapper.css ({
      "width" : settings.width,
      "height" : settings.height,
      "position" : "relative",
      "overflow" : "hidden"
    });

    scroller.css ({
      "position" : "absolute",
      "left" : "0",
      "top" : "0"
    });

    function doscroll(dir) {

    if( dir=='left' )
    {
      scroller.animate({
        left : endpos },
        (scroller.width()/wrapper.width())*1000*settings.speed,
        "linear",
        function() {
          scroller.css( dir , startpos );
          doscroll(dir);
      }
    )
    }
    else
    {
      scroller.animate({
        top : endpos },
        (scroller.height()/wrapper.height())*1000*settings.speed,
        "linear",
        function() {
          scroller.css( dir , startpos );
          doscroll(dir);
      }
    )
    }
      };


    switch(settings.direction) {
      case 'left':
        scroller.css ({
          "height" : wrapper.height(),
          "white-space" : "nowrap"
          });
        startpos = 0;
        endpos = -scroller.width();
        scroller.css ({ "left" : "0" });
        doscroll("left");
        scroller.hover(function() {
          scroller.stop(); },
          function() {
            doscroll("left");
        });

        break;
      case 'right':
        scroller.css ({
          "height" : wrapper.height(),
          "white-space" : "nowrap"
          });
        startpos = -scroller.width();
        endpos = wrapper.width();
        scroller.css ({ "left" : startpos+"px" });
        doscroll("left");
        scroller.hover(function() {
          scroller.stop(); },
          function() {
            doscroll("left");
        });

        break;
      case 'down':
        startpos = -scroller.height();
        endpos = wrapper.height();
        scroller.css ({ "top" : startpos+"px" });
        doscroll("top");
        scroller.hover(function() {
          scroller.stop(); },
          function() {
            doscroll("top");
        });
        break;
      default:
        var startpos = 0;
        var endpos = -scroller.height();
        scroller.css ({ "top" : "0" });
        dir="top";
        doscroll("top");
        scroller.hover(function() {
          scroller.stop(); },
          function() {
            doscroll("top");
        });
        break;
     }

  })

};

jQuery.log = function(message) {
  if(window.console) {
     console.debug(message);
  } else {
     alert(message);
  }
};
