


//
// Add more query articles
//
function more_query_articles() {
  //console.log("posting...");
  $.post('/async/more_query_articles', {}, function(response) {

    if (response.length == 0) {

      $('#moreQueryArticles').unbind('click');
      $('#moreQueryArticles').after('Inga fler tr&auml;ffar.').remove();

    } else {

      $('.chunk:last').after(response);
    }

  });
}

function more_feed_articles() {
  //console.log("feed articles mehr schnell!");
  var chunk = $('.chunk:last').attr("id");
  _data = chunk.split('.');

  $.post('/async/more_feed_articles', { feed: _data[0], row: _data[1] }, function(response) {

    if (response.length == 0) {

      $('#moreFeedArticles').unbind('click');
      $('#moreFeedArticles').after('Inga fler artiklar.').remove();

    } else {
      $('.chunk:last').after(response);
    }

  });
}

//
// Move a feed to another
//
function move_feed(feed, dest) {
  var arg = "feed=" + feed + "&dest=" + dest;
  $.post('/async/move_feed', arg, function() {
    //console.log("Move request complete.");
  });
}

function delete_chunk(chunk) {
  $.post('/async/delete_article', "chunk=" + chunk.attr("id"), function() {
    //console.log("Delete request for " + chunk.attr("id") + " complete.");
  });
  chunk.remove();
}

//
// A feed dropped on a feed
//
function dropped_feed(dest, dropped) {
  dropped.css("left","0px");
  dropped.css("top","0px");

  receiver= dest.parent();

  //console.log("Dropped " + dropped.attr("id") + " on " + receiver.attr("id"));

  if(receiver == dropped) return;

  move_feed(dropped.attr("id"), receiver.attr("id"));

  subbranch = $('ul', receiver);
  if (subbranch.size() == 0) {
    dest.after('<ul></ul>');
    subbranch = $('ul', receiver);
  }
  oldParent = receiver;
  subbranch.eq(0).append(dropped);
  oldBranches = $('li', oldParent);
  if (oldBranches.size() == 0) {
    $(oldParent).remove();
  }
}


//
// A chunk dropped on a feed
//
function dropped_chunk(dest, chunk) {
  //console.log("chunk=" + chunk.attr("id") + "&to=" + dest.parent().attr("id"));

  if (chunk.attr("id").match(/^_search/) != null) {
    article = {
      /*
      url: chunk.find('.article_url').attr("href"),
      title: chunk.find('.article_title').text(),
      created: chunk.find('.article_date').attr("created"),
      source: chunk.find('.article_source').text(),
      category: chunk.find('.article_category').text(),
      tags: chunk.find('.article_tags').text(),
      highlight: chunk.find('.article_highlight').text(),
      */
      url: chunk.find('.article_attrs').attr("url"),
      title: chunk.find('.article_attrs').attr("title"),
      created: chunk.find('.article_attrs').attr("created"),
      source: chunk.find('.article_attrs').attr("source"),
      highlight: chunk.find('.article_attrs').attr("highlight"),
      feed: dest.parent().attr("id")
    };
    //console.log($.toJSON(article));

    $.post('/async/add_article', article, function() {
      //console.log("Add request for " + chunk.attr("id") + " complete.");
    });

    //console.log("search article: " + article);
  } else {
    //console.log(chunk.html());

    $.post('/async/add_article', { chunk: chunk.attr("id"), to: dest.parent().attr("id") }, function() {
      //console.log("Add request for " + chunk.attr("id") + " complete.");
    });
  }
}


function bind_feed_tree() {

  $('.treeLabel').droppable(
    {
      accept: '.treeItem, .chunk',
      hoverClass: 'droppable-hover',
      tolerance: 'pointer',
      drop: function(ev, ui)
      {
        var dropped = $(ui.draggable)
        if (dropped.hasClass("treeItem")) {
          dropped_feed($(this), dropped);
        } else if (dropped.hasClass("chunk")) {
          dropped_chunk($(this), dropped);
        }
      }
    }
  );

  $('.treeItem').draggable(
    {
      revert: true,
      connectWith: '.treeLabel',
      revert: 'invalid',
    }
  );
}

//
// INITIAL BINDS
//
$(document).ready( 
  function() {

    //
    // Clicks
    //
    $('.chunk_delete').click( function(e) {
      delete_chunk($(e.target).parents('.chunk'));
    });


    bind_feed_tree();

		$('.chunk').draggable(
			{
        helper: 'clone',
				revert: true,
        connectWith: '.treeLabel',
        revert: 'invalid',
			}
		);

    //
    // Scroll detection
    //
    if ($('.chunk').length >= 10) {
      //console.log('scrollbar? ' + $(window).scrollTop());//.attr("visible"));
      $(window).scroll(function() {
        //console.log($(window).scrollTop());

        var pos = $(window).scrollTop() - $('#header').height();
        if (pos < 0) pos = 0;
        //$( '#feedsmenu' ).css( { marginTop: pos + "px" });// , 500, 'linear');
        //$( '#feedsmenu' ).animate( { marginTop: pos + "px" } , 10, 'linear');

        if  ($(window).scrollTop() == $(document).height() - $(window).height()){
          //console.log('bottom reached');
          if ($('#search_view').length > 0) more_query_articles();
          else if ($('#feed_view').length > 0) more_feed_articles();
        }
      });

    }

    $('#moreQueryArticles').click(function(e) {
        more_query_articles();
        e.preventDefault();
    });

    $('#moreFeedArticles').click(function(e) {
        more_feed_articles();
        e.preventDefault();
    });


    $('form#sourceadmin_search').submit(function(e) {
        //console.log("source search");
        $.post('/async/admin/sources/search', $('form#sourceadmin_search').serialize(), function(response) {
          //console.log("source search response");
          $('#source_table').replaceWith(response);
          bind_source_pagination();
        });
        e.preventDefault();
    });
	}
);


function bind_source_pagination() {
  $('a#next_sourceadmin_page').click(next_page);
  $('a#prev_sourceadmin_page').click(next_page);
}

function next_page(e) {
    //console.log(e.target);
    $.post('/async/admin/sources/search', { page: $(e.target).attr("id")}, function(response) {
      $('#source_table').replaceWith(response);
      bind_source_pagination();
    });
}


// Add elements to feed tree list -- used when asynchronously creating new feeds to avoid a full page reload
function treeListItem(feed) {
  return "<li class=\"treeItem feed ui-draggable\" id=\""+feed["feedname"]+"\" style=\"position: relative;\">" +
    "<span class=\"treeLabel ui-droppable\"><a href=\"/bevakningar/"+feed["shortname"]+"\">"+feed["realname"]+"</a></span></li>"
}


// Assumes session has information of which feed is currently being edited.
function repopulateFeed(feed) {
  //console.log("repopulate!");
  //$('img#load_repopulate').show();
  $.post('/async/feed/repopulate', { feed: feed }, function () {
        //console.log("done");
        //$('img#load_repopulate').hide();
      });
}

