function ScrollingJobs() {
  this.animate = function() {
    this.first_job = this.get_first_job();
    this.scroll_incrementally();
    
    if(this.is_first_job_offscreen()) {
      this.shift_then_push_first_job();
    }
  };

  this.get_first_job = function() {
    return $('ul#jobs li:first');
  };

  this.scroll_incrementally = function() {
    margin_top = parseInt(this.first_job.css('margin-top'));
    this.first_job.css('margin-top', (margin_top - 1) + 'px');
  };

  this.is_first_job_offscreen = function() {
    var offset = parseInt(this.first_job.css('margin-top'));
    var height = parseInt(this.first_job.height()) + 
                 parseInt(this.first_job.css('padding-top')) + 
                 parseInt(this.first_job.css('padding-bottom'));
                 
    return Math.abs(offset) >= height;
  };

  this.shift_then_push_first_job = function() {
    this.first_job.css('margin-top', 0);
    this.first_job.insertAfter($('ul#jobs li:last'));
  };
};

var jobs = new ScrollingJobs();

function job_list_inner_height() {
  var total_height = 0;

  $('ul#jobs > *').each(function() {
    total_height += $(this).height();
    total_height += parseInt($(this).css('padding-top'));
    total_height += parseInt($(this).css('padding-bottom'));
  });
  
  return total_height;
}

$(function() {
  if($('ul#jobs').height() < job_list_inner_height())
    setInterval('jobs.animate()', 100);
});
