// make it a global variable so other scripts can access it
var booked_load_calendar_date_booking_options,
booked_appt_form_options;
;(function($, window, document, undefined) {
var $win = $(window);
$.fn.spin.presets.booked = {
lines: 10, // The number of lines to draw
length: 7, // The length of each line
width: 5, // The line thickness
radius: 11, // The radius of the inner circle
corners: 1, // Corner roundness (0..1)
rotate: 0, // The rotation offset
direction: 1, // 1: clockwise, -1: counterclockwise
color: '#555', // #rgb or #rrggbb or array of colors
speed: 1, // Rounds per second
trail: 60, // Afterglow percentage
shadow: false, // Whether to render a shadow
hwaccel: false, // Whether to use hardware acceleration
className: 'booked-spinner', // The CSS class to assign to the spinner
zIndex: 2e9, // The z-index (defaults to 2000000000)
top: '50%', // Top position relative to parent
left: '50%' // Left position relative to parent
}
$.fn.spin.presets.booked_top = {
lines: 11, // The number of lines to draw
length: 10, // The length of each line
width: 6, // The line thickness
radius: 15, // The radius of the inner circle
corners: 1, // Corner roundness (0..1)
rotate: 0, // The rotation offset
scale: 0.5,
direction: 1, // 1: clockwise, -1: counterclockwise
color: '#aaaaaa', // #rgb or #rrggbb or array of colors
speed: 1, // Rounds per second
trail: 60, // Afterglow percentage
shadow: false, // Whether to render a shadow
hwaccel: false, // Whether to use hardware acceleration
className: 'booked-spinner booked-spinner-top', // The CSS class to assign to the spinner
zIndex: 2e9, // The z-index (defaults to 2000000000)
top: '15px', // Top position relative to parent
left: '50%' // Left position relative to parent
}
$.fn.spin.presets.booked_white = {
lines: 13, // The number of lines to draw
length: 11, // The length of each line
width: 5, // The line thickness
radius: 18, // The radius of the inner circle
scale: 1,
corners: 1, // Corner roundness (0..1)
rotate: 0, // The rotation offset
direction: 1, // 1: clockwise, -1: counterclockwise
color: '#fff', // #rgb or #rrggbb or array of colors
speed: 1, // Rounds per second
trail: 60, // Afterglow percentage
shadow: false, // Whether to render a shadow
hwaccel: false, // Whether to use hardware acceleration
className: 'booked-spinner booked-white', // The CSS class to assign to the spinner
zIndex: 2e9, // The z-index (defaults to 2000000000)
top: '50%', // Top position relative to parent
left: '50%' // Left position relative to parent
}
// Adjust the calendar sizing when resizing the window
$win.on('resize', function(){
adjust_calendar_boxes();
resize_booked_modal();
});
$win.on('load', function() {
var ajaxRequests = [];
// Adjust the calendar sizing on load
adjust_calendar_boxes();
$('.booked-calendar-wrap').each(function(){
var thisCalendar = $(this);
var calendar_month = thisCalendar.find('table.booked-calendar').attr('data-calendar-date');
thisCalendar.attr('data-default',calendar_month);
init_tooltips(thisCalendar);
});
$('.booked-list-view').each(function(){
var thisList = $(this);
var list_date = thisList.find('.booked-appt-list').attr('data-list-date');
thisList.attr('data-default',list_date);
});
bookedRemoveEmptyTRs();
init_appt_list_date_picker();
$('.booked_calendar_chooser').change(function(e){
e.preventDefault();
var $selector = $(this),
thisIsCalendar = $selector.parents('.booked-calendarSwitcher').hasClass('calendar');
if (!thisIsCalendar){
var thisCalendarWrap = $selector.parents('.booked-calendar-shortcode-wrap').find('.booked-list-view'),
thisDefaultDate = thisCalendarWrap.attr('data-default'),
thisIsCalendar = $selector.parents('.booked-calendarSwitcher').hasClass('calendar');
if (typeof thisDefaultDate == 'undefined'){ thisDefaultDate = false; }
thisCalendarWrap.addClass('booked-loading');
var args = {
'action' : 'booked_appointment_list_date',
'date' : thisDefaultDate,
'calendar_id' : $selector.val()
};
$(document).trigger("booked-before-loading-appointment-list-booking-options");
thisCalendarWrap.spin('booked_top');
$.ajax({
url: booked_js_vars.ajax_url,
type: 'post',
data: args,
success: function( html ) {
thisCalendarWrap.html( html );
init_appt_list_date_picker();
setTimeout(function(){
thisCalendarWrap.removeClass('booked-loading');
},1);
}
});
} else {
var thisCalendarWrap = $selector.parents('.booked-calendar-shortcode-wrap').find('.booked-calendar-wrap'),
thisDefaultDate = thisCalendarWrap.attr('data-default');
if (typeof thisDefaultDate == 'undefined'){ thisDefaultDate = false; }
var args = {
'action' : 'booked_calendar_month',
'gotoMonth' : thisDefaultDate,
'calendar_id' : $selector.val()
};
savingState(true,thisCalendarWrap);
$.ajax({
url: booked_js_vars.ajax_url,
type: 'post',
data: args,
success: function( html ) {
thisCalendarWrap.html( html );
adjust_calendar_boxes();
bookedRemoveEmptyTRs();
init_tooltips(thisCalendarWrap);
$(window).trigger('booked-load-calendar', args, $selector );
}
});
}
return false;
});
// Calendar Next/Prev Click
$('.booked-calendar-wrap').on('click', '.page-right, .page-left, .monthName a', function(e) {
e.preventDefault();
var $button = $(this),
gotoMonth = $button.attr('data-goto'),
thisCalendarWrap = $button.parents('.booked-calendar-wrap'),
thisCalendarDefault = thisCalendarWrap.attr('data-default'),
calendar_id = $button.parents('table.booked-calendar').attr('data-calendar-id');
if (typeof thisCalendarDefault == 'undefined'){ thisCalendarDefault = false; }
var args = {
'action' : 'booked_calendar_month',
'gotoMonth' : gotoMonth,
'calendar_id' : calendar_id,
'force_default' : thisCalendarDefault
};
savingState(true,thisCalendarWrap);
$.ajax({
url: booked_js_vars.ajax_url,
type: 'post',
data: args,
success: function( html ) {
thisCalendarWrap.html( html );
adjust_calendar_boxes();
bookedRemoveEmptyTRs();
init_tooltips(thisCalendarWrap);
$(window).trigger('booked-load-calendar', args, $button );
}
});
return false;
});
// Calendar Date Click
$('.booked-calendar-wrap').on('click', 'tr.week td', function(e) {
e.preventDefault();
var $thisDate = $(this),
booked_calendar_table = $thisDate.parents('table.booked-calendar'),
$thisRow = $thisDate.parent(),
date = $thisDate.attr('data-date'),
calendar_id = booked_calendar_table.attr('data-calendar-id'),
colspanSetting = $thisRow.find('td').length;
if (!calendar_id){ calendar_id = 0; }
if ($thisDate.hasClass('blur') || $thisDate.hasClass('booked') && !booked_js_vars.publicAppointments || $thisDate.hasClass('prev-date')){
// Do nothing.
} else if ($thisDate.hasClass('active')){
$thisDate.removeClass('active');
$('tr.entryBlock').remove();
var calendarHeight = booked_calendar_table.height();
booked_calendar_table.parent().height(calendarHeight);
} else {
$('tr.week td').removeClass('active');
$thisDate.addClass('active');
$('tr.entryBlock').remove();
$thisRow.after('
|
');
$('tr.entryBlock').find('td').spin('booked');
booked_load_calendar_date_booking_options = {'action':'booked_calendar_date','date':date,'calendar_id':calendar_id};
$(document).trigger("booked-before-loading-calendar-booking-options");
var calendarHeight = booked_calendar_table.height();
booked_calendar_table.parent().height(calendarHeight);
$.ajax({
url: booked_js_vars.ajax_url,
type: 'post',
data: booked_load_calendar_date_booking_options,
success: function( html ) {
$('tr.entryBlock').find('td').html( html );
$('tr.entryBlock').removeClass('loading');
$('tr.entryBlock').find('.booked-appt-list').fadeIn(300);
$('tr.entryBlock').find('.booked-appt-list').addClass('shown');
adjust_calendar_boxes();
}
});
}
return;
});
// Appointment List Next/Prev Date Click
$('.booked-list-view').on('click', '.booked-list-view-date-prev,.booked-list-view-date-next', function(e) {
e.preventDefault();
var $thisLink = $(this),
date = $thisLink.attr('data-date'),
thisList = $thisLink.parents('.booked-list-view'),
defaultDate = thisList.attr('data-default'),
calendar_id = $thisLink.parents('.booked-list-view-nav').attr('data-calendar-id');
if (typeof defaultDate == 'undefined'){ defaultDate = false; }
if (!calendar_id){ calendar_id = 0; }
thisList.addClass('booked-loading');
var booked_load_list_view_date_booking_options = {
'action' : 'booked_appointment_list_date',
'date' : date,
'calendar_id' : calendar_id,
'force_default' : defaultDate
};
$(document).trigger("booked-before-loading-appointment-list-booking-options");
thisList.spin('booked_top');
$.ajax({
url: booked_js_vars.ajax_url,
type: 'post',
data: booked_load_list_view_date_booking_options,
success: function( html ) {
thisList.html( html );
init_appt_list_date_picker();
setTimeout(function(){
thisList.removeClass('booked-loading');
},1);
}
});
return false;
});
// New Appointment Click
$('.booked-calendar-wrap').on('click', 'button.new-appt', function(e) {
e.preventDefault();
var $button = $(this),
title = $button.attr('data-title'),
timeslot = $button.attr('data-timeslot'),
date = $button.attr('data-date'),
$thisTimeslot = $button.parents('.timeslot'),
is_list_view = $button.parents('.booked-calendar-wrap').hasClass('booked-list-view'),
calendar_id = $button.parents('table.booked-calendar').attr('data-calendar-id');
if (typeof is_list_view != 'undefined' && is_list_view){
var calendar_id = $button.parents('.booked-list-view').find('.booked-list-view-nav').attr('data-calendar-id');
} else {
var calendar_id = $button.parents('table.booked-calendar').attr('data-calendar-id');
}
booked_appt_form_options = {'action':'booked_new_appointment_form','date':date,'timeslot':timeslot,'calendar_id':calendar_id,'title':title};
$(document).trigger("booked-before-loading-booking-form");
create_booked_modal();
setTimeout(function(){
$.ajax({
url: booked_js_vars.ajax_url,
type: 'post',
data: booked_appt_form_options,
success: function( html ) {
$('.bm-window').html( html );
var bookedModal = $('.booked-modal');
var bmWindow = bookedModal.find('.bm-window');
bmWindow.css({'visibility':'hidden'});
bookedModal.removeClass('bm-loading');
$(document).trigger("booked-on-new-app");
resize_booked_modal();
bmWindow.hide();
$('.booked-modal .bm-overlay').find('.booked-spinner').remove();
setTimeout(function(){
bmWindow.css({'visibility':'visible'});
bmWindow.show();
},50);
}
});
},100);
return false;
});
// Profile Tabs
var profileTabs = $('.booked-tabs');
if (!profileTabs.find('li.active').length){
profileTabs.find('li:first-child').addClass("active");
}
if (profileTabs.length){
$('.booked-tab-content').hide();
var activeTab = profileTabs.find('.active > a').attr('href');
activeTab = activeTab.split('#');
activeTab = activeTab[1];
$('#profile-'+activeTab).show();
profileTabs.find('li > a').on('click', function(e) {
e.preventDefault();
$('.booked-tab-content').hide();
profileTabs.find('li').removeClass('active');
$(this).parent().addClass('active');
var activeTab = $(this).attr('href');
activeTab = activeTab.split('#');
activeTab = activeTab[1];
$('#profile-'+activeTab).show();
return false;
});
}
// Show Additional Information
$('.booked-profile-appt-list').on('click', '.booked-show-cf', function(e) {
e.preventDefault();
var hiddenBlock = $(this).parent().find('.cf-meta-values-hidden');
if(hiddenBlock.is(':visible')){
hiddenBlock.hide();
$(this).removeClass('booked-cf-active');
} else {
hiddenBlock.show();
$(this).addClass('booked-cf-active');
}
return false;
});
// Check Login/Registration/Forgot Password forms before Submitting
if ($('#loginform').length){
$('#loginform input[type="submit"]').on('click',function(e) {
if ($('#loginform input[name="log"]').val() && $('#loginform input[name="pwd"]').val()){
$('#loginform .booked-custom-error').hide();
} else {
e.preventDefault();
$('#loginform').parents('.booked-form-wrap').find('.booked-custom-error').fadeOut(200).fadeIn(200);
}
});
}
if ($('#profile-forgot').length){
$('#profile-forgot input[type="submit"]').on('click',function(e) {
if ($('#profile-forgot input[name="user_login"]').val()){
$('#profile-forgot .booked-custom-error').hide();
} else {
e.preventDefault();
$('#profile-forgot').find('.booked-custom-error').fadeOut(200).fadeIn(200);
}
});
}
// Custom Upload Field
if ($('.booked-upload-wrap').length){
$('.booked-upload-wrap input[type=file]').on('change',function(){
var fileName = $(this).val();
$(this).parent().find('span').html(fileName);
$(this).parent().addClass('hasFile');
});
}
// Delete Appointment
$('.booked-profile-appt-list').on('click', '.appt-block .cancel', function(e) {
e.preventDefault();
var $button = $(this),
$thisParent = $button.parents('.appt-block'),
appt_id = $thisParent.attr('data-appt-id');
confirm_delete = confirm(booked_js_vars.i18n_confirm_appt_delete);
if (confirm_delete == true){
var currentApptCount = parseInt($('.booked-profile-appt-list').find('h4').find('span.count').html());
currentApptCount = parseInt(currentApptCount - 1);
if (currentApptCount < 1){
$('.booked-profile-appt-list').find('h4').find('span.count').html('0');
$('.no-appts-message').slideDown('fast');
} else {
$('.booked-profile-appt-list').find('h4').find('span.count').html(currentApptCount);
}
$('.appt-block').animate({'opacity':0.4},0);
$thisParent.slideUp('fast',function(){
$(this).remove();
});
$.ajax({
'url' : booked_js_vars.ajax_url,
'method' : 'post',
'data' : {
'action' : 'booked_cancel_appt',
'appt_id' : appt_id
},
success: function(data) {
$('.appt-block').animate({'opacity':1},150);
}
});
}
return false;
});
$('body').on('touchstart click','.bm-overlay, .bm-window .close, .booked-form .cancel',function(e){
e.preventDefault();
close_booked_modal();
return false;
});
$('body')
.on('focusin', '.booked-form input', function() {
if(this.title==this.value) {
$(this).addClass('hasContent');
this.value = '';
}
}).on('focusout', '.booked-form input', function(){
if(this.value==='') {
$(this).removeClass('hasContent');
this.value = this.title;
}
});
$('body').on('change','.booked-form input',function(){
var condition = $(this).attr('data-condition'),
thisVal = $(this).val();
if (condition && $('.condition-block').length) {
$('.condition-block.'+condition).hide();
$('#condition-'+thisVal).fadeIn(200);
resize_booked_modal();
}
});
// Perform AJAX login on form submit
$('body').on('submit','form#ajaxlogin', function(e){
e.preventDefault();
$('form#ajaxlogin p.status').show().html(' ' + booked_js_vars.i18n_please_wait);
resize_booked_modal();
$.ajax({
type : 'post',
url : booked_js_vars.ajax_url,
data : $('form#ajaxlogin').serialize(),
success : function(data) {
if (data == 'success'){
var timeslot = $('#newAppointmentForm input[name=timeslot]').val(),
date = $('#newAppointmentForm input[name=date]').val(),
calendar_id = $('#newAppointmentForm').attr('data-calendar-id');
booked_appt_form_options = {'action':'booked_new_appointment_form','date':date,'timeslot':timeslot,'calendar_id':calendar_id};
$(document).trigger("booked-before-loading-booking-form");
$.ajax({
url: booked_js_vars.ajax_url,
type: 'post',
data: booked_appt_form_options,
success: function( html ) {
$('.bm-window').html( html );
$(document).trigger("booked-on-new-app");
resize_booked_modal();
return false;
}
});
} else {
$('form#ajaxlogin p.status').show().html(' ' + booked_js_vars.i18n_wrong_username_pass);
resize_booked_modal();
}
}
});
e.preventDefault();
});
// Submit the "Request Appointment" Form
$('body').on('click','.booked-form input#submit-request-appointment',function(e){
$('form#newAppointmentForm p.status').show().html(' ' + booked_js_vars.i18n_please_wait);
resize_booked_modal();
e.preventDefault();
var customerType = $('#newAppointmentForm input[name=customer_type]').val(),
customerID = $('#newAppointmentForm input[name=user_id]').val(),
title = $('#newAppointmentForm input[name=title]').val(),
name = $('#newAppointmentForm input[name=booked_appt_name]').val(),
email = $('#newAppointmentForm input[name=booked_appt_email]').val(),
password = $('#newAppointmentForm input[name=booked_appt_password]').val(),
calendar_id = $('#newAppointmentForm').attr('data-calendar-id'),
showRequiredError = false,
ajaxRequests = [];
$(this).parents('.booked-form').find('input,textarea,select').each(function(i,field){
var required = $(this).attr('required');
if (required && $(field).attr('type') == 'hidden'){
var fieldParts = $(field).attr('name');
fieldParts = fieldParts.split('---');
fieldName = fieldParts[0];
fieldNumber = fieldParts[1].split('___');
fieldNumber = fieldNumber[0];
if (fieldName == 'radio-buttons-label'){
var radioValue = false;
$('input:radio[name="single-radio-button---'+fieldNumber+'[]"]:checked').each(function(){
if ($(this).val()){
radioValue = $(this).val();
}
});
if (!radioValue){
showRequiredError = true;
}
} else if (fieldName == 'checkboxes-label'){
var checkboxValue = false;
$('input:checkbox[name="single-checkbox---'+fieldNumber+'[]"]:checked').each(function(){
if ($(this).val()){
checkboxValue = $(this).val();
}
});
if (!checkboxValue){
showRequiredError = true;
}
}
} else if (required && $(field).attr('type') != 'hidden' && $(field).val() == ''){
showRequiredError = true;
}
});
if (showRequiredError){
$('form#newAppointmentForm p.status').show().html(' ' + booked_js_vars.i18n_fill_out_required_fields);
resize_booked_modal();
return false;
}
if (customerType == 'current' && customerID || customerType == 'guest'){
$thisButton = $(this);
$thisButton.attr('disabled',true);
$thisButton.parents('form').find('button.cancel').hide();
$('.booked-form input').each(function(){
thisDefault = $(this).attr('title');
thisVal = $(this).val();
if (thisDefault == thisVal){ $(this).val(''); }
});
var $activeTD = $('td.active');
$.ajax({
type : 'post',
url : booked_js_vars.ajax_url,
data : $('#newAppointmentForm').serialize(),
success : function(data) {
data = data.split('###');
var data_result = data[0].substr(data[0].length - 5);
if (data_result == 'error'){
$thisButton.attr('disabled',false);
$thisButton.parents('form').find('button.cancel').show();
$('.booked-form input').each(function(){
thisDefault = $(this).attr('title');
thisVal = $(this).val();
if (!thisVal){ $(this).val(thisDefault); }
});
$('form#newAppointmentForm p.status').show().html(' ' + data[1]);
resize_booked_modal();
} else {
var redirectObj = { redirect : false };
var redirect = $(document).trigger("booked-on-requested-appointment",[redirectObj]);
if (booked_js_vars.profilePage){
if (!redirectObj.redirect){
window.location = booked_js_vars.profilePage;
} else {
return;
}
} else {
if ($('.booked-appt-list').length){
$('.booked-appt-list').each(function(){
var thisApptList = $(this),
date = thisApptList.attr('data-list-date'),
thisList = thisApptList.parents('.booked-list-view'),
defaultDate = thisList.attr('data-default'),
calendar_id = thisApptList.find('.booked-list-view-nav').attr('data-calendar-id');
if (typeof defaultDate == 'undefined'){ defaultDate = false; }
if (!calendar_id){ calendar_id = 0; }
thisList.addClass('booked-loading');
var booked_load_list_view_date_booking_options = {
'action' : 'booked_appointment_list_date',
'date' : date,
'calendar_id' : calendar_id,
'force_default' : defaultDate
};
$(document).trigger("booked-before-loading-appointment-list-booking-options");
thisList.spin('booked_top');
$.ajax({
url: booked_js_vars.ajax_url,
type: 'post',
data: booked_load_list_view_date_booking_options,
success: function( html ) {
thisList.html( html );
close_booked_modal();
init_appt_list_date_picker();
setTimeout(function(){
thisList.removeClass('booked-loading');
},1);
}
});
});
}
if ($('td.active').length){
var activeDate = $activeTD.attr('data-date');
booked_load_calendar_date_booking_options = {'action':'booked_calendar_date','date':activeDate,'calendar_id':calendar_id};
$(document).trigger("booked-before-loading-calendar-booking-options");
$.ajax({
url: booked_js_vars.ajax_url,
type: 'post',
data: booked_load_calendar_date_booking_options,
success: function( html ) {
$('tr.entryBlock').find('td').html( html );
close_booked_modal();
$('tr.entryBlock').removeClass('loading');
$('tr.entryBlock').find('.booked-appt-list').hide().fadeIn(300);
$('tr.entryBlock').find('.booked-appt-list').addClass('shown');
adjust_calendar_boxes();
}
});
}
}
}
}
});
return false;
}
if (customerType == 'new' && name && email && password){
$('.booked-form input').each(function(){
thisDefault = $(this).attr('title');
thisVal = $(this).val();
if (thisDefault == thisVal){ $(this).val(''); }
});
$thisButton = $(this);
$thisButton.attr('disabled',true);
$thisButton.parents('form').find('button.cancel').hide();
var $activeTD = $('td.active');
$.ajax({
type : 'post',
url : booked_js_vars.ajax_url,
data : $('#newAppointmentForm').serialize(),
success: function(data) {
data = data.split('###');
var data_result = data[0].substr(data[0].length - 5);
if (data_result == 'error'){
$thisButton.attr('disabled',false);
$thisButton.parents('form').find('button.cancel').show();
$('.booked-form input').each(function(){
thisDefault = $(this).attr('title');
thisVal = $(this).val();
if (!thisVal){ $(this).val(thisDefault); }
});
$('form#newAppointmentForm p.status').show().html(' ' + data[1]);
resize_booked_modal();
} else {
var redirectObj = { redirect : false };
var redirect = $(document).trigger("booked-on-requested-appointment",[redirectObj]);
if (booked_js_vars.profilePage){
if (!redirectObj.redirect){
window.location = booked_js_vars.profilePage;
} else {
return;
}
} else {
if ($('.booked-appt-list').length){
$('.booked-appt-list').each(function(){
var thisApptList = $(this),
date = thisApptList.attr('data-list-date'),
thisList = thisApptList.parents('.booked-list-view'),
defaultDate = thisList.attr('data-default'),
calendar_id = thisApptList.find('.booked-list-view-nav').attr('data-calendar-id');
if (typeof defaultDate == 'undefined'){ defaultDate = false; }
if (!calendar_id){ calendar_id = 0; }
thisList.addClass('booked-loading');
var booked_load_list_view_date_booking_options = {
'action' : 'booked_appointment_list_date',
'date' : date,
'calendar_id' : calendar_id,
'force_default' : defaultDate
};
$(document).trigger("booked-before-loading-appointment-list-booking-options");
thisList.spin('booked_top');
$.ajax({
url: booked_js_vars.ajax_url,
type: 'post',
data: booked_load_list_view_date_booking_options,
success: function( html ) {
thisList.html( html );
close_booked_modal();
init_appt_list_date_picker();
setTimeout(function(){
thisList.removeClass('booked-loading');
},1);
}
});
});
}
if ($('td.active').length){
var activeDate = $activeTD.attr('data-date');
booked_load_calendar_date_booking_options = {'action':'booked_calendar_date','date':activeDate,'calendar_id':calendar_id};
$(document).trigger("booked-before-loading-calendar-booking-options");
$.ajax({
url: booked_js_vars.ajax_url,
type: 'post',
data: booked_load_calendar_date_booking_options,
success: function( html ) {
$('tr.entryBlock').find('td').html( html );
close_booked_modal();
$('tr.entryBlock').removeClass('loading');
$('tr.entryBlock').find('.booked-appt-list').hide().fadeIn(300);
$('tr.entryBlock').find('.booked-appt-list').addClass('shown');
adjust_calendar_boxes();
}
});
}
}
}
}
});
return false;
} else if (customerType == 'new' && !name || customerType == 'new' && !email || customerType == 'new' && !password){
$('form#newAppointmentForm p.status').show().html(' ' + booked_js_vars.i18n_appt_required_fields);
resize_booked_modal();
}
});
});
function bookedRemoveEmptyTRs(){
$('table.booked-calendar').find('tr.week').each(function(){
if ($(this).children().length == 0){
$(this).remove();
}
});
}
// Saving state updater
function savingState(show,limit_to){
show = typeof show !== 'undefined' ? show : true;
limit_to = typeof limit_to !== 'undefined' ? limit_to : false;
if (limit_to){
var $savingStateDIV = limit_to.find('li.active .savingState, .topSavingState.savingState, .calendarSavingState');
var $stuffToHide = limit_to.find('.monthName');
var $stuffToTransparent = limit_to.find('table.booked-calendar tbody');
} else {
var $savingStateDIV = $('li.active .savingState, .topSavingState.savingState, .calendarSavingState');
var $stuffToHide = $('.monthName');
var $stuffToTransparent = $('table.booked-calendar tbody');
}
if (show){
$savingStateDIV.fadeIn(200);
$stuffToHide.hide();
$stuffToTransparent.animate({'opacity':0.2},100);
} else {
$savingStateDIV.hide();
$stuffToHide.show();
$stuffToTransparent.animate({'opacity':1},0);
}
}
$(document).ajaxStop(function() {
savingState(false);
});
function init_appt_list_date_picker(){
$('.booked_list_date_picker').each(function(){
var thisDatePicker = $(this);
var minDateVal = thisDatePicker.parents('.booked-appt-list').attr('data-min-date');
var maxDateVal = thisDatePicker.parents('.booked-appt-list').attr('data-max-date');
if (typeof minDateVal == 'undefined'){ var minDateVal = thisDatePicker.attr('data-min-date'); }
thisDatePicker.datepicker({
dateFormat: 'yy-mm-dd',
minDate: minDateVal,
maxDate: maxDateVal,
showAnim: false,
beforeShow: function(input, inst) {
$('#ui-datepicker-div').removeClass();
$('#ui-datepicker-div').addClass('booked_custom_date_picker');
},
onClose: function(dateText){
$('.booked_list_date_picker_trigger').removeClass('booked-dp-active');
},
onSelect: function(dateText){
var thisInput = $(this),
date = dateText,
thisList = thisInput.parents('.booked-list-view'),
defaultDate = thisList.attr('data-default'),
calendar_id = thisInput.parents('.booked-list-view-nav').attr('data-calendar-id');
if (typeof defaultDate == 'undefined'){ defaultDate = false; }
if (!calendar_id){ calendar_id = 0; }
thisList.addClass('booked-loading');
var booked_load_list_view_date_booking_options = {
'action' : 'booked_appointment_list_date',
'date' : date,
'calendar_id' : calendar_id,
'force_default' : defaultDate
};
$(document).trigger("booked-before-loading-appointment-list-booking-options");
thisList.spin('booked_top');
$.ajax({
url: booked_js_vars.ajax_url,
type: 'post',
data: booked_load_list_view_date_booking_options,
success: function( html ) {
thisList.html( html );
init_appt_list_date_picker();
setTimeout(function(){
thisList.removeClass('booked-loading');
},1);
}
});
return false;
}
});
});
$('body').on('click','.booked_list_date_picker_trigger',function(e){
e.preventDefault();
if (!$(this).hasClass('booked-dp-active')){
$(this).addClass('booked-dp-active');
$(this).parents('.booked-appt-list').find('.booked_list_date_picker').datepicker('show');
}
});
}
})(jQuery, window, document);
// Create Booked Modal
function create_booked_modal(){
var windowHeight = jQuery(window).height();
var windowWidth = jQuery(window).width();
if (windowWidth > 720){
var maxModalHeight = windowHeight - 295;
} else {
var maxModalHeight = windowHeight;
}
jQuery('body input, body textarea, body select').blur();
jQuery('body').addClass('booked-noScroll');
jQuery('').appendTo('body');
jQuery('.booked-modal .bm-overlay').spin('booked_white');
jQuery('.booked-modal .bm-window').css({'max-height':maxModalHeight+'px'});
}
var previousRealModalHeight = 100;
function resize_booked_modal(){
var windowHeight = jQuery(window).height();
var windowWidth = jQuery(window).width();
var common43 = 43;
if (jQuery('.booked-modal .bm-window .booked-scrollable').length){
var realModalHeight = jQuery('.booked-modal .bm-window .booked-scrollable')[0].scrollHeight;
if (realModalHeight < 100){
realModalHeight = previousRealModalHeight;
} else {
previousRealModalHeight = realModalHeight;
}
} else {
var realModalHeight = 0;
}
var minimumWindowHeight = realModalHeight + common43 + common43;
var modalScrollableHeight = realModalHeight - common43;
var maxModalHeight;
var maxFormHeight;
if (windowHeight < minimumWindowHeight){
modalScrollableHeight = windowHeight - common43 - common43;
} else {
modalScrollableHeight = realModalHeight;
}
if (windowWidth > 720){
maxModalHeight = modalScrollableHeight - 25;
maxFormHeight = maxModalHeight - 15;
var modalNegMargin = (maxModalHeight + 78) / 2;
} else {
maxModalHeight = windowHeight - common43;
maxFormHeight = maxModalHeight - 60 - common43;
var modalNegMargin = (maxModalHeight) / 2;
}
jQuery('.booked-modal').css({'margin-top':'-'+modalNegMargin+'px'});
jQuery('.booked-modal .bm-window').css({'max-height':maxModalHeight+'px'});
jQuery('.booked-modal .bm-window .booked-scrollable').css({'max-height':maxFormHeight+'px'});
}
function close_booked_modal(){
jQuery('.booked-modal').fadeOut(200);
jQuery('.booked-modal').addClass('bm-closing');
jQuery('body').removeClass('booked-noScroll');
setTimeout(function(){
jQuery('.booked-modal').remove();
},300);
}
function init_tooltips(container){
jQuery('.tooltipster').tooltipster({
theme: 'tooltipster-light',
animation: 'grow',
speed: 200,
delay: 100,
offsetY: -13
});
}
// Function to adjust calendar sizing
function adjust_calendar_boxes(){
jQuery('.booked-calendar').each(function(){
var windowWidth = jQuery(window).width();
var smallCalendar = jQuery(this).parents('.booked-calendar-wrap').hasClass('small');
var boxesWidth = jQuery(this).find('tbody tr.week td').width();
var calendarHeight = jQuery(this).height();
boxesHeight = boxesWidth * 1;
jQuery(this).find('tbody tr.week td').height(boxesHeight);
jQuery(this).find('tbody tr.week td .date').css('line-height',boxesHeight+'px');
jQuery(this).find('tbody tr.week td .date .number').css('line-height',boxesHeight+'px');
if (smallCalendar || windowWidth < 720){
jQuery(this).find('tbody tr.week td .date .number').css('line-height',boxesHeight+'px');
} else {
jQuery(this).find('tbody tr.week td .date .number').css('line-height','');
}
var calendarHeight = jQuery(this).height();
jQuery(this).parent().height(calendarHeight);
});
}