function Login() { var $ = jQuery.noConflict(); var TAG = 'Login.js | ', my = {}; my.$loginWrapper = null; my.$questionBlocks = null; my.questionBlocks = []; my.$submitLoginInput = null; my.$loginForm = null; my.$registrationForm = null; my.C = { FIELD_NAME: { COUNTRY: 'smbc-country', COUNTY: 'smbc-county', EMAIL: 'smbc-email', NAME: 'smbc-name', Q_USA: 'smbc-q-usa', Q_WISC: 'smbc-q-wisc', ZIP: 'smbc-zip' } }; my.init = function() { console.debug(TAG + 'init'); my.$loginWrapper = $('.sbdc-login-wrapper'); my.$loginForm = my.$loginWrapper.find('form.login-form'); my.$registrationForm = my.$loginWrapper.find('form.registration-form'); my.$questionBlocks = my.$loginWrapper.find('.question-block'); my.$questionBlocks.each( function(index) { console.debug(TAG + 'init | question blocks index:', index); my.questionBlocks.push( new my.QuestionBlock( $(this) ) ); }); my.$submitLoginInput = my.$loginForm.find('input[type=submit]'); my.$submitRegistrationInput = my.$registrationForm.find('input[type=submit]'); my.$submitLoginInput.on('click', my.onLoginSubmit); my.$submitRegistrationInput.on('click', my.onRegistrationSubmit); // Existing validation message? my.highlightFormErrorsOnStartup(my.$loginForm); my.highlightFormErrorsOnStartup(my.$registrationForm); }; /* Methods ********************************************************************************************************/ my.highlightFormErrorsOnStartup = function($form) { var $validationMessageList = $form.find('.validation-messages'); var $validationMessages = $validationMessageList.find('li'); if ($validationMessages.length > 0) { $validationMessageList.show(100); // Highlight the field var fieldClass; $validationMessages.each( function() { fieldClass = $(this).attr('class').trim(); if (fieldClass != "") { $form.find('.input-wrapper.' + fieldClass).addClass('highlight'); } }) } }; /** * * @param email * @returns {boolean} * @link https://stackoverflow.com/a/46181 */ my.validateEmail = function(email) { var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return re.test(email); }; my.validateZip = function(zip) { var re = /^[0-9]{5}$/ return re.test(zip); }; my.onLoginSubmit = function() { return true; // return my.validateLoginForm(); }; my.onRegistrationSubmit = function() { return true; // return my.validateRegistrationForm(); }; /** * Validates the login form. * Displays notifications to the user if the form is not valid * @returns {boolean} True if valid, false if invalid */ my.validateLoginForm = function() { if (my.$loginUserEmailInput == null) { my.$loginUserEmailWrapper = my.$loginForm.find('.input-wrapper.' + my.C.FIELD_NAME.EMAIL); my.$loginUserEmailInput = my.$loginForm.find('input[name=' + my.C.FIELD_NAME.EMAIL + ']'); } var validationMessages = []; // Clear all highlights my.removeHighlightFromElement(my.$loginUserEmailWrapper); // Clear validation messages my.formClearValidationMessages(my.$loginForm); // Validation // Input: Email if (!my.validateEmail(my.$loginUserEmailInput.val())) { my.highlightElement(my.$loginUserEmailWrapper); validationMessages.push("Please enter a valid email address"); } // Display validation messages and return if (validationMessages.length > 0) { my.formDisplayValidationMessages(my.$loginForm, validationMessages); return false; } else { return true; } }; my.validateRegistrationForm = function() { if (my.$registerUserEmailInput == null) { my.$registerUserEmailWrapper = my.$registrationForm.find('.input-wrapper.' + my.C.FIELD_NAME.EMAIL); my.$registerUserEmailInput = my.$registrationForm.find('input[name=' + my.C.FIELD_NAME.EMAIL + ']'); my.$registerNameWrapper = my.$registrationForm.find('.input-wrapper.' + my.C.FIELD_NAME.NAME); my.$registerNameInput = my.$registrationForm.find('input[name=' + my.C.FIELD_NAME.NAME + ']'); my.$registerWisconsinInput = my.$registrationForm.find('input[name=' + my.C.FIELD_NAME.Q_WISC + ']'); my.$registerWisconsinWrapper = my.$registrationForm.find('.input-wrapper.' + my.C.FIELD_NAME.Q_WISC); my.$registerCountySelect = my.$registrationForm.find('select[name=' + my.C.FIELD_NAME.COUNTY + ']'); my.$registerCountyWrapper = my.$registrationForm.find('.input-wrapper.' + my.C.FIELD_NAME.COUNTY); my.$registerUSAInput = my.$registrationForm.find('input[name=' + my.C.FIELD_NAME.Q_USA + ']'); my.$registerUSAWrapper = my.$registrationForm.find('.input-wrapper.' + my.C.FIELD_NAME.Q_USA); my.$registerZipInput = my.$registrationForm.find('input[name=' + my.C.FIELD_NAME.ZIP + ']'); my.$registerZipWrapper = my.$registrationForm.find('.input-wrapper.' + my.C.FIELD_NAME.ZIP); my.$registerCountryInput = my.$registrationForm.find('input[name=' + my.C.FIELD_NAME.COUNTRY + ']'); my.$registerCountryWrapper = my.$registrationForm.find('.input-wrapper.' + my.C.FIELD_NAME.COUNTRY); } var validationMessages = []; // Clear all highlights my.removeHighlightFromElement(my.$registerCountryWrapper); my.removeHighlightFromElement(my.$registerCountyWrapper); my.removeHighlightFromElement(my.$registerNameWrapper); my.removeHighlightFromElement(my.$registerUSAWrapper); my.removeHighlightFromElement(my.$registerUserEmailWrapper); my.removeHighlightFromElement(my.$registerWisconsinWrapper); my.removeHighlightFromElement(my.$registerZipWrapper); // Clear all validation messages my.formClearValidationMessages(my.$registrationForm); // Validation: // Input: Name if (my.$registerNameInput.val() == "") { my.highlightElement(my.$registerNameWrapper); validationMessages.push("Please enter your name"); } // Input: Email if (!my.validateEmail(my.$registerUserEmailInput.val())) { my.highlightElement(my.$registerUserEmailWrapper); validationMessages.push("Please enter a valid email address"); } // Branching Question: Wisconsin? switch (my.$registerWisconsinInput.val()) { case 'yes': // Input: County if (my.$registerCountySelect.val() == "") { my.highlightElement(my.$registerCountyWrapper); validationMessages.push("Please select your county"); } break; case 'no': // Branching Question: USA? switch (my.$registerUSAInput.val()) { case 'yes': // Input: Zip if (!my.validateZip(my.$registerZipInput.val())) { my.highlightElement(my.$registerZipWrapper); validationMessages.push("Please enter your zip code"); } break; case 'no': if (my.$registerCountryInput.val() == "") { my.highlightElement(my.$registerCountryWrapper); validationMessages.push("Please provide your country"); } break; default: my.highlightElement(my.$registerUSAWrapper); validationMessages.push("Please provide an answer to the question above"); } break; default: my.highlightElement(my.$registerWisconsinWrapper); validationMessages.push("Please provide an answer to the question above"); } // Display validation messages and return if (validationMessages.length > 0) { my.formDisplayValidationMessages(my.$registrationForm, validationMessages); return false; } else { return true; } }; my.highlightElement = function($element) { $element.addClass('highlight'); }; my.removeHighlightFromElement = function($element) { $element.removeClass('highlight'); }; /** * * @param $form * @param messages {String[]} */ my.formDisplayValidationMessages = function($form, messages) { var $messageList = $form.find('.validation-messages'); var messagesHTML = ""; for (var i = 0; i < messages.length; i++) { messagesHTML += '