$('[data-toggle="tooltip"]').tooltip()
users_removed = []
invites_removed = []
users_to_admin = []
users_to_non_admin = []
removed = false

$('div.close i.fa-times').click ->
  $('#upgradeSettingsOverlay').removeClass('active')
  $('#upgradePopup').hide()

sendInvite = ->
  inviteEmail = $("#inviteEmail").val()
  exists = false
  $('td.email').each ->
    if $(this).text() == inviteEmail
      exists = true
  if exists
    $("div.error").show()
    return $("div.error p").text('User already exists')
  $.post("/users/team-invites/", {
      csrfmiddlewaretoken: $("form#addUser input[name='csrfmiddlewaretoken']").attr('value'),
      team_invite_email: $("#inviteEmail").val()
  }).fail((response) ->
    if response.status == 400
      error = JSON.parse(response.responseText)
      $("div.error").show()
      $("div.error p").text(error.error)
  ).done( (invitationID) ->
    $('form#addUser div.success').show()
    $('form#addUser div.error').hide()
    $lastActive = $('form#updateUsers tr.active').last()
    $lastActive.after($("<tr class='pending'>").html("<td class='email'>#{inviteEmail}</td><td><b>Pending</b></td><td><input type='checkbox' class='checkbox' #{ if app.current_user_admin then '' else 'disabled'}></td><td><i class='fa fa-remove'></i></td>"))
    $("table.table tbody").append($("<tr class='notAdmin' id='#{ invitationID }'>").html("<td class='email'>#{$("#inviteEmail").val()}</td><td><b>Pending</b></td><td><input type='checkbox' class='checkbox' disabled></td><td class='invite'>#{ if app.current_user_admin then '<i class="fa fa-remove"></i></td>' else ''}"))
    $('td input').change ->
      btnDisabled = true
      if $('tr.admin input').not(':checked').length > 0
        btnDisabled = false
      if $('tr.notAdmin input:checked').length > 0
        btnDisabled = false
      if btnDisabled == true
        $("button.btn.update").addClass("btn-disabled").prop("disabled", true)
      else
        $("button.btn.update").removeClass("btn-disabled").prop("disabled", false) 
    $('td i.fa-remove').click ->
      $(this).parents('tr').remove()
      $("button.btn.update").removeClass("btn-disabled").prop("disabled", false)
      if $(this).parents('td').hasClass('active')
        users_removed.push($(this).parents('tr').attr('id'))
      else
        invites_removed.push($(this).parents('tr').attr('id'))
      removed = true
      $(window).bind 'beforeunload', ->
        return 'You have unsaved changes.'
    $("#inviteEmail").val('')
    app.users_remaining--
  )

initialLoadTeam = ->
  $.getJSON("/users/team-invites/current/details/", (team) ->
    for user in team
      $("table.table tbody").append($("<tr class='#{ if user.admin then 'admin' else 'notAdmin'}' id='#{user.id}'>").html("<td class='email'>#{user.email}</td><td><b>#{ if user.active then 'Active' else 'Pending'}</b></td><td class='cb'><input type='checkbox' class='checkbox' #{ if user.admin then 'checked' else ''}#{ if app.current_user_admin and user.active and app.primary_user_id != user.id and app.current_user_id != user.id then '' else ' disabled'}></td><td class='#{ if user.active then 'active' else 'invite' }#{ if app.current_user_admin then '' else '  hidden'}'><i class='fa fa-remove#{ if app.current_user_id != user.id and app.primary_user_id != user.id then '' else if not user.active then '' else ' hidden' }'></i></td>"))
  )
  .done( ->
    $('td i.fa-remove').click ->
      $(this).parents('tr').remove()
      $("button.btn.update").removeClass("btn-disabled").prop("disabled", false)
      if $(this).parents('td').hasClass('active')
        users_removed.push($(this).parents('tr').attr('id'))
      else
        invites_removed.push($(this).parents('tr').attr('id'))
      removed = true
      $(window).bind 'beforeunload', ->
        return 'You have unsaved changes.'
    $('td input').change ->
      btnDisabled = true
      if $('tr.admin td.cb input[type="checkbox"]').not(':checked').length > 0
        btnDisabled = false
      if $('tr.notAdmin td.cb input[type="checkbox"]:checked').length > 0
        btnDisabled = false
      if btnDisabled
        if not removed
          $(window).unbind 'beforeunload'
          $("button.btn.update").addClass("btn-disabled").prop("disabled", true)
      else
        $(window).bind 'beforeunload', ->
          return 'You have unsaved changes.'
        $("button.btn.update").removeClass("btn-disabled").prop("disabled", false) 
  ).error( ->
    close = $("<i>").addClass('fa').addClass('fa-times-circle').on('click', () ->
      $(".alert-modal").hide()
      $("#alphaOverlay").hide()
    )
    popup = $("<div>").addClass('alert-modal').append($("<i>").addClass('fa').addClass('fa-exclamation-circle'))
                                              .append(close)
                                              .append($("<h2>").text('Error'))
                                              .append($("<p>").text('This email address is already associated with another account!'))
    $("body").append(popup)
    $("#alphaOverlay").show()

  )
initialLoadTeam()

isValidEmailAddress = (emailAddress)  ->
  pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
  return pattern.test(emailAddress)

$("input#inviteEmail").keydown ->
  thisValue = $(this).val()
  setTimeout( ->
    if isValidEmailAddress(thisValue)
      $("button.btn.invites").removeClass("btn-disabled").prop("disabled", false)
    else
      $("button.btn.invites").addClass("btn-disabled").prop("disabled", true) 
  ,0)

$("input#inviteEmail").blur ->
  if isValidEmailAddress($(this).val())
    $("button.btn.invites").removeClass("btn-disabled").prop("disabled", false)
  else
    $("button.btn.invites").addClass("btn-disabled").prop("disabled", true) 

$("input#additional_user").change ->
  if $(this).prop("checked")
    $("a#people_upgrade").removeClass('btn-disabled').removeAttr("disabled")
  else
    $("a#people_upgrade").addClass('btn-disabled').attr("disabled", true)

$("button.btn.invites").click (event) ->
  $("#addUser div.error").hide()
  $("#addUser div.success").hide()
  $('form#updateUsers div.success').remove()
  $('form#updateUsers div.error').remove()
  event.preventDefault()
  if app.users_remaining < 1
    $('#upgradeSettingsOverlay').addClass('active').click (e) ->
      e.preventDefault()
    $.get("/stripe/additional_user_fee/").done((res) ->
        $("span#user_charge").text("$#{res}")
        $('#upgradePopup').show()
      )
    return false
  sendInvite()

$("a#people_upgrade").click ->
  sendInvite()
  $('#upgradeSettingsOverlay').removeClass('active')
  $('#upgradePopup').hide()

$("button.btn.update").click (event) ->
  $("#addUser div.error").hide()
  $("#addUser div.success").hide()
  $('form#updateUsers div.success').remove()
  $('form#updateUsers div.error').remove()
  event.preventDefault()
  $('tr.notAdmin input[type="checkbox"]:checked').each ->
    users_to_admin.push($(this).parents('tr').attr('id'))
  users_to_non_admin = []
  $('tr.admin input[type="checkbox"]').not(':checked').each ->
    users_to_non_admin.push($(this).parents('tr').attr('id'))
  $.ajax("/users/team-invites/edit/", 
    {
    type: "POST",
    data: {
      csrfmiddlewaretoken: $("form#updateUsers input[name='csrfmiddlewaretoken']").attr('value'),
      users_removed: users_removed,
      invite_cancel_ids: invites_removed,
      users_to_admin: users_to_admin,
      users_to_non_admin: users_to_non_admin,
    },
    statusCode: {
      500: (response) ->
      403: (response) ->
      200: (response) ->
      400: (response) ->
      402: (response) ->
      403: (response) ->
      500: (response) ->
    }
    }
  )
  .success( ->
    $('form#updateUsers div.success').remove()
    $('form#updateUsers div.error').remove()
    $('form#updateUsers').prepend('<div class="success"><p>Changes successfully made</p></div>')
    $('tr.notAdmin input[type="checkbox"]:checked').parents('tr.notAdmin').removeClass('notAdmin').addClass('admin')
    $('tr.admin input[type="checkbox"]').not(':checked').parents('tr.admin').removeClass('admin').addClass('notAdmin')
    removed = false
    $(window).unbind 'beforeunload'
    $("button.btn.update").addClass("btn-disabled").prop("disabled", true)
    app.users_remaining += invites_removed.length
    app.users_remaining += users_removed.length
  )



