var Auth = {
  
  init : function () {
    this.login();
    this.register();
    this.resetPassword();
    
    $(document).ajaxSend(this.dimmerOn);
    $(document).ajaxComplete(this.dimmerOff);
  },
  
  login : function () {
    var form = $('#login-form');
    var alert_msg = $('#alert-msg');
    
    form.find('button').on('click', function (e) {
      e.preventDefault();
      
      var data = form.serialize();
      
      $.ajax('/api/login', {
        
        data : data,
        method: 'POST',
        
        success : function (response) {
          
          try {
            
            response = JSON.parse(response);
            
            if (response.response == 'Request::Success') {
              if (data.redirect && data.redirect.length > 0)
                window.location = data.redirect;
              else
                window.location = '/members/';
            }
            
            else if (response.response == 'Request::Redirect')
              window.location = response.payload;
            
            else if (response.response == 'Request::WrongPassword') {
              alert_msg.
                find('.content').
                html('The login/password you entered was incorrect. Please try again.').
                parent().
                removeClass('hidden').removeClass('success').addClass('warning');
            }
            
            else if (response.response == 'Request::Error') {
              alert_msg.
                find('.content').
                html('The server has experienced an error. Please try again later or contact support.').
                parent().
                removeClass('hidden').removeClass('success').addClass('warning');
            }
            
          }
          
          catch (SyntaxError) {
            alert_msg.
              find('.content').
              html('The server has experienced an error. Please try again later or contact support.').
              parent().
              removeClass('hidden').removeClass('success').addClass('warning');
          }
        },
        
        error : function () {
          alert_msg.
            find('.content').
            html('The server has experienced an error. Please try again later or contact support.').
            parent().
            removeClass('hidden').addClass('warning');
        }
      });
    });
  },
  
  register : function () {
    var form = $('#register-form');
    var sign_up = $('#sign-up');
    var alert_msg = $('#alert-msgg');
   // var terms = $('#terms');
    
    sign_up.on('click', function (e) {
      e.preventDefault();
      
      // Clear all errors
      $('input').removeClass('error');
      
      var data = form.serialize();
      
     // if (terms.length > 0 && !terms.prop('checked')) {
       // alert('Please accept our Terms of Service before signing up.');
       // return;
     // }
      
      $.ajax('/api/signup', {
        data : data,
        method: 'POST',
        
        success : function (response) {
          try {
            response = JSON.parse(response);
            
            // Success no payment required
            if (response.response == 'Request::Success')
              window.location = '/reg_test/';
              
            else if (response.response == 'Request::Redirect')
              window.location = response.payload;

            // Something is missing
            else if (response.response == 'Request::MissingInput') {
              $('input[name=' + response.payload + ']').addClass('error');
              alert_msg.
                find('.content').
                html('Some information is incorrect or missing. Please double check the fields for errors.').
                parent().
                removeClass('hidden');
            }
            
            else if (response.response == 'Request::PwNoMatch') {
              $('input[name=password]').addClass('error');
              $('input[name=password2]').addClass('error');
              
              alert_msg.
                find('.content').
                html('The passwords supplied to not match. Please try again.').
                parent().
                removeClass('hidden');
            }
            
            else if (response.response == 'Request::AccountExists') {
              alert_msg.
                find('.content').
                html('An account with this email already exists.').
                parent().
                removeClass('hidden');
            }

            // Payment required
            else if (response.response == 'Request::Payment') {
              $('body').append(response.payload);
              $('#paypal-submit').find('input[type=submit]').click();
            }
          }
          
          catch (SyntaxError) {
            alert_msg.
              find('.content').
              html('The server has experienced an error. Please try again later or contact support.').
              parent().
              removeClass('hidden');
          }
        },
        
        error : function () {
          alert_msg.
            find('.content').
            html('The server has experienced an error. Please try again later or contact support.').
            parent().
            removeClass('hidden');
        }
      });
      
    });
  },
  
  
  resetPassword : function () {

    var form = $('#reset-form');
    var button = $('#reset-pw');
    var alert_msg = $('#alert-msg');
    var error;
    
    //form.find('input').removeClass('error');
    //alert_msg.find('.content').html('').parent().addClass('hidden').removeClass('success').addClass('error');
    
    form.find('input').on('keyup', function () {
      return false;
    });
    
    button.on('click', function(e) {
      e.preventDefault();
      
      if ($(this).hasClass('locked')) {
        alert_msg.find('.content').html('Please check your email before attempting to reset your password again.').parent().removeClass('hidden');
        return;
      }
      
      $.ajax('/api/resetpw', {
        data : form.serialize(),
        method : 'POST',
        
        success : function(data) {
          try {
            data = JSON.parse(data);
            switch (data.response) {
              case 'Request::Success':
                alert_msg.find('.content').
                html('We have sent you an email with your new password. Please click the link inside the email to change your password.').
                parent().
                removeClass('hidden').removeClass('error').
                addClass('success');
                
                button.addClass('locked');
                break;
              case 'Request::MissingInput':
                alert_msg.find('.content').html('The email provided is not valid. Please try again.').parent().removeClass('hidden');
                form.find('input[name=' + data.payload + ']').addClass('error');
                break;
              case 'Request::Error':
                error = data.payload;
                if (error == 'ACCT_NO_EXIST') {
                    alert_msg.find('.content').html('The account with this email does not seem to exist. Please double check its spelling. Alternatively, contact us at learn@gold-standard.com').
                    parent().removeClass('hidden');
                } else if (error == 'EMAIL_ERROR') {
                    alert_msg.find('.content').html('We are experiencing some difficulties with sending you the email with your new password. Please try again or contact us directly at learn@gold-standard.com').
                    parent().removeClass('hidden');
                }
                break;
              default:
                throw new SyntaxError();
                break;
            }
          }
          catch (SyntaxError) {
            alert_msg.find('.content').html('The server has experienced an error. Please try again later.').parent().removeClass('hidden');
          }
        }
      });
    });
  },
  
  dimmerOn : function () {
    $('body').append('<div class="dimmer"></div>');
	  $('.dimmer').append('<div class="loader"></div>').animate({opacity: 0.6});
  },
  
  dimmerOff : function () {
    $('.dimmer').remove();
  }
  
};

$(document).ready(function () {
  Auth.init();
});