function TripSearcher(opts) { var me = this; var defaults = {ctr:null, showSB:true, inPopup:false, isPgChgInSrch:false, srchPrms:'', trpSrchTout:30000, isFxdSrch:false, sbOpt:{ctr:null, smryMd:true}, pgSz:50, isDsbPrcSort:false, allowHistPushState:false}; this.opts = $jQ.extend(true, {}, defaults, opts || {}); this.curSort = {nm:JS_UTIL.getTranslated("Recommended"), fld:'rscr', asc:true}; this.init = function() { me.ctrJ = $jQ(me.opts.ctr); me.srchCtr = $jQ(".tSrchBxCtr", me.ctrJ); me.rsltCtr = $jQ(".tSrchRsltCtr", me.ctrJ); me.rsltMsgCtr = $jQ(".tSrchRsltMsgCtr", me.ctrJ); if (!me.opts.sbOpt.ctr) { me.opts.sbOpt.ctr = me.srchCtr; } if (!me.opts.sbOpt.srchCallback) { me.opts.sbOpt.srchCallback = function(el) { me.fetchResults.call(me, me.tSrchBx.getQueryJSON(), {isUpdHist:true, isReplaceHist:false, fltPrms:$jQ.param(me.tSrchBx.getQueryFiltersJSON())}); } } me.tSrchBx = new TripSearchBox(me, me.opts.sbOpt); me.tRsltO = new TripSearchResults(me, me.rsltCtr); if (me.opts.allowHistPushState) { HISTUTIL.bind(function(state) { if (!state || !state.srchO) return; me.tSrchBx.populateFields(state.srchO, state.srchFltrA); if (me.opts.sbOpt.srchCallback){ me.fetchResults.call(me, me.tSrchBx.getQueryJSON(), {isUpdHist:false, fltPrms:state.fltPrms}); } }); } } this.showSearchView = function(srchO, opts) { opts = $jQ.extend({}, {showSB:false, sbOpts:{smryMd:true}}, opts || {}); if (srchO) { me.opts.sbOpts = opts.sbOpts; me.tSrchBx.populateFields(srchO, null); if (opts.sbOpts.smryMd) me.tSrchBx.setSummaryMode(true, srchO); } if (opts.showSB) { me.tSrchBx.show(opts.sbOpts); } } this.parseAndShowResults = function(srchO, rsltO, opts) { opts = $jQ.extend({}, {loadClbk:null, isFltr:false, fltPrms:'', isUpdHist:false, isReplaceHist:false, isDsbScrl:true}, opts || {}); me.ctrJ.addClass('trpSrchWRslt'); if (opts.isUpdHist) { me.updateInHistory(srchO, {isReplace:opts.isReplaceHist, fltPrms:opts.fltPrms, srchPrms:me.opts.srchPrms}); opts.isReplaceHist = false; } opts.fltPrms = ''; me.parseResults(rsltO, opts); me.showResults(opts); } this.fetchResults = function(srchO, opts) { opts = $jQ.extend({}, {loadClbk:null, isFltr:false, fltPrms:'', isUpdHist:false, isReplaceHist:false}, opts || {}); if (!srchO) {srchO = me.tRsltO.srchO}; if (!srchO) srchO = me.tSrchBx.getQueryJSON(); var successFetch = function(a, m) { var rsltO = JS_UTIL.parseJSON(m); me.parseResults(rsltO, opts); me.showResults(opts); MODAL_PANEL.hide(); } AJAX_UTIL.abortAjaxRequest(this.trpSrchRequest); var prmO = me.tSrchBx.getQueryParams(srchO), fltPrms = opts.fltPrms; if (opts.isFltr && me.tRsltO.tFltrs) fltPrms = me.tRsltO.tFltrs.getAppliedFiltersQueryParams().join('&'); me.ctrJ.addClass('trpSrchWRslt'); opts.fltPrms = ''; this.trpSrchRequest = AJAX_UTIL.asyncCall('/t/search-x', {params: $jQ.param(prmO)+(fltPrms?'&'+fltPrms:'')+(me.opts.srchPrms?'&'+me.opts.srchPrms:''), timeout: 120000, scope: me, wait: {inDialog:true, showProgress:true, msg:JS_UTIL.getTranslated('Searching') + '...'}, success: {handler:successFetch, parseMsg:true}, error:{inDialog:false, handler:function(a, m) {MODAL_PANEL.hide(); me.showSearchMessage(m, true);}} }); if (opts.isUpdHist) { me.updateInHistory(srchO, {isReplace:opts.isReplaceHist, fltPrms:fltPrms, srchPrms:me.opts.srchPrms}); opts.isReplaceHist = false; } if (!opts.isFltr) me.showSearchMessage($jQ(`

Searching for trips...

`), true, false); } this.parseResults = function(rsltO, opts) { opts = $jQ.extend({}, {loadClbk:null}, opts || {}); me.tRsltO.setResults(rsltO, opts); if (opts.loadClbk) opts.loadClbk(rsltO); if (rsltO && rsltO.intrCtx) { INTERACTION_TRACKER.setContext(rsltO.intrCtx); } } this.showResults = function(opts) { opts = $jQ.extend({}, {resetFltr:false}, opts || {}); if (me.tRsltO.srchO) { me.tSrchBx.populateFields(me.tRsltO.rsltO.srchO, me.tRsltO.rsltO.appFltrs ? me.tRsltO.rsltO.appFltrs.map((afltrO) => ({name:afltrO.fd+'Fltr', value:afltrO.v})): null); me.tSrchBx.setSummaryMode(me.opts.sbOpts.smryMd, me.tRsltO.srchO); } if (!opts.isFltr && (!me.tRsltO.rsltO || !me.tRsltO.rsltO.rsltA)) { me.showSearchMessage(JS_UTIL.getTranslated('No_result_found'), true); } else { me.rsltCtr.show(); me.rsltMsgCtr.hide(); me.tRsltO.showResults(opts); } } this.showSearchMessage = function(msgJ, isErr) { me.rsltCtr.hide(); me.rsltMsgCtr.html(msgJ).show().toggleClass('tSrchRsltErrMsg', isErr); } this.openCreateTrip = function(srchO) { me.tSrchBx.openCreateTrip(srchO); } this.updateInHistory = function(srchO, opts) { if (!me.opts.allowHistPushState) return; opts = $jQ.extend({}, {isReplace:false}, opts || {}); if (srchO) { var urlPrms = me.tSrchBx.getQueryParams(srchO), url = me.opts.sbOpt.sOpts.baseURL; url = (me.opts.sbOpt.sOpts.isDstPkgSrch ? url: JS_UTIL.insAllParams(url, urlPrms)); if (opts.fltPrms) url += (url.indexOf('?') >= 0 ? '&': '?')+opts.fltPrms; if (opts.srchPrms) url += (url.indexOf('?') >= 0 ? '&': '?') + opts.srchPrms; var state = {noOvr:false, srchO:srchO, srchFltrA:me.tSrchBx.getQueryFiltersJSON(), fltPrms:opts.fltPrms, srchPrms:opts.srchPrms}; if (opts.isReplace) { window.history.replaceState(state, '', url); } else { HISTUTIL.push({url:url, state:state}, true); } } } me.init(); } function TripSearchResults(tSrchr, rsltCtr) { var me = this; me.tSrchr = tSrchr; me.rsltCtr = rsltCtr; me.srchO = null; me.trips = []; me.trpKeys = {}; me.fltdTrips = []; this.init = function() { me.rsltLstCtr = $jQ(".tRsltLst", me.rsltCtr); me.rsltFltrCtr = $jQ(".trpFltrsCtr", me.rsltCtr); me.rsltSortCtr = $jQ(".trpSortCtr", me.rsltCtr); me.rsltFltrApplCtr = $jQ(".tFltrApplCtr", me.rsltCtr); me.rsltFltrOpnActCtr = $jQ(".tRsltTlbr .tFltrOpnActCtr", me.rsltCtr); me.rsltOvlyCtr = $jQ(".tRsltSdSctOvly", me.rsltCtr); me.rsltFltrOpnActCtr.click(function() { me.rsltCtr.addClass('tSrchRslt-fopen'); return false; }); me.rsltOvlyCtr.click(function() { me.rsltCtr.removeClass('tSrchRslt-fopen'); return false; }); } this.clear = function() { me.trips = []; me.trpKeys = {}; me.fltdTrips = []; me.rsltO = null; me.tFltrs = null; } this.hasResults = function() { return !!me.rsltO; } this.setResults = function(rsltO, opts) { me.trips = []; me.trpKeys = {}; me.fltdTrips = []; me.rsltO = rsltO; if (!me.tFltrs || !opts || !opts.isFltr) { me.tFltrs = new TripSearchFilters(me.tSrchr, me); } if (!rsltO || !rsltO.rsltA) return; me.srchO = rsltO.srchO; $jQ.each(rsltO.rsltA, function(i, tO) { var tItm = new TripSearchResultItem(me.tSrchr, me, i, tO); me.trips.push(tItm); me.trpKeys[tO.id] = tItm; }); } this.showResults = function(opts) { opts = $jQ.extend({}, {resetFltr:false}, opts || {}); if (opts.resetFltr) { // me.tFltrs.resetApplied(); } if (!opts.fltrClbk) { opts.fltrClbk = function(sltdO) { if (sltdO && sltdO.isSort) { me.showResults(opts); return; } opts.isFltr = true; me.tSrchr.fetchResults(null, opts); } } me.rsltOvlyCtr.click(); me.filter(); me.sort(me.tSrchr.curSort.fld, me.tSrchr.curSort.asc); me.renderResultsFilters(opts); me.rsltLstCtr.html(''); $jQ.each(me.fltdTrips, function(i, tItm) { if (i == me.tSrchr.opts.pgSz) {return false;} me.rsltLstCtr.append(tItm.getNode().clone(true).attr('data-trp-key', tItm.tO.id)); }); if (me.fltdTrips.length > me.tSrchr.opts.pgSz) {addShowMoreResults(me.tSrchr.opts.pgSz);} if (me.fltdTrips.length == 0) { me.rsltLstCtr.append(`
${me.rsltO && me.rsltO.emsg ? me.rsltO.emsg: JS_UTIL.getTranslated('No_matching_results')} ${me.rsltO && me.rsltO.actA ? `
${me.rsltO.actA.map((actO) => `${actO.n}`).join('')}
`: ``}
`); } if (!opts.isDsbScrl) {JS_UTIL.scrollTo(me.rsltCtr, 200, {offset:-150});} else opts.isDsbScrl = false; } this.renderResultsFilters = function(opts) { me.tFltrs.renderFilters(me.rsltO, opts); } var addShowMoreResults = function(startIdx) { var mrJ = $jQ(`
Show more
`).appendTo(me.rsltLstCtr); $jQ('a', mrJ).click(function() { var idx = parseInt($jQ(this).attr('data-start-idx'), 10), fltdTrips = me.fltdTrips.slice(idx, idx + me.tSrchr.opts.pgSz); mrJ.remove(); $jQ.each(fltdTrips, function(i, tItm) { me.rsltLstCtr.append(tItm.getNode().clone(true).attr('data-trp-key', tItm.tO.id)); }); if (me.fltdTrips.length > (idx + me.tSrchr.opts.pgSz)) addShowMoreResults(idx + me.tSrchr.opts.pgSz); return false; }); } this.filter = function() { me.fltdTrips = []; $jQ.each(me.trips, function(i, tItm) { me.fltdTrips.push(tItm); }); } this.sort = function(srtKey, asc) { return me.fltdTrips.sort(function(t1, t2) { return (t1.sorts[srtKey] - t2.sorts[srtKey]) * (asc ? 1: -1); }); } me.init(); } function TripSearchResultItem(tSrchr, tRslt, idx, tO) { var me = this; this.tO = tO; this.tRslt = tRslt; this.tSrchr = tSrchr; this.init = function() { me.sorts = {rscr:idx, prc: me.tO.subA[0].prc}; me.makeHTML(); } this.makeHTML = function() { me.node = $jQ('#trpRsltItmTpl').clone().attr('id', '').data('trp', me.tO.id); if (me.tO.img) $jQ('.trp-pic', me.node).html(``); $jQ('.trp--nts .nts', me.node).text(me.tRslt.srchO && me.tRslt.srchO.ifs ? me.tO.dyD: me.tO.ntD); if (me.tO.mktD) $jQ('.trp--mkt', me.node).html(`
${me.tO.mktD}
`); else $jQ('.trp--mkt', me.node).remove(); if (me.tRslt.srchO && me.tRslt.srchO.ifs) { var aJ = $jQ('.trp--typ', me.node); if(me.tO.optr) { aJ.append(`
${me.tO.optr.lg ? ``: `${me.tO.optr.nm}`}
`); } if(me.tO.incF) { aJ.append(`
${JS_UTIL.getTranslated("Flight_Inclusive")}
`); }else { aJ.append(`
${JS_UTIL.getTranslated("Flight not included")}
`); } if(me.tO.grpT) { aJ.append(`
${JS_UTIL.getTranslated("Group_Tour")}
`); } } else { $jQ('.trp--typ', me.node).html(`
${me.tO.typD}
${me.tO.optr ? `
${me.tO.optr.lg ? ``: `${me.tO.optr.nm}`}`: ``}
`); } if (me.tO.urtO) { var rtO = me.tO.urtO; $jQ('.trp--typ', me.node).html(`
${rtO.rtTxt}
${rtO.numRt ? `
${JS_UTIL.getTranslated("num_ratings", {"num": `${rtO.numRt}`})}
`: ``}
${rtO.rt}
`); } $jQ('.name', me.node).text(me.tO.nm); if (me.tO.itnA) { $jQ('.trp--sub .sub', me.node).text(me.tO.itnA.join(', ')); } else if (me.tO.loc) { $jQ('.trp--sub .sub', me.node).text(me.tO.loc); } else $jQ('.trp--sub', me.node).remove(); if (me.tO.mtchT) { $jQ('.trp--mtch', me.node).text(me.tO.mtchT); } else $jQ('.trp--mtch', me.node).remove(); var hasTag = false; if (me.tO.tagA || me.tO.iPfd) { $jQ('.trp--tags', me.node).html(``); hasTag = true; } if (me.tO.ttypA) { var avlTvltyps = ["FRIENDS", "FAMILY", "FAMILY_WITH_CHILDREN", "FAMILY_WITH_INFANT", "WITH_BIG_CHILDREN", "SENIOR_CITIZENS", "COUPLE", "FEMALES_ONLY"]; $jQ('.trp--tags', me.node).html(``); hasTag = true; } if (!hasTag) $jQ('.trp--tags', me.node).remove(); if (me.tO.dlA) { $jQ('.trp--dls', me.node).html(`${me.tO.dlA.map((dlT) => `${dlT}`).join('')}`); } else $jQ('.trp--dls', me.node).parent(".trp-dls-wrap").remove(); if (me.tO.adv) { $jQ('.trp--dsc', me.node).text(me.tO.adv).addClass('trp--adv'); } else if (me.tO.dscA) { $jQ('.trp--dsc', me.node).html(`${me.tO.dscN && me.tO.dscN > me.tO.dscA.length ? `
+${me.tO.dscN-me.tO.dscA.length} more
`: ``}`); } else if (me.tO.dsc) { $jQ('.trp--dsc', me.node).text(me.tO.dsc).addClass(me.tO.typ == 'HOTEL' ? 'trp--hdsc': ''); } else $jQ('.trp--dsc', me.node).remove(); if (me.tRslt.srchO && me.tRslt.srchO.ifs) { if(me.tO?.dstSmryA){ var trpNts = $jQ(".trp--nts", me.node); trpNts.empty(); $jQ.each(me.tO.dstSmryA, function(i, smry){ trpNts.append(`${smry.val} ${smry.lbl} `); if(i . `); } }) } var staticInf = $jQ(".trp-stc-inf", me.node); if(me.tO?.blkOptO?.isAvl){ staticInf.append(`
${me.tO?.blkOptO?.txt}
`); } if(me.tO?.xclO?.isFR){ staticInf.append(`
${me.tO?.xclO?.txt}
`); } var tripIncLst = $jQ(".trip-inc-lst", me.node); $jQ.each(me.tO.incSmryA, function(i, inc){ tripIncLst.append(`

${inc.val}

${inc.lbl}

`); }) var hasMultipleSubs = me.tO.subA.length > 1, subCloneJ = $jQ('.trp-prc-ctr', me.node); var trpPrcBlk = $jQ('.trp-prc-blk', me.node); var wrap = $jQ('
'); if (hasMultipleSubs){ wrap.appendTo(trpPrcBlk);} $jQ.each(me.tO.subA, function(i, subO) { var subJ = subCloneJ; if (hasMultipleSubs) subJ = subCloneJ.clone(); if (subO.st) $jQ('.stars', subJ).html(`${subO.st} ${JS_UTIL.getTranslated("Hotel")}`); else $jQ('.stars', subJ).remove(); if (subO.oprcD) $jQ('.oprcD', subJ).html(subO.oprcD); else $jQ('.oprcD', subJ).remove(); $jQ('.prcD', subJ).html(subO.prcD); $jQ('.prcQ', subJ).html(subO.prcQ); $jQ('.trp-act a', subJ).attr('href', subO.url); if (subO.infA) { $jQ('.trp-inf-ctr', me.node).html(`${subO.infA.map((infO) => `
${infO.nm}
${infO.val}
`).join('')}`); } if (hasMultipleSubs) { wrap.append(subJ); trpPrcBlk.addClass('trp-sub-lst').find('.trp-inf-ctr').remove(); } }); if (false && hasMultipleSubs) { for (var i = 0; i < (3 - me.tO.subA.length); i++) { $jQ('.trp-prc-blk', me.node).prepend('
'); } } if (hasMultipleSubs) subCloneJ.remove(); } else { var subLstJ = $jQ('.trp-sub-lst', me.node); $jQ.each(me.tO.subA, function(i, subO) { var subJ = $jQ('#trpRsltSubItmTpl').clone().attr('id', ''); $jQ('.prcD', subJ).html(subO.prcD); $jQ('.prcQ', subJ).html(subO.prcQ); var subActJ = $jQ('.trp-sub-act a', subJ).attr('href', subO.url); if (subO.rnm || subO.cat) { $jQ('.trp-sub--nm .name', subJ).text(subO.rnm ? subO.rnm: subO.cat); } else if (subO.depA) { $jQ('.trp-sub--nm .name', subJ).html(`Departure - ${subO.depA[0]}${subO.depA.length > 1 ? `+${subO.depA.length-1} more`: ``}`); } // $jQ('.trp-sub--inc', subJ).html(`${subO.pincA.map((pincO) => ``).join('')}`); $jQ('.trp-sub--inc', subJ).html(`${subO.pincA.map((pincO) => `${pincO.n}`).join(' + ')}`); if (me.tO.typ == 'HOTEL') { $jQ('.trp-sub--cnt', subJ).html(`${subO.mpN ? `
${subO.mpN}
`: ``} ${subO.xpSmry ? `
${subO.xpSmry}
`: ``}`); } else { if (subO.st) $jQ('.trp-sub--nm .stars', subJ).html(`${Array(subO.st).fill().map((st) => ``).join('')}`); else $jQ('.trp-sub--nm .stars', subJ).remove(); if (subO.mtchT) $jQ('.trp-sub--cnt', subJ).append(`
${subO.mtchT}
`); if (subO.depA) subActJ.text('View Details'); if (subO.ctA) { $jQ('.trp-sub--sty', subJ).html(`${subO.ctA.map((cO, c) => `${c < 2 ? `
${subO.ctA.length > 1 ? cO.cnm + ' - ': ''}${cO.hnm}
`: ``}`).join('')} ${subO.ctA.length > 2 ? `
+${subO.ctA.length - 2} more
`: ``}`); } else $jQ('.trp-sub--sty', subJ).remove(); } subLstJ.append(subJ); }); var fltO = me.tRslt.rsltO.fltO ? me.tRslt.rsltO.fltO[me.tO.fltKy]: null; if (fltO) { var fltJ = $jQ(`
`).append(fltO.fltSD).append(`
${fltO.fltTxt}
`); subLstJ.append(fltJ); } } } var getProductIcon = function(ptyp) { switch(ptyp) { case 'FLIGHT': return 'icon-iconP-flight'; case 'HOTEL_ROOM': return 'icon-iconP-stay'; case 'TRANSFERS': return 'icon-iconP-car'; case 'SIGHTSEEING': return 'icon-iconP-sightseeing'; case 'MEAL_COUPONS': return 'icon-iconP-meals'; case 'VISA': return 'icon-Visa-Stamp'; } return ''; } this.getNode = function() { return me.node; } me.init(); } function TripSearchFilters(tSrchr, tRslt) { var me = this; me.tSrchr = tSrchr; me.tRslt = tRslt; this.fltsApplO = {}; this.applFltrA = []; this.renderFilters = function(rsltO, opts) { if (!rsltO.fltrs) { return; } me.fltsApplO = {}; me.applFltrA = []; var fltrsJ = $jQ('
'); $jQ.each(rsltO.fltrs.fltrA, function(i, fltrFld) { var fltrO = rsltO.fltrs[fltrFld]; if (!fltrO || !fltrO.shw) return true; var fJ = me.getFilterHTM(fltrO, opts); fltrsJ.append(fJ); }); me.tRslt.rsltFltrCtr.html(fltrsJ); me.tRslt.rsltFltrApplCtr.html(''); if (rsltO.appFltrs && rsltO.appFltrs.length > 0) { $jQ.each(rsltO.appFltrs, function(i, applFltrO) { var fO = {typ:applFltrO.ft, nm:applFltrO.fn, fld:applFltrO.fd}, fOpt = {nm:applFltrO.d, val:applFltrO.v}; var afJ = $jQ(`
${getFacetAppliedHTM(fO, fOpt)}
`).appendTo(me.tRslt.rsltFltrApplCtr); afJ.click(function() { me.updateAppliedFilter(fO, {val:fOpt.val}); if (opts && opts.fltrClbk) opts.fltrClbk(); return false; }); me.updateAppliedFilter(fO, fOpt); me.applFltrA.push({fO:fO, fOpt:fOpt}); }); if (rsltO.appFltrs.length > 1) { var afJ = $jQ(``).appendTo(me.tRslt.rsltFltrApplCtr); afJ.click(function() { me.fltsApplO = {}; me.applFltrA = []; if (opts && opts.fltrClbk) opts.fltrClbk(); return false; }); } } // me.tRslt.rsltFltrApplCtr.toggleClass('hide', me.applFltrA.length == 0); me.tRslt.rsltSortCtr.html(me.getSortHTM(opts)).toggleClass('hide', !me.tRslt.fltdTrips || me.tRslt.fltdTrips.length <= 2); } this.getFilterHTM = function(fO, opts) { var fJ = null, fCtrJ = null; fJ = $jQ(`
`); fCtrJ = $jQ('
').appendTo(fJ); if (fO.opts.length > 8 && (!me.tRslt.srchO || !me.tRslt.srchO.ifs)) {fCtrJ = $jQ('
').appendTo(fCtrJ);} if (fO.typ == 'HOTEL_ID') { var oJ = $jQ(`
`).appendTo(fCtrJ.addClass('ddMenuACCtr')); if (fO.opts && fO.opts.length > 0) { $jQ('input', oJ).val(fO.opts[0].nm); } var htlAC = new TFAutocomplete({inpF:$jQ('input', oJ), wclass:'tt-fwidth tt-minwidth tt-nowrap', acOpts: {highlight:true}, datasets:new TFACDataset({remote:{url:'/gen/msc/hotel-suggest'}, extraParams:{dst:me.tRslt.srchO.dstA[0].id+(me.tRslt.srchO.dacA ? ',' + me.tRslt.srchO.dacA.join(','): ''), iSlFw:true}}), events: {'select': function(e, item) { me.updateAppliedFilter(fO, {val:item.data.id}); if (opts && opts.fltrClbk) opts.fltrClbk(); }}}); } else if (fO.typ == 'NEAR_LOCATION_GEN') { var oJ = $jQ(`
`).appendTo(fCtrJ.addClass('ddMenuACCtr')); if (fO.opts && fO.opts.length > 0) { $jQ('input', oJ).val(fO.opts[0].nm); } var pAddrAC = new PAddrAutocompleter({addrInp:$jQ('input', oJ), wclass:'tt-fwidth tt-minwidth tt-nowrap', extraParams:{ptyp:'', did:me.tRslt.srchO.dstA[0].id}, callBk:function(rspO) { pAddrAC.setVal(rspO.pnm ? rspO.pnm: rspO.ad1); me.updateAppliedFilter(fO, {val:JS_UTIL.stringifyJSON(rspO)}); if (opts && opts.fltrClbk) opts.fltrClbk(); }}); } else { $jQ.each(fO.opts, function(i, fOpt) { var oJ = $jQ(`
${getFacetDisplayHTM(fO, fOpt)}
${fOpt.appl ? '': ''}
`); if (fOpt.appl) { } oJ.click(function() { me.updateAppliedFilter(fO, fOpt); if (opts && opts.fltrClbk) opts.fltrClbk(); return false; }); fCtrJ.append(oJ); }); } if (fO.expR) { var oJ = $jQ(`
`); $jQ("input", oJ).ionRangeSlider({type:'double', min:fO.ovlR.min, max:fO.ovlR.max, step:10, prettify_separator:' ', force_edges:true, show_min_max_a:false, prefix:fO.expRPx?fO.expRPx+' ':'', onFinish: function(data) { var sltdMin = data.from, sltdMax = data.to; if (data.from == data.min && data.to == data.max) {sltdMin = -1; sltdMax = -1;} me.updateAppliedFilter(fO, (sltdMin == -1) ? null: {val:sltdMin+'_'+sltdMax}); if (opts && opts.fltrClbk) opts.fltrClbk(); }}); if (fO.rval) { var sldr = $jQ("input", oJ).data('ionRangeSlider'), fOpt = {val:fO.rval, nm:fO.rvalD}; sldr.update({from:fO.rngL, to:fO.rngH}); // me.updateAppliedFilter(fO, fOpt); // me.applFltrA.push({fO:fO, fOpt:fOpt}); } fCtrJ.append(oJ); } return fJ; } var getFacetDisplayHTM = function(fO, fOpt) { if (fO.typ == 'STAR_RATING') { var st = parseInt(fOpt.val, 10); return `${Array(st).fill().map((st) => ``).join('')}`; } return fOpt.nm; } var getFacetAppliedHTM = function(fO, fOpt) { if (fO.typ == 'STAR_RATING') { var st = parseInt(fOpt.val, 10); return `${st} star`; } return fOpt.nm; } this.updateAppliedFilter = function(fO, fOpt) { var applOptA = me.fltsApplO[fO.fld]; if (!applOptA) { applOptA = []; me.fltsApplO[fO.fld] = applOptA; } var idx = fOpt ? $jQ.inArray(fOpt.val, applOptA): -1; if (idx >= 0) { applOptA.splice(idx, 1); } else { if (fO.iSngl) {applOptA = []; me.fltsApplO[fO.fld] = applOptA;} if (fOpt) applOptA.push(fOpt.val); } } this.getAppliedFiltersQueryParams = function() { var prmsA = []; $jQ.each(me.fltsApplO, function(fld, applOptA) { $jQ.each(applOptA, function(i, applOpt) { var prm = {}; prm[fld+'Fltr'] = applOpt; prmsA.push($jQ.param(prm)); }); }); return prmsA; } this.getSortHTM = function(opts) { var fSrtJ = $jQ('
').append(`
${JS_UTIL.getTranslated("Sort")}: ${me.tSrchr.curSort.nm}
`); var fSrtCtrJ = $jQ('
').append('
').appendTo(fSrtJ); fSrtCtrJ.append(getSortOptionHTM({nm:JS_UTIL.getTranslated("Recommended"), fld:'rscr', asc:true}, opts)); if (!me.tSrchr.opts.isDsbPrcSort) { fSrtCtrJ.append(getSortOptionHTM({nm:JS_UTIL.getTranslated("Price1"), fld:'prc', asc:true}, opts)); } return fSrtJ; } var getSortOptionHTM = function(srtO, opts) { var oJ = $jQ(`
${srtO.nm}
`); oJ.click(function() { me.tSrchr.curSort = srtO; if (opts && opts.fltrClbk) opts.fltrClbk({isSort:true}); return false; }); return oJ; } } function TripSearchBox(tSrchr, opts) { var me = this; me.tSrchr = tSrchr; var defaults = {ctr:null, srchCallback:null, sOpts:{mxRms:5, baseURL:'/t/search'}}; this.extSrchPrms = {}; this.isCreateTripOpened = false; this.cacheO = {dstAO:{}, dtsO:{}, dstCfgO:{}}; this.opts = $jQ.extend(true, {}, defaults, opts || {}); this.init = function() { me.sbCtr = $jQ(me.opts.ctr); me.sbJ = me.getSBHTML(); me.smrCtr = $jQ(".tSrchRsltSmry", me.sbJ); $jQ('a.trpSrchAct', me.sbJ).click(function() { var srchO = me.getQueryJSON(), errMsg = me.isValid(srchO); if (errMsg) {alert(errMsg); return false;} if (me.tSrchr.opts.isPgChgInSrch) { var fltrA = me.getQueryFiltersJSON(); document.location.href = JS_UTIL.insAllParams(me.opts.sOpts.baseURL, me.getQueryParams(srchO)) + (fltrA.length > 0 ? '&' + $jQ.param(fltrA): ''); return; } if (me.opts.srchCallback) { me.opts.srchCallback(this); } return false; }); } this.setSBSummary = function() { var srchO = me.getQueryJSON(); var mnth = ""; if(srchO.mnth) { mnth = DATE_CONSTANTS.MONTHS_SHORT[new Date(srchO.mnth.substring(0,2) + " " + srchO.mnth.substring(2,4) + " " + srchO.mnth.substring(4,8)).getMonth()] } var smtHTML = ` ${srchO.exctynm ? `from : ${srchO.exctynm}` : ``} ${srchO.durD ? ` | ${srchO.durD}` : ``} ${mnth ? ` | ${mnth}` : ``} `; if(srchO.dstA && srchO.dstA.length > 0){ $jQ(".tCity", me.smrCtr).html(srchO.dstA[0].nm) $jQ(".tCity", me.smrCtr).removeClass("hide"); } else { $jQ(".tCity", me.smrCtr).addClass("hide"); } $jQ(".smry", me.smrCtr).html(smtHTML); $jQ(".tSrchRsltSmry", me.sbJ).click(function() { MODAL_PANEL.show($jQ(me.sbJ), {blockClass:'wdBlk3 blockNoPad epSrchMdl', fullScreen:true, history:false}); }); } this.getSBHTML = function() { var sbJ = $jQ("#trpSrchBxTpl").clone().attr("id", "").show(), sOpts = me.opts.sOpts, tCfgO = sOpts.tCfgO; if (sOpts.tdt) $jQ('input[name="travelDate"]', sbJ).val(moment(sOpts.tdt, 'DD/MM/YYYY').format('DD MMM YYYY')).change(); if (sOpts.excty) { $jQ('input[name="exCityId"]', sbJ).val(sOpts.excty); $jQ('input[name="exCity"]', sbJ).val(sOpts.exctynm); } setupDestAC(sbJ, true); if (sOpts.isUseRtnDt) { $jQ('.trpSrchFld--tedt', sbJ).removeClass('hide'); $jQ('.trpSrchFld--dur', sbJ).addClass('hide'); if (sOpts.tedt) $jQ('input[name="travelEndDate"]', sbJ).val(moment(sOpts.tedt, 'DD/MM/YYYY').format('DD MMM YYYY')).change(); me.tvlDtPkr = new DatePick({fromInp:$jQ('input[name="travelDate"]', sbJ), toInp:$jQ('input[name="travelEndDate"]', sbJ), calO:{dateFormat:'dd M yyyy'}, fCalO:{onDate:function(dt) { var isSlct = isDateValid(dt, getAvailableDates(false)); return {selectable:isSlct, dateClass:isSlct?null:'not-avl'}; }}, tCalO:{onDate:function(dt) { var isSlct = isDateValid(dt, getAvailableDates(true)); return {selectable:isSlct, dateClass:isSlct?null:'not-avl'}; }}}); } else { if (sOpts.isUseMnth) { $jQ('select[name="month"]', sbJ).html(`${sOpts.mnthA.map((mnth) => ``).join('')}`); } else { me.tvlDtPkr = new DatePick({fromInp:$jQ('input[name="travelDate"]', sbJ), calO:{dateFormat:'dd M yyyy', onDate:function(dt) { var isSlct = isDateValid(dt, getAvailableDates(false)); return {selectable:isSlct, dateClass:isSlct?null:'not-avl'}; }}}); } $jQ('select[name="duration"]', sbJ).html(`${sOpts.durA.map((dur) => ``).join('')}`); } me.roomPax = new TFRoomPax({inpF:$jQ('input[name="roomspax"]', sbJ), smryCtr:$jQ('.rms-pax-inp-smry', sbJ), attachToParent:sbJ, maxRooms:sOpts.maxRms}); if (sOpts.paxO) { me.roomPax.setRooms(me.roomPax); } if (tCfgO && tCfgO.exCtyA) { var exInp = $jQ('input[name="exCity"]', sbJ); me.exCtyAC = new TFAutocomplete({inpF:exInp, wclass:'tt-minwidth', mclass:`tt-menu-cols ${sOpts.isRstExpDst ? 'tt-menu-col-2': ''}`, applyChromeACFix:false, acOpts: {highlight:true, minLength:0}, datasets:new TFACDataset({dsOpts:{local:tCfgO.exCtyA, identify:function(rsp) {return rsp.data.id}}, oOpts:{limit:100, display:function(item) {return item.data.nm}, templates:{suggestion:function(item) { return `
${item.data.nm}
${item.data.rnm ? `
${item.data.rnm}
`: ''}
`; }}}}), events: {'select': function(e, item) { $jQ('input[name="exCityId"]', me.sbJ).val(item.data.id); setupDestAC(me.sbJ, false); loadAvailableDates(); loadDestAvailConfig(); $jQ('input[name="exCityId"]', me.sbJ).val(item.data.id); me.exCtyAC.setVal(item.data.nm); }, 'noselect': function() { $jQ('input[name="exCityId"]', sbJ).val(''); }}}); exInp.focus(function() { me.exCtyAC.triggerQuery(''); }); } else { me.exCtyAC = new TFAutocomplete({inpF:$jQ('input[name="exCity"]', sbJ), wclass:'tt-minwidth', applyChromeACFix:false, acOpts: {highlight:true}, datasets:new TFACDataset({remote:{url:'/gen/msc/city-suggest'}, extraParams:function() {return {incCAr:false, isEx:true, flrAC:true, rstAvl:true};}}), events: {'select': function(e, item) { $jQ('input[name="exCityId"]', sbJ).val(item.data.id); if (sOpts.isRstExpDst) { setupDestAC(me.sbJ, false); } loadAvailableDates(); loadDestAvailConfig(); }, 'noselect': function() { $jQ('input[name="exCityId"]', sbJ).val(''); }}}); } if (sOpts.eoptA) { var optsCtr = $jQ('.trpSrchFld--eopts', sbJ); $jQ.each(sOpts.eoptA, function(i, optO) { var optJ = $jQ(`
`).appendTo(optsCtr); }); optsCtr.removeClass('hide'); } if (sOpts.dst) { $jQ('input[name="destId"]', sbJ).val(sOpts.dst.id); $jQ('input[name="destination"]', sbJ).val(sOpts.dst.nm); me.onDestSelect(sOpts.dst, sbJ); } $jQ('.trpSrchCrtAct', sbJ).add($jQ('.trpSrchCrtAct', me.tSrchr.ctrJ)).click(function() { me.openCreateTrip(null); return false; }); return sbJ; } function setupDestAC(sbJ, isInit) { var sOpts = me.opts.sOpts, tCfgO = sOpts.tCfgO; if ((tCfgO && tCfgO.exCtyA) || sOpts.isRstExpDst) { if (!me.dstAC) { var dstInp = $jQ('input[name="destination"]', sbJ); me.dstDataSet = new TFACDataset({dsOpts:{local:[], identify:function(rsp) {return rsp.data.id}, sorter:function(a, b) {return a.data.nm.localeCompare(b.data.nm);}}, oOpts:{limit:100, display:function(item) {return item.data.nm}, templates:{suggestion:function(item) { return `
${item.data.nm}
${item.data.rnm && !sOpts.isRstExpDst ? `
${item.data.rnm}
`: ''}
`; }}}}); me.dstAC = new TFAutocomplete({inpF:dstInp, wclass:'tt-minwidth', mclass:`tt-menu-cols ${sOpts.isRstExpDst ? 'tt-menu-col-2': ''}`, applyChromeACFix:false, acOpts: {highlight:true, minLength:0}, datasets:me.dstDataSet, events: {'select': function(e, item) { $jQ('input[name="destId"]', sbJ).val(item.data.id); me.onDestSelect(item.data, me.sbJ); }, 'noselect': function() { $jQ('input[name="destId"]', sbJ).val(''); me.onDestSelect(null, me.sbJ); }}}); dstInp.focus(function() { me.dstAC.triggerQuery(''); }); } var setupDestWithLocal = function(dstA) { me.dstDataSet.updateData(dstA); if (!isInit) { $jQ('input[name="destId"]', sbJ).val(''); me.dstAC.setVal(''); if (!me.dstAC.isFullScreen()) $jQ('input[name="destination"]', sbJ).focus(); } }; var exctyId = $jQ('input[name="exCityId"]', sbJ).val(); if (!exctyId) exctyId = '-1'; var dstA = me.cacheO.dstAO[exctyId]; if (dstA) { setupDestWithLocal(dstA); } else if (sOpts.isRstExpDst) { $jQ.ajax({url:'/gen/msc/regions-suggest', dataType:'json', data:{q:'', rstTyp:'tripexploredest', wcty:exctyId}, success:function(data) { me.cacheO.dstAO[exctyId] = data; setupDestWithLocal(data); }}); } else { $jQ.ajax({url:'/gen/msc/city-suggest', dataType:'json', data:{q:'', rstAvl:true, iRtnDst:true, wcty:exctyId}, success:function(data) { me.cacheO.dstAO[exctyId] = data; setupDestWithLocal(data); }}); } } else { me.dstAC = new TFAutocomplete({inpF:$jQ('input[name="destination"]', sbJ), wclass:'tt-minwidth', applyChromeACFix:false, acOpts: {highlight:true}, datasets:new TFACDataset({remote:{url:'/gen/msc/regions-suggest'}, extraParams:function() {return {flrEC:true, rstAvl:true, incCStAr:true, wcty:$jQ('input[name="exCityId"]', sbJ).val()};}, oOpts:{display:function(item) {return item.data.nm}, templates:{suggestion:function(item) { return `
${item.data.nm}
${item.data.rnm ? `
${item.data.rnm}${item.data.typ ? ` - ${item.data.typ}`: ``}
`: `${item.data.typ ? `
${item.data.typ}
`:''}`}
`; }}}}), events: {'select': function(e, item) { $jQ('input[name="destId"]', sbJ).val(item.data.id); me.onDestSelect(item.data, me.sbJ); }, 'noselect': function() { $jQ('input[name="destId"]', sbJ).val(''); me.onDestSelect(null, me.sbJ); }}}); } } function loadAvailableDates() { if (!me.opts.sOpts.tCfgO || !me.opts.sOpts.tCfgO.isRstDt) return; var exctyId = $jQ('input[name="exCityId"]', me.sbJ).val(); var dstId = $jQ('input[name="destId"]', me.sbJ).val(); if (!exctyId) exctyId = '-1'; if (!dstId) dstId = '-1'; if (!exctyId || exctyId == '-1' || !dstId || dstId == '-1') return; if (me.cacheO.dtsO[exctyId+'_'+dstId] && me.cacheO.dtsO[dstId+'_'+exctyId]) { validateTravelDate(me.cacheO.dtsO[exctyId+'_'+dstId], me.cacheO.dtsO[dstId+'_'+exctyId]); return; } var successLoad = function(a, m) { var rspO = JS_UTIL.parseJSON(m); me.cacheO.dtsO[exctyId+'_'+dstId] = rspO.dates ? rspO.dates: {}; me.cacheO.dtsO[dstId+'_'+exctyId] = rspO.rdates ? rspO.rdates: {}; validateTravelDate(rspO.dates, rspO.rdates); }; var prmO = {fromCty:exctyId, toDst:dstId, isRvsSct:true, isRtnDsbDt:false}; AJAX_UTIL.asyncCall('/gen/msc/get-operating-dates', {params:$jQ.param(prmO), scope: this, wait: {msg:'', inDialog:false}, error: {inDialog:false}, success: {parseMsg:true, inDialog:false, handler:successLoad} }); } function validateTravelDate(dtsO, rdtsO) { if (me.opts.sOpts.isUseMnth) return; if (dtsO) { var tdt = moment($jQ('input[name="travelDate"]', me.sbJ).val(), 'DD MMM YYYY'); if (!tdt.isValid() || !isDateValid(tdt.toDate(), dtsO)) { $jQ('input[name="travelDate"]', me.sbJ).val(''); } } if (me.opts.sOpts.isUseRtnDt && rdtsO) { var tdt = moment($jQ('input[name="travelEndDate"]', me.sbJ).val(), 'DD MMM YYYY'); if (!tdt.isValid() || !isDateValid(tdt.toDate(), rdtsO)) { $jQ('input[name="travelEndDate"]', me.sbJ).val(''); } } } function loadDestAvailConfig() { if (!me.opts.sOpts.isUseMnth) return; var exctyId = $jQ('input[name="exCityId"]', me.sbJ).val(); var dstId = $jQ('input[name="destId"]', me.sbJ).val(); if (!exctyId) exctyId = '-1'; if (!dstId) dstId = '-1'; if (!exctyId || exctyId == '-1' || !dstId || dstId == '-1') { updateForDestAvailConfig(null); return; } if (me.cacheO.dstCfgO[exctyId+'_'+dstId]) { updateForDestAvailConfig(me.cacheO.dstCfgO[exctyId+'_'+dstId]); return; } var successLoad = function(a, m) { var rspO = JS_UTIL.parseJSON(m); me.cacheO.dstCfgO[exctyId+'_'+dstId] = rspO; updateForDestAvailConfig(rspO); }; var prmO = {fromCty:exctyId, toDst:dstId}; AJAX_UTIL.asyncCall('/t/load-dest-search-config', {params:$jQ.param(prmO), scope: this, wait: {msg:'', inDialog:false}, error: {inDialog:false}, success: {parseMsg:true, inDialog:false, handler:successLoad} }); } function updateForDestAvailConfig(dstCfgO) { var durJ = $jQ('select[name="duration"]', me.sbJ); var fltdDurA = [], durA = me.opts.sOpts.durA; if (dstCfgO && dstCfgO.durA) { $jQ.each(me.opts.sOpts.durA, function(i, durO) { var isValidDur = false; if (!durO.id) isValidDur = true; $jQ.each(dstCfgO.durA, function(j, dur) { if (dur >= durO.mn && dur <= durO.mx) { isValidDur = true; return false; } }); if (isValidDur) fltdDurA.push(durO); }); durA = fltdDurA; } durJ.html(`${durA.map((dur) => ``).join('')}`); } function getAvailableDates(inRvs) { var exCtyId = $jQ('input[name="exCityId"]', me.sbJ).val(), dstId = $jQ('input[name="destId"]', me.sbJ).val(); return me.cacheO.dtsO[inRvs ? dstId+'_'+exCtyId: (exCtyId+'_'+dstId)]; } function isDateValid(dt, dtsO) { if (!dt) return false; if (!dtsO || $jQ.isEmptyObject(dtsO)) return true; var dtO = moment(dt); dtsO = dtsO[dtO.year()]; if (!dtsO) return false; dtsO = dtsO[dtO.month()]; if (!dtsO) return false; return $jQ.inArray(dtO.date(), dtsO) >= 0; } this.onDestSelect = function(dst, sbJ) { $jQ('.trpSrchFldForCty', sbJ).toggleClass('hide', dst && !dst.iCy) loadAvailableDates(); loadDestAvailConfig(); } this.getQueryJSON = function() { var srchO = {}; var dst = $jQ('input[name="destId"]', me.sbJ).val(), durJ = $jQ('select[name="duration"]', me.sbJ); if ($jQ.isNumeric(dst)) srchO.dstA = [{id:parseInt(dst, 10), nm:$jQ('input[name="destination"]', me.sbJ).val()}]; if (me.opts.sOpts.isUseRtnDt) { var tdtD = moment($jQ('input[name="travelEndDate"]', me.sbJ).val(), 'DD MMM YYYY'); srchO.tedt = tdtD.isValid() ? tdtD.format('DD/MM/YYYY'): null; } else { srchO.dur = durJ.val(); srchO.durD = $jQ('option:selected', durJ).text(); } var excty = $jQ('input[name="exCityId"]', me.sbJ).val(), ntn = $jQ('select[name="nationality"]', me.sbJ).val(); if ($jQ.isNumeric(excty)) {srchO.excty = parseInt(excty, 10); srchO.exctynm = $jQ('input[name="exCity"]', me.sbJ).val();} if (me.opts.sOpts.isUseMnth) { srchO.mnth = $jQ('select[name="month"]', me.sbJ).val(); } else { var tdtD = moment($jQ('input[name="travelDate"]', me.sbJ).val(), 'DD MMM YYYY'); srchO.tdt = tdtD.isValid() ? tdtD.format('DD/MM/YYYY'): null; } if ($jQ.isNumeric(ntn)) srchO.ntn = parseInt(ntn, 10); srchO.px = me.roomPax.getRooms(); if (me.extSrchPrms.st) srchO.st = me.extSrchPrms.st; if (me.extSrchPrms.tvt) srchO.tvt = me.extSrchPrms.tvt; if (me.extSrchPrms.ld) srchO.ld = me.extSrchPrms.ld; if (me.tSrchr.opts.isFxdSrch) srchO.ifs = true; return srchO; } this.getQueryFiltersJSON = function() { var fltrA = []; $jQ('input[name$=Fltr]:visible', me.sbJ).each(function() { var iJ = $jQ(this); if (iJ.is(':checked')) { fltrA.push({name:iJ.attr('name'), value:iJ.attr('value')}); } }); return fltrA; } this.populateFields = function(srchO, srchFltrA) { if (!srchO) return; var tdtD = moment(srchO.tdt, 'DD/MM/YYYY'); $jQ('input[name="exCityId"]', me.sbJ).val(srchO.excty ? srchO.excty: -1); me.exCtyAC.setVal(srchO.exctynm ? srchO.exctynm: ''); if (srchO.dstA && srchO.dstA.length > 0) { $jQ('input[name="destId"]', me.sbJ).val(srchO.dstA[0].id); me.dstAC.setVal(srchO.dstA[0].nm); loadAvailableDates(); loadDestAvailConfig(); } if (srchO.dur) $jQ('select[name="duration"]', me.sbJ).val(srchO.dur); if (srchO.tedt) $jQ('input[name="travelEndDate"]', me.sbJ).val(moment(srchO.tedt, 'DD/MM/YYYY').format('DD MMM YYYY')).change(); if (me.opts.sOpts.isUseMnth) { if (srchO.mnth) $jQ('select[name="month"]', me.sbJ).val(srchO.mnth).change(); } else $jQ('input[name="travelDate"]', me.sbJ).val(tdtD.format('DD MMM YYYY')).change(); if (srchO.px) me.roomPax.setRooms(srchO.px); if (srchO.st) me.extSrchPrms.st = srchO.st; if (srchO.tvt) me.extSrchPrms.tvt = srchO.tvt; if (srchO.ld) me.extSrchPrms.ld = srchO.ld; if (srchFltrA) { $jQ('input[name$=Fltr]', me.sbJ).prop('checked', false); if (srchFltrA.length > 0) { $jQ.each(srchFltrA, function(i, srchFltr) { $jQ('input[name="' + srchFltr.name + '"][value="' + srchFltr.value +'"]', me.sbJ).prop('checked', true); }); } } me.setSBSummary(); } this.getQueryParams = function(srchO) { var prmO = {}; if (!srchO) return prmO; // prmO.trpsrch = JS_UTIL.stringifyJSON(srchO); prmO.destIds = srchO.dstA ? srchO.dstA.map((dstO) => dstO.id).join(','): ''; if (me.opts.sOpts.isUseRtnDt) { if (srchO.tedt) prmO.tedate = srchO.tedt; } else { if (srchO.dur) prmO.duration = srchO.dur; } if (srchO.mnth) prmO.mnth = srchO.mnth; if (srchO.tdt) prmO.tdate = srchO.tdt; if (srchO.excty && srchO.excty > 0) prmO.exCityId = srchO.excty; if (srchO.ntn) prmO.nationality = srchO.ntn; if (srchO.px) prmO.roomspax = JS_UTIL.stringifyJSON(srchO.px); if (srchO.st) prmO.starPref = srchO.st; if (srchO.tvt) prmO.tvlrTyp = srchO.tvt; if (srchO.ld) prmO.ldId = srchO.ld; if (me.tSrchr.opts.isFxdSrch) prmO.ifs = true; return prmO; } this.show = function(opts) { opts = $jQ.extend({}, {inPopup:true}, opts || {}); if (opts.inPopup) { MODAL_PANEL.show(me.sbJ, {blockClass:'wdBlk3 blockNoPad', fullScreen:true, history:false}); } else { me.sbCtr.html(me.sbJ); } } this.setSummaryMode = function(isSmryMd, srchO) { if (!srchO) srchO = me.srchO; if (isSmryMd) { var smryJ = me.getSummaryHTML(srchO); if (smryJ) {me.sbCtr.html(smryJ);} else {isSmryMd = false;} } else if (srchO) { if (srchO.dstA && srchO.dstA.length > 0 && srchO.dstA[0].img) me.sbCtr.css('backgroundImage', "url('" + srchO.dstA[0].img + "')"); } me.sbCtr.toggleClass('trpSrchSmryMd', isSmryMd); } this.getSummaryHTML = function(srchO) { if (!srchO) return null; var smryJ = $jQ('#trpSrchSmryTpl').clone().attr('id', ''); if (srchO.dstA && srchO.dstA.length > 0 && srchO.dstA[0].img) smryJ.css('backgroundImage', "url('" + srchO.dstA[0].img + "')"); $jQ('.smry--dst', smryJ).text(srchO.dstA && srchO.dstA.length > 0 ? srchO.dstA[0].nm: ''); // $jQ('', smryJ).text(srchO.exctynm ? srchO.exctynm: ''); $jQ('.smry--dur', smryJ).text(srchO.durD ? srchO.durD: ''); $jQ('.smry--tdt', smryJ).text(srchO.tdt ? moment(srchO.tdt, 'DD/MM/YYYY').format('DD MMM YYYY'): ''); $jQ('.smry--pax', smryJ).text(me.roomPax.getSummary(srchO.px).join(', ')); $jQ('.smry-act', smryJ).click(function() { me.show({inPopup:true}); return false; }); return smryJ; } this.setListingView = function(rsltO) { me.sbCtr.hide(); } this.isValid = function(srchO) { if (!srchO) {srchO = me.srchO;} if (!srchO) {return "Please check all information has been provided";} if (!me.tSrchr.opts.isFxdSrch && (!srchO.dstA || srchO.dstA.length == 0)) {return "Please provide valid destination";} if (!me.opts.sOpts.isUseMnth && !srchO.tdt) {return "Please select a valid travel date";} return null; } this.openCreateTrip = function(srchO) { if (window.PkgCitiesCfg === undefined) return; if (!srchO) srchO = me.getQueryJSON(); if (srchO) { if (srchO.excty) PkgCitiesCfg.setField('exCity', {id:srchO.excty, nm:srchO.exctynm}); if (srchO.tdt) PkgCitiesCfg.setField('travelDt', moment(srchO.tdt, 'DD/MM/YYYY').format('DD MMM YYYY')); if (srchO.px) PkgCitiesCfg.setField('pax', srchO.px); } if (!me.isCreateTripOpened) PkgCitiesCfg.addCity(null, JS_UTIL.isMobile()); me.isCreateTripOpened = true; PkgCitiesCfg.show({panel:{history:false}}); } me.init(); }