var mepr_populate_states = function(obj) { (function($) {
var country = obj.val();
var form = obj.closest('.mepr-form');
if(form == undefined) { return; }
// Clean out all the options before re-populating
form.find('.mepr-states-dropdown option').remove();
var states_dropdown = form.find('.mepr-states-dropdown');
var states_text = form.find('.mepr-states-text');
// Ensure we've found a dropdown & text element
if (states_dropdown.length <= 0 || states_text.length <= 0) { return; }
// Grab fieldname and value
var fieldname = states_dropdown.data('fieldname');
var value = states_dropdown.data('value').toString();
if(fieldname == undefined || value == undefined) { return; }
// Clean up trailing whitespace
fieldname = fieldname.replace(/^\s+/,'');
fieldname = fieldname.replace(/\s+$/,'');
value = value.replace(/^\s+/,'');
value = value.replace(/\s+$/,'');
var required = !!obj.attr('required');
if (MeprI18n.states[country] !== undefined) {
states_dropdown.attr('name', fieldname);
states_dropdown.show();
states_text.removeAttr('name');
states_text.hide();
if (required) {
states_text.removeAttr('required');
states_dropdown.attr('required','');
}
states_dropdown.append('');
for (var st in MeprI18n.states[country]) {
var selected = (value===st ? ' selected="selected"' : '');
states_dropdown.append('');
}
}
else {
states_dropdown.removeAttr('name');
states_dropdown.hide();
states_text.attr('name', fieldname);
states_text.show();
if (required) {
states_dropdown.removeAttr('required');
states_text.attr('required','');
}
}
})(jQuery)};
var mepr_set_locate_inputs = function(country, state) { (function($) {
if(country !== '' && state !== '') {
// If the states are created for this country
// but the state is goofy then just blank it out
if(MeprI18n.states[country]!==undefined &&
MeprI18n.states[country][state]===undefined) {
state = '';
}
}
// Set the correct values for the country or state dropdowns
if ($('.mepr-form .mepr-countries-dropdown').length > 0) {
$.each($('.mepr-form .mepr-countries-dropdown'), function(i, obj) {
if($(obj).val()===undefined || $(obj).val()==='') {
$(obj).val(country);
}
mepr_populate_states($(obj));
});
}
// Set the states up properly where appropriate
if ($('.mepr-form .mepr-states-dropdown').length > 0) {
$.each($('.mepr-form .mepr-states-dropdown'), function(i, obj) {
if($(obj).data('value')===undefined || $(obj).data('value')==='') {
var options = $(obj).find('option');
$.each(options, function(i, option) {
if(state===option.value) {
$(obj).attr('data-value',state);
$(option).attr('selected','selected');
return false;
}
});
}
});
}
if ($('.mepr-form .mepr-geo-country').length > 0) {
$.each($('.mepr-form .mepr-geo-country'), function(i, obj) {
$(obj).val(country);
});
}
$('.mepr-form .mepr-countries-dropdown').trigger('mepr-geolocated');
})(jQuery)};
var mepr_ssl_geoip_services = {
// The services
caseproof: {
url: 'https://cspf-locate.herokuapp.com?callback=?',
cindex: 'country_code',
sindex: 'region_code',
used: false,
type: 'jsonp',
},
//telize: { //TELIZE SHUT DOWN IN 2015
// url: 'https://www.telize.com/geoip',
// cindex: 'country_code',
// sindex: 'region_code',
// used: false,
// type: 'json',
//},
//geoplugin: {
// url: 'http://www.geoplugin.net/json.gp?jsoncallback=?',
// cindex: 'geoplugin_countryCode',
// sindex: 'geoplugin_regionCode',
// used: false,
// type: 'jsonp',
//},
//'ip-api': {
// url: 'http://ip-api.com/json/?callback=?',
// cindex: 'countryCode',
// sindex: 'region',
// used: false,
// type: 'jsonp',
//},
//freegeoip: { //Dead - needs to use https://ipstack.com/ now
// url: 'https://freegeoip.net/json/',
// cindex: 'country_code',
// sindex: 'region_code',
// used: false,
// type: 'json',
//}
};
var mepr_locate = function(source_key) { (function($) {
if(source_key==undefined) {
source_key = 'caseproof'; // default
}
source = mepr_ssl_geoip_services[source_key];
// If we've already used this source then assume we're out of choices
if(source.used===true) {
return mepr_set_locate_inputs('','');
}
$.ajax({
url: source.url,
method: 'GET',
timeout: 5000, // 5 seconds ... too much? too little?
dataType: source.type,
})
.done (function(data) {
var state = ((data[source.sindex]!==undefined) ? data[source.sindex] : '');
var country = ((data[source.cindex]!==undefined) ? data[source.cindex] : '');
mepr_set_locate_inputs(country, state);
})
.fail (function() {
mepr_ssl_geoip_services[source_key].used=true;
for (var k in mepr_ssl_geoip_services) {
var next_source = mepr_ssl_geoip_services[k];
if(next_source.used===false) {
return mepr_locate(k);
}
}
mepr_set_locate_inputs('','');
});
return false;
})(jQuery)};
jQuery(document).ready(function($){
$.each($('.mepr-form .mepr-countries-dropdown'), function(i, obj) {
mepr_populate_states($(obj));
$(obj).on('change', function(e) {
mepr_populate_states($(obj));
});
});
});