// http://docs.jquery.com/Using_jQuery_with_Other_Libraries
var $j = jQuery.noConflict();

// Put functions that you want to fire onload (onready) here
$j(document).ready(function() {
  Admin.observeFlashMessages();
});

// We will put all functions under Admin namespace
var Admin = {};

// Flash Messages
Admin.observeFlashMessages = function() {
  var p = $j('#flash-msg');
  if (p.length) {
    p.click(function() {
      p.slideUp('fast');
    });
    if (!p.hasClass('flash-error')) {
      p.hide().slideDown('fast').delay(2000).slideUp('fast');
    }
  }
};

// Custom markItUp functions
Admin.markItUp = {};

Admin.markItUp.itemsBox = null;
Admin.markItUp.itemsBody = null;

Admin.markItUp.init = function(selector, settings) {
  $j(selector).markItUp(settings);
  if (!Admin.markItUp.itemsBox || Admin.markItUp.itemsBox.size() == 0) {
    $j("div.markItUp").before('<div id="items_for_textarea_wrapper"><div id="items_for_textarea"><div class="close"><a href="#" onclick="Admin.markItUp.itemsBox.hide();return false">Close</a></div><div id="items_for_textarea_body"></div></div></div>');
    Admin.markItUp.itemsBox = $j('div#items_for_textarea');
    Admin.markItUp.itemsBody = $j('div#items_for_textarea_body');
  }
};

Admin.markItUp.reload = function(selector, settings) {
  $j(selector).markItUpRemove();
  Admin.markItUp.init(selector, settings);
};

Admin.markItUp.observeItemsSearchForm = function(url) {
  var searchForm = Admin.markItUp.itemsBox.find('form');
  searchForm.bind('submit', function() {
    $j.get(url, searchForm.serialize(), function(response) {
      Admin.markItUp.itemsBody.html(response);
      Admin.markItUp.observeItemsSearchForm(url);
    });
    return false;
  });
};

Admin.markItUp.observeItemsPagination = function(url) {
  Admin.markItUp.itemsBox.find('.pagination a').live('click', function() {
    $j.get($j(this).attr('href'), null, function(response) {
      Admin.markItUp.itemsBody.html(response);
      Admin.markItUp.observeItemsSearchForm(url);
    });
    return false;
  });
};

Admin.markItUp.addImage = function() {
  var url = '/admin/images/images_for_textarea';
  $j.get(url, null, function(response) {
    Admin.markItUp.itemsBody.html(response);
    Admin.markItUp.itemsBox.show();
    Admin.markItUp.observeItemsSearchForm(url);
    var selectLinks = Admin.markItUp.itemsBody.find('a.select_item');
    selectLinks.die();
    selectLinks.live('click', function() {
      Admin.markItUp.itemsBox.hide();
      $j.markItUp({ replaceWith: '<img src="'+$j(this).attr('href')+'" alt="" />' });
      selectLinks.die();
      return false;
    });
    Admin.markItUp.observeItemsPagination(url);
  });
  return false;
};

Admin.markItUp.addButton = function() {
  var url = '/admin/buttons/buttons_for_textarea';
  $j.get(url, null, function(response) {
    Admin.markItUp.itemsBody.html(response);
    Admin.markItUp.itemsBox.show();
    Admin.markItUp.observeItemsSearchForm(url);
    var selectLinks = Admin.markItUp.itemsBody.find('a.select_item');
    selectLinks.die();
    selectLinks.live('click', function() {
      Admin.markItUp.itemsBox.hide();
      $j.markItUp({ replaceWith: '<r:button name="'+$j(this).attr('rel')+'">' });
      selectLinks.die();
      return false;
    });
    Admin.markItUp.observeItemsPagination(url);
  });
  return false;
};

Admin.markItUp.addSnippet = function() {
  var url = '/admin/snippets/snippets_for_textarea';
  $j.get(url, null, function(response) {
    Admin.markItUp.itemsBody.html(response);
    Admin.markItUp.itemsBox.show();
    Admin.markItUp.observeItemsSearchForm(url);
    var selectLinks = Admin.markItUp.itemsBody.find('a.select_item');
    selectLinks.die();
    selectLinks.live('click', function() {
      Admin.markItUp.itemsBox.hide();
      $j.markItUp({ replaceWith: '<r:snippet name="'+$j(this).attr('rel')+'">' });
      selectLinks.die();
      return false;
    });
    Admin.markItUp.observeItemsPagination(url);
  });
  return false;
};

Admin.markItUp.addMenu = function() {
  var url = '/admin/menus/menus_for_textarea';
  $j.get(url, null, function(response) {
    Admin.markItUp.itemsBody.html(response);
    Admin.markItUp.itemsBox.show();
    Admin.markItUp.observeItemsSearchForm(url);
    var selectLinks = Admin.markItUp.itemsBody.find('a.select_item');
    selectLinks.die();
    selectLinks.live('click', function() {
      Admin.markItUp.itemsBox.hide();
      $j.markItUp({ replaceWith: '<r:menu name="'+$j(this).attr('rel')+'">' });
      selectLinks.die();
      return false;
    });
    Admin.markItUp.observeItemsPagination(url);
  });
  return false;
};