\n";
$selform .= "
\n";
$selform .= "
\n";
$timeopst = VikBooking::getTimeOpenStore();
if (is_array($timeopst)) {
$opent = VikBooking::getHoursMinutes($timeopst[0]);
$closet = VikBooking::getHoursMinutes($timeopst[1]);
$hcheckin = $opent[0];
$mcheckin = $opent[1];
$hcheckout = $closet[0];
$mcheckout = $closet[1];
} else {
$hcheckin = 0;
$mcheckin = 0;
$hcheckout = 0;
$mcheckout = 0;
}
//vikbooking 1.1
if ($calendartype == "jqueryui") {
if ($vbdateformat == "%d/%m/%Y") {
$juidf = 'dd/mm/yy';
} elseif ($vbdateformat == "%m/%d/%Y") {
$juidf = 'mm/dd/yy';
} else {
$juidf = 'yy/mm/dd';
}
// lang for jQuery UI Calendar is loaded through the application class
$ldecl = '
jQuery.noConflict();
function vbGetDateObject(dstring) {
var dparts = dstring.split("-");
return new Date(dparts[0], (parseInt(dparts[1]) - 1), parseInt(dparts[2]), 0, 0, 0, 0);
}
function vbFullObject(obj) {
var jk;
for(jk in obj) {
return obj.hasOwnProperty(jk);
}
}
var vbrestrctarange, vbrestrctdrange, vbrestrcta, vbrestrctd;';
$document->addScriptDeclaration($ldecl);
//
//VikBooking 1.4
$totrestrictions = count($restrictions);
$wdaysrestrictions = array();
$wdaystworestrictions = array();
$wdaysrestrictionsrange = array();
$wdaysrestrictionsmonths = array();
$ctarestrictionsrange = array();
$ctarestrictionsmonths = array();
$ctdrestrictionsrange = array();
$ctdrestrictionsmonths = array();
$monthscomborestr = array();
$minlosrestrictions = array();
$minlosrestrictionsrange = array();
$maxlosrestrictions = array();
$maxlosrestrictionsrange = array();
$notmultiplyminlosrestrictions = array();
if ($totrestrictions > 0) {
foreach ($restrictions as $rmonth => $restr) {
if ($rmonth != 'range') {
if (strlen((string)$restr['wday'])) {
$wdaysrestrictions[] = "'".($rmonth - 1)."': '".$restr['wday']."'";
$wdaysrestrictionsmonths[] = $rmonth;
if (strlen((string)$restr['wdaytwo'])) {
$wdaystworestrictions[] = "'".($rmonth - 1)."': '".$restr['wdaytwo']."'";
$monthscomborestr[($rmonth - 1)] = VikBooking::parseJsDrangeWdayCombo($restr);
}
} elseif (!empty($restr['ctad']) || !empty($restr['ctdd'])) {
if (!empty($restr['ctad'])) {
$ctarestrictionsmonths[($rmonth - 1)] = explode(',', $restr['ctad']);
}
if (!empty($restr['ctdd'])) {
$ctdrestrictionsmonths[($rmonth - 1)] = explode(',', $restr['ctdd']);
}
}
if ($restr['multiplyminlos'] == 0) {
$notmultiplyminlosrestrictions[] = $rmonth;
}
$minlosrestrictions[] = "'".($rmonth - 1)."': '".$restr['minlos']."'";
if (!empty($restr['maxlos']) && $restr['maxlos'] > 0 && $restr['maxlos'] > $restr['minlos']) {
$maxlosrestrictions[] = "'".($rmonth - 1)."': '".$restr['maxlos']."'";
}
} else {
foreach ($restr as $kr => $drestr) {
if (strlen((string)$drestr['wday'])) {
$wdaysrestrictionsrange[$kr][0] = date('Y-m-d', $drestr['dfrom']);
$wdaysrestrictionsrange[$kr][1] = date('Y-m-d', $drestr['dto']);
$wdaysrestrictionsrange[$kr][2] = $drestr['wday'];
$wdaysrestrictionsrange[$kr][3] = $drestr['multiplyminlos'];
$wdaysrestrictionsrange[$kr][4] = strlen((string)$drestr['wdaytwo']) ? $drestr['wdaytwo'] : -1;
$wdaysrestrictionsrange[$kr][5] = VikBooking::parseJsDrangeWdayCombo($drestr);
} elseif (!empty($drestr['ctad']) || !empty($drestr['ctdd'])) {
$ctfrom = date('Y-m-d', $drestr['dfrom']);
$ctto = date('Y-m-d', $drestr['dto']);
if (!empty($drestr['ctad'])) {
$ctarestrictionsrange[$kr][0] = $ctfrom;
$ctarestrictionsrange[$kr][1] = $ctto;
$ctarestrictionsrange[$kr][2] = explode(',', $drestr['ctad']);
}
if (!empty($drestr['ctdd'])) {
$ctdrestrictionsrange[$kr][0] = $ctfrom;
$ctdrestrictionsrange[$kr][1] = $ctto;
$ctdrestrictionsrange[$kr][2] = explode(',', $drestr['ctdd']);
}
}
$minlosrestrictionsrange[$kr][0] = date('Y-m-d', $drestr['dfrom']);
$minlosrestrictionsrange[$kr][1] = date('Y-m-d', $drestr['dto']);
$minlosrestrictionsrange[$kr][2] = $drestr['minlos'];
if (!empty($drestr['maxlos']) && $drestr['maxlos'] > 0 && $drestr['maxlos'] >= $drestr['minlos']) {
$maxlosrestrictionsrange[$kr] = $drestr['maxlos'];
}
}
unset($restrictions['range']);
}
}
$resdecl = "
var vbrestrmonthswdays = [".implode(", ", $wdaysrestrictionsmonths)."];
var vbrestrmonths = [".implode(", ", array_keys($restrictions))."];
var vbrestrmonthscombojn = JSON.parse('".json_encode($monthscomborestr)."');
var vbrestrminlos = {".implode(", ", $minlosrestrictions)."};
var vbrestrminlosrangejn = JSON.parse('".json_encode($minlosrestrictionsrange)."');
var vbrestrmultiplyminlos = [".implode(", ", $notmultiplyminlosrestrictions)."];
var vbrestrmaxlos = {".implode(", ", $maxlosrestrictions)."};
var vbrestrmaxlosrangejn = JSON.parse('".json_encode($maxlosrestrictionsrange)."');
var vbrestrwdaysrangejn = JSON.parse('".json_encode($wdaysrestrictionsrange)."');
var vbrestrcta = JSON.parse('".json_encode($ctarestrictionsmonths)."');
var vbrestrctarange = JSON.parse('".json_encode($ctarestrictionsrange)."');
var vbrestrctd = JSON.parse('".json_encode($ctdrestrictionsmonths)."');
var vbrestrctdrange = JSON.parse('".json_encode($ctdrestrictionsrange)."');
var vbcombowdays = {};
function vbRefreshCheckout(darrive) {
if (vbFullObject(vbcombowdays)) {
var vbtosort = new Array();
for(var vbi in vbcombowdays) {
if (vbcombowdays.hasOwnProperty(vbi)) {
var vbusedate = darrive;
vbtosort[vbi] = vbusedate.setDate(vbusedate.getDate() + (vbcombowdays[vbi] - 1 - vbusedate.getDay() + 7) % 7 + 1);
}
}
vbtosort.sort(function(da, db) {
return da > db ? 1 : -1;
});
for(var vbnext in vbtosort) {
if (vbtosort.hasOwnProperty(vbnext)) {
var vbfirstnextd = new Date(vbtosort[vbnext]);
jQuery('#checkoutdate').datepicker( 'option', 'minDate', vbfirstnextd );
jQuery('#checkoutdate').datepicker( 'setDate', vbfirstnextd );
break;
}
}
}
}
function vbSetMinCheckoutDate(selectedDate) {
var minlos = ".VikBooking::getDefaultNightsCalendar().";
var maxlosrange = 0;
var nowcheckin = jQuery('#checkindate').datepicker('getDate');
var nowd = nowcheckin.getDay();
var nowcheckindate = new Date(nowcheckin.getTime());
vbcombowdays = {};
if (vbFullObject(vbrestrminlosrangejn)) {
for (var rk in vbrestrminlosrangejn) {
if (vbrestrminlosrangejn.hasOwnProperty(rk)) {
var minldrangeinit = vbGetDateObject(vbrestrminlosrangejn[rk][0]);
if (nowcheckindate >= minldrangeinit) {
var minldrangeend = vbGetDateObject(vbrestrminlosrangejn[rk][1]);
if (nowcheckindate <= minldrangeend) {
minlos = parseInt(vbrestrminlosrangejn[rk][2]);
if (vbFullObject(vbrestrmaxlosrangejn)) {
if (rk in vbrestrmaxlosrangejn) {
maxlosrange = parseInt(vbrestrmaxlosrangejn[rk]);
}
}
if (rk in vbrestrwdaysrangejn && nowd in vbrestrwdaysrangejn[rk][5]) {
vbcombowdays = vbrestrwdaysrangejn[rk][5][nowd];
}
}
}
}
}
}
var nowm = nowcheckin.getMonth();
if (vbFullObject(vbrestrmonthscombojn) && vbrestrmonthscombojn.hasOwnProperty(nowm)) {
if (nowd in vbrestrmonthscombojn[nowm]) {
vbcombowdays = vbrestrmonthscombojn[nowm][nowd];
}
}
if (jQuery.inArray((nowm + 1), vbrestrmonths) != -1) {
minlos = parseInt(vbrestrminlos[nowm]);
}
nowcheckindate.setDate(nowcheckindate.getDate() + minlos);
jQuery('#checkoutdate').datepicker( 'option', 'minDate', nowcheckindate );
if (maxlosrange > 0) {
var diffmaxminlos = maxlosrange - minlos;
var maxcheckoutdate = new Date(nowcheckindate.getTime());
maxcheckoutdate.setDate(maxcheckoutdate.getDate() + diffmaxminlos);
jQuery('#checkoutdate').datepicker( 'option', 'maxDate', maxcheckoutdate );
}
if (nowm in vbrestrmaxlos) {
var diffmaxminlos = parseInt(vbrestrmaxlos[nowm]) - minlos;
var maxcheckoutdate = new Date(nowcheckindate.getTime());
maxcheckoutdate.setDate(maxcheckoutdate.getDate() + diffmaxminlos);
jQuery('#checkoutdate').datepicker( 'option', 'maxDate', maxcheckoutdate );
}
if (!vbFullObject(vbcombowdays)) {
var is_checkout_disabled = false;
if (typeof selectedDate !== 'undefined' && typeof jQuery('#checkoutdate').datepicker('option', 'beforeShowDay') === 'function') {
// let the datepicker validate if the min date to set for check-out is disabled due to CTD rules
is_checkout_disabled = !jQuery('#checkoutdate').datepicker('option', 'beforeShowDay')(nowcheckindate)[0];
}
if (!is_checkout_disabled) {
jQuery('#checkoutdate').datepicker( 'setDate', nowcheckindate );
} else {
setTimeout(() => {
// make sure the minimum date just set for the checkout has not populated a CTD date that we do not want
var current_out_dt = jQuery('#checkoutdate').datepicker('getDate');
if (current_out_dt && current_out_dt.getTime() === nowcheckindate.getTime()) {
jQuery('#checkoutdate').datepicker( 'setDate', null );
}
jQuery('#checkoutdate').focus();
}, 100);
}
} else {
vbRefreshCheckout(nowcheckin);
}
}";
if (count($wdaysrestrictions) > 0 || count($wdaysrestrictionsrange) > 0) {
$resdecl .= "
var vbrestrwdays = {".implode(", ", $wdaysrestrictions)."};
var vbrestrwdaystwo = {".implode(", ", $wdaystworestrictions)."};
function vbIsDayDisabled(date) {
if (!vbIsDayOpen(date) || !vboValidateCta(date)) {
return [false];
}
var m = date.getMonth(), wd = date.getDay();
if (vbFullObject(vbrestrwdaysrangejn)) {
for (var rk in vbrestrwdaysrangejn) {
if (vbrestrwdaysrangejn.hasOwnProperty(rk)) {
var wdrangeinit = vbGetDateObject(vbrestrwdaysrangejn[rk][0]);
if (date >= wdrangeinit) {
var wdrangeend = vbGetDateObject(vbrestrwdaysrangejn[rk][1]);
if (date <= wdrangeend) {
if (wd != vbrestrwdaysrangejn[rk][2]) {
if (vbrestrwdaysrangejn[rk][4] == -1 || wd != vbrestrwdaysrangejn[rk][4]) {
return [false];
}
}
}
}
}
}
}
if (vbFullObject(vbrestrwdays)) {
if (jQuery.inArray((m+1), vbrestrmonthswdays) == -1) {
return [true];
}
if (wd == vbrestrwdays[m]) {
return [true];
}
if (vbFullObject(vbrestrwdaystwo)) {
if (wd == vbrestrwdaystwo[m]) {
return [true];
}
}
return [false];
}
return [true];
}
function vbIsDayDisabledCheckout(date) {
if (!vbIsDayOpen(date) || !vboValidateCtd(date)) {
return [false];
}
var m = date.getMonth(), wd = date.getDay();
if (vbFullObject(vbcombowdays)) {
if (jQuery.inArray(wd, vbcombowdays) != -1) {
return [true];
} else {
return [false];
}
}
if (vbFullObject(vbrestrwdaysrangejn)) {
for (var rk in vbrestrwdaysrangejn) {
if (vbrestrwdaysrangejn.hasOwnProperty(rk)) {
var wdrangeinit = vbGetDateObject(vbrestrwdaysrangejn[rk][0]);
if (date >= wdrangeinit) {
var wdrangeend = vbGetDateObject(vbrestrwdaysrangejn[rk][1]);
if (date <= wdrangeend) {
if (wd != vbrestrwdaysrangejn[rk][2] && vbrestrwdaysrangejn[rk][3] == 1) {
return [false];
}
}
}
}
}
}
if (vbFullObject(vbrestrwdays)) {
if (jQuery.inArray((m+1), vbrestrmonthswdays) == -1 || jQuery.inArray((m+1), vbrestrmultiplyminlos) != -1) {
return [true];
}
if (wd == vbrestrwdays[m]) {
return [true];
}
return [false];
}
return [true];
}";
}
$document->addScriptDeclaration($resdecl);
}
//
$closing_dates = VikBooking::parseJsClosingDates();
$sdecl = "
var vbclosingdates = JSON.parse('".json_encode($closing_dates)."');
function vbCheckClosingDatesIn(date) {
if (!vbIsDayOpen(date) || !vboValidateCta(date)) {
return [false];
}
return [true];
}
function vbCheckClosingDatesOut(date) {
if (!vbIsDayOpen(date) || !vboValidateCtd(date)) {
return [false];
}
return [true];
}
function vbIsDayOpen(date) {
if (vbFullObject(vbclosingdates)) {
for (var cd in vbclosingdates) {
if (vbclosingdates.hasOwnProperty(cd)) {
var cdfrom = vbGetDateObject(vbclosingdates[cd][0]);
var cdto = vbGetDateObject(vbclosingdates[cd][1]);
if (date >= cdfrom && date <= cdto) {
return false;
}
}
}
}
return true;
}
function vboValidateCta(date) {
var m = date.getMonth(), wd = date.getDay();
if (vbFullObject(vbrestrctarange)) {
for (var rk in vbrestrctarange) {
if (vbrestrctarange.hasOwnProperty(rk)) {
var wdrangeinit = vbGetDateObject(vbrestrctarange[rk][0]);
if (date >= wdrangeinit) {
var wdrangeend = vbGetDateObject(vbrestrctarange[rk][1]);
if (date <= wdrangeend) {
if (jQuery.inArray('-'+wd+'-', vbrestrctarange[rk][2]) >= 0) {
return false;
}
}
}
}
}
}
if (vbFullObject(vbrestrcta)) {
if (vbrestrcta.hasOwnProperty(m) && jQuery.inArray('-'+wd+'-', vbrestrcta[m]) >= 0) {
return false;
}
}
return true;
}
function vboValidateCtd(date) {
var m = date.getMonth(), wd = date.getDay();
if (vbFullObject(vbrestrctdrange)) {
for (var rk in vbrestrctdrange) {
if (vbrestrctdrange.hasOwnProperty(rk)) {
var wdrangeinit = vbGetDateObject(vbrestrctdrange[rk][0]);
if (date >= wdrangeinit) {
var wdrangeend = vbGetDateObject(vbrestrctdrange[rk][1]);
if (date <= wdrangeend) {
if (jQuery.inArray('-'+wd+'-', vbrestrctdrange[rk][2]) >= 0) {
return false;
}
}
}
}
}
}
if (vbFullObject(vbrestrctd)) {
if (vbrestrctd.hasOwnProperty(m) && jQuery.inArray('-'+wd+'-', vbrestrctd[m]) >= 0) {
return false;
}
}
return true;
}
function vbSetGlobalMinCheckoutDate() {
var nowcheckin = jQuery('#checkindate').datepicker('getDate');
var nowcheckindate = new Date(nowcheckin.getTime());
nowcheckindate.setDate(nowcheckindate.getDate() + ".VikBooking::getDefaultNightsCalendar().");
jQuery('#checkoutdate').datepicker( 'option', 'minDate', nowcheckindate );
jQuery('#checkoutdate').datepicker( 'setDate', nowcheckindate );
}
jQuery(function() {
jQuery.datepicker.setDefaults( jQuery.datepicker.regional[ '' ] );
jQuery('#checkindate').datepicker({
showOn: 'focus',
numberOfMonths: ".($is_mobile ? '1' : '2').",".(count($wdaysrestrictions) > 0 || count($wdaysrestrictionsrange) > 0 ? "\nbeforeShowDay: vbIsDayDisabled,\n" : "\nbeforeShowDay: vbCheckClosingDatesIn,\n")."
onSelect: function( selectedDate ) {
".($totrestrictions > 0 ? "vbSetMinCheckoutDate(selectedDate);" : "vbSetGlobalMinCheckoutDate();")."
vbCalcNights();
}
});
jQuery('#checkindate').datepicker( 'option', 'dateFormat', '".$juidf."');
jQuery('#checkindate').datepicker( 'option', 'minDate', '".VikBooking::getMinDaysAdvance()."d');
jQuery('#checkindate').datepicker( 'option', 'maxDate', '".VikBooking::getMaxDateFuture()."');
jQuery('#checkoutdate').datepicker({
showOn: 'focus',
numberOfMonths: ".($is_mobile ? '1' : '2').",".(count($wdaysrestrictions) > 0 || count($wdaysrestrictionsrange) > 0 ? "\nbeforeShowDay: vbIsDayDisabledCheckout,\n" : "\nbeforeShowDay: vbCheckClosingDatesOut,\n")."
onSelect: function( selectedDate ) {
vbCalcNights();
}
});
jQuery('#checkoutdate').datepicker( 'option', 'dateFormat', '".$juidf."');
jQuery('#checkoutdate').datepicker( 'option', 'minDate', '".VikBooking::getMinDaysAdvance()."d');
jQuery('#checkindate').datepicker( 'option', jQuery.datepicker.regional[ 'vikbooking' ] );
jQuery('#checkoutdate').datepicker( 'option', jQuery.datepicker.regional[ 'vikbooking' ] );
jQuery('.vb-cal-img, .vbo-caltrigger').click(function(){
var jdp = jQuery(this).prev('input.hasDatepicker');
if (jdp.length) {
jdp.focus();
}
});
});";
$document->addScriptDeclaration($sdecl);
$selform .= "
\n";
$selform .= "
\n";
} else {
// default platform Calendar
$selform .= "
\n";
$selform .= "
\n";
}
//
//rooms, adults, children
$showchildren = VikBooking::showChildrenFront();
$guests_label = VBOFactory::getConfig()->get('guests_label', 'adults');
$use_guests_label = 'VBFORMADULTS';
if (!$showchildren && !strcasecmp($guests_label, 'guests')) {
$use_guests_label = 'VBOINVTOTGUESTS';
}
//max number of rooms
$maxsearchnumrooms = VikBooking::getSearchNumRooms();
if (intval($maxsearchnumrooms) > 1) {
$roomsel = "
".JText::translate('VBFORMROOMSN')." \n";
for($r = 1; $r <= $maxsearchnumrooms; $r++) {
$roomsel .= "".$r." \n";
}
$roomsel .= " \n";
} else {
$roomsel = "
\n";
}
//
//max number of adults per room
$globnumadults = VikBooking::getSearchNumAdults();
$adultsparts = explode('-', $globnumadults);
$adultsel = "
";
for($a = $adultsparts[0]; $a <= $adultsparts[1]; $a++) {
$adultsel .= "".$a." ";
}
$adultsel .= " ";
//
//max number of children per room
$globnumchildren = VikBooking::getSearchNumChildren();
$childrenparts = explode('-', $globnumchildren);
$childrensel = "
";
for($c = $childrenparts[0]; $c <= $childrenparts[1]; $c++) {
$childrensel .= "".$c." ";
}
$childrensel .= " ";
//
$selform .= "
\n";
$selform .= "
".$roomsel."
\n";
$selform .= "
\n";
$selform .= "
".(intval($maxsearchnumrooms) > 1 || (!empty($oldroomsnum) && (int)$oldroomsnum > 1) ? "
".JText::translate('VBFORMNUMROOM')." 1 " : "")."\n";
$selform .= "
".JText::translate($use_guests_label)." ".$adultsel."
\n";
if ($showchildren) {
$selform .= "
".JText::translate('VBFORMCHILDREN')." ".$childrensel."
\n";
}
$selform .= "
\n";
$selform .= "
\n";
//the tag
will be used by javascript to calculate the nights
$selform .= "
\n";
$selform .= "
\n";
if (VikBooking::showCategoriesFront()) {
$q = "SELECT * FROM `#__vikbooking_categories` ORDER BY `#__vikbooking_categories`.`name` ASC;";
$dbo->setQuery($q);
$categories = $dbo->loadAssocList();
if ($categories) {
$vbo_tn->translateContents($categories, '#__vikbooking_categories');
$selform .= "
" . JText::translate('VBROOMCAT') . " ";
$selform .= "" . JText::translate('VBALLCAT') . " \n";
foreach ($categories as $cat) {
$selform .= "" . $cat['name'] . " \n";
}
$selform .= "
\n";
}
}
$selform .= "
" . JText::translate('VBSEARCHBUTTON') . "
\n";
$selform .= "
\n";
$selform .= (!empty ($pitemid) ? "