﻿$(function(){ // DOM READY

    // check if we are on the registration page
    var bodyId = $('body').attr('id');
    if (bodyId == 'registration') {

    // ----------------------------------------------------------------------------
    // Check if logged in, if so, log out...
    //
        if  ($.cookie('isAuthenticated') == 'true') {
            var url = 'http://gw.deuspak.com/json/lambirewards.com/userAccount.ashx/userLogout?jsonp=?';
        	
	        $.getJSON(url, { /* void */ }, function(json) {
	        });
            $.cookie('gw_sessionid', null);
            $.cookie('isAuthenticated', 'false');	    
	        window.location.reload();
        }
    //
    // Check if logged in, if so, log out...
    // ----------------------------------------------------------------------------

    // ----------------------------------------------------------------------------
    // Initialize Registration Page
    //
    $('fieldset#email').addClass('selected'); // .fadeTo('slow', 1.0);
    $('fieldset#password').removeClass('selected'); // .fadeTo('slow', 0.6);
    $('input#fName').focus();
    $('fieldset#email *').focus(function() {
        $('fieldset#email').addClass('selected'); // .fadeTo('slow', 1.0);
        $('fieldset#password').removeClass('selected'); // .fadeTo('slow', 0.6);
    });
    $('fieldset#password *').focus(function() {
        $('fieldset#password').addClass('selected'); // .fadeTo('slow', 1.0);
        $('fieldset#email').removeClass('selected'); // .fadeTo('slow', 0.6);
    });
    $('fieldset#signup input#newsletter').val(false);
    //
    // Initialize Registration Page
    // ----------------------------------------------------------------------------

    // ----------------------------------------------------------------------------
    // Registration page methods
    //
        
        function validateString(str, regEx) {
            if (str.match(regEx)) {
	            return true;
            } else {
	            return false;
            }            
        }
        
        function compareStrings(str1, str2) {
            if (str1==str2) {
                return true;
            } else {
                return false;
            }
        }
        
        function displayError(fld, errorId, target) {
            var fld = '#'+fld;
            var error = $('#'+errorId).html();
            var target = '#'+target;
            
            // display error
            $(target).html(error);
            $(target).fadeTo('slow', 1.0);
            $(target).css('display', 'block');

            // set focus
            $(fld).focus();
            // apply styles
            $(fld).addClass('error');
        }
        
        function clearError(fld) {
            var fld = '#'+fld;
            $(fld).removeClass('error');
        }
        
        function removeErrors() {
            $('.errorEmail').fadeTo('slow', 0.0);
        }
        
        function validateField(fld, allowEmpty) {
            var oVal = $('#'+fld).val();
            var isValid = false

            switch(fld) {
                case 'fName': // Validating first name
                    if (oVal != '' || allowEmpty) {
                        var regEx = /[^\s]+/
                        isValid = validateString(oVal, regEx);
                        if (!isValid && oVal != ''){
                            displayError(fld, 'registration_fName_error', 'emailError');
                        }
                    } else {
                        isValid = false;
                        displayError(fld, 'registration_fName_required', 'emailError');
                    }
                    break;
                case 'lastName': // Validating last name
                    if (oVal != '' || allowEmpty) {
                        var regEx = /[^\s]+/
                        isValid = validateString(oVal, regEx);
                        if (!isValid && oVal != ''){
                            displayError(fld, 'registration_lastName_error', 'emailError');
                        }
                    } else {
                        isValid = false;
                        displayError(fld, 'registration_lastName_required', 'emailError');
                    }
                    break;
                case 'email1': // Validating email1 address
                    if (oVal != '' || allowEmpty) {
                        var regEx = /(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/i;
                        isValid = validateString(oVal, regEx);
                        if (!isValid && oVal != ''){
                            displayError(fld, 'registration_email1_error', 'emailError');
                        }
                    } else {
                        isValid = false;
                        displayError(fld, 'registration_email1_required', 'emailError');
                    }
                    break;
                case 'email2': // Validating email2 address
                    if (oVal != '' || allowEmpty) {
                        var regEx = /(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/i;
                        isValid = validateString(oVal, regEx);
                        if (!isValid && oVal != ''){
                            displayError(fld, 'registration_email2_error', 'emailError');
                        }
                        isValid = compareStrings(oVal, $('#email1').val());
                        if (!isValid && oVal != ''){
                            displayError(fld, 'registration_email_match_error', 'emailError');
                        }
                    } else {
                        isValid = false;
                        displayError(fld, 'registration_email2_required', 'emailError');
                    }
                    break;
                case 'password1': // Validating password1
                    if (oVal != '' || allowEmpty) {
                        var regEx = /[^\s]{6,30}/i;
                        isValid = validateString(oVal, regEx);
                        if (!isValid && oVal != ''){
                            displayError(fld, 'registration_password1_error', 'passwordError');
                        }
                    } else {
                        displayError(fld, 'registration_password1_required', 'passwordError');
                    }
                    break;
                case 'password2': // Validating password2
                    if (oVal != '' || allowEmpty) {
                        var regEx = /[^\s]{6,30}/i;
                        isValid = validateString(oVal, regEx);
                        if (!isValid && oVal != ''){
                            displayError(fld, 'registration_password2_error', 'passwordError');
                        }
                        isValid = compareStrings(oVal, $('#password1').val());
                        if (!isValid && oVal != ''){
                            displayError(fld, 'registration_password_match_error', 'passwordError');
                        }
                    } else {
                        displayError(fld, 'registration_password2_required', 'passwordError');
                    }
                    break;
            }
            if(isValid && oVal != '') {
                clearError(fld);
            }
            return isValid;
        }
        
        function validateForm() {
            var isValid = true;
             $('#theform input[type="text"]').each(function() {
                var id = $(this).attr('id');
                isValid = validateField(id, false);
                if(!isValid) {
                    // Enable submit button
                    $('input#submitRegistration').css('display', 'block');
                    return false;
                }
             });
             if (isValid) {
                $('#emailError').fadeOut('slow');
                $('#theform input[type="password"]').each(function() {
                    var id = $(this).attr('id');
                    isValid = validateField(id, false);
                    if(!isValid) {return false;}
                });
             } // if (isValid)
             if (isValid) {
             
                removeErrors();

                $('fieldset#password').removeClass('selected').fadeTo('slow', 0.6);
                
                // Send form                
                ajaxSubmit();
                
             } // if (isValid)
             
             return false;
        }
        
    //
    // Registration page methods
    // ----------------------------------------------------------------------------

    // ----------------------------------------------------------------------------
    // Ajax Submit
    //
    
        function ajaxSubmit() {
            // Disable submit button
            $('input#submitRegistration').css('display', 'none');
            // Register user
	            var url = 'http://gw.deuspak.com/json/lambirewards.com/userAccount.ashx/registerUser?jsonp=?';
	            var firstName = $('#fName').val();
	            var lastName = $('#lastName').val();
	            var email = $('#email1').val();
	            var password = $('#password1').val();
	            var permission = $('#theform #newsletter').attr('checked');
	            var lcid = $('#LCID').html();

	            $.getJSON(url, { "firstName" : firstName, "lastName" : lastName, "email" : email, "password" : password, "permission" : permission, "lcid" : lcid}, function(json) {
	                if (json.result == 'true') {
                        // ----------------------------------------------------------------------------
                        // User Login
                        //
	                    var url = 'http://gw.deuspak.com/json/lambirewards.com/userAccount.ashx/authenticateUser?jsonp=?';
                    	
	                    $.getJSON(url, { "Username" : email, "Password" : password }, function(json) {
                            switch(+json.result.status) {
                            case 1:
                            case 2:
                                // logged in
                                verifyAuthenticationState(json.result.sessId);
                                break;
                            default:
                                // login failed
                                displayError('submitRegistration', 'login_error', 'registrationError');
                            }
	                    }); // $.getJSON
                        //
                        // User login
                        // ----------------------------------------------------------------------------
                    } else {
                        // Enable submit button
                        $('input#submitRegistration').css('display', 'block');
                        addToErrorPath(json.result)
                        switch(json.result) {
                            case 'Error: AddUser': 
                            case 'Error: AddUserToPortal': 
                            case 'Error: DuplicateProviderUserKey': 
                            case 'Error: InvalidAnswer': 
                            case 'Error: InvalidProviderUserKey': 
                            case 'Error: InvalidQuestion': 
                            case 'Error: PasswordMismatch': 
                            case 'Error: ProviderError': 
                            case 'Error: Success': 
                            case 'Error: UserRejected': 
                            case 'Error: UnexpectedError': 
                                displayError('submitRegistration', 'registration_error', 'registrationError');
                                break;
                            case 'Error: DuplicateEmail': 
                            case 'Error: DuplicateUserName': 
                            case 'Error: UsernameAlreadyExists':
                                displayError('submitRegistration', 'registration_error_duplicate_username', 'registrationError');
                                break;
                            case 'Error: InvalidUserName': 
                                displayError('submitRegistration', 'registration_error_invalid_username', 'registrationError');
                                break;
                            case 'Error: InvalidPassword':
                                displayError('submitRegistration', 'registration_error_invalid_password', 'registrationError');
                                break;
                            case 'Error: UserAlreadyRegistered': 
                                displayError('submitRegistration', 'registration_error_already_registered', 'registrationError');
                                break;
                            default:
                                displayError('submitRegistration', 'registration_error', 'registrationError');
                        }
                    } // if (json.result)
                // Disable submit button
                $('input#submitRegistration').css('display', 'block');
	            }); // $.getJSON     
            // Log user in

        }
        
        // User registration helper functions
        function verifyAuthenticationState(gw_sessionid) {

	            var url = 'http://gw.deuspak.com/(S(' + gw_sessionid + '))/json/lambirewards.com/userAccount.ashx/isAuthenticated?jsonp=?';

	            $.getJSON(url, { "sessionId" : gw_sessionid }, function(json) {
	                var result = json.result;

	                if (result) {
	                    $.cookie('isAuthenticated', result);
	                    $.cookie('gw_sessionid', gw_sessionid)
	                    window.location.replace('./');
	                }

	            });

        }        
        
    //
    // Ajax Submit
    // ----------------------------------------------------------------------------

    // ----------------------------------------------------------------------------
    // Registration page event handlers
    //
        // onBlur validation
        $('input[type="text"],input[type="password"]').blur(function (){
            validateField($(this).attr('id'), true);
        });
        
        // onSubmit validation
        $('#theform').submit(function(){
            validateForm();
            return false;
        });
        
    //
    // Registration page event handlers
    // ----------------------------------------------------------------------------

    } // if (bodyId == 'registration')
    
}); // DOM READY