$(function() {
  var regexp = /\+/g
  var flash = (new Function("return " + String($.cookie("flash")).replace(regexp, " "))());
  var domain = window.location.host.split(".");
  domain.shift();
  
  $.cookie("flash", '', {
    "domain": "." + domain.join("."),
    "path": "/"
  });
  $.each(flash || {}, function(key, value) {
    if (!value) return;
    setTimeout(function() {
      var flash = $('<div class="flash"></div>').addClass(key).text(value).hide();
      $("body").prepend(flash);

      flash.animateDown = function() {
        this.show();
        this.css('top', -this.outerHeight());
        this.animate({'top': 0}, 500)
      };

      flash.animateUp = function() {
        this.animate({'top': -this.outerHeight()});
      };

      flash.animateDown();
      setTimeout(function() {
        flash.animateUp();
      }, 10000);
    }, 500);
  });

  var org_name = $("input#organization_name");
  var org_subd = $("input#organization_subdomain");

  function format(str) {
    str = str.toLowerCase();
    str = str.replace(/\s/g, '-');
    str = str.replace(/[^A-Za-z0-9-]/g, '');
    return str;
  }

  if (org_subd.length > 0 && !org_subd.val().length > 0) {
    org_name.bind('keyup', function() {
      org_subd.val(format($(this).val()));
    });
  }

  org_subd.focus(function() {
    org_name.unbind('keyup');
  });

  if ($('<span/>').overlay) { // Checking if the plugin is loaded, so JS won't crash
    $("img[rel]").overlay({
      mask: { opacity: 0 } // Create mask to fix closing by clicking
    });
  }
  // Ajax forms for flow editing
  $('form.edit_flow').submit(function() {
    // Confirm form submission
    var form = $(this), page = $('#edit-flow-page');
    if (!page.hasClass('disabled')) {
       var accept = confirm('Are you sure you want to disable the flow\n\n'+ $('.flow-title').text() +'?\n\nAll users will be denied access to the flow.');
       if (!accept) return false;
    }
    
    // Hide the button while loading
    form.find('button[type="submit"]').hide();
    form.find('.loader').show();
    $.ajax({
      type: "PUT",
      url: form.attr('action'),
      data: {
        flow: { disabled: form.find('input#flow_disabled').attr('value') }
      },
      dataType: "json",
      success: function(data, status) {
        form.find('.loader').hide();
        form.find('input#flow_disabled').val(!form.find('input#flow_disabled').val());
        form.find('button[type="submit"]').show().text(page.hasClass('disabled') ? "Disable flow" : "Enable flow" );
        page.toggleClass('disabled');
      }
    });
    return false;
  });
  
  // Ajax forms for flow user editing
  $('form.edit_flow_user').submit(function() {
    // Confirm form submission
    var form = $(this),
        userContainer = $(this).parents('.flow-user'),
        userName = userContainer.find(".flow-user-name").text();
    if (!userContainer.hasClass('blocked')) {
       var accept = confirm('Are you sure you want to block\n\n'+ userName +'\n\nfrom\n\n'+ $('.flow-title').text() + '?\n\nThe user will be denied access to the flow and hidden from other users.');
       if (!accept) return false;
    }
    
    // Hide the button while loading
    form.find('button[type="submit"]').hide();
    form.find('.loader').show();
    $.ajax({
      type: "PUT",
      url: form.attr('action'),
      data: {
        flow_user: { disabled: form.find('input#flow_user_disabled').attr('value') }
      },
      dataType: "json",
      success: function(data, status) {
        form.find('.loader').hide();
        if (data["flow_user"]["disabled"] === true) {
          userContainer.addClass('blocked');
          form.find('button[type="submit"]').show().text("Unblock");
          form.find('input#flow_user_disabled').val(false);
        } else {
          userContainer.removeClass('blocked');
          form.find('button[type="submit"]').show().text("Block from flow");
          form.find('input#flow_user_disabled').val(true);
        }
      }
    });
    return false;
  });
  
  // Ajax forms for flow user editing
  $('form.edit_organization_user').submit(function() {
    // Confirm form submission
    var form = $(this),
        userContainer = $(this).parents('.flow-user');
    // Hide the button while loading
    form.find('button[type="submit"]').hide();
    form.find('.loader').show();
    $.ajax({
      type: "PUT",
      url: form.attr('action'),
      data: {
        organization_user: { admin: form.find('input#organization_user_admin').attr('value') }
      },
      dataType: "json",
      success: function(data, status) {
        form.find('.loader').hide();
        if (data["organization_user"]["admin"] === true) {
          userContainer.addClass('admin');
          form.find('input#organization_user_admin').val(false);
          form.find('button[type="submit"]').show().text("Remove admin");
        } else {
          userContainer.removeClass('admin');
          form.find('input#organization_user_admin').val(true);
          form.find('button[type="submit"]').show().text("Make admin");
        }

      }
    });
    return false;
  });

  function setToken() {
    $("span.api-token, .funkycode .token").text($('#api-token-selector option:selected').attr('token'));
  }

  function paintElem(text) {
    if ($.browser.mozilla || $.browser.opera) {
      var selection = window.getSelection();
      var range = document.createRange();
      range.selectNodeContents(text);
      selection.removeAllRanges();
      selection.addRange(range);
    } else if ($.browser.safari) {
      var selection = window.getSelection();
      selection.setBaseAndExtent(text, 0, text, 1);
    }
  }

  setToken();
  $('#api-token-selector').change(function() {
    setToken();
    paintElem($("span.api-token")[0]);
  });
});
