').html(value).text();return value;
};
$.fbuilder[ 'escape_symbol' ] = function( value ) // Escape the symbols used in regulars expressions
{
return value.replace(/([\^\$\-\.\,\[\]\(\)\/\\\*\?\+\!\{\}])/g, "\\$1");
};
$.fbuilder[ 'parseValStr' ] = function( value )
{
return '"' + value.replace(/'/g, "\\'").replace( /\$/g, '') + '"';
};
$.fbuilder[ 'parseVal' ] = function( value, thousandSeparator, decimalSymbol )
{
if( value == '' ) return 0;
value += '';
thousandSeparator = new RegExp( $.fbuilder.escape_symbol( ( typeof thousandSeparator == 'undefined' ) ? ',' : thousandSeparator ), 'g' );
decimalSymbol = new RegExp( $.fbuilder.escape_symbol( ( typeof decimalSymbol == 'undefined' ) ? '.' : decimalSymbol ), 'g' );
var t = value.replace( thousandSeparator, '' ).replace( decimalSymbol, '.' ).replace( /\s/g, '' ),
p = /[+-]?((\d+(\.\d+)?)|(\.\d+))/.exec( t );
return ( p ) ? p[0]*1 : $.fbuilder[ 'parseValStr' ]( value );
};
$.fn.fbuilder = function(options){
var opt = $.extend({},
{
pub:false,
identifier:"",
title:""
},options, true);
opt.messages = $.extend({
previous: "Previous",
next: "Next",
pageof: "Page {0} of {0}",
required: "This field is required.",
email: "Please enter a valid email address.",
datemmddyyyy: "Please enter a valid date with this format(mm/dd/yyyy)",
dateddmmyyyy: "Please enter a valid date with this format(dd/mm/yyyy)",
number: "Please enter a valid number.",
digits: "Please enter only digits.",
maxlength: $.validator.format("Please enter no more than {0} characters"),
minlength: $.validator.format("Please enter at least {0} characters."),
equalTo: "Please enter the same value again.",
max: $.validator.format("Please enter a value less than or equal to {0}."),
min: $.validator.format("Please enter a value greater than or equal to {0}.")
},opt.messages);
opt.messages.max = $.validator.format(opt.messages.max);
opt.messages.min = $.validator.format(opt.messages.min);
$.extend($.validator.messages, opt.messages);
var items = [];
var reloadItemsPublic = function()
{
$("#fieldlist"+opt.identifier).closest( 'form' ).addClass( theForm.formtemplate );
$("#fieldlist"+opt.identifier).html("").addClass(theForm.formlayout);
$("#formheader"+opt.identifier).html(theForm.show());
var page = 0;
$("#fieldlist"+opt.identifier).append('');
for (var i=0;i
');
}
else
{
$("#fieldlist"+opt.identifier+" .pb"+page).append(items[i].show());
if (items[i].predefinedClick)
{
$("#fieldlist"+opt.identifier+" .pb"+page).find("#"+items[i].name).attr("placeholder",items[i].predefined);
$("#fieldlist"+opt.identifier+" .pb"+page).find("#"+items[i].name).attr("value","");
}
if (items[i].userhelpTooltip)
{
var uh = $("#fieldlist"+opt.identifier+" .pb"+page).find("#"+items[i].name).closest(".fields");
uh.find(".uh").css("display","none");
if (uh.find(".uh").text()!="")
{
uh.attr("uh",uh.find(".uh").text());
}
}
}
}
if (page>0)
{
$("#fieldlist"+opt.identifier+" .pb"+page).addClass("pbEnd");
$("#fieldlist"+opt.identifier+" .pbreak").each(function(index) {
var code = $(this).html();
var bSubmit = '';
if (index == page)
{
if ( $( "#cpcaptchalayer"+opt.identifier ).length && !/^\s*$/.test( $( "#cpcaptchalayer"+opt.identifier ).html() ) )
{
code += '
";
htmlSlots[htmlSlots.length] = {availableslot:true,st:st,serviceindex:s,h1:Math.floor((st)/60),m1:((st)%60),h2:Math.floor((st+duration)/60),m2:((st+duration)%60),html:html,t:$.datepicker.parseDate("yy-mm-dd",arr[i].day).getTime()+st*60*1000};
if (!me.bSlotsCheckbox)
st += me.bduration;
else
st += me.bduration + pa + pb;
}
}
htmlSlots.sort(function(a, b){
if ((typeof cp_hourbk_cmpublic !== 'undefined') && (a.t == b.t))
{
if ((typeof a.quantity !== 'undefined') && (typeof b.quantity === 'undefined'))
{
b.html = b.html.replace("ahbslotavailabilityP",(capacity_service - a.quantity));
b.quantity = a.quantity;
}
else if ((typeof b.quantity !== 'undefined') && (typeof a.quantity === 'undefined'))
{
a.html = a.html.replace("ahbslotavailabilityP",(capacity_service - b.quantity));
a.quantity = b.quantity;
}
}
return a.t - b.t
});
//remove duplicates
htmlSlots = htmlSlots.reduce(function(field, e1){
var matches = field.filter(function(e2){return e1.html== e2.html});
if (matches.length == 0){
field.push(e1);
}return field;
}, []);
htmlSlots = htmlSlots.reduce(function(field, e1){
var matches = field.filter(function(e2){return e1.t== e2.t});
if (matches.length == 0){
field.push(e1);
}
else
{
for (var i=0;i0 && htmlSlots.length>0)
for (var i=0;i=me.cacheArr[d][i].t2)
me.cacheArr[d][i].t2 += 24 * 60;
if (st<=me.cacheArr[d][i].t1 && et>=me.cacheArr[d][i].t1)
htmlSlots[htmlSlots.length] = jQuery.extend({}, me.cacheArr[d][i]);
}
for (var i=0;me.usedSlots[d] && i=me.usedSlots[d][i].t2)
me.usedSlots[d][i].t2 += 24 * 60;
if (st<=me.usedSlots[d][i].t1 && et>=me.usedSlots[d][i].t1)
htmlSlots[htmlSlots.length] = jQuery.extend({}, me.usedSlots[d][i]);
}
}
return htmlSlots;
}
var day = $.datepicker.parseDate("yy-mm-dd", d);
if (this.tzf(d)==0)
{
me.htmlUsedSlots[d] = setHtmlUsedSlots(d,0,24);
var arr = this.getAvailablePartialSlots(d,[{h1:0,m1:0,h2:0,m2:0}],s);
}
else if (this.tzf(d) > 0)
{
day.setDate(day.getDate() - 1);
var d1 = $.datepicker.formatDate("yy-mm-dd",day);
var arr = $.merge(this.getAvailablePartialSlots(d1,[{h1:0,m1:0,h2:24-this.tzf(d),m2:0}],s),this.getAvailablePartialSlots(d,[{h1:24-this.tzf(d),m1:0,h2:24,m2:0}],s));
me.htmlUsedSlots[d] = $.merge(setHtmlUsedSlots(d1,24-this.tzf(d),24), setHtmlUsedSlots(d,0,24-this.tzf(d)));
}
else
{
day.setDate(day.getDate() + 1);
var d1 = $.datepicker.formatDate("yy-mm-dd",day);
var arr = $.merge(this.getAvailablePartialSlots(d,[{h1:0,m1:0,h2:this.tzf(d)*-1,m2:0}],s),this.getAvailablePartialSlots(d1,[{h1:this.tzf(d)*-1,m1:0,h2:24,m2:0}],s));
me.htmlUsedSlots[d] = $.merge(setHtmlUsedSlots(d,this.tzf(d)*-1,24), setHtmlUsedSlots(d1,0,this.tzf(d)*-1));
}
me.slotsDate[c] = arr;
return arr;
},
getAvailableSlots: function(d)
{
var me = this;
var c = "s"+(me.showAllServices?"":me.service_selected)+"q"+me.quantity_selected+"d"+d;
if (me.tzf(d)==0 && typeof me.slotsDate[c]!== 'undefined')
return me.slotsDate[c];
var a_max = [];
if (!me.showAllServices)
a_max = this.getAvailableSlotsByService(d,me.service_selected);
else
{
me.availableSlotsByService[d] = [];
for (var i=0; i< me.services.length;i++)
{
me.availableSlotsByService[d][i] = this.getAvailableSlotsByService(d,i);
if (me.availableSlotsByService[d][i].length > a_max.length)
a_max = me.availableSlotsByService[d][i].slice(0);
}
}
me.slotsDate[c] = a_max;
return a_max;
},
rC: function(d)
{
var me = this;
var day = $.datepicker.formatDate('yy-mm-dd', d);
var c = new Array(day,"d"+day);
if (me.working_dates[d.getDay()]==0 && ($.inArray(day, me.special_days) == -1))
c.push("nonworking","ui-datepicker-unselectable","ui-state-disabled");
for( var i = 0, l = me.invalidDates.length; i < l; i++ )
{
if (d.getTime() === me.invalidDates[i].getTime() && ($.inArray(day, me.special_days) == -1))
c.push("nonworking","ui-datepicker-unselectable","ui-state-disabled","invalidDate");
}
if (me.minDate!=="" && me.getMinDate!="" && day < $.datepicker.formatDate('yy-mm-dd', me.getMinDate))
c.push("nonworking","ui-datepicker-unselectable","ui-state-disabled","beforemindate");
if (me.maxDate!=="" && me.getMaxDate!="" && day > $.datepicker.formatDate('yy-mm-dd', new Date(me.getMaxDate.getTime()-1))) //because me.getMaxDate.setHours(24, 0, 0, 0) add a date
c.push("nonworking","ui-datepicker-unselectable","ui-state-disabled","aftermaxdate");
if (($.inArray("ui-datepicker-unselectable",c)==-1) && !me.emptySelectCheckbox || (me.emptySelectCheckbox && $(".fieldCalendarService"+me.name+" select option:selected").index() > 0 ))
{
var arr = me.getAvailableSlots(day);
if (arr.length==0 && me.notShowBookedDate)
c.push("nonworking","ui-datepicker-unselectable","ui-state-disabled","notavailslot");
if (typeof cp_hourbk_cmpublic !== 'undefined')
{
var used = 0;
var cclass = c.join(" ");
var q = 0;
var total = 0;
if (!me.showAllServices)
{
var htmlSlots = me.getCurrentSlots(arr,day,me.service_selected);
for (var i=0;i0)/*compatible with old version*/
{
if (!me.openhours[0].name)
{
var obj = {name:"Default",openhours:me.openhours.slice(0)};
me.openhours = new Array();
me.openhours[0] = obj;
}
me.allOH = new Array();
me.allOH = me.openhours.slice(0);
me.openhours = new Array();
}
var dd = "";
if (me.initialapp!="")
{
try{
var s = me.initialapp.split(";");
var s2 = "";
var ind = 0;
for (var i=0;i 0 )))
{
$( '#field' + me.form_identifier + '-' + me.index + ' .slotsCalendar'+me.name ).html("");
return;
}
function getSlots(d)
{
var data1 = me.cacheArr[d];
var duration = me.duration;
me.bduration = me.duration;
if (!me.bSlotsCheckbox)
me.bduration = me.bSlots*1;
var arr = me.getAvailableSlots(d);
var nextdateAvailable = $.datepicker.parseDate("yy-mm-dd", d);
var c = "s"+(me.showAllServices?"":me.service_selected)+"q"+me.quantity_selected;
var s = $( '#field' + me.form_identifier + '-' + me.index + ' .slotsCalendar'+me.name );
var i =0;
if (me.notShowBookedDate && (me.maxNumberOfApp==0 || me.allUsedSlots.length0 )
{
e.datepicker("setDate", nextdateAvailable);
me.getD = nextdateAvailable;
onChangeDateOrService($.datepicker.formatDate("yy-mm-dd", nextdateAvailable));
}
else
{
e.datepicker("setDate", me.getMinDate);
s.html("
"+cp_hourbk_nomore_label+"
");
}
return;
}
me.service_change = false;
function getStrSlots(arr,d,s)
{
var str = "";
var htmlSlots = me.getCurrentSlots(arr,d,s);
var capacity_service = me.services[s].capacity;
for (var i=0;i
'+me.services[i].name+'
'+str_s+'';
}
}
if (str=="") str = cp_hourbk_nomore_label;
var before = "";
if (s.find(".slots").length>0)
{
before = s.find(".slots").attr("d");
}
s.html("