(function($){
'use strict';
var WPUF_Field_Initializer={
isInitializing: false,
init: function(){
this.initDateFields();
this.initCountryFields();
this.initPhoneFields();
this.initRatingFields();
this.initFileFields();
this.bindEvents();
},
initDateFields: function(){
if(this.isInitializing){
return;
}
var dateFields=$('.wpuf-date-field:not(.wpuf-initialized)');
$('.wpuf-date-field.hasDatepicker').each(function(){
var $field=$(this);
if(!$field.hasClass('wpuf-initialized')){
try {
$field.datepicker('destroy');
} catch (error){
$field.removeClass('hasDatepicker');
}}
});
if(dateFields.length===0){
return;
}
this.isInitializing=true;
dateFields.each(function(index){
var $field=$(this);
if($field.hasClass('hasDatepicker')){
try {
$field.datepicker('destroy');
} catch (error){
$field.removeClass('hasDatepicker');
}}
if($field.hasClass('hasTimepicker')){
try {
$field.datetimepicker('destroy');
} catch (error){
$field.removeClass('hasTimepicker');
}}
var format=$field.data('format')||'dd/mm/yy';
var timeEnabled=$field.data('time')==='yes';
var mintime=$field.data('mintime');
var maxtime=$field.data('maxtime');
var dateConfig={
dateFormat: format,
changeMonth: true,
changeYear: true,
yearRange: '-100:+20'
};
if(mintime||maxtime){
if(mintime){
var mintimeParts=mintime.split('-');
dateConfig.minDate=new Date(mintimeParts[2], mintimeParts[1] - 1, mintimeParts[0]);
}
if(maxtime){
var maxtimeParts=maxtime.split('-');
dateConfig.maxDate=new Date(maxtimeParts[2], maxtimeParts[1] - 1, maxtimeParts[0]);
}}
try {
if(timeEnabled){
$field.datetimepicker(dateConfig);
}else{
$field.datepicker(dateConfig);
}
$field.addClass('wpuf-initialized');
} catch (error){
}});
this.isInitializing=false;
},
initCountryFields: function(){
if(this.isInitializing){
return;
}
var countryFields=$('select[data-countries]:not(.wpuf-initialized)');
if(countryFields.length===0){
return;
}
if(typeof $.fn.selectize==='undefined'){
return;
}
this.isInitializing=true;
countryFields.each(function(index){
var $field=$(this);
if($field.hasClass('selectized')){
try {
$field[0].selectize.destroy();
} catch (error){
$field.removeClass('selectized');
}}
try {
var countriesData=$field.data('countries');
var bannedCountriesData=$field.data('banned-countries');
var allowedCountriesData=$field.data('allowed-countries');
var countries=[];
var bannedCountries=[];
var allowedCountries=[];
if(countriesData){
if(typeof countriesData==='string'){
try {
countries=JSON.parse(countriesData);
} catch (e){
countries=[];
}}else if(Array.isArray(countriesData)){
countries=countriesData;
}else{
countries=[];
}}
if(bannedCountriesData){
if(typeof bannedCountriesData==='string'){
try {
bannedCountries=JSON.parse(bannedCountriesData);
} catch (e){
bannedCountries=[];
}}else if(Array.isArray(bannedCountriesData)){
bannedCountries=bannedCountriesData;
}}
if(allowedCountriesData){
if(typeof allowedCountriesData==='string'){
try {
allowedCountries=JSON.parse(allowedCountriesData);
} catch (e){
allowedCountries=[];
}}else if(Array.isArray(allowedCountriesData)){
allowedCountries=allowedCountriesData;
}}
var listVisibilityOption=$field.data('list-visibility-option')||'all';
var selectedCountry=$field.data('selected-country')||'';
var options=[];
if(!Array.isArray(countries)){
if(typeof countries==='object'&&countries!==null){
var countriesArray=[];
for (var code in countries){
if(countries.hasOwnProperty(code)){
countriesArray.push({
code: code,
name: countries[code]
});
}}
countries=countriesArray;
}else{
countries=[];
}}
if(listVisibilityOption==='hide'){
countries.forEach(function(country){
if(bannedCountries.indexOf(country.code)===-1){
options.push({
value: country.code,
text: country.name
});
}});
}else if(listVisibilityOption==='show'){
allowedCountries.forEach(function(countryCode){
var country=countries.find(function(c){ return c.code===countryCode; });
if(country){
options.push({
value: country.code,
text: country.name
});
}});
}else{
countries.forEach(function(country){
options.push({
value: country.code,
text: country.name
});
});
}
if(typeof $.fn.selectize!=='undefined'){
$field.selectize({
options: options,
items: selectedCountry ? [selectedCountry]:[],
placeholder: 'Select a country',
allowEmptyOption: true
});
$field.addClass('wpuf-initialized');
}else{
$field.empty();
$field.append('<option value="">Select a country</option>');
options.forEach(function(option){
var selected=option.value===selectedCountry ? 'selected':'';
$field.append('<option value="' + option.value + '" ' + selected + '>' + option.text + '</option>');
});
$field.addClass('wpuf-initialized');
}} catch (error){
}});
this.isInitializing=false;
},
initPhoneFields: function(){
if(this.isInitializing){
return;
}
var allPhoneFields=$('input[type="tel"], input.wpuf_telephone');
allPhoneFields.each(function(){
var $field=$(this);
var fieldId=$field.attr('id')||'no-id';
var $wrapper=$field.closest('.iti, .iti--allow-dropdown, .iti--separate-dial-code');
var hasWrapper=$wrapper.length&&$wrapper[0]!==$field[0];
var hasInitClass=$field.hasClass('wpuf-initialized');
var hasInstance=false;
try {
var instance=window.intlTelInput&&window.intlTelInput.getInstance($field[0]);
hasInstance = !!instance;
} catch (e){
hasInstance=false;
}});
var phoneFields=allPhoneFields.filter(function(){
var $field=$(this);
var $wrapper=$field.closest('.iti, .iti--allow-dropdown, .iti--separate-dial-code');
var hasWrapper=$wrapper.length&&$wrapper[0]!==$field[0];
if(hasWrapper&&$field.hasClass('wpuf-initialized')){
return false;
}
if($field.hasClass('wpuf-initialized')&&!hasWrapper){
$field.removeClass('wpuf-initialized');
}
return true;
});
$('input.wpuf_telephone').each(function(){
var $field=$(this);
if(!$field.hasClass('wpuf-initialized')){
var $wrapper=$field.closest('.iti, .iti--allow-dropdown, .iti--separate-dial-code');
if($wrapper.length&&$wrapper[0]!==$field[0]){
$field.detach();
$wrapper.replaceWith($field);
}
if($field.data('intlTelInput')){
try {
$field.intlTelInput('destroy');
} catch (error){
$field.removeClass('iti');
}}
}});
if(phoneFields.length===0){
return;
}
if(typeof window.intlTelInput==='undefined'){
return;
}
this.isInitializing=true;
phoneFields.each(function(index){
var $field=$(this);
var fieldId=$field.attr('id')||'no-id';
var $existingWrapper=$field.closest('.iti, .iti--allow-dropdown, .iti--separate-dial-code');
if($existingWrapper.length&&$existingWrapper[0]!==$field[0]){
try {
var instance=window.intlTelInput.getInstance($field[0]);
if(instance){
$field.addClass('wpuf-initialized');
return;
}else{}} catch (e){}}
var existingInstance=null;
try {
existingInstance=window.intlTelInput.getInstance($field[0]);
if(existingInstance){
existingInstance.destroy();
}else{
}} catch (e){}
var $wrapper=$field.closest('.iti, .iti--allow-dropdown, .iti--separate-dial-code');
if($wrapper.length&&$wrapper[0]!==$field[0]){
$field.detach();
$wrapper.replaceWith($field);
}
$field.removeClass('iti wpuf-initialized');
$field.removeAttr('data-intl-tel-input-id');
$field.removeData('intlTelInput');
try {
var showList=$field.data('show-list')||'yes';
var defaultCountry=$field.data('default-country')||'';
var autoPlaceholder=$field.data('auto-placeholder')||'yes';
var utilsScript=$field.data('utils-script')||'';
var onlyCountries=[];
var excludeCountries=[];
try {
var onlyCountriesData=$field.data('only-countries');
if(onlyCountriesData&&typeof onlyCountriesData==='string'){
onlyCountries=JSON.parse(onlyCountriesData);
}else if(Array.isArray(onlyCountriesData)){
onlyCountries=onlyCountriesData;
}} catch (e){
}
try {
var excludeCountriesData=$field.data('exclude-countries');
if(excludeCountriesData&&typeof excludeCountriesData==='string'){
excludeCountries=JSON.parse(excludeCountriesData);
}else if(Array.isArray(excludeCountriesData)){
excludeCountries=excludeCountriesData;
}} catch (e){
}
if(showList==='yes'){
if(typeof window.intlTelInput!=='undefined'){
var config={};
if(utilsScript){
config.utilsScript=utilsScript;
}
if(defaultCountry){
config.initialCountry=defaultCountry;
}
if(onlyCountries&&onlyCountries.length > 0){
config.onlyCountries=onlyCountries;
}
if(excludeCountries&&excludeCountries.length > 0){
config.excludeCountries=excludeCountries;
}
if(autoPlaceholder==='no'){
config.autoPlaceholder='off';
}
try {
window.intlTelInput($field[0], config);
var $wrapper=$field.parent();
var hasWrapper=$wrapper.length &&
($wrapper.hasClass('iti') ||
$wrapper.hasClass('iti--allow-dropdown') ||
$wrapper.hasClass('iti--separate-dial-code'));
if(hasWrapper){
$field.addClass('wpuf-initialized');
}else{
try {
var instance=window.intlTelInput.getInstance($field[0]);
if(instance){
$wrapper=$field.parent();
if($wrapper.hasClass('iti') ||
$wrapper.hasClass('iti--allow-dropdown') ||
$wrapper.hasClass('iti--separate-dial-code')){
$field.addClass('wpuf-initialized');
}else{}}else{}} catch (e){}}
} catch (error){
$field.removeClass('wpuf-initialized');
if(!$field.attr('placeholder')){
$field.attr('placeholder', 'Enter phone number');
}}
}else{
$field.addClass('wpuf-initialized');
}}else{
$field.addClass('wpuf-initialized');
}} catch (error){}});
this.isInitializing=false;
},
initRatingFields: function(){
$('.wpuf-ratings:not(.wpuf-initialized)').each(function(){
var $field=$(this);
if($field.hasClass('br-theme-css-stars')){
$field.barrating('destroy');
}
try {
$field.barrating({
theme: 'css-stars'
});
$field.addClass('wpuf-initialized');
} catch (error){
}});
},
initFileFields: function(){
$('.wpuf-file-upload:not(.wpuf-initialized)').each(function(){
var $field=$(this);
var uniqueId=$field.data('unique-id');
var fieldName=$field.data('field-name');
var count=$field.data('count')||1;
var allowedExt=$field.data('allowed-ext')||'';
var maxSize=$field.data('max-size')||1024;
if(uniqueId&&fieldName){
try {
var uploader=new WPUF_Uploader(
'wpuf-' + uniqueId + '-pickfiles',
'wpuf-' + uniqueId + '-upload-container',
count,
fieldName,
allowedExt,
maxSize
);
if(typeof wpuf_plupload_items!=='undefined'){
wpuf_plupload_items.push(uploader);
}
$field.addClass('wpuf-initialized');
} catch (error){
}}
});
},
cleanupInitializedFields: function($container){
if(!$container){
$container=$('body');
}
var initializedFields=$container.find('.wpuf-initialized');
initializedFields.each(function(){
var $field=$(this);
$field.removeClass('wpuf-initialized');
if($field.hasClass('hasDatepicker')){
try {
$field.datepicker('destroy');
} catch (error){
$field.removeClass('hasDatepicker');
$field.siblings('.ui-datepicker').remove();
}}
if($field.hasClass('hasTimepicker')){
try {
$field.datetimepicker('destroy');
} catch (error){
$field.removeClass('hasTimepicker');
$field.siblings('.ui-datetimepicker').remove();
}}
if($field.hasClass('br-theme-css-stars')){
try {
$field.barrating('destroy');
} catch (error){
$field.removeClass('br-theme-css-stars');
$field.siblings('.br-wrapper').remove();
}}
if($field.hasClass('selectized')&&$field[0].selectize){
try {
$field[0].selectize.destroy();
} catch (error){
$field.removeClass('selectized');
$field.siblings('.selectize-control').remove();
}}
if($field.hasClass('iti')||$field.closest('.iti, .iti--allow-dropdown, .iti--separate-dial-code').length){
try {
if($field.data('intlTelInput')){
$field.intlTelInput('destroy');
}} catch (error){
}
var $wrapper=$field.closest('.iti, .iti--allow-dropdown, .iti--separate-dial-code');
if($wrapper.length&&$wrapper[0]!==$field[0]){
$field.detach();
$wrapper.replaceWith($field);
}
$field.removeClass('iti wpuf-initialized');
$field.removeAttr('data-intl-tel-input-id');
}});
},
bindEvents: function(){
$(document).on('wpuf-repeat-instance-added', function(event, $newInstance){
WPUF_Field_Initializer.cleanupInitializedFields($newInstance);
setTimeout(function(){
WPUF_Field_Initializer.initDateFields();
WPUF_Field_Initializer.initCountryFields();
WPUF_Field_Initializer.initPhoneFields();
WPUF_Field_Initializer.initRatingFields();
WPUF_Field_Initializer.initFileFields();
}, 200);
});
$(document).on('wpuf-conditional-logic-updated', function(){
WPUF_Field_Initializer.initDateFields();
WPUF_Field_Initializer.initCountryFields();
WPUF_Field_Initializer.initPhoneFields();
WPUF_Field_Initializer.initRatingFields();
WPUF_Field_Initializer.initFileFields();
});
},
reinitialize: function(){
this.initDateFields();
this.initCountryFields();
this.initPhoneFields();
this.initRatingFields();
this.initFileFields();
}};
$(document).ready(function(){
if(typeof WPUF_Field_Initializer!=='undefined'&&typeof WPUF_Field_Initializer.init==='function'){
WPUF_Field_Initializer.init();
}});
window.WPUF_Field_Initializer=WPUF_Field_Initializer;
})(jQuery);