$(document).ready(function() {

  $('#submit_pw_req').click(function(){
    submitPasswordRequest();
  }); 
  
  $('#cancel_pw_req').click(function(){
    $('#password_request_dialog').modal('hide');
    $('#password_request_email_field').val( "" ).removeClass( "error_state" );
  }); 

  $('#ok_pw_confirm').click(function(){
    $('#password_request_confirm').modal('hide');
  });

  function submitPasswordRequest(){
    var bValid = true;
    $('#password_request_email_field').removeClass( "error_state" );

    bValid = bValid && checkLen( $( "#validateTips" ), $('#password_request_email_field'), "email", 6 );
    bValid = bValid && checkRegex( $( "#validateTips" ), $('#password_request_email_field'), /^((([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, "Please enter a valid email." );

    if ( bValid ) {          
      var enteredEmail = $('#password_request_email_field').val();
      $('#password_request_dialog').modal('hide');
      requestPasswordReset(enteredEmail);
    }
  }

  // remove the red error state of the field when the user clicks on the field to type
  $('#password_request_email_field').click(function(){
  	$(this).removeClass( "error_state" );
  });

  // remove the red error state of the field when the user types
  $("#password_request_email_field").live('keyup', function () {
	  if (event.keyCode != '13'){
	  	$(this).removeClass( "error_state" );
	  }
  });

  // clean up when user clicks 'forgot' (modal is launched through an indicator in the html/jade code)
  $("p.forgot").click(function(e) {
      if (!e) var e = window.event;
      e.preventDefault();
      $('#password_request_email_field').val($("#signin_menu #email").val());
      $(".signin").removeClass("menu-open");
      $("fieldset#signin_menu").hide();
      $( "#validateTips" ).hide();
  });

  $('form#password_request_form').submit(function(e){
    if(!e) var e = window.event;
    e.preventDefault();
    submitPasswordRequest();
  });
});

function requestPasswordReset(enteredEmail){
  $("#password_request_confirm_text").text('A password reset request has been submitted for ' + enteredEmail + ', please check your email.');
  $('#password_request_confirm').modal({backdrop:true});
  $('#password_request_confirm').modal('show');

  // fire off the request, don't do anything in callback
  $.post("/do/passwordRequest", {email:enteredEmail}, function(data, status, jqXHR) {});
}

function checkLen(tipObj, o, n, min ) {
  if ( o.val().length < min ) {
    o.addClass( "error_state" );
    updateTips(tipObj, "Length of " + n + " must be at least " + min + " characters." );
    return false;
  } else {
    return true;
  }
}

function checkRegex(tipObj, o, regexp, n ) {
  if ( !( regexp.test( o.val() ) ) ) {
    o.addClass( "error_state" );
    updateTips(tipObj, n );
    return false;
  } else {
    return true;
  }
}

function updateTips(tipObj, t ) {
  tipObj.text( t ).addClass( "highlight" ).show();
  setTimeout(function() {
    tipObj.removeClass( "highlight", 1500 );
  }, 500 );
}
