var set_preference = (function($, window, jQuery) {
/* Stop validator from firing on keyprss */
$.validator.setDefaults({
onkeyup: false
});
let selectedCountryCode;
var _vars_ = {};
return {
"set_vars": function(options) {
$.extend(_vars_, options || {});
},
"get_vars": function() {
return _vars_;
},
"form": {
"validate": function(options) {
$("#e_pref").text("").hide();
var custom_val = true;
if (typeof options.custom_validation != "undefined") {
custom_val = options.custom_validation();
}
app._form._resetFormValidation(options.validation.form_id);
var valOPtions = {
ignore: options.validation.ignore,
highlight: function(element) {
$(element).closest('.form-group').addClass('has-error');
$(element).closest('.form-label-group').addClass('has-error');
},
unhighlight: function(element) {
$(element).closest('.form-group').removeClass('has-error');
$(element).closest('.form-label-group').removeClass('has-error');
},
errorElement: 'span',
errorClass: 'help-block',
errorPlacement: function(error, element) {
// if (element.hasClass("multi-checkbox")) {
// error.insertAfter($(".event-pref label")).addClass("pull-right");
// } else if( element.attr("id") == "country"){
// $(".select2-container--default .select2-selection--single").css({"border-color" : "#a94442" })
// error.insertAfter('.with-country-custom-error').css({"color":"#a94442", "float":"right"});
// }else if( element.attr("id") == "Concert"){
// error.insertAfter('.with-event-preferences-custom-error').css({"color":"#a94442", "float":"left"});
// }else if( element.attr("name") == "civility" ){
// error.insertAfter('.with-civility-custom-error').css({"color":"#a94442"});
// } else {
// error.insertAfter(element);
// }
if (element.hasClass("multi-checkbox")) {
error.insertAfter('.with-event-preferences-custom-error').addClass('error-msg');
$('.with-event-preferences-custom-error').addClass('error-msg');
} else if (element.attr("id") == "country") {
$(".select2-container--default .select2-selection--single").css({
"border-color": "#a94442 !important"
})
error.insertAfter('.with-country-custom-error').addClass('error-msg');
$('.with-country-custom-error').addClass('error-msg');
} else if (element.attr("id") == "Concert") {
error.insertAfter('.with-event-preferences-custom-error').addClass('error-msg');
} else if (element.attr("name") == "civility") {
error.insertAfter('.with-civility-custom-error').addClass('error-msg');
$('.with-civility-custom-error').addClass('error-msg');
} else if (element.attr("name") == "first_name") {
error.insertAfter('.with-fname-error').addClass('error-msg');
$('.with-fname-error').addClass('error-msg');
} else if (element.attr("name") == "last_name") {
error.insertAfter('.with-lname-error').addClass('error-msg');
$('.with-lname-error').addClass('error-msg');
} else if (element.attr("name") == "birthday") {
error.insertAfter('.with-birthday-error').addClass('error-msg');
$('.with-birthday-error').addClass('error-msg');
} else if (element.attr("name") == "address") {
error.insertAfter('.with-address-error').addClass('error-msg');
$('.with-address-error').addClass('error-msg');
} else if (element.attr("name") == "additional_address") {
error.insertAfter('.with-additionaladdress-error').addClass('error-msg');
$('.with-additionaladdress-error').addClass('error-msg');
} else if (element.attr("name") == "postal_code") {
error.insertAfter('.with-postal_code-error').addClass('error-msg');
$('.with-postal_code-error').addClass('error-msg');
} else if (element.attr("name") == "city") {
error.insertAfter('.with-city-error').addClass('error-msg');
$('.with-city-error').addClass('error-msg');
} else if (element.attr("name") == "mobile") {
error.insertAfter('.with-mobile-error').addClass('error-msg');
$('.with-mobile-error').addClass('error-msg');
} else if (element.attr("name") == "phone") {
error.insertAfter('.with-phone-error').addClass('error-msg');
$('.with-phone-error').addClass('error-msg');
} else {
error.insertAfter(element);
// app._notify("error", "Enregistrement impossible, merci de vérifier les informations complétées.");
}
},
submitHandler: function() {
return false;
}
};
var form = $(options.validation.form_id);
var rulesReset = form.data('validator');
if (typeof rulesReset != "undefined") {
rulesReset.settings.rules = options.validation.rules;
form.data('validator', rulesReset);
valOPtions.rules = options.validation.rules;
} else {
valOPtions.rules = options.validation.rules;
}
try {
//validate form
form.validate(valOPtions);
//put the bootbox dialog outside to prevent it from caching
if (form.valid()) {
if (custom_val) {
// if(Helper._prefix($("#mobile").val()) < 9){
// app._form._populate_field_error("mobile", "Entrez au moins 9 chiffres.", 0);
// }else if(Helper._prefix($("#phone").val()) < 9){
// app._form._populate_field_error("phone", "Entrez au moins 9 chiffres.", 0);
// }else{
// }
set_preference.update();
}
}else{
app._notify("error", "Enregistrement impossible, merci de vérifier les informations complétées.");
}
} catch (e) {
console.log(e);
};
}
},
"create_require_asteriks": function() {
$.getJSON(app.get_vars().baseurl + "personalize/create_reg_form_rules", function(jsonData) {
for (var i = 0; i < jsonData.length; i++) {
if ("civility" == jsonData[i].name && jsonData[i].required != true)
$('.civility').hide();
if ("first_name" == jsonData[i].name && jsonData[i].required != true)
$('.first_name').hide();
if ("last_name" == jsonData[i].name && jsonData[i].required != true)
$('.last_name').hide();
if ("birthday" == jsonData[i].name && jsonData[i].required != true)
$('.birthday').hide();
if ("address" == jsonData[i].name && jsonData[i].required != true)
$('.address').hide();
if ("additional_address" == jsonData[i].name && jsonData[i].required != true)
$('.additional_address').hide();
if ("country" == jsonData[i].name && jsonData[i].required != true)
$('.country_required').hide();
if ("postal_code" == jsonData[i].name && jsonData[i].required != true)
$('.postal_code').hide();
if ("city" == jsonData[i].name && jsonData[i].required != true)
$('.city').hide();
if ("mobile" == jsonData[i].name && jsonData[i].required != true)
$('.mobile').hide();
if ("phone" == jsonData[i].name && jsonData[i].required != true)
$('.phone').hide();
if ("event_preferences" == jsonData[i].name && jsonData[i].required != true)
$('.event_preferences_error').hide();
// if( "event_preferences" == jsonData[i].name && jsonData[i].required == true)
// $('span#event_preferences').append(' *');
// if( "civility" == jsonData[i].name && jsonData[i].required == true)
// $('span#civility').append(' *');
// $('form#set_preferences_form label').each(function() {
// $this = $(this)
// if($this.attr('for') == jsonData[i].name && jsonData[i].required == true && "civility" != jsonData[i].name && "country" != jsonData[i].name && "first_name" != jsonData[i].name && "last_name" != jsonData[i].name && "birthday" != jsonData[i].name && "address" != jsonData[i].name && "additional_address" != jsonData[i].name && "postal_code" != jsonData[i].name && "city" != jsonData[i].name && "phone" != jsonData[i].name && "mobile" != jsonData[i].name )
// {
// $('.error-sign').append(' *');
// }
// });
}
});
},
"validation": function() {
// var validator = $( "#set_preferences_form" ).validate();
// $.validator.addMethod("checklengthmobile", function (value, element) {
// return $("#mobile").val() != "+[33] X XX XX XX XX";
// }, "Entrez au moins 9 chiffres." );
//
//
// $.validator.addMethod("checklengthphone", function (value, element) {
// return $("#phone").val() != "+[33] X XX XX XX XX";
// }, "Entrez au moins 9 chiffres." );
$.validator.addMethod("checkPostalCode", function(value, element) {
var postalIsValid = false;
$.ajax({
url: app.get_vars().baseurl + "setPreferences/validateFormat/postal?postal=" + value + "&countryCode=" + element.dataset.countryCode,
async: false,
success: function(response) {
postalIsValid = response.isValid;
}
});
return postalIsValid;
}, "Le code postal ne correspond pas au pays renseigné.");
$.validator.addMethod("checkPhoneNumber", function(value, element) {
var errorMsg = '',phoneIsValid = false;
$.ajax({
url: app.get_vars().baseurl + "setPreferences/validateFormat/phone?phone=" + value + "&countryCode=" + element.dataset.countryCode,
async: false,
success: function(response) {
if (response.isValid == "empty"){
errorMsg = 'Ce champ est obligatoire.';
phoneIsValid = false;
}else if(response.isValid == "invalide"){
errorMsg = 'Numéro de téléphone invalide.';
phoneIsValid = false;
}else if (response.isValid == false){
errorMsg = 'Le code indicatif téléphone ne correspond pas au pays renseigné.';
phoneIsValid = response.isValid;
}else {
phoneIsValid = true;
}
}
});
$.validator.messages["checkPhoneNumber"] = errorMsg;
return phoneIsValid;
}, '');
$.getJSON(app.get_vars().baseurl + "personalize/create_reg_form_rules", function(jsonData) {
var r_civility;
var r_first_name;
var r_last_name;
var r_bday;
var r_address;
var r_additional_address;
var r_country;
var r_postal_code;
var r_city;
var r_email_address;
var r_mobile;
var r_phone;
var r_preference;
for (var i = 0; i < jsonData.length; i++) {
switch (jsonData[i].name) {
case "civility":
r_civility = jsonData[i].required;
break;
case "first_name":
r_first_name = jsonData[i].required;
break;
case "last_name":
r_last_name = jsonData[i].required;
break;
case "birthday":
r_bday = jsonData[i].required;
break;
case "address":
r_address = jsonData[i].required;
break;
case "additional_address":
r_additional_address = jsonData[i].required;
break;
case "country":
r_country = jsonData[i].required;
break;
case "postal_code":
r_postal_code = jsonData[i].required;
break;
case "city":
r_city = jsonData[i].required;
break;
case "email_address":
r_email_address = jsonData[i].required;
break;
case "mobile":
r_mobile = jsonData[i].required;
break;
case "phone":
r_phone = jsonData[i].required;
break;
case "event_preferences":
r_preference = jsonData[i].required;
break;
}
}
var options = {
//custom_validation : set_preference.custom_validation,
validation: {
// ignore : "[readonly]",
form_id: "form#set_preferences_form",
rules: {
civility: {
required: r_civility
},
first_name: {
required: r_first_name
},
last_name: {
required: r_last_name
},
birthday: {
required: r_bday
},
address: {
required: r_address
},
additional_address: {
required: r_additional_address
},
country: {
required: r_country
},
postal_code: {
// digits: true,
required: r_postal_code,
checkPostalCode: r_postal_code
},
city: {
required: r_city
},
mobile: {
required: r_mobile,
// checklengthmobile: r_mobile
checkPhoneNumber: r_mobile,
},
phone: {
required: r_phone,
// checklengthphone: r_phone
checkPhoneNumber: r_phone
},
"preference[]": {
minlength: 1,
required: r_preference
}
}
}
};
set_preference.form.validate(options);
}, 'json');
},
/*"custom_validation" : function() {
var error = true;
var telephone_no = $("#phone").val();
var mobile_no = $("#mobile").val()
if(telephone_no == "+[33] X XX XX XX XX" || mobile_no == "+[33] X XX XX XX XX") {
$(".err-phone").hide()
} else {
error = false;
$(".err-phone").show()
}
if(mobile_no.length == 0 || mobile_no.length == 10) {
$(".err-mobile").hide()
} else {
error = false;
$(".err-mobile").show()
}
return error;
},*/
"save_preferences_btn": function(btn, remove, duration) {
$(btn).attr("disabled", true);
if (remove) window.setTimeout(function() {
$(btn).removeAttr("disabled")
}, duration);
},
"update": function() {
//disabled button to prevent duplicate
set_preference.save_preferences_btn("#save_preferences_btn", true, 5000);
let formData = $("form#set_preferences_form").serializeArray();
//quick fix for telephone fixe that saves the placeholder instead an empty value
let explode = (formData[11].value).trim().split(" ");
if (formData[11].value.indexOf("X") != -1 || typeof explode[1] == "undefined" || (typeof explode[1] != "undefined" && explode[1].trim().length < 1)) {
formData[11].value = "";
}
$.ajax({
url: app.get_vars().baseurl + "profile/preferences/setPreferences",
type: "POST",
data: formData,
success: function(result) {
if (!result.nomessage) {
if (result.message != null) {
app._notify(result.mtype, result.message);
}
}
if (result.mtype == "session_timeout") {
window.setTimeout(function() {
window.location.href = result.mdetail.path;
}, result.mdetail.redirect);
} else if (result.mtype == "success") {
//disabled button to prevent duplicate
set_preference.save_preferences_btn("#save_preferences_btn", false, 5000);
//reload grid
window.setTimeout(function() {
window.location.href = app.get_vars().baseurl;
}, 2000);
} else {
var x = 0;
$.map(result.mdetail, function(input, i) {
app._form._populate_field_error(input.field, input.message, x);
x++;
});
}
}
});
},
"prevent_page_load": function() {
history.pushState(null, null, document.url);
window.addEventListener('popstate', function() {
//$.ajax({
// url : app.get_vars().baseurl+"is_alive/",
// type : "POST",
// data : {
// action : 1
// },
// success : function(result){
// console.log(result)
// if(result.redirect==1){
// //window.location.href = app.get_vars().baseurl+"login";
// }
// }
//});
var d = decodeURIComponent(set_preference.getCookie("_sdllmea"));
if (d.indexOf("first_logged_in") <= -1) {
window.location.href = app.get_vars().baseurl;
} else {
history.pushState(null, null, document.url);
}
});
},
"getCookie": function(name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2) return parts.pop().split(";").shift();
},
"postal_min_max": function() {
// $("#postal_code").attr("readonly", true);
$('#country').on('keypress, blur', function() {
var values = $.trim($(this).val());
if (values.length > 0)
$("#postal_code").removeAttr("readonly");
else
$("#postal_code").attr("readonly", true);
});
$('#country').on('change', function() {
$("#postal_code").val('');
if (this.value.toLowerCase() === "france") {
$("#postal_code").removeAttr("readonly");
$("#postal_code").attr("minlength", 5);
$("#postal_code").attr("maxlength", 5);
$("#postal_code").attr("onkeypress", "return Helper.validate_numbers(event)");
} else if (this.value.toLowerCase() !== "france") {
$("#postal_code").removeAttr("readonly");
$("#postal_code").removeAttr("minlength");
$("#postal_code").removeAttr("maxlength");
$("#postal_code").removeAttr("onkeypress");
}
})
},
"civility_option": function(civility_option) {
$(civility_option).on('change', function() {
$(civility_option).not(this).prop('checked', false);
});
},
"country_list": function() {
$("#country").select2({
// placeholder: {
// id: "-1",
// text: 'Pays'
// }
/*sorter: function(data) {
return data.sort(function (a, b) {
a = a.text.toLowerCase();
b = b.text.toLowerCase();
if (a > b) {
if(a=="france" || b =="france")
return -1
else return 1
}
if (a < b) {
return -1;
}
return 0;
});
}*/
});
$('.country').addClass('country_selected');
$('#country').val('France'); // Select the option with a value of '1'
$('#country').trigger('change'); // Notify any JS components that the value changed
var selectedCountryCode = $('#country').children(":selected").attr("id");
$('#postal_code').attr('data-country-code', selectedCountryCode);
$('#mobile').attr('data-country-code', selectedCountryCode);
$('#phone').attr('data-country-code', selectedCountryCode);
if ($('#country').val().toLowerCase() === "france") {
$("#postal_code").removeAttr("readonly");
$("#postal_code").attr("minlength", 5);
$("#postal_code").attr("maxlength", 5);
$("#postal_code").attr("onkeypress", "return Helper.validate_numbers(event)");
} else if ($('#country').val().toLowerCase() !== "france") {
$("#postal_code").removeAttr("readonly");
$("#postal_code").removeAttr("minlength");
$("#postal_code").removeAttr("maxlength");
$("#postal_code").removeAttr("onkeypress");
}
$.ajax({
url: app.get_vars().baseurl + "setPreferences/getPhoneNumberFormat/" + selectedCountryCode,
async: false,
success: function(response) {
$('#postal_code').removeAttr('readonly');
$('#mobile').removeAttr('readonly');
$('#phone').removeAttr('readonly');
$('#mobile').removeAttr('placeholder');
$('#phone').removeAttr('placeholder');
$('#mobile').val('');
$('#phone').val('');
$('#mobile').unmask();
$('#phone').unmask();
if (selectedCountryCode == 'FR') {
$('#mobile').attr('placeholder', `+[33] X XX XX XX XX`);
$('#phone').attr('placeholder', `+[33] X XX XX XX XX`);
//create prefix
// Helper._create_prefix("#phone");
// Helper._create_prefix("#mobile");
// Helper.mask_setpref("#phone", `floooor X XX XX XX XX`, `+[33] X XX XX XX XX`);
Helper.mask_setpref("#mobile", `floooor X XX XX XX XX`, `+[33] X XX XX XX XX`);
} else {
$('#mobile').attr('placeholder', `+[${response.code}] ${response.format}`);
$('#phone').attr('placeholder', `+[${response.code}] ${response.format}`);
//create prefix
// Helper._create_prefix("#phone", response.code, response.format);
// Helper._create_prefix("#mobile", response.code, response.format);
Helper.mask_setpref("#phone", `floooor ${response.format}`, `+[${response.code}] ${response.format}`);
Helper.mask_setpref("#mobile", `floooor ${response.format}`, `+[${response.code}] ${response.format}`);
}
}
});
}
};
// Pass in jQuery.
})(jQuery, this);
$(function() {
//focus first element
$("#first_name").focus();
//create dropdown list of countries
set_preference.country_list();
//hide first custom error message on mobile ang phone
$(".err-mobile, .err-phone").hide();
//create datepicker for b-day then call validation onchange
$('#birthday').datetimepicker({
format: 'DD/MM/YYYY',
locale: 'fr',
icons: {
next: "fas fa-chevron-right fa-sm",
previous: "fas fa-chevron-left fa-sm"
}
}).on('dp.change', function(e) {
if ($(e.target).val().length > 0) {
if ($(e.target).prop("name")) {
$(e.target).closest('.form-group').removeClass('has-error').find("span.help-block").text('')
}
}
}).on('dp.show', function(e) {
if($(e.target).val().trim() != ""){
return $(e.target).data('DateTimePicker').date(null);
} else {
// return $(this).data('DateTimePicker').date(moment($(this).val(), "DD/MM/YYYY HH[h]mm", true));
}
}).on('dp.hide', function() {
$(this).blur();
});
//validate form on submit
$('#save_preferences_btn').off('click').on('click', function(event) {
event.preventDefault();
set_preference.validation();
});
//remove validation errors on keypress
app._form._form_on_keypress("set_preferences_form", function() {
set_preference.validation();
});
//remove validation errors on select for country
$('select.s1').on('change', function(e) {
if ($(e.target).val().length > 0) {
if ($(e.target).prop("name")) {
$(".select2-container--default .select2-selection--single").css({
"border-color": "#ccc"
})
$(e.target).closest('.form-label-group').removeClass('has-error').find("span.help-block").text('')
}
}
//remove error on telephone field
$('#mobile').closest('.form-label-group').removeClass('has-error').find("span.help-block").text('');
});
$('.textboxes').on('keypress',function (e) {
$(e.target).closest('.form-label-group').removeClass('has-error').find("span.help-block").text('');
})
//civility checkbox options
set_preference.civility_option('input#civility');
//create asterisk for required fields accordingly
set_preference.create_require_asteriks();
//chnage postal value lengt if france max 5 numbers else other countries greater than 5
set_preference.postal_min_max();
set_preference.prevent_page_load();
$.fn.setCursorPosition = function(pos) {
this.each(function(index, elem) {
if (elem.setSelectionRange) {
elem.setSelectionRange(pos, pos);
} else if (elem.createTextRange) {
var range = elem.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
});
return this;
};
//mask phone and mobile
//Helper.input_mask("#phone", "[~][~][~] X XX XX XX XX" );
//Helper.input_mask("#mobile", "[~][~][~] X XX XX XX XX" );
/*$('#phone').on('click',function(){
setTimeout(function(){
$('input[name=phone]').focus().setCursorPosition(1);
}, 0);
});
$('#mobile').on('click', function(){
setTimeout(function(){
$('input[name=mobile]').focus().setCursorPosition(1);
}, 0);
});*/
$(window).on('load', function() {
// $('#firstPopUp').modal({
// backdrop: 'static',
// keyboard: false
// });
});
$('label.country').on('click', function (e) {
$('#country').select2('open');
});
$('select#country').on("select2:select", function(e) {
$('.country').addClass('country_selected');
var selectedCountryCode = e.params.data.element.id;
$('#postal_code').attr('data-country-code', selectedCountryCode);
$('#mobile').attr('data-country-code', selectedCountryCode);
$('#phone').attr('data-country-code', selectedCountryCode);
$.ajax({
url: app.get_vars().baseurl + "setPreferences/getPhoneNumberFormat/" + selectedCountryCode,
async: false,
success: function(response) {
$('#postal_code').removeAttr('readonly');
$('#mobile').removeAttr('readonly');
$('#phone').removeAttr('readonly');
$('#mobile').removeAttr('placeholder');
$('#phone').removeAttr('placeholder');
$('#mobile').val('');
$('#phone').val('');
$('#mobile').unmask();
$('#phone').unmask();
if (selectedCountryCode == 'FR') {
$('#mobile').attr('placeholder', `+[33] X XX XX XX XX`);
$('#phone').attr('placeholder', `+[33] X XX XX XX XX`);
//create prefix
// Helper._create_prefix("#phone");
// Helper._create_prefix("#mobile");
Helper.mask_setpref("#phone", `floooor X XX XX XX XX`, `+[33] X XX XX XX XX`);
Helper.mask_setpref("#mobile", `floooor X XX XX XX XX`, `+[33] X XX XX XX XX`);
} else {
$('#mobile').attr('placeholder', `+[${response.code}] ${response.format}`);
$('#phone').attr('placeholder', `+[${response.code}] ${response.format}`);
//create prefix
// Helper._create_prefix("#phone", response.code, response.format);
// Helper._create_prefix("#mobile", response.code, response.format);
Helper.mask_setpref("#phone", `floooor ${response.format}`, `+[${response.code}] ${response.format}`);
Helper.mask_setpref("#mobile", `floooor ${response.format}`, `+[${response.code}] ${response.format}`);
}
}
});
})
});