var clearance_acc = {
  controller: null,
  init : function (active) {
    // Accordion
    clearance_acc.controller = $("#song_clearance_acc").accordion({
      active: active,
      collapsible: true,
      header: "h3",
      autoHeight: false,
      change: clearance_acc.change
    });

    clearance_acc.showhide();

    if (null == active) {
      clearance_acc.controller.accordion('activate', false);
      clearance_acc.controller.accordion('enable', true);
    }
  },
  showhide: function() {
    if ($('#song_clearance_acc > div > h3.ui-state-active').length > 0) {
      //hide
      $('#clearance-actions').fadeOut();
    }
    else {
      //show
      $('#clearance-actions').fadeIn();
    }
  },
  change: function(event, ui)
  {
    clearance_acc.showhide();
  },
  destroy: function() {
    clearance_acc.controller.accordion('destroy');
  },
  find: function(index) {
    var element = false;
    $("#song_clearance_acc > div").each(function() {
      if ($(this).find('input[name=index]').val() == index) {
        element = this;
      }
    });

    return element;
  },
    //removes a tab from the accordion
  remove: function(index) {
    var element = clearance_acc.find(index);

    if (element) {
      $(element).remove();
      //reinitialize acc
      clearance_acc.destroy();
      clearance_acc.init();
    }
  },
  //set accodtion title
  title: function(index, title) {
    var element = clearance_acc.find(index);

    if (element) {
      var element_title = $(element).find('span.title');
      $(element_title).html(title);

      var element_incomplete = $(element).find('span.incomplete');
      var element_complete = $(element).find('span.complete');
      $(element_incomplete).hide();
      $(element_complete).show();
    }
  }
}


//clearance form actionsa
var clearance = {
  in_ajax: false,
  init : function () {
    $('.clearance-button:not(.clearance-button-processed)').each(function () {
      $(this).addClass('clearance-button-processed');
      $(this).click(function() {
          clearance.ajax(this);
          return false;
        });
    });

    $('.clearance-button-command:not(.clearance-button-command-processed)').each(function () {
      $(this).addClass('clearance-button-command-processed');
      $(this).click(function() {
          clearance.ajaxCommand(this);
          return false;
        });
    });

    clearance.initTooltip();
    clearance.initDisable();
    clearance.initZero();
    clearance_multi.init();
  },
  initTooltip: function() {
    $(".form_error").tooltip({
      position: "top right",
      relative: true,
      offset: [-10, -20],
      effect: "fade",
      tip: '.tooltip',
      events: {
        input: 'focus mouseover, blur mouseout',
        widget: 'focus mouseover, blur mouseout'
      }
    });
  },
  scrollToError: function() {
    var element = $("form.clearance-form .form_error").eq(0);
    $.scrollTo(element, 400, {offset: {top: -150}});
    $(element).focus();
  },
  scrollToTop: function(element, close) {
    $.scrollTo('top', 400, {onAfter: function() {
      if (close) clearance.close(element);
    }});
  },
  close: function(element) {
    //closes a tab
    //var index = $(element).parents('acc_content').eq(0).attr(rel);
    clearance_acc.controller.accordion('activate', false);
    clearance_acc.controller.accordion('enable', true);
  },
  command: function (element, content) {
    switch($(element).attr('rel')) {
      case 'new':
      case 'same':
          //for a new content generated with ajax we addit to dom
          $('#song_clearance_acc').append(content['new']);
          //reinit the accordion
          clearance_acc.destroy();
          clearance_acc.init($('#song_clearance_acc > div').length - 1);
        break;
      case 'cancel':
        var acc_element = $(element).parents('.acc-element').eq(0);

        $(acc_element).remove();
        //reinitialize acc
        clearance_acc.destroy();
        clearance_acc.init();
        break;
      case 'view':
        var index = $(element).attr('rev');

        clearance_acc.controller.accordion('activate', index);
        break;
    }
  },
  noAjax: function(element) {
    var command = $(element).attr('rel');
    if (command == 'cancel' ||
        command == 'view'  ) {
      //clearance.scrollToTop(element, !(comman == 'view'));
      clearance.command(element, '');

      return true;
    }
  },
  ajaxCommand: function (element) {
    //custom commands that don't need ajax
    if (clearance.noAjax(element)) return;

    if (clearance.in_ajax) return;
    clearance.in_ajax = true;

    //display ajax loader span
    var ajaxloader = $(element).find('span.ajax-loader');
    if (ajaxloader.length > 0) ajaxloader.css('display', 'inline-block');

    var url = $(element).attr('href');
    if (url.search('/format/json') == -1) url += '/format/json';
    
    $.ajax({
      type: "POST",
      url: url,
      dataType: 'json',
      error: function(XMLHttpRequest, textStatus, errorThrown) {
        clearance.in_ajax = false;
      },
      success: function (content) {
        //before init
        if (content.is_valid) {
          //additional commands
          clearance.scrollToTop(element);
          clearance.command(element, content);
        }

        //reinitaliza ajax buttons
        clearance.init();

        if (ajaxloader.length > 0) ajaxloader.hide();
        clearance.in_ajax = false;
      }
    });
  }
  ,
  sameartist: function(form) {
    var artist = $(form).find('input[name=artist]').val();
    var original = $(form).find('input[name=original_artist]').val();
    var index = $(form).find('input[name=index]').val();

    if ((index == '' || index == 'new') 
          && artist != ''
          && original != ''
          && artist.toLowerCase() == original.toLowerCase()) return confirm("You are entering the same name as the original and performing artist.  Are you sure this is correct? Limelight cannot be used to register an original song");

    return true;
  },
  ajax: function (element) {
    if (clearance.in_ajax) return;

    var form = $(element).parents('form.clearance-form').eq(0);
    if (!clearance.sameartist(form)) return;

    clearance.in_ajax = true;
    //submits form
    
    var url = $(form).attr('action');
    if (url.search('/format/json') == -1) url += '/format/json';

    var placeholder = $(element).parents('.clearance-wrapper').eq(0);
    
    //display ajax loader span
    var ajaxloader = $(element).find('span.ajax-loader');
    if (ajaxloader.length > 0) ajaxloader.css('display', 'inline-block');

    $.ajax({
      type: "POST",
      url: url,
      data: $(form).serialize() + '&operation=' + $(element).attr('rel'),
      dataType: 'json',
      error: function(XMLHttpRequest, textStatus, errorThrown) {
        clearance.in_ajax = false;
      },
      success: function (content) {
        $(placeholder).replaceWith(content.form);

        //before init
        if (content.is_valid) {
          //additional commands
          clearance.scrollToTop(element, !($(element).attr('rel')));
          clearance.command(element, content);
          clearance_acc.title(content.index, content.title);

          clearance_cart.ajax(baseURL + '/clearance/cart');
        }

        //reinitaliza ajax buttons
        clearance.init();

        //after init
        if (!content.is_valid) {
          clearance.scrollToError();
        }

        if (ajaxloader.length > 0) ajaxloader.hide();
        clearance.in_ajax = false;
      }
    });
  },
  initDisable: function () {
    //disables fields that have checkboxes with "don't know" values
    $('.clearance_disable:node(.clearance_disable-processed)').each( function () {
        $(this).addClass('clearance_disable-processed');
        $(this).click(function() {
          if ($(this).attr('checked')) $(this).siblings('#' + $(this).attr('rel')).attr('disabled', true);
          else {
            var other = $(this).siblings('.clearance_disable[rel=' + $(this).attr('rel') + ']').not(this).eq(0);
            if ($(other).length > 0 && !$(other).attr('checked') || $(other).length == 0) $(this).siblings('#' + $(this).attr('rel')).attr('disabled', false);
          }
        });
      }
    );
  },
  initZero: function() {
    $('.clearance_zero:node(.clearance_zero-processed)').each( function () {
        $(this).addClass('clearance_zero-processed');
        $(this).click(function() {
          if (!$(this).attr('checked')) $('#' + $(this).attr('rel')).val(0);
        });
      }
    );
  }
};

