$(document).ready(function() {

  $('fieldset.fields').parents('form').submit(function() {
    $('fieldset.fields li.template input, fieldset.fields li.template select').attr('disabled', 'disabled');
  });

  var defaultValue = $('fieldset.fields li.template input[type=text]').val();
  var selectOnChange = function(select) {
    select.hide();
    select.prev()
      .show()
      .html(select[0].options[select[0].options.selectedIndex].text);
  }

  var refreshPosition = function() {
    jQuery.each($('fieldset.fields li.added input.position'), function(index) {
      $(this).val(index);
    });
  }

  /* __ fields ___ */
  $('fieldset.fields li.added select').each(function() {
    var select = $(this)
      .hover(function() {
        clearTimeout(select.attr('timer'));
      }, function() {
        select.attr('timer', setTimeout(function() {
          select.hide();
          select.prev().show();
        }, 1000));
      })
      .change(function() { selectOnChange(select); });

    select.prev().click(function() {
      $(this).hide();
      select.show();
    });
  });

  $('fieldset.fields li.template input[type=text]').focus(function() {
    if ($(this).hasClass('void') && $(this).parents('li').hasClass('template'))
      $(this).val('').removeClass('void');
  });

  $('fieldset.fields li.template button').click(function() {
    var lastRow = $(this).parents('li.template');

    var label = lastRow.find('input.label').val().trim();
    if (label == '' || label == defaultValue) return false;

    var newRow = lastRow.clone(true).removeClass('template').addClass('added new').insertBefore(lastRow);

    var dateFragment = '[' + new Date().getTime() + ']';
    newRow.find('input, select').each(function(index) {
      $(this).attr('name', $(this).attr('name').replace('[-1]', dateFragment));
    });

    var select = newRow.find('select')
      .val(lastRow.find('select').val())
      .change(function() { selectOnChange(select); })
      .hover(function() {
        clearTimeout(select.attr('timer'));
      }, function() {
        select.attr('timer', setTimeout(function() {
          select.hide();
          select.prev().show();
        }, 1000));
      });
    select.prev()
      .html(select[0].options[select[0].options.selectedIndex].text)
      .click(function() {
        $(this).hide();
        select.show();
      });

    // then "reset" the form
    lastRow.find('input.label').val(defaultValue).addClass('void');

    // warn the sortable widget about the new row
    $("fieldset.fields ol").sortable('refresh');

    refreshPosition();
  });

  $('fieldset.fields li a.remove').click(function(e) {
    if (confirm($(this).attr('data-confirm'))) {
      var parent = $(this).parents('li');

      if (parent.hasClass('new'))
        parent.remove();
      else {
        var field = parent.find('input.position')
        field.attr('name', field.attr('name').replace('[position]', '[_destroy]'));

        parent.hide().removeClass('added')
      }

      refreshPosition();
    }

    e.preventDefault();
    e.stopPropagation();
  });

  // sortable list
  $("fieldset.fields ol").sortable({
    handle: 'span.handle',
    items: 'li:not(.template)',
    axis: 'y',
    update: refreshPosition
  });

  // edit in depth custom field
  $('fieldset.fields li.item span.actions a.edit').click(function() {
    var link = $(this);
    $.fancybox({
      titleShow: false,
      content: $(link.attr('href')).parent().html(),
      onComplete: function() {
        $('#fancybox-wrap form').submit(function(e) {
          $.fancybox.close();
          e.preventDefault();
          e.stopPropagation();
        });

        var parent = link.parent();

        if (parent.prevAll('select').val() == 'Text') {
          var formatting = parent.prevAll('.text-formatting').val();
          $('#fancybox-wrap #custom_fields_field_text_formatting').val(formatting);
          $('#fancybox-wrap #custom_fields_field_text_formatting_input').show();
        } else {
          $('#fancybox-wrap #custom_fields_field_text_formatting_input').hide();
        }

        var alias = parent.prevAll('.alias').val().trim();
        if (alias == '') alias = makeSlug(link.parent().prevAll('.label').val());
        $('#fancybox-wrap #custom_fields_field__alias').val(alias);

        var hint = parent.prevAll('.hint').val();
        $('#fancybox-wrap #custom_fields_field_hint').val(hint);
      },
      onCleanup: function() {
        var parent = link.parent();

        var alias = $('#fancybox-wrap #custom_fields_field__alias').val().trim();
        if (alias != '') parent.prevAll('.alias').val(alias);
        var hint = $('#fancybox-wrap #custom_fields_field_hint').val().trim();
        if (hint != '') parent.prevAll('.hint').val(hint);
        var formatting = $('#fancybox-wrap #custom_fields_field_text_formatting').val();
        parent.prevAll('.text-formatting').val(formatting);
      }
    })
  });
});