var BlurbViewer = function(_minTop, _maxTop) {
  var blurbs = [],
      FADE_LENGTH = 2000,
      FADE_DELAY  = 10000,
      BLACK_DELAY = 1000,
      minTop = _minTop,
      maxTop = _maxTop,
      currentBlurb = null,
      _xml, $xml;

  var load = function(url) {
    $.ajax({
      dataType: 'xml',
      url:      url,
      complete: doneLoading
    });
  };

  var doneLoading = function(data) {
    _xml = data.responseXML;
    $xml = $(_xml);

    //logXML($xml);

    setUpDivs();
    setTimeout(appear, FADE_LENGTH);
  };

  var appear = function() {
    currentBlurb = blurbs.shift();
    $(currentBlurb).css({
      top: top_position(),
      left: $('canvas').position()['left'] + 21 + 'px',
    });
    $(currentBlurb).fadeIn(FADE_LENGTH);
    adjustAwardHeight();
    setTimeout(fadeout, FADE_DELAY);
  };

  var fadeout = function() {
    $(currentBlurb).fadeOut(FADE_LENGTH);
    setTimeout(appear, BLACK_DELAY);
    blurbs.push(currentBlurb);
  };

  var adjustAwardHeight = function() {
    var text = $(currentBlurb).find('.awrd-author');
    if( !text.size() > 0 ) { return; }

    var top    = parseInt( text.css('top') );
        height = text.height();

    var add = (48 - height) / 2;
    text.css('top', (32 + add) + 'px');
  };

  var setUpDivs = function() {
    $xml.find('blurbs').children().each( function() {
      blurbs.push( makeDiv( $(this) ));
    });

    $.each(blurbs, function(i, $blurb) {
      $('#canvas-container').append( $blurb );
    });
  };

  var top_position = function() {
    var c_y      = $('canvas').position()['top'],
        c_height = $('canvas').height();

    return c_y + Math.floor( Math.random() * (c_height - 225) ) + 'px';
  }

  var makeDiv = function($blurb) {
    var type   = $blurb.find('type')  .text(),
        author = $blurb.find('author').text(),
        text   = $blurb.find('text')  .text();

    if(type == "award") {
      return makeAward(author, text);
    } else if(type == "blurb") {
      return makeBlurb(author, text);
    }
  };

  var makeAward = function(author, text) {
    return $(
      '<div class="awrd">' +
        '<img src="images/laurels.png" class="laurels">' +
        '<p class="awrd-author">' +
          author +
        '</p>' +
      '</div>');
  };

  var makeBlurb = function(author, text) {
    return $(
      '<div class="blrb">' +
        '<p class="blrb-text">' +
          text +
        '</p>' +
        '<p class="blrb-author">' +
          '&mdash; ' + author +
        '</p>' +
      '</div>');
  };

  var indentation = function(indentLevel) {
    if(indentLevel == 0) { return ""; }

    var indentation = "->";
    while(--indentLevel) {
      indentation = "--" + indentation;
    }
    return indentation;
  };

  var logXML = function($node, indentLevel) {
    if(!indentLevel) {
      indentLevel = 0;
    }

    console.log( indentation(indentLevel) + $node.context.nodeName );
    if($node.children().length > 0) {
      $node.children().each(function() {
        logXML($(this), indentLevel + 1);
      });
    } else {
      console.log( indentation(indentLevel + 1) + $node.text() );
    }
  };

  return {
    appear:    appear,
    fadout:    fadeout,
    blurbs:    function() {return blurbs; },
    load:      load,
    xml:       function() {return $xml;}
  };
}


