var THRESHOLD = 10;
var INTERVAL  = 300;
var SUMMER    = 5000;
var RANDOM    = false;

var page      = 1;
var minimum   = 1000000000;
var lock      = false;

var postArray = [];

$(document).ready(function() {
  if(location.href.match(/#random/)) RANDOM = true;

  $(window).keydown(function(e) {
    var keyCode = e.keyCode;
    if(keyCode == 74) pass();   // j
    //if(keyCode == 79) _open();  // o
    if(keyCode == 85) reblog(); // u
  });
  load();

  $('#posts').empty().append($('<div />').addClass('films')
                     .append($('<div />').attr('id','reblog').addClass('film').height(500).css({'left':  0}).click(reblog))
                     .append($('<div />').attr('id','pass').addClass('film').height(500).css({'right': 0}).click(pass))
                    );
});

function pass() {
  var firstPost = postArray.shift();
  $('.pass',firstPost).fadeTo('fast', 0.2);
  next(firstPost,postArray[0]);
}

function reblog() {
  var firstPost = postArray.shift();
  var reblogImg = $('.reblog', firstPost);
  reblogImg.fadeTo('fast', 0.2);
  var reblogId = reblogImg.attr('id').replace(/^reblog_/, '');
  var permalink = $('#post_' + reblogId + ' a.permalink').attr('href');
  $.post('./api/reblog/', {url: permalink});
  next(firstPost, postArray[0]);
}

function next(firstPost,secondPost) {
  setTimeout(function() {
    firstPost.remove();
    if(secondPost) secondPost.removeClass('standby');
    load();
    document.body.scrollTop = 0;
  }, INTERVAL);
}

function appendPost(li, d) {
  var posts = $('#posts');

  switch(d['post_type']) {
  case 'regular':
    posts.append(
      li.append($('<div />').addClass('post').addClass('chat_post')
                .html('<div class="title">' +  d['title'] + '</div>' + d['body'])
               )
    );
    break;
  case 'photo':
    posts.append(
      li.append($('<div />').addClass('post').addClass('photo_post')
                .append($('<a />').attr('href', d['permalink'])
                        .append($('<img />').attr('src', d['body']).width(400).addClass('photo'))
                       )
                .append($('<div />').addClass('caption').html(d['caption']))
               )
    );
    break;
  case 'quote':
    posts.append(
      li.append($('<div />').addClass('post').addClass('quote_post')
                .append($('<div />').addClass('quote')
                        .append($('<span />').addClass('quote').html(d['body']))
                       )
                .append($('<div />').addClass('source').html(d['caption']))
               )
    );
    break;
  case 'link':
    posts.append(
      li.append($('<div />').addClass('post').addClass('link_post')
                .append($('<div />').addClass('link').html(d['title']))
               )
    );
    break;
  case 'conversation':
    posts.append(
      li.append($('<div />').addClass('post').addClass('chat_post')
                .append($('<div />').addClass('title').html(d['title']))
                .append($('<div />').addClass('chat').html(d['body']))
               )
    );
    break;
  }
}

function load() {
  if(postArray.length < THRESHOLD && !lock) {
    lock = true;
    var num = RANDOM ? Math.ceil(Math.random() * SUMMER) : page;
    $.getJSON('./api/dashboard/', {page: num}, function(data) {
      lock = false;
      page++;
      $('#loading').remove();

      for(var i = 0, len = data.length; i < len; ++i) {
        var d = data[i];
        var postId = parseInt(d['id']);

        if(!RANDOM && minimum <= postId) {
          if(i == (len - 1)) load();
          break;
        }
        minimum = postId;

        var li = $('<li />').attr('id', 'post_' + d['id']).addClass('post').addClass('standby');
        postArray.push(li);

        li.append($('<div />').addClass('post_info')
                  .append($('<a />').addClass('author').attr('href', d['user']['url']).text(d['user']['id']))
                  .append($('<a />').addClass('permalink').attr('href', d['permalink']).text('(permalink)'))
                  .append($('<img />').addClass('reblog').attr({'src': './images/reblog.gif', 'id': 'reblog_' + d['id']}))
                  .append($('<img />').addClass('pass').attr('src', './images/pass.gif'))
                 );

        appendPost(li, d);
      }

      if(postArray[0]) postArray[0].removeClass('standby');
    });
  }
}