//clearance multi field actions
var clearance_multi = {
  in_ajax: false,
  init: function() {
    $('.clearance-multi-button:not(.clearance-multi-button-processed)').each(function () {
      $(this).addClass('clearance-multi-button-processed');
      $(this).click(function() {
          clearance_multi.ajax(this);
          return false;
        });
    });
  },
  ajax: function(element) {
    if (clearance_multi.in_ajax) return;
    clearance_multi.in_ajax = true;

    //display ajax loader span
    var ajaxloader = $(element).find('span.ajax-loader');
    if (ajaxloader.length > 0) ajaxloader.css('display', 'inline-block');

    //simple ajax request
    var form = $(element).parents('form.clearance-form').eq(0);
    var text = $(form).find('input[name=' + $(element).attr('rel') + ']');
    var url = $(element).attr('href');
    if (url.search('/format/json') == -1) url += '/format/json';
    var placeholder = $(form).children('div.form_items').children('.' + $(element).attr('rel') + '_wrapper').eq(0);
    $.ajax({
      type: "POST",
      url: url,
      data: form.serialize() + '&input=' + $(element).attr('rel'),
      dataType: 'json',
      error: function(XMLHttpRequest, textStatus, errorThrown) {
        clearance_multi.in_ajax = false;
      },
      success: function (content) {
        $(placeholder).replaceWith(content.data);
        $(text).val('');
        
        if (ajaxloader.length > 0) ajaxloader.hide();

        clearance_multi.init();
        clearance_multi.in_ajax = false;
      }
    });
  }
}

//clearance preview cart actions
var clearance_cart = {
  in_ajax: false,
  init: function() {
    $('.clearance-cart-button:not(.clearance-cart-button-processed)').each(function () {
      $(this).addClass('clearance-cart-button-processed');
      $(this).click(function() {
          clearance_cart.ajax($(this).attr('href'));
          return false;
        });
    });
  },
  ajax: function(url) {
    if (clearance_cart.in_ajax) return;
    clearance_cart.in_ajax = true;
    //simple ajax request
    if (url.search('/format/json') == -1) url += '/format/json';
    var placeholder = $('#shopping_cart_right');
    $.ajax({
      type: "GET",
      url: url,
      dataType: 'json',
      error: function(XMLHttpRequest, textStatus, errorThrown) {
        clearance_cart.in_ajax = false;
      },
      success: function (content) {
        $(placeholder).replaceWith(content.data);
        clearance_cart.init();
        clearance_acc.remove(parseInt(content.index));
        clearance_cart.in_ajax = false;
      }
    });
  }
}

$(document).ready(function() {
  clearance.init(); //init clearance form actions
  clearance_cart.init(); //init clearance cart actions

  //open the last clearance form that we have
  var count = $("#song_clearance_acc > div").length;
  var acc_index = count - 1;
  if (typeof(clearance_acc_view) != 'undefined') {
    acc_index = clearance_acc_view;
  }
  
  clearance_acc.init(acc_index); //init accordion

  // $('div').each(function(){
	// if ($(this).attr('rel') == 'noClickable'){
		// $(this).html('<p align="center">Reordered Items can not be edited.</p>');
	// }
  // });
})
