#Email Validation
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)

$(document).ready ->
  mainHeight = $("#rightContent").height()
  $('#addTeamOverlay').height(mainHeight)
  options = $(".accountOptions")
  nav = $("#accountNav")
  $topButton = $('a.topButton') 
  $("#accountNav").height(mainHeight)
  $("#mainContent").height(mainHeight)

  $.getJSON("/feedback/filter/").done (filters) ->
    for filter in filters
      $("#custom ul").append($("<li>").attr('role', 'presentation').html(
        """
        <a role="menuitem" tabindex="-1" href="#"><input class="filter" type="checkbox" name="#{filter.name}" val="#{filter.id}">#{filter.name}</a>
        """))

  dropdownWidth = $('a.username.dropdown-toggle').outerWidth()
  if dropdownWidth != 150
    $('ul.username.dropdown-menu').width(dropdownWidth+2)


  productTourPos = 1020 - dropdownWidth
  $('a#productTour').css({"left": productTourPos, "display": "block"})

  $('a#productTour').click ->
    introJs().start();


  updatePos = ->
    mainHeight = $("#rightContent").height()
    nav.height(mainHeight)
    $("#mainContent").height(mainHeight)
    $('#addTeamOverlay').height(mainHeight)
    if options.hasClass("fixed")
      if $(window).scrollTop() + $(window).height() > mainHeight + 39
        options.removeClass("fixed").addClass("relative")
        nav.removeClass("fixed").addClass("relative")
        if $topButton
          $topButton.addClass("absolute")
    if options.hasClass("relative")
      if $(window).scrollTop() + $(window).height() < mainHeight + 39
        options.removeClass("relative").addClass("fixed")
        nav.removeClass("relative").addClass("fixed")
        if $topButton
          $topButton.removeClass("absolute")
  updatePos()
  app.updatePos = updatePos
  throttled = _.throttle(updatePos, 50)
  $(window).scroll(throttled)
  $(window).resize(throttled)

  if $("#accountNav").length > 0
    setNavPosition = ->
      holder = document.getElementById("accountNavHolder")
      navDom = document.getElementById("accountNav")
      accountOptions = document.getElementById("accountOptions")
      style = window.getComputedStyle(navDom)
      rect = holder.getBoundingClientRect()
      navDom.style.left = "#{rect.left + 1}px"
      accountOptions.style.left = "#{rect.left + 1}px"
    setNavPosition()
    app.setNavPosition = setNavPosition
    throttled2 = _.throttle(setNavPosition, 15)
    $(window).scroll(throttled2)
    $(window).resize(throttled2)
    
  $("button.addTeam").click ->
    if app.users_remaining > 0
      $("#addTeamPopup").show()
    else
      $.get("/stripe/additional_user_fee/").done((res) ->
        $("span#user_charge").text("$#{res}")
        $("#upgradeTeamPopup").show()
      )
    $("#upgradeOverlay").hide()
    $("#upgradePopup").hide()
    $('#addTeamPopup').height($('#addTeamPopup .wrapper').height() - 7)
    $("#addTeamOverlay").addClass("active")
    $('.teamPopup .close i').click ->
      $("#upgradeOverlay").show()
      $("#upgradePopup").show()
      $('#addTeamPopup').hide()
      $('#upgradeTeamPopup').hide()
      $("#addTeamOverlay").removeClass("active")
      $('#addTeamPopup form .error').remove()
      $('#addTeamPopup form .success').remove()

  $("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)

  $("div#upgradeTeamPopup a#people_upgrade").click ->
    $("div#upgradeTeamPopup").hide()
    $("#addTeamPopup").show()
    $('#addTeamPopup').height($('#addTeamPopup .wrapper').height() - 7)

  $("a.addFilter").click ->
    $("#addFilterWrapper").toggleClass("active")
    $("#alphaOverlay").toggleClass("active")
    $("html,body").scrollTop(1)

  $("#addFilterWrapper .fa-times").click ->
    $("#addFilterWrapper").toggleClass("active")
    $("#alphaOverlay").toggleClass("active")

  $("#addRule").click ->
    $("#createFilter").append($("<li class='rule'>").html(
      """
      <i class='remove fa fa-minus'></i>
      <select class='conjunction'></select>
      <select class='fields'></select>
      <select class='operator'></select>
      <select class='value'></select>
      """))
    $("#addFilterWrapper .remove").click ->
      $(this).parent().remove()
      $("#addFilterWrapper .conjunction").css('visibility', 'visible')
      $("#addFilterWrapper .rule:first").find(".conjunction").css('visibility', 'hidden')
    $("#addFilterWrapper .conjunction").css('visibility', 'visible')
    $("#addFilterWrapper .rule:first").find(".conjunction").css('visibility', 'hidden')
    appendOptions($("#addFilterWrapper .conjunction"), ["OR", "AND"])
    appendOptions($("#addFilterWrapper .fields"), ["VALUE", "DESIGN", "RELEVANCY", "FREQUENCY", "LENGTH(COMMENTS)", "SATISFACTION", "SENTIMENT"])
    appendOptions($("#addFilterWrapper .operator"), ["<=", "<", "=", ">", ">="])
    appendOptions($("#addFilterWrapper .value"), [0,1,2,3,4,5,6,7,8,9,10])

  appendOptions = (item, arr) ->
    item.html('')
    for x in arr
      switch x
        when "<="
          $(item).append($("<option>").val(x).html("&le;"))
        when ">="
          $(item).append($("<option>").val(x).html("&ge;"))
        else
          $(item).append($("<option>").val(x).text(x))

  $("#saveRule").click (e) ->
    e.preventDefault()
    ret = ""
    $("#createFilter li").each (i, x) ->
      if i > 0
        ret += $(x).find(".conjunction").val() + ";"
      ret += $(x).find(".fields").val() + ";"
      ret += $(x).find(".operator").val() + ";"
      ret += $(x).find(".value").val() + ";"
    $.post('/feedback/filter/create/', {
	    'name': $("input[name='queryName']").val(),
	    'query': ret,
	    'csrfmiddlewaretoken': $("input[name='csrfmiddlewaretoken']").val()
    })

  $(".closeForm").click ->
    if !$(this).hasClass("prompt") and !$(this).hasClass('closeModal')
      $("#addTeamWrapper").removeClass("active")
      $("#addTeamWrapper .addForm .header div.success").remove()
      $(".alpha").removeClass("active")
      $("#alphaOverlay").removeClass("active")
  
  $(".addForm").click (event) ->
    event.stopPropagation()

  initialLoadTeam = ->
    $.getJSON("/users/team-invites/current/", (team) ->
      $("ul.team").html('<label>Current Team</label>')
      for user in team
        $("ul.team").append($("<li>").text(user))
      $('#addTeamPopup').height($('#addTeamPopup .wrapper').height() - 7)
    )

  $("#addTeamEmail").keydown ->
    $email = $(this)
    setTimeout( ->
      if isValidEmailAddress($email.val())
        $("#addTeamPopup form button").removeClass("btn-disabled").prop("disabled", false)
      else
        $("#addTeamPopup form button").addClass("btn-disabled").prop("disabled", true) 
    ,0)

  $("#addTeamEmail").blur ->
    $email = $(this)
    if isValidEmailAddress($email.val())
      $("#addTeamPopup form button").removeClass("btn-disabled").prop("disabled", false)
    else
      $("#addTeamPopup form button").addClass("btn-disabled").prop("disabled", true) 


  $("#addTeamPopup form button").click (event) ->
    event.preventDefault()
    if not $(this).hasClass('btn-disabled')
      $.post("/users/team-invites/", {
          csrfmiddlewaretoken: $("#addTeamPopup form input[name='csrfmiddlewaretoken']").attr('value'),
          team_invite_email: $("#addTeamEmail").val()
      }).success( ->
        $("#addTeamPopup form button").addClass('btn-disabled').prop('disabled', true)
        $('#addTeamPopup form .error').remove()
        $('#addTeamPopup form .success').remove()
        $('#addTeamPopup form').prepend('<div class="success"><p>Invite successully sent</p></div>')
        $('#addTeamEmail').val('')
        $('#addTeamPopup').height($('#addTeamPopup .wrapper').height() - 7)
      ).fail( ->
        $("#addTeamPopup form button").addClass('btn-disabled').prop('disabled', true)
        $('#addTeamPopup form .error').remove()
        $('#addTeamPopup form .success').remove()
        $('#addTeamPopup form').prepend('<div class="error"><p>This email address is already associated with an account</p></div>')
        $('#addTeamEmail').val('')
        $('#addTeamPopup').height($('#addTeamPopup .wrapper').height() - 7)
      )
  
  

  initialLoadTeam()

$(window).load ->  
  mainHeight = $("#rightContent").height()
  options = $(".accountOptions")
  $topButton = $('a.topButton')    

  if $(window).scrollTop() + $(window).height() > mainHeight + 39
    options.removeClass("fixed").addClass("relative")
    if $topButton
      $topButton.removeClass("fixed").addClass("relative")


        
