// source --> https://gl-verleih.de/wp-content/plugins/events-manager/includes/js/events-manager.js
jQuery(document).ready( function($){
var load_ui_css = false; //load jquery ui css?
/* Time Entry */
$('#start-time').each(function(i, el){
$(el).addClass('em-time-input em-time-start').next('#end-time').addClass('em-time-input em-time-end').parent().addClass('em-time-range');
});
if( $(".em-time-input").length > 0 ){
em_setup_timepicker('body');
}
/* Calendar AJAX */
$('.em-calendar-wrapper a').off("click");
$('.em-calendar-wrapper').on('click', 'a.em-calnav, a.em-calnav', function(e){
e.preventDefault();
$(this).closest('.em-calendar-wrapper').prepend('
');
var url = em_ajaxify($(this).attr('href'));
$(this).closest('.em-calendar-wrapper').load(url, function(){$(this).trigger('em_calendar_load');});
} );
//Events Search
$(document).on('click change', '.em-toggle', function(e){
e.preventDefault();
//show or hide advanced tickets, hidden by default
var el = $(this);
var rel = el.attr('rel').split(':');
if( el.hasClass('show-search') ){
if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideUp(); }
else{ $(rel[0]).slideUp(); }
el.find('.show, .show-advanced').show();
el.find('.hide, .hide-advanced').hide();
el.removeClass('show-search');
}else{
if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideDown(); }
else{ $(rel[0]).slideDown(); }
el.find('.show, .show-advanced').hide();
el.find('.hide, .hide-advanced').show();
el.addClass('show-search');
}
});
if( EM.search_term_placeholder ){
if( 'placeholder' in document.createElement('input') ){
$('input.em-events-search-text, input.em-search-text').attr('placeholder', EM.search_term_placeholder);
}else{
$('input.em-events-search-text, input.em-search-text').blur(function(){
if( this.value=='' ) this.value = EM.search_term_placeholder;
}).focus(function(){
if( this.value == EM.search_term_placeholder ) this.value='';
}).trigger('blur');
}
}
$('.em-search-form select[name=country]').change( function(){
var el = $(this);
$('.em-search select[name=state]').html('');
$('.em-search select[name=region]').html('');
$('.em-search select[name=town]').html('');
if( el.val() != '' ){
el.closest('.em-search-location').find('.em-search-location-meta').slideDown();
var data = {
action : 'search_states',
country : el.val(),
return_html : true
};
$('.em-search select[name=state]').load( EM.ajaxurl, data );
data.action = 'search_regions';
$('.em-search select[name=region]').load( EM.ajaxurl, data );
data.action = 'search_towns';
$('.em-search select[name=town]').load( EM.ajaxurl, data );
}else{
el.closest('.em-search-location').find('.em-search-location-meta').slideUp();
}
});
$('.em-search-form select[name=region]').change( function(){
$('.em-search select[name=state]').html('');
$('.em-search select[name=town]').html('');
var data = {
action : 'search_states',
region : $(this).val(),
country : $('.em-search-form select[name=country]').val(),
return_html : true
};
$('.em-search select[name=state]').load( EM.ajaxurl, data );
data.action = 'search_towns';
$('.em-search select[name=town]').load( EM.ajaxurl, data );
});
$('.em-search-form select[name=state]').change( function(){
$('.em-search select[name=town]').html('');
var data = {
action : 'search_towns',
state : $(this).val(),
region : $('.em-search-form select[name=region]').val(),
country : $('.em-search-form select[name=country]').val(),
return_html : true
};
$('.em-search select[name=town]').load( EM.ajaxurl, data );
});
//in order for this to work, you need the above classes to be present in your templates
$(document).on('submit', '.em-search-form, .em-events-search-form', function(e){
var form = $(this);
if( this.em_search && this.em_search.value == EM.txt_search){ this.em_search.value = ''; }
var results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax');
if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax');
if( results_wrapper.length > 0 ){
results_wrapper.append('');
var submitButton = form.find('.em-search-submit');
submitButton.data('buttonText', submitButton.val()).val(EM.txt_searching);
var img = submitButton.children('img');
if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-mag.png', 'search-loading.gif'));
var vars = form.serialize();
$.ajax( EM.ajaxurl, {
type : 'POST',
dataType : 'html',
data : vars,
success : function(responseText){
submitButton.val(submitButton.data('buttonText'));
if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-loading.gif', 'search-mag.png'));
results_wrapper.replaceWith(responseText);
if( form.find('input[name=em_search]').val() == '' ){ form.find('input[name=em_search]').val(EM.txt_search); }
//reload results_wrapper
results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax');
if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax');
jQuery(document).triggerHandler('em_search_ajax', [vars, results_wrapper, e]); //ajax has loaded new results
}
});
e.preventDefault();
return false;
}
});
if( $('.em-search-ajax').length > 0 ){
$(document).on('click', '.em-search-ajax a.page-numbers', function(e){
var a = $(this);
var data = a.closest('.em-pagination').attr('data-em-ajax');
var wrapper = a.closest('.em-search-ajax');
var wrapper_parent = wrapper.parent();
var qvars = a.attr('href').split('?');
var vars = qvars[1];
//add data-em-ajax att if it exists
if( data != '' ){
vars = vars != '' ? vars+'&'+data : data;
}
wrapper.append('');
$.ajax( EM.ajaxurl, {
type : 'POST',
dataType : 'html',
data : vars,
success : function(responseText) {
wrapper.replaceWith(responseText);
wrapper = wrapper_parent.find('.em-search-ajax');
jQuery(document).triggerHandler('em_search_ajax', [vars, wrapper, e]); //ajax has loaded new results
}
});
e.preventDefault();
return false;
});
}
/*
* ADMIN AREA AND PUBLIC FORMS (Still polishing this section up, note that form ids and classes may change accordingly)
*/
//Events List
//Approve/Reject Links
$('.events-table').on('click', '.em-event-delete', function(){
if( !confirm("Are you sure you want to delete?") ){ return false; }
window.location.href = this.href;
});
//Forms
$('#event-form #event-image-delete, #location-form #location-image-delete').on('click', function(){
var el = $(this);
if( el.is(':checked') ){
el.closest('.event-form-image, .location-form-image').find('#event-image-img, #location-image-img').hide();
}else{
el.closest('.event-form-image, .location-form-image').find('#event-image-img, #location-image-img').show();
}
});
//Event Editor
//Recurrence Warnings
$('#event-form.em-event-admin-recurring').submit( function(event){
var form = $(this);
if( form.find('input[name="event_reschedule"]').first().val() == 1 ){
var warning_text = EM.event_reschedule_warning;
}else if( form.find('input[name="event_recreate_tickets"]').first().val() == 1 ){
var warning_text = EM.event_recurrence_bookings;
}else{
var warning_text = EM.event_recurrence_overwrite;
}
confirmation = confirm(warning_text);
if( confirmation == false ){
event.preventDefault();
}
});
//Buttons for recurrence warnings within event editor forms
$('.em-reschedule-trigger').click(function(e){
e.preventDefault();
var trigger = $(this);
trigger.closest('.em-recurrence-reschedule').find(trigger.data('target')).removeClass('reschedule-hidden');
trigger.siblings('.em-reschedule-value').val(1);
trigger.addClass('reschedule-hidden').siblings('a').removeClass('reschedule-hidden');
});
$('.em-reschedule-cancel').click(function(e){
e.preventDefault();
var trigger = $(this);
trigger.closest('.em-recurrence-reschedule').find(trigger.data('target')).addClass('reschedule-hidden');
trigger.siblings('.em-reschedule-value').val(0);
trigger.addClass('reschedule-hidden').siblings('a').removeClass('reschedule-hidden');
});
//Tickets & Bookings
if( $("#em-tickets-form").length > 0 ){
//Enable/Disable Bookings
$('#event-rsvp').click( function(event){
if( !this.checked ){
confirmation = confirm(EM.disable_bookings_warning);
if( confirmation == false ){
event.preventDefault();
}else{
$('#event-rsvp-options').hide();
}
}else{
$('#event-rsvp-options').fadeIn();
}
});
if($('input#event-rsvp').is(":checked")) {
$("div#rsvp-data").fadeIn();
} else {
$("div#rsvp-data").hide();
}
//Ticket(s) UI
var reset_ticket_forms = function(){
$('#em-tickets-form table tbody tr.em-tickets-row').show();
$('#em-tickets-form table tbody tr.em-tickets-row-form').hide();
};
//recurrences and cut-off logic for ticket availability
if( $('#em-recurrence-checkbox').length > 0 ){
$('#em-recurrence-checkbox').change(function(){
if( $('#em-recurrence-checkbox').is(':checked') ){
$('#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring').show();
$('#em-tickets-form .ticket-dates-from-normal, #em-tickets-form .ticket-dates-to-normal, #event-rsvp-options .em-booking-date-normal, #em-tickets-form .hidden').hide();
}else{
$('#em-tickets-form .ticket-dates-from-normal, #em-tickets-form .ticket-dates-to-normal, #event-rsvp-options .em-booking-date-normal').show();
$('#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring, #em-tickets-form .hidden').hide();
}
}).trigger('change');
}else if( $('#em-form-recurrence').length > 0 ){
$('#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring').show();
$('#em-tickets-form .ticket-dates-from-normal, #em-tickets-form .ticket-dates-to-normal, #event-rsvp-options .em-booking-date-normal, #em-tickets-form .hidden').hide();
}else{
$('#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring, #em-tickets-form .hidden').hide();
}
//Add a new ticket
$("#em-tickets-add").click(function(e){
e.preventDefault();
reset_ticket_forms();
//create copy of template slot, insert so ready for population
var tickets = $('#em-tickets-form table tbody');
var rowNo = tickets.length+1;
var slot = tickets.first('.em-ticket-template').clone(true).attr('id','em-ticket-'+ rowNo).removeClass('em-ticket-template').addClass('em-ticket').appendTo($('#em-tickets-form table'));
//change the index of the form element names
slot.find('*[name]').each( function(index,el){
el = $(el);
el.attr('name', el.attr('name').replace('em_tickets[0]','em_tickets['+rowNo+']'));
});
//show ticket and switch to editor
slot.show().find('.ticket-actions-edit').trigger('click');
//refresh datepicker and values
slot.find('.em-date-input-loc').datepicker('destroy').removeAttr('id'); //clear all datepickers
slot.find('.em-time-input').unbind().each(function(index, el){ this.timePicker = false; }); //clear all timepickers - consequently, also other click/blur/change events, recreate the further down
em_setup_datepicker(slot);
em_setup_timepicker(slot);
$('html, body').animate({ scrollTop: slot.offset().top - 30 }); //sends user to form
check_ticket_sortability();
});
//Edit a Ticket
$(document).on('click', '.ticket-actions-edit', function(e){
e.preventDefault();
reset_ticket_forms();
var tbody = $(this).closest('tbody');
tbody.find('tr.em-tickets-row').hide();
tbody.find('tr.em-tickets-row-form').fadeIn();
return false;
});
$(document).on('click', '.ticket-actions-edited', function(e){
e.preventDefault();
var tbody = $(this).closest('tbody');
var rowNo = tbody.attr('id').replace('em-ticket-','');
tbody.find('.em-tickets-row').fadeIn();
tbody.find('.em-tickets-row-form').hide();
tbody.find('*[name]').each(function(index,el){
el = $(el);
if( el.attr('name') == 'ticket_start_pub'){
tbody.find('span.ticket_start').text(el.val());
}else if( el.attr('name') == 'ticket_end_pub' ){
tbody.find('span.ticket_end').text(el.val());
}else if( el.attr('name') == 'em_tickets['+rowNo+'][ticket_type]' ){
if( el.find(':selected').val() == 'members' ){
tbody.find('span.ticket_name').prepend('* ');
}
}else if( el.attr('name') == 'em_tickets['+rowNo+'][ticket_start_recurring_days]' ){
var text = tbody.find('select.ticket-dates-from-recurring-when').val() == 'before' ? '-'+el.val():el.val();
if( el.val() != '' ){
tbody.find('span.ticket_start_recurring_days').text(text);
tbody.find('span.ticket_start_recurring_days_text, span.ticket_start_time').removeClass('hidden').show();
}else{
tbody.find('span.ticket_start_recurring_days').text(' - ');
tbody.find('span.ticket_start_recurring_days_text, span.ticket_start_time').removeClass('hidden').hide();
}
}else if( el.attr('name') == 'em_tickets['+rowNo+'][ticket_end_recurring_days]' ){
var text = tbody.find('select.ticket-dates-to-recurring-when').val() == 'before' ? '-'+el.val():el.val();
if( el.val() != '' ){
tbody.find('span.ticket_end_recurring_days').text(text);
tbody.find('span.ticket_end_recurring_days_text, span.ticket_end_time').removeClass('hidden').show();
}else{
tbody.find('span.ticket_end_recurring_days').text(' - ');
tbody.find('span.ticket_end_recurring_days_text, span.ticket_end_time').removeClass('hidden').hide();
}
}else{
var classname = el.attr('name').replace('em_tickets['+rowNo+'][','').replace(']','').replace('[]','');
tbody.find('.em-tickets-row .'+classname).text(el.val());
}
});
//allow for others to hook into this
$(document).triggerHandler('em_maps_tickets_edit', [tbody, rowNo, true]);
$('html, body').animate({ scrollTop: tbody.parent().offset().top - 30 }); //sends user back to top of form
return false;
});
$(document).on('change', '.em-ticket-form select.ticket_type', function(e){
//check if ticket is for all users or members, if members, show roles to limit the ticket to
var el = $(this);
if( el.find('option:selected').val() == 'members' ){
el.closest('.em-ticket-form').find('.ticket-roles').fadeIn();
}else{
el.closest('.em-ticket-form').find('.ticket-roles').hide();
}
});
$(document).on('click', '.em-ticket-form .ticket-options-advanced', function(e){
//show or hide advanced tickets, hidden by default
e.preventDefault();
var el = $(this);
if( el.hasClass('show') ){
el.closest('.em-ticket-form').find('.em-ticket-form-advanced').fadeIn();
el.find('.show,.show-advanced').hide();
el.find('.hide,.hide-advanced').show();
}else{
el.closest('.em-ticket-form').find('.em-ticket-form-advanced').hide();
el.find('.show,.show-advanced').show();
el.find('.hide,.hide-advanced').hide();
}
el.toggleClass('show');
});
$('.em-ticket-form').each( function(){
//check whether to show advanced options or not by default for each ticket
var show_advanced = false;
var el = $(this);
el.find('.em-ticket-form-advanced input[type="text"]').each(function(){ if(this.value != '') show_advanced = true; });
if( el.find('.em-ticket-form-advanced input[type="checkbox"]:checked').length > 0 ){ show_advanced = true; }
el.find('.em-ticket-form-advanced option:selected').each(function(){ if(this.value != '') show_advanced = true; });
if( show_advanced ) el.find('.ticket-options-advanced').trigger('click');
});
//Delete a ticket
$(document).on('click', '.ticket-actions-delete', function(e){
e.preventDefault();
var el = $(this);
var tbody = el.closest('tbody');
if( tbody.find('input.ticket_id').val() > 0 ){
//only will happen if no bookings made
el.text('Deleting...');
$.getJSON( $(this).attr('href'), {'em_ajax_action':'delete_ticket', 'id':tbody.find('input.ticket_id').val()}, function(data){
if(data.result){
tbody.remove();
}else{
el.text('Delete');
alert(data.error);
}
});
}else{
//not saved to db yet, so just remove
tbody.remove();
}
check_ticket_sortability();
return false;
});
//Sort Tickets
$('#em-tickets-form.em-tickets-sortable table').sortable({
items: '> tbody',
placeholder: "em-ticket-sortable-placeholder",
handle:'.ticket-status',
helper: function( event, el ){
var helper = $(el).clone().addClass('em-ticket-sortable-helper');
var tds = helper.find('.em-tickets-row td').length;
helper.children().remove();
helper.append(' |
');
return helper;
},
});
var check_ticket_sortability = function(){
var em_tickets = $('#em-tickets-form table tbody.em-ticket');
if( em_tickets.length == 1 ){
em_tickets.find('.ticket-status').addClass('single');
$('#em-tickets-form.em-tickets-sortable table').sortable( "option", "disabled", true );
}else{
em_tickets.find('.ticket-status').removeClass('single');
$('#em-tickets-form.em-tickets-sortable table').sortable( "option", "disabled", false );
}
};
check_ticket_sortability();
}
//Manageing Bookings
if( $('#em-bookings-table').length > 0 ){
//Pagination link clicks
$(document).on('click', '#em-bookings-table .tablenav-pages a', function(){
var el = $(this);
var form = el.parents('#em-bookings-table form.bookings-filter');
//get page no from url, change page, submit form
var match = el.attr('href').match(/#[0-9]+/);
if( match != null && match.length > 0){
var pno = match[0].replace('#','');
form.find('input[name=pno]').val(pno);
}else{
form.find('input[name=pno]').val(1);
}
form.trigger('submit');
return false;
});
//Overlay Options
var em_bookings_settings_dialog = {
modal : true,
autoOpen: false,
minWidth: 500,
height: 'auto',
buttons: [{
text: EM.bookings_settings_save,
click: function(e){
e.preventDefault();
//we know we'll deal with cols, so wipe hidden value from main
var match = $("#em-bookings-table form.bookings-filter [name=cols]").val('');
var booking_form_cols = $('form#em-bookings-table-settings-form input.em-bookings-col-item');
$.each( booking_form_cols, function(i,item_match){
//item_match = $(item_match);
if( item_match.value == 1 ){
if( match.val() != ''){
match.val(match.val()+','+item_match.name);
}else{
match.val(item_match.name);
}
}
});
//submit main form
$('#em-bookings-table-settings').trigger('submitted'); //hook into this with bind()
$('#em-bookings-table form.bookings-filter').trigger('submit');
$(this).dialog('close');
}
}]
};
var em_bookings_export_dialog = {
modal : true,
autoOpen: false,
minWidth: 500,
height: 'auto',
buttons: [{
text: EM.bookings_export_save,
click: function(e){
$(this).children('form').submit();
$(this).dialog('close');
}
}]
};
if( $("#em-bookings-table-settings").length > 0 ){
//Settings Overlay
$("#em-bookings-table-settings").dialog(em_bookings_settings_dialog);
$(document).on('click', '#em-bookings-table-settings-trigger', function(e){ e.preventDefault(); $("#em-bookings-table-settings").dialog('open'); });
//Export Overlay
$("#em-bookings-table-export").dialog(em_bookings_export_dialog);
$(document).on('click', '#em-bookings-table-export-trigger', function(e){ e.preventDefault(); $("#em-bookings-table-export").dialog('open'); });
var export_overlay_show_tickets = function(){
if( $('#em-bookings-table-export-form input[name=show_tickets]').is(':checked') ){
$('#em-bookings-table-export-form .em-bookings-col-item-ticket').show();
$('#em-bookings-table-export-form #em-bookings-export-cols-active .em-bookings-col-item-ticket input').val(1);
}else{
$('#em-bookings-table-export-form .em-bookings-col-item-ticket').hide().find('input').val(0);
}
};
//Sync export overlay with table search field changes
$('#em-bookings-table form select').each(function(i, el){
$(el).change(function(e){
var select_el = $(this);
var input_par = $('#em-bookings-table-export-form input[name='+select_el.attr('name')+']');
var input_par_selected = select_el.find('option:selected');
input_par.val(input_par_selected.val());
});
});
export_overlay_show_tickets();
$('#em-bookings-table-export-form input[name=show_tickets]').click(export_overlay_show_tickets);
//Sortables
$( ".em-bookings-cols-sortable" ).sortable({
connectWith: ".em-bookings-cols-sortable",
update: function(event, ui) {
if( ui.item.parents('ul#em-bookings-cols-active, ul#em-bookings-export-cols-active').length > 0 ){
ui.item.addClass('ui-state-highlight').removeClass('ui-state-default').children('input').val(1);
}else{
ui.item.addClass('ui-state-default').removeClass('ui-state-highlight').children('input').val(0);
}
}
}).disableSelection();
load_ui_css = true;
}
//Widgets and filter submissions
$(document).on('submit', '#em-bookings-table form.bookings-filter', function(e){
var el = $(this);
//append loading spinner
el.parents('#em-bookings-table').find('.table-wrap').first().append('');
//ajax call
$.post( EM.ajaxurl, el.serializeArray(), function(data){
var root = el.parents('#em-bookings-table').first();
root.replaceWith(data);
//recreate overlays
$('#em-bookings-table-export input[name=scope]').val(root.find('select[name=scope]').val());
$('#em-bookings-table-export input[name=status]').val(root.find('select[name=status]').val());
jQuery(document).triggerHandler('em_bookings_filtered', [data, root, el]);
});
return false;
});
//Approve/Reject Links
$(document).on('click', '.em-bookings-approve,.em-bookings-reject,.em-bookings-unapprove,.em-bookings-delete', function(){
var el = $(this);
if( el.hasClass('em-bookings-delete') ){
if( !confirm(EM.booking_delete) ){ return false; }
}
var url = em_ajaxify( el.attr('href'));
var td = el.parents('td').first();
td.html(EM.txt_loading);
td.load( url );
return false;
});
}
//Old Bookings Table - depreciating soon
if( $('.em_bookings_events_table').length > 0 ){
//Widgets and filter submissions
$(document).on('submit', '.em_bookings_events_table form', function(e){
var el = $(this);
var url = em_ajaxify( el.attr('action') );
el.parents('.em_bookings_events_table').find('.table-wrap').first().append('');
$.get( url, el.serializeArray(), function(data){
el.parents('.em_bookings_events_table').first().replaceWith(data);
});
return false;
});
//Pagination link clicks
$(document).on('click', '.em_bookings_events_table .tablenav-pages a', function(){
var el = $(this);
var url = em_ajaxify( el.attr('href') );
el.parents('.em_bookings_events_table').find('.table-wrap').first().append('');
$.get( url, function(data){
el.parents('.em_bookings_events_table').first().replaceWith(data);
});
return false;
});
}
//Manual Booking
$(document).on('click', 'a.em-booking-button', function(e){
e.preventDefault();
var button = $(this);
if( button.text() != EM.bb_booked && $(this).text() != EM.bb_booking){
button.text(EM.bb_booking);
var button_data = button.attr('id').split('_');
$.ajax({
url: EM.ajaxurl,
dataType: 'jsonp',
data: {
event_id : button_data[1],
_wpnonce : button_data[2],
action : 'booking_add_one'
},
success : function(response, statusText, xhr, $form) {
if(response.result){
button.text(EM.bb_booked);
}else{
button.text(EM.bb_error);
}
if(response.message != '') alert(response.message);
$(document).triggerHandler('em_booking_button_response', [response, button]);
},
error : function(){ button.text(EM.bb_error); }
});
}
return false;
});
$(document).on('click', 'a.em-cancel-button', function(e){
e.preventDefault();
var button = $(this);
if( button.text() != EM.bb_cancelled && button.text() != EM.bb_canceling){
button.text(EM.bb_canceling);
var button_data = button.attr('id').split('_');
$.ajax({
url: EM.ajaxurl,
dataType: 'jsonp',
data: {
booking_id : button_data[1],
_wpnonce : button_data[2],
action : 'booking_cancel'
},
success : function(response, statusText, xhr, $form) {
if(response.result){
button.text(EM.bb_cancelled);
}else{
button.text(EM.bb_cancel_error);
}
},
error : function(){ button.text(EM.bb_cancel_error); }
});
}
return false;
});
//Datepicker
if( $('.em-date-single, .em-date-range, #em-date-start').length > 0 ){
load_ui_css = true;
em_setup_datepicker('body');
}
if( load_ui_css ) em_load_jquery_css();
//previously in em-admin.php
function updateIntervalDescriptor () {
$(".interval-desc").hide();
var number = "-plural";
if ($('input#recurrence-interval').val() == 1 || $('input#recurrence-interval').val() == "")
number = "-singular";
var descriptor = "span#interval-"+$("select#recurrence-frequency").val()+number;
$(descriptor).show();
}
function updateIntervalSelectors () {
$('p.alternate-selector').hide();
$('p#'+ $('select#recurrence-frequency').val() + "-selector").show();
}
function updateShowHideRecurrence () {
if( $('input#event-recurrence').is(":checked")) {
$("#event_recurrence_pattern").fadeIn();
$("#event-date-explanation").hide();
$("#recurrence-dates-explanation").show();
$("h3#recurrence-dates-title").show();
$("h3#event-date-title").hide();
} else {
$("#event_recurrence_pattern").hide();
$("#recurrence-dates-explanation").hide();
$("#event-date-explanation").show();
$("h3#recurrence-dates-title").hide();
$("h3#event-date-title").show();
}
}
$("#recurrence-dates-explanation").hide();
$("#date-to-submit").hide();
$("#end-date-to-submit").hide();
$("#localised-date").show();
$("#localised-end-date").show();
$('#em-wrapper input.select-all').change(function(){
if($(this).is(':checked')){
$('input.row-selector').prop('checked', true);
$('input.select-all').prop('checked', true);
}else{
$('input.row-selector').prop('checked', false);
$('input.select-all').prop('checked', false);
}
});
updateIntervalDescriptor();
updateIntervalSelectors();
updateShowHideRecurrence();
$('input#event-recurrence').change(updateShowHideRecurrence);
// recurrency elements
$('input#recurrence-interval').keyup(updateIntervalDescriptor);
$('select#recurrence-frequency').change(updateIntervalDescriptor);
$('select#recurrence-frequency').change(updateIntervalSelectors);
/* Load any maps */
if( $('.em-location-map').length > 0 || $('.em-locations-map').length > 0 || $('#em-map').length > 0 || $('.em-search-geo').length > 0 ){
em_maps_load();
}
/* Location Type Selection */
$('.em-location-types .em-location-types-select').change(function(){
let el = $(this);
if( el.val() == 0 ){
$('.em-location-type').hide();
}else{
let location_type = el.find('option:selected').data('display-class');
$('.em-location-type').hide();
$('.em-location-type.'+location_type).show();
if( location_type != 'em-location-type-place' ){
jQuery('#em-location-reset a').trigger('click');
}
}
if( el.data('active') !== '' && el.val() !== el.data('active') ){
$('.em-location-type-delete-active-alert').hide();
$('.em-location-type-delete-active-alert').show();
}else{
$('.em-location-type-delete-active-alert').hide();
}
}).trigger('change');
//Finally, add autocomplete here
//Autocomplete
if( jQuery( "div.em-location-data input#location-name" ).length > 0 ){
jQuery( "div.em-location-data input#location-name" ).autocomplete({
source: EM.locationajaxurl,
minLength: 2,
focus: function( event, ui ){
jQuery("input#location-id" ).val( ui.item.value );
return false;
},
select: function( event, ui ){
jQuery("input#location-id" ).val(ui.item.id).trigger('change');
jQuery("input#location-name" ).val(ui.item.value);
jQuery('input#location-address').val(ui.item.address);
jQuery('input#location-town').val(ui.item.town);
jQuery('input#location-state').val(ui.item.state);
jQuery('input#location-region').val(ui.item.region);
jQuery('input#location-postcode').val(ui.item.postcode);
jQuery('input#location-latitude').val(ui.item.latitude);
jQuery('input#location-longitude').val(ui.item.longitude);
if( ui.item.country == '' ){
jQuery('select#location-country option:selected').removeAttr('selected');
}else{
jQuery('select#location-country option[value="'+ui.item.country+'"]').attr('selected', 'selected');
}
jQuery('div.em-location-data input').css('background-color','#ccc').prop('readonly', true);
jQuery('div.em-location-data select').css('background-color','#ccc').css('color', '#666666').prop('disabled', true);
jQuery('#em-location-reset').show();
jQuery('#em-location-search-tip').hide();
jQuery(document).triggerHandler('em_locations_autocomplete_selected', [event, ui]);
return false;
}
}).data( "ui-autocomplete" )._renderItem = function( ul, item ) {
html_val = "" + em_esc_attr(item.label) + '
'+ em_esc_attr(item.address) + ', ' + em_esc_attr(item.town)+"";
return jQuery( "" ).data( "item.autocomplete", item ).append(html_val).appendTo( ul );
};
jQuery('#em-location-reset a').click( function(){
jQuery('div.em-location-data input').css('background-color','#fff').val('').prop('readonly', false);
jQuery('div.em-location-data select').css('background-color','#fff').css('color', 'auto').prop('disabled', false);
jQuery('div.em-location-data option:selected').removeAttr('selected');
jQuery('input#location-id').val('');
jQuery('#em-location-reset').hide();
jQuery('#em-location-search-tip').show();
jQuery('#em-map').hide();
jQuery('#em-map-404').show();
if(typeof(marker) !== 'undefined'){
marker.setPosition(new google.maps.LatLng(0, 0));
infoWindow.close();
marker.setDraggable(true);
}
return false;
});
if( jQuery('input#location-id').val() != '0' && jQuery('input#location-id').val() != '' ){
jQuery('div.em-location-data input').css('background-color','#ccc').prop('readonly', true);
jQuery('div.em-location-data select').css('background-color','#ccc').css('color', '#666666').prop('disabled', true);
jQuery('#em-location-reset').show();
jQuery('#em-location-search-tip').hide();
}
}
/* Local JS Timezone related placeholders */
/* Moment JS Timzeone PH */
if( window.moment ){
var replace_specials = function( day, string ){
// replace things not supported by moment
string = string.replace(/##T/g, Intl.DateTimeFormat().resolvedOptions().timeZone);
string = string.replace(/#T/g, "GMT"+day.format('Z'));
string = string.replace(/###t/g, day.utcOffset()*-60);
string = string.replace(/##t/g, day.isDST());
string = string.replace(/#t/g, day.daysInMonth());
return string;
};
$('.em-date-momentjs').each( function(){
// Start Date
var el = $(this);
var day_start = moment.unix(el.data('date-start'));
var date_start_string = replace_specials(day_start, day_start.format(el.data('date-format')));
if( el.data('date-start') !== el.data('date-end') ){
// End Date
var day_end = moment.unix(el.data('date-end'));
var day_end_string = replace_specials(day_start, day_end.format(el.data('date-format')));
// Output
var date_string = date_start_string + el.data('date-separator') + day_end_string;
}else{
var date_string = date_start_string;
}
el.text(date_string);
});
var get_date_string = function(ts, format){
let date = new Date(ts * 1000);
let minutes = date.getMinutes();
if( format == 24 ){
let hours = date.getHours();
hours = hours < 10 ? '0' + hours : hours;
minutes = minutes < 10 ? '0' + minutes : minutes;
return hours + ':' + minutes;
}else{
let hours = date.getHours() % 12;
let ampm = hours >= 12 ? 'PM' : 'AM';
if( hours === 0 ) hours = 12; // the hour '0' should be '12'
minutes = minutes < 10 ? '0'+minutes : minutes;
return hours + ':' + minutes + ' ' + ampm;
}
}
$('.em-time-localjs').each( function(){
var el = $(this);
var strTime = get_date_string( el.data('time'), el.data('time-format') );
if( el.data('time-end') ){
var separator = el.data('time-separator') ? el.data('time-separator') : ' - ';
strTime = strTime + separator + get_date_string( el.data('time-end'), el.data('time-format') );
}
el.text(strTime);
});
}
/* Done! */
jQuery(document).triggerHandler('em_javascript_loaded');
});
function em_load_jquery_css(){
if( EM.ui_css && jQuery('link#jquery-ui-css').length == 0 ){
var script = document.createElement("link");
script.id = 'jquery-ui-css';
script.rel = "stylesheet";
script.href = EM.ui_css;
document.body.appendChild(script);
}
}
function em_setup_datepicker(wrap){
wrap = jQuery(wrap);
//default picker vals
var datepicker_vals = { altFormat: "yy-mm-dd", changeMonth: true, changeYear: true, firstDay : EM.firstDay, yearRange:'c-100:c+15' };
if( EM.dateFormat ) datepicker_vals.dateFormat = EM.dateFormat;
if( EM.yearRange ) datepicker_vals.yearRange = EM.yearRange;
jQuery(document).triggerHandler('em_datepicker', datepicker_vals);
//apply datepickers
dateDivs = wrap.find('.em-date-single, .em-date-range');
if( dateDivs.length > 0 ){
//apply datepickers to elements
dateDivs.find('input.em-date-input-loc').each(function(i,dateInput){
//init the datepicker
var dateInput = jQuery(dateInput);
var dateValue = dateInput.nextAll('input.em-date-input').first();
var dateValue_value = dateValue.val();
dateInput.datepicker(datepicker_vals);
dateInput.datepicker('option', 'altField', dateValue);
//now set the value
if( dateValue_value ){
var this_date_formatted = jQuery.datepicker.formatDate( EM.dateFormat, jQuery.datepicker.parseDate('yy-mm-dd', dateValue_value) );
dateInput.val(this_date_formatted);
dateValue.val(dateValue_value);
}
//add logic for texts
dateInput.change(function(){
if( jQuery(this).val() == '' ){
jQuery(this).nextAll('.em-date-input').first().val('');
}
});
});
//deal with date ranges
dateDivs.filter('.em-date-range').find('input.em-date-input-loc').each(function(i,dateInput){
//finally, apply start/end logic to this field
dateInput = jQuery(dateInput);
if( dateInput.hasClass('em-date-start') ){
dateInput.datepicker('option','onSelect', function( selectedDate ) {
//get corresponding end date input, we expect ranges to be contained in .em-date-range with a start/end input element
var startDate = jQuery(this);
var endDate = startDate.parents('.em-date-range').find('.em-date-end').first();
var startValue = startDate.nextAll('input.em-date-input').first().val();
var endValue = endDate.nextAll('input.em-date-input').first().val();
startDate.trigger('em_datepicker_change');
if( startValue > endValue && endValue != '' ){
endDate.datepicker( "setDate" , selectedDate );
endDate.trigger('change').trigger('em_datepicker_change');
}
endDate.datepicker( "option", 'minDate', selectedDate );
});
}else if( dateInput.hasClass('em-date-end') ){
var startInput = dateInput.parents('.em-date-range').find('.em-date-start').first();
if( startInput.val() != '' ){
dateInput.datepicker('option', 'minDate', startInput.val());
}
}
});
}
}
function em_setup_timepicker(wrap){
wrap = jQuery(wrap);
var timepicker_options = {
show24Hours: EM.show24hours == 1,
step:15
}
jQuery(document).triggerHandler('em_timepicker_options', timepicker_options);
wrap.find(".em-time-input").timePicker(timepicker_options);
// Keep the duration between the two inputs.
wrap.find(".em-time-range input.em-time-start").each( function(i, el){
jQuery(el).data('oldTime', jQuery.timePicker(el).getTime());
}).change( function() {
var start = jQuery(this);
var end = start.nextAll('.em-time-end');
if (end.val()) { // Only update when second input has a value.
// Calculate duration.
var oldTime = start.data('oldTime');
var duration = (jQuery.timePicker(end).getTime() - oldTime);
var time = jQuery.timePicker(start).getTime();
if( jQuery.timePicker(end).getTime() >= oldTime ){
// Calculate and update the time in the second input.
jQuery.timePicker(end).setTime(new Date(new Date(time.getTime() + duration)));
}
start.data('oldTime', time);
}
});
// Validate.
wrap.find(".em-time-range input.em-time-end").change(function() {
var end = jQuery(this);
var start = end.prevAll('.em-time-start');
if( start.val() ){
if( jQuery.timePicker(start).getTime() > jQuery.timePicker(this).getTime() && ( jQuery('.em-date-end').val().length == 0 || jQuery('.em-date-start').val() == jQuery('.em-date-end').val() ) ) { end.addClass("error"); }
else { end.removeClass("error"); }
}
});
//Sort out all day checkbox
wrap.find('.em-time-range input.em-time-all-day').change(function(){
var allday = jQuery(this);
if( allday.is(':checked') ){
allday.siblings('.em-time-input').css('background-color','#ccc');
}else{
allday.siblings('.em-time-input').css('background-color','#fff');
}
}).trigger('change');
}
/* Useful function for adding the em_ajax flag to a url, regardless of querystring format */
var em_ajaxify = function(url){
if ( url.search('em_ajax=0') != -1){
url = url.replace('em_ajax=0','em_ajax=1');
}else if( url.search(/\?/) != -1 ){
url = url + "&em_ajax=1";
}else{
url = url + "?em_ajax=1";
}
return url;
};
/*
* MAP FUNCTIONS
*/
var em_maps_loaded = false;
var maps = {};
var maps_markers = {};
var infoWindow;
//loads maps script if not already loaded and executes EM maps script
function em_maps_load(){
if( !em_maps_loaded ){
if ( jQuery('script#google-maps').length == 0 && ( typeof google !== 'object' || typeof google.maps !== 'object' ) ){
var script = document.createElement("script");
script.type = "text/javascript";
script.id = "google-maps";
var proto = (EM.is_ssl) ? 'https:' : 'http:';
if( typeof EM.google_maps_api !== 'undefined' ){
script.src = proto + '//maps.google.com/maps/api/js?v=quarterly&libraries=places&callback=em_maps&key='+EM.google_maps_api;
}else{
script.src = proto + '//maps.google.com/maps/api/js?v=quarterly&libraries=places&callback=em_maps';
}
document.body.appendChild(script);
}else if( typeof google === 'object' && typeof google.maps === 'object' && !em_maps_loaded ){
em_maps();
}else if( jQuery('script#google-maps').length > 0 ){
jQuery(window).load(function(){ if( !em_maps_loaded ) em_maps(); }); //google isn't loaded so wait for page to load resources
}
}
}
//re-usable function to load global location maps
function em_maps_load_locations(el){
var el = jQuery(el);
var map_id = el.attr('id').replace('em-locations-map-','');
var em_data = jQuery.parseJSON( el.nextAll('.em-locations-map-coords').first().text() );
if( em_data == null ){
var em_data = jQuery.parseJSON( jQuery('#em-locations-map-coords-'+map_id).text() );
}
jQuery.getJSON(document.URL, em_data , function(data){
if(data.length > 0){
//define default options and allow option for extension via event triggers
var map_options = { mapTypeId: google.maps.MapTypeId.ROADMAP };
if( typeof EM.google_map_id_styles == 'object' && typeof EM.google_map_id_styles[map_id] !== 'undefined' ){ console.log(EM.google_map_id_styles[map_id]); map_options.styles = EM.google_map_id_styles[map_id]; }
else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
jQuery(document).triggerHandler('em_maps_locations_map_options', map_options);
var marker_options = {};
jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options);
maps[map_id] = new google.maps.Map(el[0], map_options);
maps_markers[map_id] = [];
var bounds = new google.maps.LatLngBounds();
jQuery.map( data, function( location, i ){
if( !(location.location_latitude == 0 && location.location_longitude == 0) ){
var latitude = parseFloat( location.location_latitude );
var longitude = parseFloat( location.location_longitude );
var location_position = new google.maps.LatLng( latitude, longitude );
//extend the default marker options
jQuery.extend(marker_options, {
position: location_position,
map: maps[map_id]
})
var marker = new google.maps.Marker(marker_options);
maps_markers[map_id].push(marker);
marker.setTitle(location.location_name);
var myContent = ''+ location.location_balloon +'
';
em_map_infobox(marker, myContent, maps[map_id]);
//extend bounds
bounds.extend(new google.maps.LatLng(latitude,longitude))
}
});
// Zoom in to the bounds
maps[map_id].fitBounds(bounds);
//Call a hook if exists
jQuery(document).triggerHandler('em_maps_locations_hook', [maps[map_id], data, map_id, maps_markers[map_id]]);
}else{
el.children().first().html('No locations found');
jQuery(document).triggerHandler('em_maps_locations_hook_not_found', [el]);
}
});
}
function em_maps_load_location(el){
el = jQuery(el);
var map_id = el.attr('id').replace('em-location-map-','');
em_LatLng = new google.maps.LatLng( jQuery('#em-location-map-coords-'+map_id+' .lat').text(), jQuery('#em-location-map-coords-'+map_id+' .lng').text());
//extend map and markers via event triggers
var map_options = {
zoom: 14,
center: em_LatLng,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: false,
gestureHandling: 'cooperative'
};
if( typeof EM.google_map_id_styles == 'object' && typeof EM.google_map_id_styles[map_id] !== 'undefined' ){ console.log(EM.google_map_id_styles[map_id]); map_options.styles = EM.google_map_id_styles[map_id]; }
else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
jQuery(document).triggerHandler('em_maps_location_map_options', map_options);
maps[map_id] = new google.maps.Map( document.getElementById('em-location-map-'+map_id), map_options);
var marker_options = {
position: em_LatLng,
map: maps[map_id]
};
jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options);
maps_markers[map_id] = new google.maps.Marker(marker_options);
infoWindow = new google.maps.InfoWindow({ content: jQuery('#em-location-map-info-'+map_id+' .em-map-balloon').get(0) });
infoWindow.open(maps[map_id],maps_markers[map_id]);
maps[map_id].panBy(40,-70);
//JS Hook for handling map after instantiation
//Example hook, which you can add elsewhere in your theme's JS - jQuery(document).bind('em_maps_location_hook', function(){ alert('hi');} );
jQuery(document).triggerHandler('em_maps_location_hook', [maps[map_id], infoWindow, maps_markers[map_id], map_id]);
//map resize listener
jQuery(window).on('resize', function(e) {
google.maps.event.trigger(maps[map_id], "resize");
maps[map_id].setCenter(maps_markers[map_id].getPosition());
maps[map_id].panBy(40,-70);
});
}
jQuery(document).bind('em_search_ajax', function(e, vars, wrapper){
if( em_maps_loaded ){
wrapper.find('.em-location-map').each( function(index, el){ em_maps_load_location(el); } );
wrapper.find('.em-locations-map').each( function(index, el){ em_maps_load_locations(el); });
}
});
//Load single maps (each map is treated as a seperate map).
function em_maps() {
//Find all the maps on this page and load them
jQuery('.em-location-map').each( function(index, el){ em_maps_load_location(el); } );
jQuery('.em-locations-map').each( function(index, el){ em_maps_load_locations(el); } );
//Location stuff - only needed if inputs for location exist
if( jQuery('select#location-select-id, input#location-address').length > 0 ){
var map, marker;
//load map info
var refresh_map_location = function(){
var location_latitude = jQuery('#location-latitude').val();
var location_longitude = jQuery('#location-longitude').val();
if( !(location_latitude == 0 && location_longitude == 0) ){
var position = new google.maps.LatLng(location_latitude, location_longitude); //the location coords
marker.setPosition(position);
var mapTitle = (jQuery('input#location-name').length > 0) ? jQuery('input#location-name').val():jQuery('input#title').val();
mapTitle = em_esc_attr(mapTitle);
marker.setTitle( mapTitle );
jQuery('#em-map').show();
jQuery('#em-map-404').hide();
google.maps.event.trigger(map, 'resize');
map.setCenter(position);
map.panBy(40,-55);
infoWindow.setContent(
'' + mapTitle + '
' +
em_esc_attr(jQuery('#location-address').val()) +
'
' + em_esc_attr(jQuery('#location-town').val()) +
'
'
);
infoWindow.open(map, marker);
jQuery(document).triggerHandler('em_maps_location_hook', [map, infoWindow, marker, 0]);
} else {
jQuery('#em-map').hide();
jQuery('#em-map-404').show();
}
};
//Add listeners for changes to address
var get_map_by_id = function(id){
if(jQuery('#em-map').length > 0){
jQuery.getJSON(document.URL,{ em_ajax_action:'get_location', id:id }, function(data){
if( data.location_latitude!=0 && data.location_longitude!=0 ){
loc_latlng = new google.maps.LatLng(data.location_latitude, data.location_longitude);
marker.setPosition(loc_latlng);
marker.setTitle( data.location_name );
marker.setDraggable(false);
jQuery('#em-map').show();
jQuery('#em-map-404').hide();
map.setCenter(loc_latlng);
map.panBy(40,-55);
infoWindow.setContent( ''+ data.location_balloon +'
');
infoWindow.open(map, marker);
google.maps.event.trigger(map, 'resize');
jQuery(document).triggerHandler('em_maps_location_hook', [map, infoWindow, marker, 0]);
}else{
jQuery('#em-map').hide();
jQuery('#em-map-404').show();
}
});
}
};
jQuery('#location-select-id, input#location-id').change( function(){get_map_by_id(jQuery(this).val());} );
jQuery('#location-name, #location-town, #location-address, #location-state, #location-postcode, #location-country').change( function(){
//build address
if( jQuery(this).prop('readonly') === true ) return;
var addresses = [ jQuery('#location-address').val(), jQuery('#location-town').val(), jQuery('#location-state').val(), jQuery('#location-postcode').val() ];
var address = '';
jQuery.each( addresses, function(i, val){
if( val != '' ){
address = ( address == '' ) ? address+val:address+', '+val;
}
});
if( address == '' ){ //in case only name is entered, no address
jQuery('#em-map').hide();
jQuery('#em-map-404').show();
return false;
}
//do country last, as it's using the text version
if( jQuery('#location-country option:selected').val() != 0 ){
address = ( address == '' ) ? address+jQuery('#location-country option:selected').text():address+', '+jQuery('#location-country option:selected').text();
}
if( address != '' && jQuery('#em-map').length > 0 ){
geocoder.geocode( { 'address': address }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
jQuery('#location-latitude').val(results[0].geometry.location.lat());
jQuery('#location-longitude').val(results[0].geometry.location.lng());
}
refresh_map_location();
});
}
});
//Load map
if(jQuery('#em-map').length > 0){
var em_LatLng = new google.maps.LatLng(0, 0);
var map_options = {
zoom: 14,
center: em_LatLng,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: false,
gestureHandling: 'cooperative'
};
if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
map = new google.maps.Map( document.getElementById('em-map'), map_options);
var marker = new google.maps.Marker({
position: em_LatLng,
map: map,
draggable: true
});
infoWindow = new google.maps.InfoWindow({
content: ''
});
var geocoder = new google.maps.Geocoder();
google.maps.event.addListener(infoWindow, 'domready', function() {
document.getElementById('location-balloon-content').parentNode.style.overflow='';
document.getElementById('location-balloon-content').parentNode.parentNode.style.overflow='';
});
google.maps.event.addListener(marker, 'dragend', function() {
var position = marker.getPosition();
jQuery('#location-latitude').val(position.lat());
jQuery('#location-longitude').val(position.lng());
map.setCenter(position);
map.panBy(40,-55);
});
if( jQuery('#location-select-id').length > 0 ){
jQuery('#location-select-id').trigger('change');
}else{
refresh_map_location();
}
jQuery(document).triggerHandler('em_map_loaded', [map, infoWindow, marker]);
}
//map resize listener
jQuery(window).on('resize', function(e) {
google.maps.event.trigger(map, "resize");
map.setCenter(marker.getPosition());
map.panBy(40,-55);
});
}
em_maps_loaded = true; //maps have been loaded
jQuery(document).triggerHandler('em_maps_loaded');
}
function em_map_infobox(marker, message, map) {
var iw = new google.maps.InfoWindow({ content: message });
google.maps.event.addListener(marker, 'click', function() {
if( infoWindow ) infoWindow.close();
infoWindow = iw;
iw.open(map,marker);
});
}
function em_esc_attr( str ){
if( typeof str !== 'string' ) return '';
return str.replace(//gi,'>');
}
/* jQuery timePicker - http://labs.perifer.se/timedatepicker/ @ http://github.com/perifer/timePicker commit 100644 */
(function(e){function t(t,n,r,i){t.value=e(n).text();e(t).change();if(!navigator.userAgent.match(/msie/i)){t.focus()}r.hide()}function n(e,t){var n=e.getHours();var i=t.show24Hours?n:(n+11)%12+1;var s=e.getMinutes();return r(i)+t.separator+r(s)+(t.show24Hours?"":n<12?" AM":" PM")}function r(e){return(e<10?"0":"")+e}function i(e,t){return typeof e=="object"?o(e):s(e,t)}function s(e,t){if(e){var n=e.split(t.separator);var r=parseFloat(n[0]);var i=parseFloat(n[1]);if(!t.show24Hours){if(r===12&&e.indexOf("AM")!==-1){r=0}else if(r!==12&&e.indexOf("PM")!==-1){r+=12}}var s=new Date(0,0,0,r,i,0);return o(s)}return null}function o(e){e.setFullYear(2001);e.setMonth(0);e.setDate(0);return e}e.fn.timePicker=function(t){var n=e.extend({},e.fn.timePicker.defaults,t);return this.each(function(){e.timePicker(this,n)})};e.timePicker=function(t,n){var r=e(t)[0];return r.timePicker||(r.timePicker=new jQuery._timePicker(r,n))};e.timePicker.version="0.3";e._timePicker=function(r,u){var a=false;var f=false;var l=i(u.startTime,u);var c=i(u.endTime,u);var h="selected";var p="li."+h;e(r).attr("autocomplete","OFF");var d=[];var v=new Date(l);while(v<=c){d[d.length]=n(v,u);v=new Date(v.setMinutes(v.getMinutes()+u.step))}var m=e('');var g=e("");for(var y=0;y"+d[y]+"")}m.append(g);m.appendTo("body").hide();m.mouseover(function(){a=true}).mouseout(function(){a=false});e("li",g).mouseover(function(){if(!f){e(p,m).removeClass(h);e(this).addClass(h)}}).mousedown(function(){a=true}).click(function(){t(r,this,m,u);a=false});var b=function(){if(m.is(":visible")){return false}e("li",m).removeClass(h);var t=e(r).offset();m.css({top:t.top+r.offsetHeight,left:t.left});m.show();var i=r.value?s(r.value,u):l;var a=l.getHours()*60+l.getMinutes();var f=i.getHours()*60+i.getMinutes()-a;var p=Math.round(f/u.step);var d=o(new Date(0,0,0,0,p*u.step+a,0));d=ls+m[0].offsetHeight){m[0].scrollTop=s+a.offsetHeight}}else{i.removeClass(h);a=e("li:first",g).addClass(h)[0];m[0].scrollTop=0}return false;break;case 13:if(m.is(":visible")){var l=e(p,g)[0];t(r,l,m,u)}return false;break;case 27:m.hide();return false;break}return true});e(r).keyup(function(e){f=false});this.getTime=function(){return s(r.value,u)};this.setTime=function(t){r.value=n(i(t,u),u);e(r).change()}};e.fn.timePicker.defaults={step:30,startTime:new Date(0,0,0,0,0,0),endTime:new Date(0,0,0,23,30,0),separator:":",show24Hours:true}})(jQuery);
// source --> https://gl-verleih.de/wp-content/themes/infinity/js/modernizr.js
/*! modernizr 3.3.1 (Custom Build) | MIT *
* https://modernizr.com/download/?-csstransforms3d-csstransitions-touchevents-video-videopreload-addtest-atrule-domprefixes-hasevent-mq-prefixed-prefixedcss-prefixedcssvalue-prefixes-printshiv-setclasses-testallprops-testprop-teststyles !*/
!function(e,t,n){function r(e,t){return typeof e===t}function o(){var e,t,n,o,i,a,s;for(var u in S)if(S.hasOwnProperty(u)){if(e=[],t=S[u],t.name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;nf;f++)if(h=e[f],v=A.style[h],c(h,"-")&&(h=p(h)),A.style[h]!==n){if(i||r(o,"undefined"))return a(),"pfx"==t?h:!0;try{A.style[h]=o}catch(y){}if(A.style[h]!=v)return a(),"pfx"==t?h:!0}return a(),!1}function h(e,t){return function(){return e.apply(t,arguments)}}function v(e,t,n){var o;for(var i in e)if(e[i]in t)return n===!1?e[i]:(o=t[e[i]],r(o,"function")?h(o,n||t):o);return!1}function g(e,t,n,o,i){var a=e.charAt(0).toUpperCase()+e.slice(1),s=(e+" "+P.join(a+" ")+a).split(" ");return r(t,"string")||r(t,"undefined")?m(s,t,o,i):(s=(e+" "+w.join(a+" ")+a).split(" "),v(s,t,n))}function y(e,t,r){return g(e,n,n,t,r)}var S=[],b={_version:"3.3.1",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){S.push({name:e,fn:t,options:n})},addAsyncTest:function(e){S.push({name:null,fn:e})}},Modernizr=function(){};Modernizr.prototype=b,Modernizr=new Modernizr;var E=[],C=t.documentElement,x="svg"===C.nodeName.toLowerCase(),_="Moz O ms Webkit",w=b._config.usePrefixes?_.toLowerCase().split(" "):[];b._domPrefixes=w;var T=b._config.usePrefixes?" -webkit- -moz- -o- -ms- ".split(" "):[];b._prefixes=T;var N;!function(){var e={}.hasOwnProperty;N=r(e,"undefined")||r(e.call,"undefined")?function(e,t){return t in e&&r(e.constructor.prototype[t],"undefined")}:function(t,n){return e.call(t,n)}}(),b._l={},b.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),Modernizr.hasOwnProperty(e)&&setTimeout(function(){Modernizr._trigger(e,Modernizr[e])},0)},b._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e,r;for(e=0;ea;a++){var s=T[a],u=s.toUpperCase()+"_"+r;if(u in i)return"@-"+s.toLowerCase()+"-"+t}return!1};b.atRule=j;var z=function(){function e(e,t){var o;return e?(t&&"string"!=typeof t||(t=s(t||"div")),e="on"+e,o=e in t,!o&&r&&(t.setAttribute||(t=s("div")),t.setAttribute(e,""),o="function"==typeof t[e],t[e]!==n&&(t[e]=n),t.removeAttribute(e)),o):!1}var r=!("onblur"in t.documentElement);return e}();b.hasEvent=z;var $=function(){var t=e.matchMedia||e.msMatchMedia;return t?function(e){var n=t(e);return n&&n.matches||!1}:function(t){var n=!1;return l("@media "+t+" { #modernizr { position: absolute; } }",function(t){n="absolute"==(e.getComputedStyle?e.getComputedStyle(t,null):t.currentStyle).position}),n}}();b.mq=$;var k={elem:s("modernizr")};Modernizr._q.push(function(){delete k.elem});var A={style:k.elem.style};Modernizr._q.unshift(function(){delete A.style}),b.testAllProps=g;var F=b.prefixed=function(e,t,n){return 0===e.indexOf("@")?j(e):(-1!=e.indexOf("-")&&(e=p(e)),t?g(e,t,n):g(e,"pfx"))},L=(b.prefixedCSS=function(e){var t=F(e);return t&&f(t)},function(e,t){var n=!1,r=s("div"),o=r.style;if(e in o){var i=w.length;for(o[e]=t,n=o[e];i--&&!n;)o[e]="-"+w[i]+"-"+t,n=o[e]}return""===n&&(n=!1),n});b.prefixedCSSValue=L,b.testAllProps=y;var M=(b.testProp=function(e,t,r){return m([e],n,t,r)},b.testStyles=l);x||!function(e,t){function n(e,t){var n=e.createElement("p"),r=e.getElementsByTagName("head")[0]||e.documentElement;return n.innerHTML="x",r.insertBefore(n.lastChild,r.firstChild)}function r(){var e=_.elements;return"string"==typeof e?e.split(" "):e}function o(e,t){var n=_.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),_.elements=n+" "+e,l(t)}function i(e){var t=x[e[E]];return t||(t={},C++,e[E]=C,x[C]=t),t}function a(e,n,r){if(n||(n=t),v)return n.createElement(e);r||(r=i(n));var o;return o=r.cache[e]?r.cache[e].cloneNode():b.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e),!o.canHaveChildren||S.test(e)||o.tagUrn?o:r.frag.appendChild(o)}function s(e,n){if(e||(e=t),v)return e.createDocumentFragment();n=n||i(e);for(var o=n.frag.cloneNode(),a=0,s=r(),u=s.length;u>a;a++)o.createElement(s[a]);return o}function u(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return _.shivMethods?a(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(_,t.frag)}function l(e){e||(e=t);var r=i(e);return!_.shivCSS||h||r.hasCSS||(r.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),v||u(e,r),e}function c(e){for(var t,n=e.getElementsByTagName("*"),o=n.length,i=RegExp("^(?:"+r().join("|")+")$","i"),a=[];o--;)t=n[o],i.test(t.nodeName)&&a.push(t.applyElement(f(t)));return a}function f(e){for(var t,n=e.attributes,r=n.length,o=e.ownerDocument.createElement(T+":"+e.nodeName);r--;)t=n[r],t.specified&&o.setAttribute(t.nodeName,t.nodeValue);return o.style.cssText=e.style.cssText,o}function d(e){for(var t,n=e.split("{"),o=n.length,i=RegExp("(^|[\\s,>+~])("+r().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),a="$1"+T+"\\:$2";o--;)t=n[o]=n[o].split("}"),t[t.length-1]=t[t.length-1].replace(i,a),n[o]=t.join("}");return n.join("{")}function p(e){for(var t=e.length;t--;)e[t].removeNode()}function m(e){function t(){clearTimeout(a._removeSheetTimer),r&&r.removeNode(!0),r=null}var r,o,a=i(e),s=e.namespaces,u=e.parentWindow;return!N||e.printShived?e:("undefined"==typeof s[T]&&s.add(T),u.attachEvent("onbeforeprint",function(){t();for(var i,a,s,u=e.styleSheets,l=[],f=u.length,p=Array(f);f--;)p[f]=u[f];for(;s=p.pop();)if(!s.disabled&&w.test(s.media)){try{i=s.imports,a=i.length}catch(m){a=0}for(f=0;a>f;f++)p.push(i[f]);try{l.push(s.cssText)}catch(m){}}l=d(l.reverse().join("")),o=c(e),r=n(e,l)}),u.attachEvent("onafterprint",function(){p(o),clearTimeout(a._removeSheetTimer),a._removeSheetTimer=setTimeout(t,500)}),e.printShived=!0,e)}var h,v,g="3.7.3",y=e.html5||{},S=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,b=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,E="_html5shiv",C=0,x={};!function(){try{var e=t.createElement("a");e.innerHTML="",h="hidden"in e,v=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){h=!0,v=!0}}();var _={elements:y.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:g,shivCSS:y.shivCSS!==!1,supportsUnknownElements:v,shivMethods:y.shivMethods!==!1,type:"default",shivDocument:l,createElement:a,createDocumentFragment:s,addElements:o};e.html5=_,l(t);var w=/^$|\b(?:all|print)\b/,T="html5shiv",N=!v&&function(){var n=t.documentElement;return!("undefined"==typeof t.namespaces||"undefined"==typeof t.parentWindow||"undefined"==typeof n.applyElement||"undefined"==typeof n.removeNode||"undefined"==typeof e.attachEvent)}();_.type+=" print",_.shivPrint=m,m(t),"object"==typeof module&&module.exports&&(module.exports=_)}("undefined"!=typeof e?e:this,t),Modernizr.addTest("touchevents",function(){var n;if("ontouchstart"in e||e.DocumentTouch&&t instanceof DocumentTouch)n=!0;else{var r=["@media (",T.join("touch-enabled),("),"heartz",")","{#modernizr{top:9px;position:absolute}}"].join("");M(r,function(e){n=9===e.offsetTop})}return n}),Modernizr.addTest("video",function(){var e=s("video"),t=!1;try{(t=!!e.canPlayType)&&(t=new Boolean(t),t.ogg=e.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),t.h264=e.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),t.webm=e.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,""),t.vp9=e.canPlayType('video/webm; codecs="vp9"').replace(/^no$/,""),t.hls=e.canPlayType('application/x-mpegURL; codecs="avc1.42E01E"').replace(/^no$/,""))}catch(n){}return t});var D="CSS"in e&&"supports"in e.CSS,R="supportsCSS"in e;Modernizr.addTest("supports",D||R),Modernizr.addTest("csstransforms3d",function(){var e=!!y("perspective","1px",!0),t=Modernizr._config.usePrefixes;if(e&&(!t||"webkitPerspective"in C.style)){var n,r="#modernizr{width:0;height:0}";Modernizr.supports?n="@supports (perspective: 1px)":(n="@media (transform-3d)",t&&(n+=",(-webkit-transform-3d)")),n+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}",M(r+n,function(t){e=7===t.offsetWidth&&18===t.offsetHeight})}return e}),Modernizr.addTest("csstransitions",y("transition","all",!0)),Modernizr.addTest("videopreload","preload"in s("video")),o(),i(E),delete b.addTest,delete b.addAsyncTest;for(var q=0;q https://gl-verleih.de/wp-content/themes/infinity/js/jquery.gmap.min.js
/**
* jQuery gMap - Google Maps API V3
*
* @url http://github.com/marioestrada/jQuery-gMap
* @author Mario Estrada based on original plugin by Cedric Kastner 0?d.markers[0].address?c.geocode({address:d.markers[0].address},function(a,c){a&&a.length>0&&b.setCenter(a[0].geometry.location)}):b.setCenter(new google.maps.LatLng(d.markers[0].latitude,d.markers[0].longitude)):b.setCenter(new google.maps.LatLng(34.885931,9.84375)),b.setZoom(d.zoom),b.setMapTypeId(google.maps.MapTypeId[d.maptype]);var e={scrollwheel:d.scrollwheel,disableDoubleClickZoom:!d.doubleclickzoom};d.controls===!1?a.extend(e,{disableDefaultUI:!0}):d.controls.length!=0&&a.extend(e,d.controls,{disableDefaultUI:!0}),b.setOptions(e);var f=new google.maps.Marker;marker_icon=new google.maps.MarkerImage(d.icon.image),marker_icon.size=new google.maps.Size(d.icon.iconsize[0],d.icon.iconsize[1]),marker_icon.anchor=new google.maps.Point(d.icon.iconanchor[0],d.icon.iconanchor[1]),f.setIcon(marker_icon),d.icon.shadow&&(marker_shadow=new google.maps.MarkerImage(d.icon.shadow),marker_shadow.size=new google.maps.Size(d.icon.shadowsize[0],d.icon.shadowsize[1]),marker_shadow.anchor=new google.maps.Point(d.icon.shadowanchor[0],d.icon.shadowanchor[1]),f.setShadow(marker_shadow)),a(this).bind("gMap.centerAt",function(a,c,d,e){e&&b.setZoom(e),b.panTo(new google.maps.LatLng(parseFloat(c),parseFloat(d)))});var g;a(this).bind("gMap.addMarker",function(a,c,e,h,i,j){var k=new google.maps.LatLng(parseFloat(c),parseFloat(e)),l=new google.maps.Marker({position:k});i?(marker_icon=new google.maps.MarkerImage(i.image),marker_icon.size=new google.maps.Size(i.iconsize[0],i.iconsize[1]),marker_icon.anchor=new google.maps.Point(i.iconanchor[0],i.iconanchor[1]),l.setIcon(marker_icon),i.shadow&&(marker_shadow=new google.maps.MarkerImage(i.shadow),marker_shadow.size=new google.maps.Size(i.shadowsize[0],i.shadowsize[1]),marker_shadow.anchor=new google.maps.Point(i.shadowanchor[0],i.shadowanchor[1]),f.setShadow(marker_shadow))):(l.setIcon(f.getIcon()),l.setShadow(f.getShadow()));if(h){h=="_latlng"&&(h=c+", "+e);var m=new google.maps.InfoWindow({content:d.html_prepend+h+d.html_append});google.maps.event.addListener(l,"click",function(){g&&g.close(),m.open(b,l),g=m}),j&&google.maps.event.addListenerOnce(b,"tilesloaded",function(){m.open(b,l)})}l.setMap(b)});for(var h=0;h0&&a(c).trigger("gMap.addMarker",[d[0].geometry.location.lat(),d[0].geometry.location.lng(),b.html,b.icon,b.popup])}}(marker,i))}else a(this).trigger("gMap.addMarker",[marker.latitude,marker.longitude,marker.html,marker.icon,marker.popup])}})},a.fn.gMap.defaults={address:"",latitude:0,longitude:0,zoom:1,markers:[],controls:[],scrollwheel:!1,doubleclickzoom:!0,maptype:"ROADMAP",html_prepend:'',html_append:"
",icon:{image:"http://www.google.com/mapfiles/marker.png",shadow:"http://www.google.com/mapfiles/shadow50.png",iconsize:[20,34],shadowsize:[37,34],iconanchor:[9,34],shadowanchor:[6,34]}}})(jQuery);