var DATE_CONSTANTS = new function () { return { MONTHS_SHORT : ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], MONTHS_LONG: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], WEEKDAYS_1CHAR: ["S", "M", "T", "W", "T", "F", "S"], WEEKDAYS_SHORT: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], WEEKDAYS_MEDIUM: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], WEEKDAYS_LONG: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] }; } var DAYS_IN_MONTH = new Array(); DAYS_IN_MONTH[1] = 31; DAYS_IN_MONTH[2] = 29; DAYS_IN_MONTH[3] = 31; DAYS_IN_MONTH[4] = 30; DAYS_IN_MONTH[5] = 31; DAYS_IN_MONTH[6] = 30; DAYS_IN_MONTH[7] = 31; DAYS_IN_MONTH[8] = 31; DAYS_IN_MONTH[9] = 30; DAYS_IN_MONTH[10] = 31; DAYS_IN_MONTH[11] = 30; DAYS_IN_MONTH[12] = 31; var SERVER_VARS = {}; var JS_UTIL = new function () { this.dateSeparator = '/'; this.custom_unescape =function(str) { str = "" + str; while (true) { var i = str . indexOf ('+'); if (i < 0) break; str = str . substring (0, i) + '%20' + str . substring (i + 1, str . length); } return unescape (str); }; this.leadingZeros = function(nr,num) { if((parseInt(nr,10) == nr) && (parseInt(num,10) != NaN)){ while((""+nr).length < num) { nr = "0"+nr; } return nr; } return null; }; this.stripZeros = function(inputStr) { var result = inputStr while (result.substring(0,1) == "0") { result = result.substring(1,result.length) } return result }; this.cutLargeText = function(s, len, apEl) { if (!s) return ''; if (len <=0 || s.length <= len) return s; return s.substr(0, len)+(apEl?'...':''); }; this.keepAlphaNumeric = function(s) { if (!s) return ''; return s.replace(/[^a-z0-9]+/g, ""); } this.getDurationMinDisplay = function(durMin, hrS, mnS) { return (durMin >= 60 ? Math.floor(durMin /60) + (hrS?hrS:"h")+ " ":"") + ((durMin == 0 || durMin % 60 > 0) ?durMin % 60 + (mnS?mnS:"m"):''); } this.parseDate = function(str) { var dt; if(typeof(str) == 'string') { var el = str.split(this.dateSeparator); if(el.length ==3) { el[0] = this.stripZeros(el[0]); el[1] = this.stripZeros(el[1]); el[2] = this.stripZeros(el[2]); dt = new Date(); dt.setFullYear(parseInt(el[2]),parseInt(el[1])-1,parseInt(el[0])); if(isNaN(dt.getTime()) || el[0] != dt.getDate() || el[1] != dt.getMonth()+1 || dt.getFullYear() != el[2]) return; return dt; } } }; this.parseStandardDate = function(str) { var a = $jQ.map(str.split(/[^0-9]/), function(s) { return parseInt(s, 10) }); return new Date(a[0], a[1]-1 || 0, a[2] || 1, a[3] || 0, a[4] || 0, a[5] || 0, a[6] || 0); } this.getDisplayTime =function(tm) { return this.leadingZeros(tm.getHours(),2) +':'+ this.leadingZeros(tm.getMinutes(),2) ; } this.getDisplayDateLong = function(dt) { return DATE_CONSTANTS.WEEKDAYS_LONG[dt.getDay()]+', '+ dt.getDate()+ ' ' +DATE_CONSTANTS.MONTHS_LONG[dt.getMonth()] + ' ' + dt.getFullYear(); }; this.getDisplayDate = function(dt) { return DATE_CONSTANTS.WEEKDAYS_MEDIUM[dt.getDay()]+', '+ this.getDisplayDateShort(dt) + ' ' + dt.getFullYear(); }; this.getDisplayDateShort = function(dt) { return dt.getDate()+ ' ' +DATE_CONSTANTS.MONTHS_SHORT[dt.getMonth()]; } this.getSearchDisplayDate = function(dt) { return this.leadingZeros(dt.getDate(),2) + "/" + this.leadingZeros(dt.getMonth()+1,2) + "/" + this.fixYear(dt.getYear()); }; this.getStandardDisplayDate = function(dt) { return this.fixYear(dt.getYear()) + '-'+this.leadingZeros(dt.getMonth()+1,2) + "-" +this.leadingZeros(dt.getDate(),2); }; this.getShortDisplayDate = function(dt) { return $jQ.datepick.formatDate('dd M yyyy', dt); }; this.getLongDisplayDate = function(dt) { return $jQ.datepick.formatDate('DD, d M yyyy', dt); }; this.addValueToSelectBox = function(formElement, value, desc) { var len = formElement.length; formElement.length = len + 1; formElement[len].text = desc; formElement[len].value = value; } this.getSelectBoxValue = function (formElement) { var selIdx = formElement.selectedIndex; if (selIdx < 0 || selIdx >= formElement.length) { return ''; } return formElement[selIdx].value; } this.setSelectBoxByValue = function (formElement, value) { for (var i = 0; i < formElement.length; i++) { if (formElement[i].value == value) { formElement.value=value; formElement.selectedIndex = i; return i; } } return -1; } this.setRadioButtonByValue = function(formElement, value) { for (var i = 0; i < formElement.length; i++) { if (formElement[i].value == value) { formElement[i].checked = true; return i; } } return -1; } this.setCheckBoxByValue = function (formElement, value) { for (var i = 0; i < formElement.length; i++) { if (formElement[i].value == value) { formElement[i].checked = true; return i; } } return -1; } this.setSelectBoxByText = function (formElement, text) { for (var i = 0; i < formElement.length; i++) { if (formElement[i].text == text) { formElement.value=formElement[i].value; formElement.selectedIndex = i; return i; } } return -1; } this.setSelectBoxByValueOrText = function (formElement, value,text) { for (var i = 0; i < formElement.length; i++) { if (formElement[i].value == value) { formElement.value=value; formElement.selectedIndex = i; return i; } else if(formElement[i].text ==text) { formElement.value=formElement[i].value; formElement.selectedIndex = i; return i; } } return -1; } this.setRadioButtonByValue = function (formElement, value) { for (var i = 0; i < formElement.length; i++) { if (formElement[i].value == value) { formElement[i].checked = true; return i; } } return -1; } this.isInteger = function(s) { var i; for (i = 0; i < s.length; i++) { var c = s.charAt(i); if (((c < "0") || (c > "9"))) { return false; } } return true; } this.isFloat = function (s) { var i; var decimal = false; for (i = 0; i < s.length; i++) { var c = s.charAt(i); if (c == ".") { if (decimal == true) { return false; } decimal = true; continue; } if (((c < "0") || (c > "9"))) { return false; } } return true; } this.stripChars = function(str, stripStr) { var i; var returnString = ""; for (i = 0; i < str.length; i++){ var c = str.charAt(i); if (stripStr.indexOf(c) == -1) { returnString += c; } } return returnString; } this.numDaysInFebForYear = function(year) { return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 ); } this.isValidDate = function(dtStr) { var pos1 = dtStr.indexOf("/"); var pos2 = dtStr.indexOf("/",pos1+1); var strDay = dtStr.substring(0,pos1); var strMonth = dtStr.substring(pos1+1,pos2); var strYear = dtStr.substring(pos2+1); strYr = strYear; if (dtStr.indexOf("/",pos2+1) != -1 || this.isInteger(this.stripChars(dtStr, "/"))==false){ return false; } if (strDay.charAt(0) == "0" && strDay.length > 1) { strDay = strDay.substring(1); } if (strMonth.charAt(0) == "0" && strMonth.length > 1) { strMonth = strMonth.substring(1); } for (var i = 1; i <= 3; i++) { if (strYr.charAt(0) == "0" && strYr.length > 1) { strYr = strYr.substring(1); } } month = parseInt(strMonth); day = parseInt(strDay); year = parseInt(strYr); if (pos1 == -1 || pos2 == -1){ return false; } if (strMonth.length < 1 || month < 1 || month > 12){ return false; } if (strDay.length < 1 || day < 1 || day > 31 || (month == 2 && day > (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 )) || day > DAYS_IN_MONTH[month]){ return false; } if (strYear.length != 4 || year == 0 || year < 1900 || year > 2100){ return false; } return true; } this.validatePhone = function(checkStr) { var checkOK = "0123456789+- ,"; for (var i = 0; i < checkStr.length; i++) { ch = checkStr.charAt(i); for (var j = 0; j < checkOK.length; j++) { if (ch == checkOK.charAt(j) ) { break; } } if (j == checkOK.length) { return false; } } return true; } this.getTranslated = function(tKey, varO) { if (!tKey) return ''; var txt = _tltData[tKey]; if (!txt) return tKey; if (varO) { for (var key in varO) { var repT = varO[key]; if (!repT) repT = ''; txt = txt.replace('$'+key+'$', repT); } } return txt; } this.validateMobile = function(mobileNumber) { var filter = /^[0-9-+]{8,15}$/; if (filter.test(mobileNumber)) { return true; } else { return false; } } this.validatePassword = function(checkStr) { var checkOK = "0123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*()-_+={}[]|:;<,>.?~"; for (var i = 0; i < checkStr.length; i++) { ch = checkStr.charAt(i).toLowerCase(); for (var j = 0; j < checkOK.length; j++) { if (ch == checkOK.charAt(j) ) { break; } } if (j == checkOK.length) { return false; } } return true; } this.validateEmail = function(checkStr) { return checkStr.match(/^[\w-.+]+@[a-zA-Z0-9.-]+\.[a-zA-z0-9]{2,10}$/); } this.validateInteger = function(checkStr) { return checkStr.match(/(^-?\d\d*$)/); } this.validateNumeric = function(checkStr) { return checkStr.match(/(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/); } this.validateName = function(name, isEng) { var filter = /^[\p{L}'-. ]{1,50}$/u; if(isEng){ filter = /^[a-zA-Z '-.]{1,50}$/u; } if (filter.test(name)) { return true; } else { return false; } } this.formatNumber = function(n, opts) { opts = $jQ.extend({}, {style:'decimal', maximumFractionDigits:2}, opts || {}); return Intl.NumberFormat(undefined, opts).format(n); } this.padNumber2Digit = function(num) { var ret = '' + num; if (num < 10) { ret = '0' + ret; } return ret; } this.addDays = function(dt, n) { var dateArray1 = dt.split("/"); var givenDate = Date.parse(dateArray1[2] + "-" + dateArray1[1] + "-" + dateArray1[0]); var time = new Date(givenDate.getTime() + n*1000*60*60*24); return this.padNumber2Digit(time.getDate()) + "/" + this.padNumber2Digit(time.getMonth()+1) + "/" + this.fixYear(time.getYear()); } this.getDaysDiff = function(d1, d2, ignTm) { if (ignTm) {d1 = moment(d1).clone().second(0).minute(0).hour(0).toDate(); d2 = moment(d2).clone().second(0).minute(0).hour(0).toDate();} return (d2.getTime()-d1.getTime())/(86400*1000); } this.getYearsDiff = function(d1, d2) { var startDate = new Date(d1); var endDate = d2?new Date(d2):new Date(); var yearDiff = endDate.getFullYear() - startDate.getFullYear(); if (startDate.getMonth() > endDate.getMonth()) { yearDiff--; } else if (startDate.getMonth() === endDate.getMonth()) { if (startDate.getDate() > endDate.getDate()) { yearDiff--; } else if (startDate.getDate() === endDate.getDate()) { if (startDate.getHours() > endDate.getHours()) { yearDiff--; } else if (startDate.getHours() === endDate.getHours()) { if (startDate.getMinutes() > endDate.getMinutes()) { yearDiff--; } } } } return yearDiff; } this.addDaysToDate = function(dt, days, newDate) { if (newDate) { var d = new Date(dt.getTime()); d.setDate(d.getDate() + days); return d; } dt.setDate(dt.getDate() + days); return dt; } this.addMinutesToDate = function(dt, min, newDate) { if (newDate) { var d = new Date(dt.getTime()); d.setTime(d.getTime() + (min*60*1000)); return d; } dt.setTime(dt.getTime() + (min*60*1000)); return dt; } this.compareDates = function(dt1, dt2) { var dateArray1 = dt1.split("/"); var givenDate1 = Date.parse(dateArray1[2] + "-" + dateArray1[1] + "-" + dateArray1[0]); dateArray1 = dt2.split("/"); var givenDate2 = Date.parse(dateArray1[2] + "-" + dateArray1[1] + "/" + dateArray1[0]); if (givenDate1 < givenDate2) { return -1; } else if (givenDate1 == givenDate2) { return 0; } else { return 1; } } this.getCurrentDate = function () { var time = new Date(new Date().getTime()); return this.leadingZeros(time.getDate(),2) + "/" + this.leadingZeros(time.getMonth()+1,2) + "/" + this.fixYear(time.getYear()); } this.fixYear = function (num) { var ret = '' + num; if (num < 1900) {ret = num + 1900; } return ret; } this.setDateElements =function(dt, dayElement, monthElement, yearElement) { var dateObj = this.parseDate(dt); dayElement.value = dateObj.getDate(); monthElement.value = dateObj.getMonth() +1; yearElement.value = dateObj.getFullYear(); } this.getYUICalDate = function (dt) { return this.leadingZeros(dt.getMonth()+1,2) + "/" + this.leadingZeros(dt.getDate(),2) + "/" + this.fixYear(dt.getYear()); } this.setDateFields = function(dtD, dField, mField, yField) { if (!dtD) return; if (dField) dField.value = dtD.getDate(); if (mField) mField.value = dtD.getMonth() +1; if (yField) yField.value = dtD.getFullYear(); } this.setTimeInDateFromField = function(dt, hField, mField, tField) { var hours = parseInt(hField.value, 10); if (tField.value == 'AM') { hours = (hours == 12) ? 0: hours; dt.setHours(hours); } else { hours += 12; hours = (hours == 24) ? 12: hours; dt.setHours(hours); } dt.setMinutes(parseInt(mField.value, 10)); return dt; } this.populateTimeFields = function(hField, mField, tField, ft) { hField.length = 12; mField.length = ft?60:4; tField.length = 2; for (var i=0; i<12; i++) { hField[i].value = this.leadingZeros(i + 1, 2); hField[i].text = i + 1; } for (var i=0; i 12) ? hour - 12: hour, 2); mField.value = ft?this.leadingZeros(time.getMinutes(), 2):this.leadingZeros(15 * Math.floor(time.getMinutes()/15), 2); tField.value = (hour >= 12) && (time.getHours()!=0) ? "PM": "AM"; } this.setTimeFields = function(time, hField, mField, tField) { var strArr = time.split(":"); if (strArr && strArr!='') { hField.value = strArr[0]; var strArr2 = strArr[1].split(" "); mField.value = strArr2[0]; tField.value = strArr2[1]; } } this.addTimeField = function(tJ, fm, to, i, isAP, isNoAPInVal) { var tJ = $jQ(tJ); for (var hr = fm; hr <= to; hr++) { var hr12 = (hr > 12 && isAP) ? hr - 12: hr; hr12 = hr12 < 10 ? '0' + hr12: hr12; var hr24 = hr < 10 ? '0' + hr: hr; var a = isAP ? ((hr > 11) ? ' PM':' AM'):''; for (var mn = 0; mn < 60; mn+=i) { var mn0 = mn < 10 ? '0' + mn: mn; var tmD = hr12+':'+mn0+a; var tmVal = isNoAPInVal ? hr24+':'+mn0: tmD; tJ.append(''); } } } this.setTimeFieldFromDate = function(tJ, time, isAP) { if (!tJ || !time) return; var tJ = $jQ(tJ), hr = time.getHours(), mn = time.getMinutes(); tJ.val(this.leadingZeros((isAP && hr > 12) ? hr - 12: hr, 2)+':'+this.leadingZeros(mn, 2)); } this.parseTime = function(t) { var d = new Date(), time = t.match( /(\d+)(?::(\d\d))?\s*(p?)/ ); d.setHours(parseInt( time[1]) + (time[3] ? 12 : 0)); d.setMinutes(parseInt(time[2]) || 0); return d; } this.addDurationMinField = function(dJ, fm, to, hrS, mnS, iOA) { if (!dJ || to < fm) return; if (!iOA || iOA.length == 0) iOA = [[115, 5], [6*60-15, 15], [12*60-30, 30], [23*60, 60], [-1, 24*60]]; var dJ = $jQ(dJ), iIdx = 0, iO = iOA[iIdx]; while (true) { if(fm >= 24*60) { dJ.append(''); } else { dJ.append(''); } fm += iO[1]; if (fm > to) break; if (iO[0] > 0 && fm > iO[0]) iO = iOA[++iIdx]; } } this.getDurationDayDisplay = function(fm) { var days = (fm/(24*60)); return days + ' day' + (days > 1 ? 's':''); } this.delayCallback = function(clbk, ms) { var timer = 0; return function() { var ctx = this, args = arguments; clearTimeout(timer); timer = setTimeout(function () { clbk.apply(ctx, args); }, ms || 0); }; } this.addSelect2Options = function(sJ, dA) { if (!sJ || !dA || dA.length == 0) return; var sJ = $jQ(sJ); $jQ.each(dA, function(i, dO) { sJ.append(new Option(dO.text, dO.id, true, true)); }) sJ.trigger('change'); } this.openPopupWindow = function(windowName, url, width, height) { var soptions; if (width == -1 && height == -1) { soptions = "menubar=yes,toolbar=yes,location=yes,directories=no,status=yes,scrollbars=yes,resizable=yes,screenX=0,screenY=0"; } else { soptions = "menubar=no,toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes,screenX=50,screenY=50,width=" + width + ",height=" + height; } var newwindow = window.open(url,windowName, soptions); newwindow.focus(); } this.openDownload = function(href, opts) { opts = $jQ.extend({}, {showWait:true, waitMsg:'Please wait...', callbk:null}, opts || {}); if (!opts.showWait) {document.location.href = href; return;} var token = new Date().getTime(); href = JS_UTIL.insParam(href,'_dwntkn',token); var iframe = document.createElement('iframe'); MODAL_PANEL.showWait(opts.waitMsg, null, null); iframe.src = href; iframe.style.display = "none"; document.body.appendChild(iframe); window._dwnldAttmpt = 0; window._dwnldTimer = setInterval(function() { var ctoken = JS_UTIL.getCookie('_dwntkn'+token); if (ctoken != null || window._dwnldAttmpt > 30) { clearInterval(window._dwnldTimer); JS_UTIL.deleteCookie('_dwntkn'+token, '/'); MODAL_PANEL.hide(); var isS = ctoken=='true'; if (opts.callbk) opts.callbk(isS); else if (!isS) MODAL_PANEL.showAlert('Download Failed', "error"); } else { window._dwnldAttmpt++; } }, 1000); } this.removeExtraSpaces = function(str) { var st = $jQ.trim(str); return st.replace(/[\s]+/g, " "); } this.verifyNameString = function(checkStr, allowspc) { if (!checkStr || $jQ.trim(checkStr).length == 0) { return false; } var checkOK = null; if (allowspc) { checkOK = "abcdefghijklmnopqrstuvwxyz "; } else { checkOK = "abcdefghijklmnopqrstuvwxyz"; } for (var i = 0; i < checkStr.length; i++) { ch = checkStr.charAt(i).toLowerCase(); for (var j = 0; j < checkOK.length; j++) { if (ch == checkOK.charAt(j) ) { break; } } if (j == checkOK.length) { return false; } } return true; } this.roundNumber = function(num, dec) { var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec); return result; } this.oddEvenTable = function(selector, oddClassName, evenClassName) { $jQ(selector + ":odd").addClass(oddClassName); $jQ(selector + ":even").addClass(evenClassName); } this.makeDivHeightEqual = function(dEls, numCol) { var maxHeight = 0, els = []; $jQ(dEls).each(function(i) { if (i%numCol == 0) { if (maxHeight>0) $jQ(els).css({"height":maxHeight+"px"}); maxHeight = 0; els = []; } maxHeight = Math.max($jQ(this).height(), maxHeight); els.push(this); }); } this.updateParamInLocationUrl = function(prmRmvA, prmAddRplO){ var url = new URL(location.href); if (prmRmvA) { for (var i = 0; i < prmRmvA.length; i++) { if (url.searchParams.has(prmRmvA[i])) { url.searchParams.delete(prmRmvA[i]); } } } if (prmAddRplO) { for (var k in prmAddRplO) { var v = prmAddRplO[k]; if (url.searchParams.has(k)) { url.searchParams.set(k, v); } else { url.searchParams.append(k, v); } } } HISTUTIL.replaceURL(url); } this.insParam = function(u,k,v) { v = encodeURIComponent(v); var idx = u.indexOf('?'); var p = idx>=0?u.substr(idx+1):''; var kvp = p==""?[]:p.split('&'); var i=kvp.length, x; while(i--) {x = kvp[i].split('='); if (x[0]==k) {x[1] = v; kvp[i] = x.join('='); break;}} if(i<0) {kvp[kvp.length] = [k,v].join('=');} return (idx<0?u+'?':u.substr(0,idx+1))+kvp.join('&'); } this.insAllParams = function(u,pO) { for (var k in pO) { u = JS_UTIL.insParam(u,k,pO[k]); } return u; } this.delParam = function(u,k) { var ups = u.split('?'), upsL = ups.length; if (upsL>=1) { var px = encodeURIComponent(k)+'='; var ps = (upsL>=2?ups[1]:ups[0]).split(/[&;]/g); for (var i=ps.length; i-->0;) if (ps[i].lastIndexOf(px, 0)!==-1) ps.splice(i, 1); u = (upsL>=2?ups[0]+'?':'')+ps.join('&'); } if (u.match(/#$/)) {u=u.replace('#', '');} return u; } this.delAllParams = function(u,k) { for (var i=0;i 1 ? ups[1]: ups[0]; if (ps.match(/&$/)) ps = ps.substring(0, ps.length - 1); return JSON.parse('{"' + ps.replace(/&/g, '","').replace(/=/g,'":"') + '"}', function(key, value) { return key===""?value:decodeURIComponent(value.replace(/\+/g, '%20') || '') }); } this.createCookie = function(name, value, expires, path, domain) { var cookie = name + "=" + escape(value) + ";"; if (expires) { if(expires instanceof Date) { if (isNaN(expires.getTime())) expires = new Date(); } else expires = new Date(new Date().getTime() + parseInt(expires) * 1000 * 60 * 60 * 24); cookie += "expires=" + expires.toGMTString() + ";"; } if (path) cookie += "path=" + path + ";"; if (!domain) domain = SERVER_VARS.cdmn; if (domain) cookie += "domain=" + domain + ";"; document.cookie = cookie; } this.getCookie = function(name) { var regexp = new RegExp("(?:^" + name + "|;\\s*"+ name + ")=(.*?)(?:;|$)", "g"); var result = regexp.exec(document.cookie); return (result === null) ? null : result[1]; } this.deleteCookie = function(name, path, domain) { if (JS_UTIL.getCookie(name)) JS_UTIL.createCookie(name, "", -1, path, domain); } this.showInfoMessage = function(divId, msg, isErr) { $jQ(divId).removeClass("msgBox sucMsgBox errMsgBox").children().remove(); if (isErr == null) { $jQ(divId).addClass("msgBox infoMsgBox").html('
'); } else if (isErr) { $jQ(divId).addClass("msgBox errMsgBox").html('
'); } else { $jQ(divId).addClass("msgBox sucMsgBox").html('
'); } $jQ(divId).append('
' + msg + '
'); $jQ(divId).show(); } this.toggleFullScr = function(el, shw) { $jQ(el).toggleClass("expscr", shw); $jQ("body").toggleClass("fullscr", shw); } this.handleIEError = function() { window.onerror = function(sErr) { if (sErr.toLowerCase().indexOf('unspecified error') >= 0) { window.event.returnValue = true; } else { window.event.returnValue = false; } }; } this.adjustOptsForSlt2Order = function(sJ, vA) { if (!sJ || !vA || vA.length == 0) return; var lstOJ = null; for (var i=0;i 1) { sJ.find(':selected').eq(-2).after(optJ.detach()); } else { sJ.prepend(optJ.detach()); } }); } this.initDDEvents = function(opts) { opts = $jQ.extend({}, {elCls:'.ddItm', elCtrCls:'.ddMenuCtr', evntCls:'ddItm-open', evntNS:'tfdd'}, opts || {}); var currentEl = null; var toggleEl = function(el) { if (currentEl && el.get(0) != currentEl.get(0)) toggleEl(currentEl); if (el.hasClass(opts.evntCls)) { el.removeClass(opts.evntCls); setTimeout(function() {jQuery(document).unbind('click.'+opts.evntNS, closeFn); currentEl = null;}, 100); } else { el.addClass(opts.evntCls); setTimeout(function() {jQuery(document).bind('click.'+opts.evntNS, closeFn); currentEl = el;}, 100); } } var closeFn = function(e) { if (currentEl) {toggleEl(currentEl);} } $jQ(document).off('click.dd', opts.elCls); $jQ(document).on('click.dd', opts.elCls, function(e) { e.stopPropagation(); if (opts.elCtrCls && $jQ(e.target).parents(opts.elCtrCls).length > 0) return false; toggleEl($jQ(this)); return false; }); } this.scrollFloatMenu = function(ctrD, dId, cls, bId, bCls, opts) { opts = $jQ.extend({}, {topOffset:0, clbk:null}, opts || {}); var dO = $jQ(dId), cO = $jQ(ctrD), bO = bId ? $jQ(bId): null; var argsList = Array.prototype.slice.call(arguments), isFloat = false; $jQ(window).scroll(function() { var scTop = $jQ(window).scrollTop(); if (bO && dO.height() > bO.height()) { cO.css({'height': dO.height()+'px'}).data('setH', true); return; } if (scTop > cO.offset().top - opts.topOffset) { if (!cO.data('setH')) { cO.css({'height': cO.height()+'px'}).data('setH', true); } var dB = Math.round(dO.offset().top +dO.outerHeight(true)); if (bO && Math.round(bO.offset().top + bO.height()) <= dB) { if (opts.clbk) opts.clbk(false, cls, dO); dO.removeClass('floatM'+(cls?' '+cls:'')); if (bCls) dO.addClass(bCls); if (dO.offset().top - parseInt(dO.css('margin-top'), 10) > scTop) { if (opts.clbk) opts.clbk(true, cls, dO); dO.addClass('floatM'+(cls?' '+cls:'')); if (bCls) dO.removeClass(bCls); } } else { if (opts.clbk) opts.clbk(true, cls, dO); dO.addClass('floatM'+(cls?' '+cls:'')); if (bCls) dO.removeClass(bCls); } if(!isFloat){ isFloat = true; $jQ.publish("scrollFloatMenu/scroll", { isFloat: isFloat, aList: argsList }); } } else { if (opts.clbk) opts.clbk(false, cls, dO); dO.removeClass('floatM'+(cls?' '+cls:'')+(bCls?' '+bCls:'')); cO.css({'height':''}).data('setH', false); if(isFloat){ isFloat = false; $jQ.publish("scrollFloatMenu/scroll", { isFloat: isFloat, aList: argsList }); } } }); } this.renderMenuNav = function(nvD, nvCtrJ, isSlctF, slctCl, sctCl) { var nvJ = $jQ(nvD); if (isSlctF) $jQ('li:first', nvJ).addClass(slctCl); $jQ('a', nvJ).on('click', function (e) { e.preventDefault(); $jQ(this).closest('li').addClass(slctCl).siblings().removeClass(slctCl); var tabId = $jQ(this).attr('href'); $jQ(tabId).siblings('.'+sctCl).hide(); $jQ(tabId).show(); if (nvCtrJ) $jQ.scrollTo(nvCtrJ, 200); }); } this.renderScrollMenuNav = function(nvCtr, opts) { opts = $jQ.extend({}, {nvSlct:'', nvCntSlct:'href', nvCntPfx:'#', slctCl:'highlighted', clkScOffset:-30}, opts || {}); var catCntPosA = [], nvCtrJ = $jQ(nvCtr); $jQ(opts.nvSlct, nvCtrJ).each(function(i) { var ntJ = $jQ(this), cId = ntJ.attr(opts.nvCntSlct), cJ = $jQ(opts.nvCntPfx+cId); catCntPosA.push({cId:cId, cJ:cJ, aJ:ntJ, top:cJ.offset().top}); }); $jQ(opts.nvSlct, nvCtrJ).click(function() { var ntJ = $jQ(this), cId = ntJ.attr(opts.nvCntSlct); $jQ.scrollTo($jQ(opts.nvCntPfx+cId), 300, {offset:{top:opts.clkScOffset}}); }); $jQ(window).scroll(function() { var scTop = $jQ(window).scrollTop(); for(var i = catCntPosA.length-1;i>=0;i--) { if (!catCntPosA[i].cJ.is(':visible')) continue; if (scTop+180-catCntPosA[i].cJ.offset().top>0) { var ntJ = $jQ('.' + opts.slctCl, nvCtrJ); if (ntJ.length > 0) { if (ntJ.attr(opts.nvCntSlct) == catCntPosA[i].cId) break; ntJ.removeClass(opts.slctCl); } catCntPosA[i].aJ.addClass(opts.slctCl); break; } } }); } this.scrollTo = function(elJ, dly, opts) { if (!elJ) return; elJ = $jQ(elJ); var popupPrntJ = elJ.parents('.popup-full-mode, .blockUIDialogCtr'); if (popupPrntJ.length > 0) { popupPrntJ.scrollTo(elJ, dly, opts); } else { $jQ.scrollTo(elJ, dly, opts); } } this.showWaitProgressBar = function(opts, isRmv) { opts = $jQ.extend({}, {ctr:null, dur:40, cls:'', bcls:''}, opts || {}); var ctrJ = null; if (!opts.ctr) { ctrJ = $jQ('body'); opts.cls = opts.cls + ' pg-prgs-wait'; } else ctrJ = $jQ(opts.ctr); $jQ('> .prgs-wait', ctrJ).remove(); if (!isRmv) { var prgJ = $jQ(`
`).appendTo(ctrJ); $jQ('.prgs--bar', prgJ).css({'animationDuration':opts.dur+'s'}); } } this.loadInModalPanel = function(url, opts) { opts = $jQ.extend({}, {prmO:{}, error:{}, wait:{}, panelOpts:{blockClass:'blockNoPad wdBlk3', fullScreen:true}}, opts || {}); var successDetails = function(a, m) { MODAL_PANEL.show('
'+m+'
', opts.panelOpts); if (opts.clbk) opts.clbk(); } AJAX_UTIL.asyncCall(url, {params:$jQ.param(opts.prmO), scope:this, error:opts.error, wait:opts.wait, success:{parseMsg:true, handler:successDetails} }); } this.loadInSliderPanel = function(url, opts) { opts = $jQ.extend({}, {prmO:{}, error:{inDialog:false, inSlider:true}, wait:{inDialog:false, inSlider:true}, panelOpts:{pnlClass:'wdPnl1'}}, opts || {}); var successDetails = function(a, m) { SLIDER_PANEL.show('
'+m+'
', opts.panelOpts); if (opts.clbk) opts.clbk(); } AJAX_UTIL.asyncCall(url, {params:$jQ.param(opts.prmO), scope:this, error:opts.error, wait:opts.wait, success:{parseMsg:true, handler:successDetails} }); } this.insValInJSONInp = function(inp, k, v) { if (!inp) return; var s = inp.val(), sO = s ? JS_UTIL.parseJSON(s): {}; sO[k] = v; inp.val(JS_UTIL.stringifyJSON(sO)); } this.delValInJSONInp = function(inp, k) { if (!inp) return; var s = inp.val(); if (!s) return; var sO = JS_UTIL.parseJSON(s); delete sO[k]; inp.val(JS_UTIL.stringifyJSON(sO)); } this.isMobile = function() { return window.matchMedia("only screen and (max-width: 760px)").matches; } this.parseJSON = function(s) { return $jQ.parseJSON(s); } this.stringifyJSON = function(o) { return JSON.stringify(o); } this.YUI_SKIN = {defaultSkin: 'yui-skin-poc', base: '../../../css/',rollup: 1, path:'skin.css'}; this.isEqualJSON = function(x, y) { return (x && y && typeof x === 'object' && typeof y === 'object') ? (Object.keys(x).length === Object.keys(y).length) && Object.keys(x).reduce(function(isEqual, key) { return isEqual && JS_UTIL.isEqualJSON(x[key], y[key]); }, true) : (x === y); } this.isIOS = function(){ var userAgent = window.navigator.userAgent.toLowerCase(); return /iphone|ipad|ipod/.test(userAgent); } this.isInViewport = function(element) { if (!element) return false; const rect = element.getBoundingClientRect(); return ( rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth) ); } this.isValidJSON = function(data){ try { JSON.parse(data); return true; } catch { return false; } } this.isFileLoaded = function(fileName, ext) { if (!fileName || !ext) { return false; } fileName = fileName.substr(0, fileName.indexOf(ext)); var selector, attribute; switch (ext) { case ".css": selector = "head link"; attribute = "href"; break; case ".js": selector = "head script"; attribute = "src"; break; default: return false; // Unsupported extension } var elements = $jQ(selector); if (!elements.length) { return false; } return elements.toArray().some(function(ele) { return ele[attribute].includes(fileName); }); } }; var AJAX_UTIL = new function() { this.showWait = function(divEl, msg, opts) { var defaults = {waitEl: 'span', waitClass: 'waiting2', clazz: ''}; opts = $jQ.extend({}, defaults, opts || {}); var wHTML = '<' + opts.waitEl + ' class="' + opts.waitClass + ' ' + opts.clazz + '">' + msg + ''; $jQ(divEl).hide(); $jQ(divEl).after(wHTML); } this.hideWait = function(divEl, opts) { var defaults = {highlight: false, fadeColor: 'yellow', fadeEl: divEl}; opts = $jQ.extend({}, defaults, opts || {}); $jQ(divEl).next(".waiting2, .waitGry").hide(); $jQ(divEl).show(); } this.hideWaitError = function(divEl, errMsg, opts) { var defaults = {timeout: 4000, highlight: false, fadeColor: 'red', fadeEl: divEl}; opts = $jQ.extend({}, defaults, opts || {}); $jQ(divEl).next(".waiting2, .waitGry").hide(); var eHTML = '
' + errMsg + '
'; $jQ(divEl).next(".error").remove(); $jQ(divEl).after(eHTML); if (opts.highlight) { $jQ(opts.fadeEl).highlightFade(opts.fadeColor); } if (opts.timeout) { setTimeout(function() { $jQ(divEl).next(".error").remove(); $jQ(divEl).show(); }, opts.timeout); } } this.isWaitShown = function(divEl, opts) { var defaults = {waitClass: 'waiting2'}; opts = $jQ.extend({}, defaults, opts || {}); var waitEl = $jQ(divEl).next("." + opts.waitClass); return (waitEl.length > 0 && waitEl.is(":visible")); } this.parseXMLMsg = function(xml, tag, defaultMsg) { var xml = $jQ(tag, xml); if (xml.length > 0) { var msg = $jQ(xml).text(); if (msg) { return msg; } } return defaultMsg; } this.asyncCall = function(url, opts) { var defaults = {method: 'POST', params: '', argument: [], timeout: 30000, minWait:0, form: null, scope: this, error: {handler: null, parseMsg: true, msg: 'Error while processing your request. Please try again later.', inDialog: true, inSlider:false, title: 'Error', divElOps: null}, success: {handler: null, parseMsg: false, msg: '', inDialog:false, inSlider:false, title: 'Success', divElOps: null}, wait: {handler: null, show: true, inDialog:true, inSlider:false, showProgress:false, prgsOps:{}, blkEl: null, msg: 'Please wait ...', timeout: null, divEl: null, divCls:null, divElOps: null}}; opts = $jQ.extend({}, defaults, opts || {}); opts.wait = $jQ.extend(true, {}, defaults.wait, opts.wait || {}); opts.error = $jQ.extend(true, {}, defaults.error, opts.error || {}); opts.success = $jQ.extend(true, {}, defaults.success, opts.success || {}); opts.params += '&__xreq__=true'; var prms = opts.form ? $jQ('#'+opts.form).serialize() + opts.params: opts.params; if (opts.minWait > 0) { opts._waitForMin = true; opts._afterWait = function() {opts._waitForMin = false;}; setTimeout(function() {opts._afterWait();}, opts.minWait); } var completeFn = function(jqXHR, sts) { if (opts.minWait > 0 && opts._waitForMin) { opts._afterWait = function() { if (sts == "success") {AJAX_UTIL.handleAsyncSuccess(jqXHR, opts);} else {error:AJAX_UTIL.handleAsyncError(jqXHR, opts);} } return; } if (sts == "success") {this.handleAsyncSuccess(jqXHR, opts);} else {error:this.handleAsyncError(jqXHR, opts);} }; var ajaxOpts = {type:opts.method, timeout:opts.timeout, cache:false, context:this, data:prms, complete:completeFn}; var request = $jQ.ajax(url, ajaxOpts); if (opts.wait.show) { if (opts.wait.showProgress) { JS_UTIL.showWaitProgressBar(opts.wait.prgsOps, false); } if (opts.wait.inDialog) { MODAL_PANEL.showWait(opts.wait.msg, opts.wait.blkEl, opts.wait.timeout); } else if (opts.wait.inSlider) { SLIDER_PANEL.showWait(opts.wait.msg, opts.wait); } else if (opts.wait.divEl) { if (opts.wait.divCls) { $jQ(opts.wait.divEl).addClass(opts.wait.divCls); } else { AJAX_UTIL.showWait(opts.wait.divEl, opts.wait.msg, opts.wait.divElOps); } } } if (opts.wait.handler) { opts.wait.handler.call(opts.scope, true); } return request; } this.abortAjaxRequest = function(request){ if(request && request.readyState != 4){ request.abort(); } } this.handleAsyncSuccess = function(jqXHR, opts) { var successXML = $jQ("Success", jqXHR.responseXML); if (successXML.length == 0) { this.handleAsyncError(jqXHR, opts); return; } if (successXML.attr("curl")) { opts.curl = successXML.attr("curl"); if (successXML.attr("cpgnm")) opts.cpgnm = successXML.attr("cpgnm"); } var successMsg = null; if (opts.success.parseMsg) { successMsg = AJAX_UTIL.parseXMLMsg(jqXHR.responseXML, "Success", opts.success.msg); } if (opts.wait.showProgress) { JS_UTIL.showWaitProgressBar(opts.wait.prgsOps, true); } if (opts.wait.divEl) { if (opts.wait.divCls) { $jQ(opts.wait.divEl).removeClass(opts.wait.divCls); } else { AJAX_UTIL.hideWait(opts.wait.divEl, opts.success.divElOps); } } if (opts.success.inDialog) { MODAL_PANEL.showAlert(successMsg, "success", {title: opts.success.title, curl: opts.curl, cpgnm: opts.cpgnm, reload:opts.success.reload}); } else if (opts.success.inSlider) { SLIDER_PANEL.showMessage(successMsg, {icon:'icon-iconP-tk1', ...opts.success}); } if (opts.wait.handler) { opts.wait.handler.call(opts.scope, false, true); } if (opts.success.handler) { opts.success.handler.call(opts.scope, opts.argument, successMsg, successXML, jqXHR); } } this.handleAsyncError = function(jqXHR, opts) { var errorMsg = null; var xml = $jQ("Error", jqXHR.responseXML); if (xml.length > 0 && xml.attr("ovr")) { errorMsg = AJAX_UTIL.parseXMLMsg(jqXHR.responseXML, "Error", opts.error.msg); if (xml.attr("ovr") == "1") { MODAL_PANEL.showAlert(errorMsg, "error", {title: "Session Expired", curl: xml.attr("curl"), cpgnm: xml.attr("cpgnm")}); } return; } if (opts.error.parseMsg) { errorMsg = AJAX_UTIL.parseXMLMsg(jqXHR.responseXML, "Error", opts.error.msg); } if (opts.wait.showProgress) { JS_UTIL.showWaitProgressBar(opts.wait.prgsOps, true); } if (opts.wait.divEl) { if (opts.wait.divCls) { $jQ(opts.wait.divEl).removeClass(opts.wait.divCls); } else if (opts.error.divElOps) { AJAX_UTIL.hideWaitError(opts.wait.divEl, errorMsg, opts.error.divElOps); } else { AJAX_UTIL.hideWait(opts.wait.divEl); } } if (opts.wait.handler) { opts.wait.handler.call(opts.scope, false, false); } if (opts.error.inDialog) { MODAL_PANEL.showAlert(errorMsg, "error", {title: opts.error.title}); } else if (opts.error.inSlider) { SLIDER_PANEL.showMessage(errorMsg, {icon:'icon-iconP-alrt', ...opts.error}); } if (opts.error.handler) { opts.error.handler.call(opts.scope, opts.argument, errorMsg, jqXHR); } } } var MODAL_PANEL = new function() { this.show = function (divRef, opts) { var defaults = {blkElement: null, round: true, nofocus: false, msgBlockClass: "u_block", close: true, shadow: false, msgBlockHdClass: "hrDotB", css: {}}; opts = $jQ.extend({}, defaults, opts || {}); if (opts.round) { opts.blockClass = (opts.blockClass ? opts.blockClass + ' ': ''); opts.preBlockHTML = ''; opts.postBlockHTML = ''; } if (JS_UTIL.isMobile()) { opts.nofocus = true; opts.focusInput = false; } opts.message = $jQ(divRef); if (opts.blkElement) { $jQ(opts.blkElement).block(opts); } else { if($jQ.isFunction($jQ.blockUI)) { $jQ.blockUI(opts); } else { showDiv(divRef, opts.title); } } if (!opts.nofocus) { setTimeout(function() {$jQ(":input:visible:first", opts.message).focus();}, 10); } $jQ("body").addClass("yui-skin-poc"); } this.hide = function (blkElement, opts) { var defaults = {}; opts = $jQ.extend({}, defaults, opts || {}); if (blkElement) { $jQ(blkElement).unblock(opts); } else { if($jQ.isFunction($jQ.unblockUI)) { $jQ.unblockUI(opts); } else { hideDiv(); } } $jQ("body").removeClass("yui-skin-poc"); } this.showAlert = function (msg, icon, opts) { opts = $jQ.extend({}, {curl: 'javascript:void(0);', cpgnm: 'Close'}, opts || {}); opts.blockClass = (opts.blockClass ? opts.blockClass + ' ': '') + 'blockAlert'; var html = '
'; html += '
' + msg + '
'; html += ''; this.show(html, opts); if (opts.curl == 'javascript:void(0);') { $jQ(".blockAlert .alertAction a").click(function() { MODAL_PANEL.hide(); if(opts.reload){ window.location.reload(); } }); } } this.showConfirm = function (msg, opts) { var defaults = {scope: this, handler: null, hide: true, yes: {txt: 'Yes'}, no: {txt: 'No'}}; opts = $jQ.extend({}, defaults, opts || {}); opts.yes = $jQ.extend(true, {}, defaults.yes, opts.yes || {}); opts.no = $jQ.extend(true, {}, defaults.no, opts.no || {}); opts.blockClass = (opts.blockClass ? opts.blockClass + ' ': '') + 'blockAlert'; var html = '
'; html += '
' + msg + '
'; html += ''; this.show(html, opts); $jQ(".blockAlert .alertAction a").click(function() { if (opts.hide) {MODAL_PANEL.hide();} if (opts.handler) {opts.handler.call(opts.scope, $jQ(this).hasClass("yes"));} return false; }); } this.showWait = function(text, blkElement, timeout) { var wtOpts = PAGE_CONTEXT.getOpts(); var html =`
${PAGE_CONTEXT.getHtm()}
${text}
`; MODAL_PANEL.show(html, {close: false, nofocus: true, blkElement: blkElement, blockClass: 'blockWait '+wtOpts.wtCls, overlayCSS:wtOpts.isWtDk ? {background:'#000', opacity:'0.9!important'}: null}); if (timeout) { setTimeout(function() {MODAL_PANEL.hide(blkElement);}, timeout); } } this.isInPanel = function(el) { return ($jQ(el).parents('.blockUI').length > 0); } this.isVisible = function() { return ($jQ('.blockUI:visible').length > 0); } } var SLIDER_PANEL = new function() { var me = this; var init = function() { if (me.ctrJ) return; me.ovlyCtrJ = $jQ('
').hide().appendTo($jQ(document.body)); me.ctrJ = $jQ('
').appendTo($jQ(document.body)); me.ovlyCtrJ.click(function() { me.hide(); }); } this.showWait = function(msg, opts) { opts = $jQ.extend({}, {cntClass:'sldrPnlWait'}, opts || {}); var wtOpts = PAGE_CONTEXT.getOpts(); var html = $jQ(`
${msg}
`); me.show(html, opts); } this.showMessage = function(msg, opts) { opts = $jQ.extend({}, {actnm:'Close', icon:'icon-iconP-inf', cntClass:'sldrPnlMsg', clbk:null}, opts || {}); var html = $jQ(`
${opts.icon ? `
`: ``}
${msg}
`); $jQ('.act a', html).click(function() { if (opts.clbk) opts.clbk(); else me.hide(opts); return false; }); me.show(html, opts); } this.show = function(divRef, opts) { var defaults = {focus:false, pnlClass:null, cntClass:null, close:true, isOverModalPnl:false, overlay:true}; opts = $jQ.extend({}, defaults, opts || {}); me.opts = opts; init(); var cntJ = $jQ(`
${opts.close ? `
`: ``}
`); if (opts.close) { $jQ('.sldrPnlClose', cntJ).click(function() { me.hide(opts); return false; }); } me.ctrJ.html(cntJ); cntJ.append($jQ(divRef)); me.ctrJ.attr('class', `sldrPnlCtr ${me.ctrJ.hasClass('sldrPnlCtr-open') ? 'sldrPnlCtr-open': ''} ${opts.pnlClass?opts.pnlClass:''}`); me.ovlyCtrJ.toggle(opts.overlay); me.ctrJ.addClass(`sldrPnlCtr-open ${(opts.ctrClass) ? opts.ctrClass : ''}`); me.ovlyCtrJ.toggleClass('sldrPnlOvrMdl', opts.isOverModalPnl); me.ctrJ.toggleClass('sldrPnlOvrMdl', opts.isOverModalPnl); $jQ('body').addClass('_sldrPnlOpn'); if (opts.focus) { setTimeout(function() {$jQ(":input:visible:first", cntJ).focus();}, 10); } } this.hide = function(opts) { if (!me.ctrJ) return; if (!opts) opts = me.opts; me.ovlyCtrJ.hide(); $jQ('body').removeClass('_sldrPnlOpn'); me.ctrJ.removeClass(`sldrPnlCtr-open ${opts.pnlClass?opts.pnlClass:''}`); } this.isInPanel = function(el) { return ($jQ(el).parents('.sldrPnlCtr').length > 0); } this.isVisible = function() { return ($jQ('.sldrPnlCtr:visible').length > 0); } } var GENERAL_TOOLTIP = new function() { this.createTooltip = function(ids, opts) { var defaults = {dropShadow: false, htmlShadow: true, tooltipClass: 'help', dataFromFn: true, loadData: this.setTooltipData, mouseOutClose: true, width: 150, mtipzIndex: 1020}; opts = $jQ.extend({}, defaults, opts || {}); var els = ".tooltip"; if (ids) { els = $jQ(ids); } $jQ(els).each(function() { var tipCfg = $jQ(this).metadata({type:'attr',name:'tips'}); var topts = $jQ.extend({}, opts, tipCfg || {}); $jQ(this).mTooltip(topts); }); } this.setTooltipData = function(tipBody, el) { var tipCfg = el.metadata({type:'attr',name:'tips'}); if (tipCfg.tipId) { tipBody.html($jQ(tipCfg.tipId).html()); } else { tipBody.html(tipCfg.tooltip); } } } var POCUTIL = new function() { var me = this; this.init = function() { $jQ(document).on('mouseover', '.qttipB', function(ev) { var eJ = $jQ(this), tipCls = eJ.attr('data-tip-cls'); $jQ(this).qtip({overwrite:false, position:{my:'top center', at:'bottom center', viewport:$jQ(window)}, show:{event:ev.type, ready:true}, hide:{fixed:true}, style:{classes:tipCls?tipCls:'qtip-ttip1 qtip-rounded', tip:{width:6, height:4}}}, ev); }); $jQ(document).on('mouseover', '.qttipT', function(ev) { var eJ = $jQ(this), tipCls = eJ.attr('data-tip-cls'); $jQ(this).qtip({overwrite:false, position:{my:'bottom center', at:'top center', viewport:$jQ(window)}, show:{event:ev.type, ready:true}, hide:{fixed:true}, style:{classes:tipCls?tipCls:'qtip-ttip1 qtip-rounded', tip:{width:6, height:4}}}, ev); }); $jQ(document).on('mouseover', '.qttipLB', function(ev) { var eJ = $jQ(this), tipCls = eJ.attr('data-tip-cls'); $jQ(this).qtip({overwrite:false, position:{my:'top left', at:'bottom left', adjust:{x:20}, viewport:$jQ(window)}, show:{event:ev.type, ready:true}, hide:{fixed:true}, style:{classes:tipCls?tipCls:'qtip-ttip1 qtip-rounded', tip:{width:6, height:4}}}, ev); }); $jQ(document).on('mouseover', '.qttipD', function(ev) { var eJ = $jQ(this), cntD = eJ.attr('data-tip-ctr'), tipCls = eJ.attr('data-tip-cls'); eJ.qtip({overwrite:false, content:{text:$jQ(cntD)}, position:{my:'top center', at:'bottom center', viewport: $jQ('body')}, show:{event:ev.type, ready:true}, hide:{fixed:true, delay:500}, style:{classes:(tipCls?tipCls:'')+' qtip-ttip1 qtip-rounded', tip:{width:6, height:4}}}, ev); }); me.bindEntitiesPreview('body'); if (window.screen && screen.width > 1440) { var el = document.querySelector('meta[name=viewport]'); if (el) el.setAttribute('content', 'width=1440'); } JS_UTIL.initDDEvents(); } this.initFeedbackFt = function() { $jQ('#footerFdkCtr .example').example(function() {return $jQ(this).attr('title')}); $jQ('#footerFdkCtr .topbar a').toggle(function() { $jQ('#footerFdkCtr .fdkBd').show(); $jQ('#footerFdkCtr').css('width','250px'); $jQ('#footerFdkCtr .topbar').removeClass('barclose'); }, function() { $jQ('#footerFdkCtr .fdkBd').hide(); $jQ('#footerFdkCtr').css('width','80px'); $jQ('#footerFdkCtr .topbar').addClass('barclose'); }); $jQ("#footerFdkForm").validate({ rules: {"message": {required: true}}, messages: {"message": {required: "Please enter your message"}} }); $jQ('#footerFdkForm a.fdkAct').click(function() { if (!$jQ("#footerFdkForm").valid()) { return false; } AJAX_UTIL.asyncCall('/gen/msc/save-contactus', {form: "footerFdkForm", scope:this, success: {handler: function() {document.footerFdkForm.message.value='';}, parseMsg: true, inDialog: true, title: 'Thank You'}}); return false; }); } this.saveUIPref = function(typ, enb) { AJAX_UTIL.asyncCall('/gen/msc/save-ui-pref', {params:'typ='+typ+'&enb='+enb, scope:this, error:{inDialog:false}, wait:{inDialog:false}}); } this.setupPkgQuickViews = function(pkgSel) { $jQ(pkgSel).each(function() { var pJ = $jQ(this), aJ = $jQ('a.productUrl', pJ), qvJ = $jQ('.qvwAct', pJ); if (aJ.length == 0) return; if (qvJ.length == 0) { qvJ = $jQ('
Quick View
').prependTo(pJ); } qvJ.click(function() { var successLoad = function(a, m) { MODAL_PANEL.show(m, {blockClass:'qvwBlk'}); } var prcD = $jQ('.pkgPrcCtr .prcD', pJ).text(); AJAX_UTIL.asyncCall(aJ.attr('href'), {params: '_qvw=true'+(prcD?'&prcD='+prcD:''), timeout:100000, scope:this, success: {handler:successLoad, parseMsg:true}}); return false; }); }); } this.setupOpnURLInModal = function(ctr, slctr, opts) { opts = $jQ.extend({}, {handler:null, exPms:'', pnlOpts:{blockClass:'lgRgBlk2'}}, opts || {}); var successLoad = function(a, m) { if (opts.handler) {opts.handler(m); return;} var cJ = $jQ('
'+m+'
'); MODAL_PANEL.show(cJ, opts.pnlOpts); setTimeout(function() {$jQ('.blockUIDialogCtr').scrollTo(0);}, 50); } $jQ(ctr).on('click', slctr, function() { var href = $jQ(this).attr('href'); AJAX_UTIL.asyncCall(href, {params: opts.exPms, timeout:100000, scope: this, success: {handler:successLoad, parseMsg:true}}); return false; }); } this.loadPreCfgPkg = function(pId, opts) { if (window.LOGIN_REGISTER) { LOGIN_REGISTER.login(); return; } var defaults = {paxInfo:true, isUpd:false, isCustF:true, ttl:'Customize Itinerary'}; opts = $jQ.extend({}, defaults, opts || {}); var successLoad = function(a, m, x) { var rspO = JS_UTIL.parseJSON($jQ(x).text()); MODAL_PANEL.show('
' + rspO.htm + '
', {title:opts.ttl, blockClass:'lgnRgBlk'}); } AJAX_UTIL.asyncCall('/package/pre-configure', {params: 'itnId='+pId+(opts.paxInfo?'&askPaxInfo=true':'')+(opts.isUpd?'&updCfg=true':'')+(opts.isCustF?'&isCustF=true':'')+(opts.orgnzTrip?'&orgnzTrip=true':''), scope: this, success: {handler: successLoad} }); } this.loadPreCfgHtl = function(opts) { var defaults = {paxInfo:true, isUpd:false, isCustF:true, ttl:'Customize Itinerary'}; opts = $jQ.extend({}, defaults, opts || {}); var successLoad = function(a, m, x) { var rspO = JS_UTIL.parseJSON($jQ(x).text()); MODAL_PANEL.show('
' + rspO.htm + '
', {title:opts.ttl, blockClass:'lgnRgBlk'}); } AJAX_UTIL.asyncCall('/hotels/pre-configure', {params: '', scope: this, success: {handler: successLoad} }); } this.loadPreCfgPkgAjax = function(pId, opts) { var defaults = {paxInfo:true, isUpd:false, isCustF:true, ttl:'Customize Itinerary'}; opts = $jQ.extend({}, defaults, opts || {}); var successLoad = function(a, m, x) { var rspO = JS_UTIL.parseJSON($jQ(x).text()); $jQ('#overlayWait').hide(); $jQ('#overlayRight').show(); $jQ('#overlayRight').html('
'+rspO.htm+'
'); $jQ('#overlayRight .closehover a').on('click', function(e) { $jQ('.overlayRight').hide(); }); $jQ('#overlayRight .closehover').show(); } $jQ('#overlayRight').hide(); $jQ('.overlayRight').show(); $jQ('#overlayWait').show(); AJAX_UTIL.asyncCall('/package/pre-configure', {params: 'itnId='+pId+(opts.paxInfo?'&askPaxInfo=true':'')+(opts.isUpd?'&updCfg=true':'')+(opts.isCustF?'&isCustF=true':'')+(opts.orgnzTrip?'&orgnzTrip=true':''), scope: this, wait:{inDialog:false}, success: {handler: successLoad} }); } this.showRecommendedRslt = function(opts) { var defaults = {rcmdCtr:'#recResults', rsltCtr:'#allResults', rsltVw:null, shwAsN:false}; opts = $jQ.extend({}, defaults, opts || {}); var rcmdRsltJ = $jQ(opts.rcmdCtr); if (rcmdRsltJ.length == 0) return; var rsltJ = $jQ(opts.rsltCtr), numRslt = rsltJ.find(opts.rsltVw).length; var rcmdRsltIdx = (numRslt < 3) ? (numRslt-1):1; if (!opts.shwAsN && $jQ(opts.rsltVw, rcmdRsltJ).length > 3) { $jQ(opts.rsltVw+':gt(0), .recRsltActCtr', rcmdRsltJ).hide(); var rcmdActCJ = $jQ(''); $jQ('a', rcmdActCJ).click(function() { $jQ(opts.rsltVw+':gt(0), .recRsltActCtr', rcmdRsltJ).show(); $jQ(this).parent().hide(); return false; }); rcmdRsltJ.append(rcmdActCJ); } if (opts.shwAsN) {rcmdRsltJ = $jQ(opts.rsltVw, rcmdRsltJ);} else {rcmdRsltJ.detach().addClass('recRsltCtr').show();} $jQ(opts.rsltVw+':eq('+rcmdRsltIdx+')', rsltJ).after(rcmdRsltJ); } this.bindCollectEvent = function() { $jQ("body").on("click", ".save-this", function(e) { // Prevent click from opening details view e.stopImmediatePropagation(); var $this = $jQ(this); var eId = $this.data('product-id'), eTyp = $this.data('product-type'); var eO = {eId:eId, typ:eTyp}; me.showCollectEntity(eO, this); return false; }); } this.showCollectEntity = function(eO, eJ) { if (window.LOGIN_REGISTER) { LOGIN_REGISTER.login(); return; } var successAdd = function(a, m) { MODAL_PANEL.show('
'+m+'
', {title:'Save to Wish List', blockClass:'lgnRgBlk'}); } AJAX_UTIL.asyncCall('/user/load-add-to-wishlist', {params: 'productType='+eO.typ+'&productId='+(eO.eId?eO.eId:'-1')+(eO.prms?'&prdPrms='+escape(JS_UTIL.stringifyJSON(eO.prms)):''), scope: this, success: {parseMsg:true, handler: successAdd} }); } this.collectEntity = function(eO, eJ) { var successAdd = function(a, m, x) { } AJAX_UTIL.asyncCall('/package/add-entity-to-trip', {params: 'productType='+eO.typ+'&productId='+(eO.eId?eO.eId:'-1')+(eO.prms?'&prdPrms='+escape(JS_UTIL.stringifyJSON(eO.prms)):''), scope: this, wait: {inDialog:false}, success: {handler: successAdd} }); // show animation if (eJ) { eJ = $jQ(eJ); var hdOff = $jQ('header .ribbon ul').offset(); var gotoX = hdOff.left - eJ.offset().left; var gotoY = hdOff.top - eJ.offset().top; eJ.clone().css({'position':'absolute'}).insertBefore(eJ).animate({opacity:0.6, marginLeft:gotoX, marginTop:gotoY}, 600, function() { $jQ(this).remove(); eJ.replaceWith('Shortlisted'); }); } } this.entCntO = {}; this.bindEntitiesPreview = function(el) { $jQ(el).find(".preview-this").each(function() { me.bindEntityPreview($jQ(this)); }); } this.bindEntityPreview = function(el) { el.qtip({ content: { text: function(e, api) { var $this = $jQ(api.elements.target); var eId = $this.data('product-id'), eTyp = $this.data('product-type'); var entCnt = me.entCntO[eTyp+eId]; if (entCnt) {return entCnt;} var successLoad = function(a, m) { me.entCntO[eTyp+eId] = '
'+m+'
'; api.set('content.text', me.entCntO[eTyp+eId]); } AJAX_UTIL.asyncCall('/gen/msc/load-entity-preview', {params: 'productType='+eTyp+'&productId='+eId, scope: this, wait: {inDialog:false}, error:{inDialog:false}, success: {handler:successLoad, parseMsg:true} }); return 'Loading...'; } }, position:{my:'top center', at:'bottom center', viewport:$jQ(window)}, hide:{fixed:true, delay:500}, style:{classes:'qtip-pvw', tip:{width:20, height:10}} }); } this.loadPromoteList = function(opts) { var successLoad = function(a, m, x) { var rspO = JS_UTIL.parseJSON($jQ(x).text()); MODAL_PANEL.show('
' + rspO.htm + '
', {title:rspO.ttl, blockClass:'lgnRgBlk'}); } AJAX_UTIL.asyncCall('/partner/load-promo-to-list', {params:$jQ.param(opts), scope: this, success: {handler: successLoad} }); } this.accruePoints = function(opts) { if (!SERVER_VARS.isLgn) return; AJAX_UTIL.asyncCall('/gen/msc/accrue', {params:$jQ.param(opts), scope:this, error:{inDialog:false}, wait:{inDialog:false}, success:{inDialog:false}}); } this.convertAmt = function(opts) { AJAX_UTIL.asyncCall('/currency/convert-d', {params:$jQ.param(opts), scope:this, error:{inDialog:false}, wait:{inDialog:false}, success:{inDialog:false, parseMsg:true, handler:function(a, m) { if (opts && opts.clbk) opts.clbk(m); }}}); } this.trackEvent = function(opts) { opts = $jQ.extend(true, {}, {prms:{}}, opts || {}); AJAX_UTIL.asyncCall('/gen/msc/track-event-x', {params:$jQ.param(opts.prms), scope:this, error:{inDialog:false}, wait:{inDialog:false}, success:{inDialog:false}}); } this.pushToTFIM = function(imA) { if (imA && $jQ.isPlainObject(imA)) {imA = imA.__tfim__;} if (!imA || imA.length == 0 || window._tfim == undefined) return; for (var i=0; i 0) { $jQ.merge(paxObj.chAge, room.chAge); } }) if (paxObj.chAge) { paxObj.chAge.sort(); } return paxObj; } } var HISTUTIL = new function() { var supported = (window.history.pushState !== undefined); this.bind = function(cb) { if (!supported) return; window.onpopstate = function(e) { if (cb) cb(e.state); } } this.push = function(opts, addToHist) { if (!supported) return; if (!addToHist) {if (opts && opts.ttl) {document.title = opts.ttl;}; return;} if (opts.ttl) {opts.state.ttl = opts.ttl; document.title = opts.ttl;} if (opts.url) { opts.state.url = opts.url; window.history.pushState(opts.state, opts.ttl?opts.ttl:'', opts.url); if (opts.trackPV) {TRACKER.logPV(opts.url); POCUTIL.pushToTFIM([{k:'api.trackPageView', v:{url:opts.url}}]);} } } this.replaceURL = function(url) { if (!supported) return; window.history.replaceState({}, '', url); } this.getState = function(type){ return history.state; } } var TRACKER = new function() { this.trkA = ['PT']; this.log = function(subURL) {}; this.init = function() {} this.setTrks = function(trkA) {if (trkA && trkA.length > 0) {this.trkA = trkA;}} this.logEvent = function(cat, ac, lab, val) { if (window._gaq) {for (var i=0;i= 1024 && $jQ(window).width() <= 1440){ itemV--; } this.count++; var ctrWidth = this.$gallery.width(); var blkWidth = this.$gallery.find('div').width(); var left = parseInt(this.$gallery.find('div').css('margin-left')); var right = parseInt(this.$gallery.find('div').css('margin-right')); var size = (blkWidth+left+right)*itemV*this.count; var cntL = itemV*this.count; if(cntL < this.cldLen){ this.$gallery.css({'transform': 'translateX(-'+size+'px)'}); }else{ this.count--; } } this.prev = function(e){ e.preventDefault(); if(this.count > 0){ this.count--; var ctrWidth = this.$gallery.width(); var size = ctrWidth*this.count; this.$gallery.css({'transform': 'translateX(-'+size+'px)'}); } } this.start = function(opts){ var defaults = {vList: 4} this.opts = $jQ.extend({}, defaults, opts || {}); var _this = this; // this.cacheElements(); this.bindEvents(); // this.width = this.$gallery.children().width(); this.cldLen = this.$gallery.children('div').length; this.count = 0; } } Number.prototype.formatMoney = function(decPlaces, thouSeparator, decSeparator) { var n = this, decPlaces = isNaN(decPlaces = Math.abs(decPlaces)) ? 2 : decPlaces, decSeparator = decSeparator == undefined ? "." : decSeparator, thouSeparator = thouSeparator == undefined ? "," : thouSeparator, sign = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(decPlaces)) + "", j = (j = i.length) > 3 ? j % 3 : 0; return sign + (j ? i.substr(0, j) + thouSeparator : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thouSeparator) + (decPlaces ? decSeparator + Math.abs(n - i).toFixed(decPlaces).slice(2) : ""); }; function ExitIntentTrigger(options) { var exitIntentVisited = false, interval = null, timeout = null, timeoutStatus = false, scrollDownReached = false, scrollInterval = 1000; var that = this; var defaults = {callback: null, exitIntent: false, scrollDown: 0, // 0 to 100 timeout: 0, storeKey: "exitintent-visited", storeExpiry: 1440 // expiry age, in minutes }; this.options = $jQ.extend({}, defaults, options || {}); this.init = function(){ var storageData = JSON.parse(LOCALSTORAGE_DB.get(this.options.storeKey)); if(storageData){ var date1 = moment(); var date2 = moment(storageData.expires); exitIntentVisited = storageData.status; if(this.options.storeExpiry > 0 && date1.diff(date2, "minutes", true) > 0){ LOCALSTORAGE_DB.remove(this.options.storeKey); exitIntentVisited = false; } } if(!exitIntentVisited){ this.bindEvents(); } timeout = setTimeout(function(){ timeoutStatus = true; if(!exitIntentVisited && scrollDownReached){ that.completed(); } }, this.options.timeout); } this.completed = function(){ this.cancel(); var expires = moment().add(this.options.storeExpiry,'minutes').toDate(); LOCALSTORAGE_DB.set(this.options.storeKey, JSON.stringify({status: true, expires: expires})); try{ this.options.callback(); }catch(e){} } this.bindEvents = function(){ if(this.options.exitIntent){ $jQ(document).on('mouseleave', function(e){ if(!exitIntentVisited && timeoutStatus && e.clientY < 0) { that.completed(); } }); } if(this.options.scrollDown > 0) { var scrollStart = $jQ(window).scrollTop(); var pageHeight = $jQ(document).height(); if(pageHeight > 0) { interval = setInterval(function() { var scrollAmount = $jQ(window).scrollTop() - scrollStart; if(scrollAmount < 0) { scrollAmount = 0; scrollStart = $jQ(window).scrollTop(); } var downScrollPercent = parseFloat(scrollAmount) / parseFloat(pageHeight); if(downScrollPercent > parseFloat(that.options.scrollDown) / 100) { if(!exitIntentVisited && timeoutStatus){ that.completed(); } scrollPercReached = true; } }, scrollInterval); } } } this.cancel = function(){ if(this.options.exitIntent){ $jQ(document).off('mouseleave'); } if(interval !== null) { clearInterval(interval); interval = null; } if(timeout !== null) { clearTimeout(timeout); timeout = null; } exitIntentVisited = true; } this.init(); } var LOCALSTORAGE_DB = new function(){ this.set = function(key, value){ if(this.checkifSupport()){ try{ window.localStorage.setItem(key, value); }catch(e){ throw new TypeError('Exceeded Storage Quota!'); } }else{ throw new TypeError("No support. Use a fallback such as browser cookies or store on the server."); } } this.get = function(key){ try{ var data = window.localStorage.getItem(key); return data; }catch(e){ return null; } } this.getAll = function(){ var array = []; for(var i = 0; i < window.localStorage.length; i++){ var key = localStorage.key(i); array.push(this.get(key)); }; return array; } this.remove = function(key){ try{ window.localStorage.removeItem(key); if(window.localStorage.length == 0){ this.clearAll(); } return true; }catch(e){ return false; }finally{ if(this.get(key)){ delete window.localStorage[key]; if(window.localStorage.length == 0){ this.clearAll(); } } } } this.clearAll = function(){ try{ window.localStorage.clear(); return true; }catch(e){ return false; } } this.checkifSupport = function(){ try{ return "localStorage" in window && window["localStorage"] !== null; }catch(e){ return false; } } } var PAGE_CONTEXT = new function () { var me = this; this.opts = {pcA:null, wtImg:'/static/img/loading-transparent.gif', wtCls:'', isWtDk:false}; this.init = function (opts) { me.opts = $jQ.extend(true, {}, me.opts, opts || {}); } this.getPKnwldgTextA = function () { var pcA = me.opts.pcA; if (pcA) { pcA.sort(() => Math.random() - 0.5); } return pcA; } this.getHtm = function () { var htm = '', pKnwldgTextA = me.getPKnwldgTextA(); if (pKnwldgTextA && pKnwldgTextA.length > 0) { htm += `
${pKnwldgTextA[0]}
`; } return htm; } this.getOpts = function() { return me.opts; } } (function($) { var o = $({}); $.subscribe = function() { o.on.apply(o, arguments); }; $.unsubscribe = function() { o.off.apply(o, arguments); }; $.publish = function() { o.trigger.apply(o, arguments); }; }(jQuery));