$(function(){ "use strict"; $.ajaxSetup({async:false}); var contact_id = $("#contact_id").val(); var birth_date = $("#birth_date"); var waiver_checkbox = $("#waiver_checkbox"), waiver_error = $("#waiver_error"); var first_name = $("#first_name"), first_name_error = $("#first_name_error"); var middle_initial = $("#middle_initial"), middle_initial_error = $("#middle_name_error"); var last_name = $("#last_name"), last_name_error = $("#last_name_error"); var phone = $("#phone"), phone_error = $("#phone_error"); var email = $("#email"), email_error = $("#email_error"); var zip = $("#zip"); var state_abbreviation = $("#state_abbreviation"); // sensible defaults first_name.mask('#',{placeholder: "first", translation: {"#": {pattern: /[A-Za-z0-9.\-]/, recursive: true} } }); last_name.mask('#',{placeholder: "last", translation: {"#": {pattern: /[A-Za-z0-9.\-]/, recursive: true} } }); birth_date.mask("0000-00-00", {placeholder: "yyyy-mm-dd" }); phone.mask('(000) 000-0000', {placeholder: "(000) 000-0000"}); email.mask('#',{placeholder: "_@_", translation: {"#": {pattern: /[A-Za-z0-9@._\-+~!\$&''\(\)\*,;=:\%}{]/, recursive: true} } }); zip.mask('00000-0000', {placeholder: "00000-0000"}); state_abbreviation.mask('AA',{placeholder: "WV", translation: {"A": {pattern: /[A-Za-z]/, recursive: false} } }); // make tabbing more predictable first_name.attr("tabindex",1); last_name.attr("tabindex",2); birth_date.attr("tabindex",3); email.attr("tabindex",4); phone.attr("tabindex",5); $('[name="address1"]').attr("tabindex",6); $('[name="city"]').attr("tabindex",7); $('[name="state"]').attr("tabindex",8); $('[name="zip"]').attr("tabindex",9); $('[name="password"]').attr("tabindex",10); $('#waiver_button').attr("tabindex",12); $('#interest_form_button').attr("tabindex",13); $('#submit_contact').attr("tabindex",14); first_name.focus(); // spiff up contact pull down var email_list_choice; $("select[name='contact_id']").chosen(); function save_contact() { // Deferred Promise, since we don't know when the click will be made, // it is an asynchronous function, and we need to know the returned result. // Provides a clean separation of code. var dfd = $.Deferred(); $("#submit_contact").on("click keypress", function(e) { // check for errors //error_handler(input,error_span,error,error_text,event); var err0 = 0, err1 = 0, err2 = 0, err3 = 0, err4 = 0, err5 = 0, err6 = 0; // if it is showing $("#email_list_error").hide(); // first name & last name input err0 = error_handler(first_name.val(), first_name_error, "","*Required",e); err1 = error_handler(last_name.val(), last_name_error, "","*Required",e); // test whether patron's name already exists // and if name matches a different contact_i $.post("json/contact.php", {first_name: first_name.val(), middle_initial: middle_initial.val(), last_name: last_name.val(), contact_id: contact_id, test_name: 1 }, function(data) { if(data === "1") { err6 = error_handler(0, last_name_error, "","*Your name already exists, please choose a different middle initial.",e); } } ); // email and phone input if (email.val() === "" && phone.val() === "") { err2 = error_handler(email.val(), email_error, "","*Required - email address and/or phone number",e); err3 = error_handler(phone.val(), phone_error, "","*Required - email address and/or phone number",e); } else if (email.val() === "" && phone.val() !== "") { email_error.hide(); phone_error.hide(); var r = phone_validator(phone.val(),e); var email_list_toggle = $("#email_list_toggle"); var email_list_error = $("#email_list_error"); if (r) { if(email_list_toggle.val() == 1) { err4 = error_handler(1, email_list_error, 1,"*Email address required for email list",e); email_list_choice = 1; } } } else if (email.val() !== "" && phone.val() === "") { email_error.hide(); phone_error.hide(); email_validator(email.val(),e); } else if (email.val() && phone.val() ) { email_error.hide(); phone_error.hide(); phone_validator(phone.val(),e); email_validator(email.val(),e); } // waiver checkbox err5 = error_handler(waiver_checkbox.prop("checked"),waiver_error,false,"*Required",e); if ((err0 + err1 + err2 + err3 + err4 + err5 + err6) > 0 ) { } else { //e.preventDefault(); dfd.resolve("Success"); } }); // end submit_contact return dfd.promise(); } // end save_contact // successful submit of contact form save_contact().done(function(success) { // Process contact selects here (other than $_POST), waiver is always 1 unless not configured. if (success === "Success") { var email_list = $("#email_list_toggle").val(); // send email_list val to $_POST $("#email_list").val(email_list); var waiver = waiver_checkbox.prop("checked"); if (!email_list) { email_list = 0; } if (!waiver) { waiver = 0; } else if (waiver === true) { waiver = 1; } else if (waiver === false) { waiver = 0; } $.post("json/contact.php", {most_recent_contact_id: 1}); // update receive_newsletter and waiver in the database $.post("json/contact.php", {contact_id: contact_id, email_list: email_list, waiver: waiver }); // email subscribe if (email_list == 1) { $.post("json/contact.php", {email_list_connector: 'subscribe', email: email.val(), first_name: first_name.val(), last_name: last_name.val()}); } else { $.post("json/contact.php", {email_list_connector: 'unsubscribe', email: email.val(), first_name: first_name.val(), last_name: last_name.val()}); } } } ); // end successful submit of contact form // show more button function show_more(demo,demo_button,div_click) { $(demo).hide(); var c=0; var button_value = demo_button.val(); // button $(demo_button).click(function(e){ e.preventDefault(); if (c == 0) { $(demo).slideDown(); $(this).attr("value","Show Less"); c++; } else { $(demo).slideUp(); $(this).attr("value",button_value); c--; } } ); // div if (div_click) { $(div_click).on("click submit", function(e){ $(this).hide(); $(demo_button).attr("value",button_value); c = 0; } ); } } show_more($('#waiver'),$('#waiver_button'),$('#waiver')); show_more($('#interest_form'),$('#interest_form_button')); $("#email_list_toggle").on("set",function() { if ($(this).val() == 0 && email_list_choice) { $("#email_list_error").hide(); } } ); function phone_validator(val, e) { var re = /^\(\d{3}\)\s?\d{3}-\d{4}$/; if ( !re.test(val) ) { error_handler(false, phone_error, false,"*Enter a correct phone number",e); } else { return true; } } function email_validator(val, e) { // https://fightingforalostcause.net/content/misc/2006/compare-email-regex.php var re = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i; if ( !re.test(val) ) { error_handler(false, email_error, false,"*Enter a correct email address",e); } } // error handler for contacts function error_handler(input,error_span,error,error_text,event) { var trans_error = 0; if ( input == error ) { if ( !error_span.is(":visible") ) { error_span.show(); } error_span.html(error_text); trans_error = 1; } else { trans_error = 0; error_span.hide(); } if (trans_error) { event.preventDefault(); } return trans_error; } // end error_handling function // email_list_toggle // function toggle( value ){ $(this).toggleClass('off', value === "0"); $(this).toggleClass('on', value === "1"); } // set waiver state $.post("json/contact.php", {contact_id: contact_id, waiver_value: 1 }, function(data) { if(data == 1) { $("#waiver_checkbox").prop("checked",true); } else { $("#waiver_checkbox").prop("checked",false); } } ); // beginning or stored state $.post("json/contact.php", {contact_id: contact_id, email_list_value: 1 }, function(data) { if (data === "") { data = 1; } $("#email_list_toggle").noUiSlider({ orientation: "horizontal", start: data, range: { 'min': [0, 1], 'max': 1 }, format: wNumb({ decimals: 0 }) }); }); $("#email_list_toggle").addClass('toggle'); $("#email_list_toggle").addClass('noUi-extended'); $("#email_list_toggle").Link('lower').to(toggle); $("#email_list_toggle").Link('lower').to('-inline-
', function(value) { if (value == 0) { $(this).html("no"); } else if (value == 1) { $(this).html("yes"); } }); // end email_list_toggle // });