function popWin(url, win, para) { var win = window.open(url, win, para); win.focus(); } function setLocation(url) { window.location.href = encodeURI(url); } function setPLocation(url, setFocus) { if (setFocus) { window.opener.focus(); } window.opener.location.href = encodeURI(url); } /** * @deprecated */ function setLanguageCode(code, fromCode) { //TODO: javascript cookies have different domain and path than php cookies var href = window.location.href; var after = '', dash; if (dash = href.match(/\#(.*)$/)) { href = href.replace(/\#(.*)$/, ''); after = dash[0]; } if (href.match(/[?]/)) { var re = /([?&]store=)[a-z0-9_]*/; if (href.match(re)) { href = href.replace(re, '$1' + code); } else { href += '&store=' + code; } var re = /([?&]from_store=)[a-z0-9_]*/; if (href.match(re)) { href = href.replace(re, ''); } } else { href += '?store=' + code; } if (typeof (fromCode) != 'undefined') { href += '&from_store=' + fromCode; } href += after; setLocation(href); } /** * Add classes to specified elements. * Supported classes are: 'odd', 'even', 'first', 'last' * * @param elements - array of elements to be decorated * [@param decorateParams] - array of classes to be set. If omitted, all available will be used */ function decorateGeneric(elements, decorateParams) { var allSupportedParams = ['odd', 'even', 'first', 'last']; var _decorateParams = {}; var total = elements.length; if (total) { // determine params called if (typeof (decorateParams) == 'undefined') { decorateParams = allSupportedParams; } if (!decorateParams.length) { return; } for (var k in allSupportedParams) { _decorateParams[allSupportedParams[k]] = false; } for (var k in decorateParams) { _decorateParams[decorateParams[k]] = true; } // decorate elements // elements[0].addClassName('first'); // will cause bug in IE (#5587) if (_decorateParams.first) { Element.addClassName(elements[0], 'first'); } if (_decorateParams.last) { Element.addClassName(elements[total - 1], 'last'); } for (var i = 0; i < total; i++) { if ((i + 1) % 2 == 0) { if (_decorateParams.even) { Element.addClassName(elements[i], 'even'); } } else { if (_decorateParams.odd) { Element.addClassName(elements[i], 'odd'); } } } } } /** * Decorate table rows and cells, tbody etc * @see decorateGeneric() */ function decorateTable(table, options) { var table = $(table); if (table) { // set default options var _options = { 'tbody': false, 'tbody tr': ['odd', 'even', 'first', 'last'], 'thead tr': ['first', 'last'], 'tfoot tr': ['first', 'last'], 'tr td': ['last'] }; // overload options if (typeof (options) != 'undefined') { for (var k in options) { _options[k] = options[k]; } } // decorate if (_options['tbody']) { decorateGeneric(table.select('tbody'), _options['tbody']); } if (_options['tbody tr']) { decorateGeneric(table.select('tbody tr'), _options['tbody tr']); } if (_options['thead tr']) { decorateGeneric(table.select('thead tr'), _options['thead tr']); } if (_options['tfoot tr']) { decorateGeneric(table.select('tfoot tr'), _options['tfoot tr']); } if (_options['tr td']) { var allRows = table.select('tr'); if (allRows.length) { for (var i = 0; i < allRows.length; i++) { decorateGeneric(allRows[i].getElementsByTagName('TD'), _options['tr td']); } } } } } /** * Set "odd", "even" and "last" CSS classes for list items * @see decorateGeneric() */ function decorateList(list, nonRecursive) { if ($(list)) { if (typeof (nonRecursive) == 'undefined') { var items = $(list).select('li'); } else { var items = $(list).childElements(); } decorateGeneric(items, ['odd', 'even', 'last']); } } /** * Set "odd", "even" and "last" CSS classes for list items * @see decorateGeneric() */ function decorateDataList(list) { list = $(list); if (list) { decorateGeneric(list.select('dt'), ['odd', 'even', 'last']); decorateGeneric(list.select('dd'), ['odd', 'even', 'last']); } } /** * Parse SID and produces the correct URL */ function parseSidUrl(baseUrl, urlExt) { var sidPos = baseUrl.indexOf('/?SID='); var sid = ''; urlExt = (urlExt != undefined) ? urlExt : ''; if (sidPos > -1) { sid = '?' + baseUrl.substring(sidPos + 2); baseUrl = baseUrl.substring(0, sidPos + 1); } return baseUrl + urlExt + sid; } /** * Formats currency using patern * format - JSON (pattern, decimal, decimalsDelimeter, groupsDelimeter) * showPlus - true (always show '+'or '-'), * false (never show '-' even if number is negative) * null (show '-' if number is negative) */ function formatCurrency(price, format, showPlus) { var precision = isNaN(format.precision = Math.abs(format.precision)) ? 2 : format.precision; var requiredPrecision = isNaN(format.requiredPrecision = Math.abs(format.requiredPrecision)) ? 2 : format.requiredPrecision; //precision = (precision > requiredPrecision) ? precision : requiredPrecision; //for now we don't need this difference so precision is requiredPrecision precision = requiredPrecision; var integerRequired = isNaN(format.integerRequired = Math.abs(format.integerRequired)) ? 1 : format.integerRequired; var decimalSymbol = format.decimalSymbol == undefined ? "," : format.decimalSymbol; var groupSymbol = format.groupSymbol == undefined ? "." : format.groupSymbol; var groupLength = format.groupLength == undefined ? 3 : format.groupLength; var s = ''; if (showPlus == undefined || showPlus == true) { s = price < 0 ? "-" : (showPlus ? "+" : ""); } else if (showPlus == false) { s = ''; } var i = parseInt(price = Math.abs(+price || 0).toFixed(precision)) + ""; var pad = (i.length < integerRequired) ? (integerRequired - i.length) : 0; while (pad) { i = '0' + i; pad--; } j = (j = i.length) > groupLength ? j % groupLength : 0; re = new RegExp("(\\d{" + groupLength + "})(?=\\d)", "g"); /** * replace(/-/, 0) is only for fixing Safari bug which appears * when Math.abs(0).toFixed() executed on "0" number. * Result is "0.-0" :( */ var r = (j ? i.substr(0, j) + groupSymbol : "") + i.substr(j).replace(re, "$1" + groupSymbol) + (precision ? decimalSymbol + Math.abs(price - i).toFixed(precision).replace(/-/, 0).slice(2) : ""); var pattern = ''; if (format.pattern.indexOf('{sign}') == -1) { pattern = s + format.pattern; } else { pattern = format.pattern.replace('{sign}', s); } return pattern.replace('%s', r).replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }; function expandDetails(el, childClass) { if (Element.hasClassName(el, 'show-details')) { $$(childClass).each(function (item) { item.hide(); }); Element.removeClassName(el, 'show-details'); } else { $$(childClass).each(function (item) { item.show(); }); Element.addClassName(el, 'show-details'); } } // Version 1.0 var isIE = navigator.appVersion.match(/MSIE/) == "MSIE"; if (!window.Varien) var Varien = new Object(); Varien.showLoading = function () { var loader = $('loading-process'); loader && loader.show(); }; Varien.hideLoading = function () { var loader = $('loading-process'); loader && loader.hide(); }; Varien.GlobalHandlers = { onCreate: function () { Varien.showLoading(); }, onComplete: function () { if (Ajax.activeRequestCount == 0) { Varien.hideLoading(); } } }; Ajax.Responders.register(Varien.GlobalHandlers); /** * Quick Search form client model */ Varien.searchForm = Class.create(); Varien.searchForm.prototype = { initialize: function (form, field, emptyText) { this.form = $(form); this.field = $(field); this.emptyText = emptyText; Event.observe(this.form, 'submit', this.submit.bind(this)); Event.observe(this.field, 'focus', this.focus.bind(this)); Event.observe(this.field, 'blur', this.blur.bind(this)); this.blur(); }, submit: function (event) { if (this.field.value == this.emptyText || this.field.value == '') { Event.stop(event); return false; } return true; }, focus: function (event) { if (this.field.value == this.emptyText) { this.field.value = ''; } }, blur: function (event) { if (this.field.value == '') { this.field.value = this.emptyText; } }, initAutocomplete: function (url, destinationElement) { new Ajax.Autocompleter( this.field, destinationElement, url, { paramName: this.field.name, method: 'get', minChars: 2, updateElement: this._selectAutocompleteItem.bind(this), onShow: function (element, update) { if (!update.style.position || update.style.position == 'absolute') { update.style.position = 'absolute'; Position.clone(element, update, { setHeight: false, offsetTop: element.offsetHeight }); } Effect.Appear(update, {duration: 0}); } } ); }, _selectAutocompleteItem: function (element) { if (element.title) { this.field.value = element.title; } this.form.submit(); } }; Varien.Tabs = Class.create(); Varien.Tabs.prototype = { initialize: function (selector) { var self = this; $$(selector + ' a').each(this.initTab.bind(this)); }, initTab: function (el) { el.href = 'javascript:void(0)'; if ($(el.parentNode).hasClassName('active')) { this.showContent(el); } el.observe('click', this.showContent.bind(this, el)); }, showContent: function (a) { var li = $(a.parentNode), ul = $(li.parentNode); ul.getElementsBySelector('li', 'ol').each(function (el) { var contents = $(el.id + '_contents'); if (el == li) { el.addClassName('active'); contents.show(); } else { el.removeClassName('active'); contents.hide(); } }); } }; Varien.DateElement = Class.create(); Varien.DateElement.prototype = { initialize: function (type, content, required, format) { if (type == 'id') { // id prefix this.day = $(content + 'day'); this.month = $(content + 'month'); this.year = $(content + 'year'); this.full = $(content + 'full'); this.advice = $(content + 'date-advice'); } else if (type == 'container') { // content must be container with data this.day = content.day; this.month = content.month; this.year = content.year; this.full = content.full; this.advice = content.advice; } else { return; } this.required = required; this.format = format; this.day.addClassName('validate-custom'); this.day.validate = this.validate.bind(this); this.month.addClassName('validate-custom'); this.month.validate = this.validate.bind(this); this.year.addClassName('validate-custom'); this.year.validate = this.validate.bind(this); this.setDateRange(false, false); this.year.setAttribute('autocomplete', 'off'); this.advice.hide(); var date = new Date; this.curyear = date.getFullYear(); }, validate: function () { var error = false, day = parseInt(this.day.value, 10) || 0, month = parseInt(this.month.value, 10) || 0, year = parseInt(this.year.value, 10) || 0; if (this.day.value.strip().empty() && this.month.value.strip().empty() && this.year.value.strip().empty() ) { if (this.required) { error = 'This date is a required value.'; } else { this.full.value = ''; } } else if (!day || !month || !year) { error = 'Please enter a valid full date'; } else { var date = new Date, countDaysInMonth = 0, errorType = null; date.setYear(year); date.setMonth(month - 1); date.setDate(32); countDaysInMonth = 32 - date.getDate(); if (!countDaysInMonth || countDaysInMonth > 31) countDaysInMonth = 31; if (year < 1900) error = this.errorTextModifier(this.validateDataErrorText); if (day < 1 || day > countDaysInMonth) { errorType = 'day'; error = 'Please enter a valid day (1-%d).'; } else if (month < 1 || month > 12) { errorType = 'month'; error = 'Please enter a valid month (1-12).'; } else { if (day % 10 == day) this.day.value = '0' + day; if (month % 10 == month) this.month.value = '0' + month; this.full.value = this.format.replace(/%[mb]/i, this.month.value).replace(/%[de]/i, this.day.value).replace(/%y/i, this.year.value); var testFull = this.month.value + '/' + this.day.value + '/' + this.year.value; var test = new Date(testFull); if (isNaN(test)) { error = 'Please enter a valid date.'; } else { this.setFullDate(test); } } var valueError = false; if (!error && !this.validateData()) {//(year<1900 || year>curyear) { errorType = this.validateDataErrorType;//'year'; valueError = this.validateDataErrorText;//'Please enter a valid year (1900-%d).'; error = valueError; } } if (error !== false) { try { error = Translator.translate(error); } catch (e) { } if (!valueError) { this.advice.innerHTML = error.replace('%d', countDaysInMonth); } else { this.advice.innerHTML = this.errorTextModifier(error); } this.advice.show(); return false; } // fixing elements class this.day.removeClassName('validation-failed'); this.month.removeClassName('validation-failed'); this.year.removeClassName('validation-failed'); this.advice.hide(); return true; }, validateData: function () { var year = this.fullDate.getFullYear(); return (year >= 1900 && year <= this.curyear); }, validateDataErrorType: 'year', validateDataErrorText: 'Please enter a valid year (1900-%d).', errorTextModifier: function (text) { text = Translator.translate(text); return text.replace('%d', this.curyear); }, setDateRange: function (minDate, maxDate) { this.minDate = minDate; this.maxDate = maxDate; }, setFullDate: function (date) { this.fullDate = date; } }; Varien.DOB = Class.create(); Varien.DOB.prototype = { initialize: function (selector, required, format) { var el = $$(selector)[0]; var container = {}; container.day = Element.select(el, '.dob-day input')[0]; container.month = Element.select(el, '.dob-month input')[0]; container.year = Element.select(el, '.dob-year input')[0]; container.full = Element.select(el, '.dob-full input')[0]; container.advice = Element.select(el, '.validation-advice')[0]; new Varien.DateElement('container', container, required, format); } }; Varien.dateRangeDate = Class.create(); Varien.dateRangeDate.prototype = Object.extend(new Varien.DateElement(), { validateData: function () { var validate = true; if (this.minDate || this.maxValue) { if (this.minDate) { this.minDate = new Date(this.minDate); this.minDate.setHours(0); if (isNaN(this.minDate)) { this.minDate = new Date('1/1/1900'); } validate = validate && (this.fullDate >= this.minDate); } if (this.maxDate) { this.maxDate = new Date(this.maxDate); this.minDate.setHours(0); if (isNaN(this.maxDate)) { this.maxDate = new Date(); } validate = validate && (this.fullDate <= this.maxDate); } if (this.maxDate && this.minDate) { this.validateDataErrorText = 'Please enter a valid date between %s and %s'; } else if (this.maxDate) { this.validateDataErrorText = 'Please enter a valid date less than or equal to %s'; } else if (this.minDate) { this.validateDataErrorText = 'Please enter a valid date equal to or greater than %s'; } else { this.validateDataErrorText = ''; } } return validate; }, validateDataErrorText: 'Date should be between %s and %s', errorTextModifier: function (text) { if (this.minDate) { text = text.sub('%s', this.dateFormat(this.minDate)); } if (this.maxDate) { text = text.sub('%s', this.dateFormat(this.maxDate)); } return text; }, dateFormat: function (date) { return (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear(); } }); Varien.FileElement = Class.create(); Varien.FileElement.prototype = { initialize: function (id) { this.fileElement = $(id); this.hiddenElement = $(id + '_value'); this.fileElement.observe('change', this.selectFile.bind(this)); }, selectFile: function (event) { this.hiddenElement.value = this.fileElement.getValue(); } }; /** * Create form element. Set parameters into it and send * * @param url * @param parametersArray * @param method */ Varien.formCreator = Class.create(); Varien.formCreator.prototype = { initialize: function (url, parametersArray, method) { this.url = url; this.parametersArray = JSON.parse(parametersArray); this.method = method; this.form = ''; this.createForm(); this.setFormData(); }, createForm: function () { this.form = new Element('form', {'method': this.method, action: this.url}); }, setFormData: function () { for (var key in this.parametersArray) { Element.insert( this.form, new Element('input', {name: key, value: this.parametersArray[key], type: 'hidden'}) ); } } }; Validation.addAllThese([ ['validate-custom', ' ', function (v, elm) { return elm.validate(); }] ]); function truncateOptions() { $$('.truncated').each(function (element) { Event.observe(element, 'mouseover', function () { if (element.down('div.truncated_full_value')) { element.down('div.truncated_full_value').addClassName('show'); } }); Event.observe(element, 'mouseout', function () { if (element.down('div.truncated_full_value')) { element.down('div.truncated_full_value').removeClassName('show'); } }); }); } if (typeof jQuery != 'undefined') { jQuery.noConflict(); } Event.observe(window, 'load', function () { truncateOptions(); }); Element.addMethods({ getInnerText: function (element) { element = $(element); if (element.innerText && !Prototype.Browser.Opera) { return element.innerText; } return element.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g, ' ').strip(); } }); /** * Executes event handler on the element. Works with event handlers attached by Prototype, * in a browser-agnostic fashion. * @param element The element object * @param event Event name, like 'change' * * @example fireEvent($('my-input', 'click')); */ function fireEvent(element, event) { if (document.createEvent) { // dispatch for all browsers except IE before version 9 var evt = document.createEvent("HTMLEvents"); evt.initEvent(event, true, true); // event type, bubbling, cancelable return element.dispatchEvent(evt); } else { // dispatch for IE before version 9 var evt = document.createEventObject(); return element.fireEvent('on' + event, evt); } } /** * Returns more accurate results of floating-point modulo division * E.g.: * 0.6 % 0.2 = 0.19999999999999996 * modulo(0.6, 0.2) = 0 * * @param dividend * @param divisor */ function modulo(dividend, divisor) { var epsilon = divisor / 10000; var remainder = dividend % divisor; if (Math.abs(remainder - divisor) < epsilon || Math.abs(remainder) < epsilon) { remainder = 0; } return remainder; } /** * createContextualFragment is not supported in IE9. Adding its support. */ if ((typeof Range != "undefined") && !Range.prototype.createContextualFragment) { Range.prototype.createContextualFragment = function (html) { var frag = document.createDocumentFragment(), div = document.createElement("div"); frag.appendChild(div); div.outerHTML = html; return frag; }; } function customFormSubmit(url, parametersArray, method) { var createdForm = new Varien.formCreator(url, parametersArray, method); Element.insert($$('body')[0], createdForm.form); createdForm.form.submit(); } function customFormSubmitToParent(url, parametersArray, method) { new Ajax.Request(url, { method: method, parameters: JSON.parse(parametersArray), onSuccess: function (response) { var node = document.createElement('div'); node.innerHTML = response.responseText; var responseMessage = node.getElementsByClassName('messages')[0]; var pageTitle = window.document.body.getElementsByClassName('page-title')[0]; pageTitle.insertAdjacentHTML('afterend', responseMessage.outerHTML); window.opener.focus(); window.opener.location.href = response.transport.responseURL; } }); } /** OMITSIS ALL PAGES */ /* DIALOG POP UP FUNCTIONS */ var keys = [37, 38, 39, 40]; var showDialog = 0; var showExitModal = true; function preventDefault(e) { e = e || window.event; if (e.preventDefault) e.preventDefault(); e.returnValue = false; } function keydown(e) { for (var i = keys.length; i--;) { if (e.keyCode === keys[i]) { preventDefault(e); return; } } } function wheel(e) { preventDefault(e); } //Listener que bloqueja el scroll a iPad i iPhone i el seu efecte rebot document.addEventListener('touchmove', function (evt) { if (showDialog) { evt.preventDefault() } }); function closeDialog(id){ if(id == 'pin-validate'){ enableTrField(); } if(id == 'modal_exit_notice'){ isCurrentLinkAjax = false; currentAjaxLinkUrl = ""; currentAjaxLinkName = ""; currentAjaxLInkDestUrl = ""; } if(id == "modal_desestimar_order_confirm"){ } showTable = 0; showDialog = 0; jQuery(".backdrop#" + id).hide(); jQuery('body').css('overflow-x', ''); jQuery('body').css('overflow-y', ''); if (window.removeEventListener) { window.removeEventListener('DOMMouseScroll', wheel, false); } window.onmousewheel = document.onmousewheel = document.onkeydown = null; if (id == 'size-related') { jQuery('.page .overlay-loading').hide(); } else if (id == 'add-to-cart-info') { jQuery('.backdrop#' + id + ' .dialog-content .cart-dialog-wrapper').removeAttr('style'); jQuery('.backdrop#' + id + ' .dialog-content #cart-dialog-error-message').removeAttr('style'); } if(id == "modal_desestimar_iframe"){ showAccountSectionLoading(); //var extdocumentno = jQuery('.header-actions-cancel-apply').attr('data-extdocumentno'); var order_num = jQuery('.header-actions-cancel-apply').attr('data-documentno'); var backOpenedElems = getOpenedElemsParams(); window.location.href = backToOrderUrl+backOpenedElems; return false; } } function openDialog(id) { showDialog = 1; jQuery(".backdrop#" + id).css("display", "flex"); //fixOverflow(id); //Usando el Custom Scroll no hace falta jQuery('body').css('overflow-x', 'hidden'); jQuery('body').css('overflow-y', 'hidden'); if (id == 'add-to-cart-info') { jQuery('.domino-button .ripple').remove(); }else if(id === 'box-forgotpassword' && jQuery('#email_address').length){ const $mainEmail = jQuery('#email'); // Solo si el campo principal tiene el atributo "readonly" if ($mainEmail.prop('readonly')) { const emailValue = $mainEmail.val(); if (emailValue) { jQuery('#email_address').val(emailValue).focus(); } } } if (window.addEventListener) { window.addEventListener('DOMMouseScroll', wheel, false); } window.onmousewheel = document.onmousewheel = wheel; document.onkeydown = keydown; var maxWidth = Math.max.apply(Math, jQuery('.size-title').map(function () { return jQuery(this).width(); }).get()); jQuery(".size-title").width(maxWidth + 2); if(id != 'modal_desestimar_iframe'){ if (jQuery(".backdrop#" + id + " .dialog").length) { jQuery(".backdrop#" + id + " .dialog").mCustomScrollbar('destroy'); jQuery(".backdrop#" + id + " .dialog").mCustomScrollbar(); } } if (id == 'product-info') { calculateDialogRelatedImgMinHeight(); } } function closeDialogHeader(id) { jQuery(".backdrop#" + id).hide(); } function openDialogHeader(id) { jQuery(".backdrop#" + id).css("display", "flex"); } /** Talla el text del short description que es mostra a la graella de productes i diferents llistats (related, cross sell, etc.) */ function truncateText(extraOffset) { var w = jQuery('.item .wrapper-img.item').width(); jQuery('.upper-box-normal .img-bot-icons').each(function () { var price = parseFloat(jQuery(this).find('.img-bot-prices').width()); var name = jQuery(this).find('.img-bot-name .name-nohover'); var max = w - (Math.ceil(price) + extraOffset); //10px de padding(5 per costat) + 5 el normal, open/close menu sumem mes(20) name.css('max-width', max); }); } /* ONLY RESPONSIVE */ var responsiveMode = false; var automaticScroll = false; function isIOS() { if (/iPad|iPhone|iPod/.test(navigator.userAgent)) { return true; } else { // Ipad PRO return navigator.maxTouchPoints && navigator.maxTouchPoints > 2 && /MacIntel/.test(navigator.platform); } } //If some skip-content is active, then we are in responsive deign function checkIfResponsive() { responsiveMode = false; var is_iOS = isIOS(); var is_Android = navigator.userAgent.match(/Android/i) != null; var is_BlackBerry = navigator.userAgent.match(/BlackBerry/i) != null; var is_OperaMini = navigator.userAgent.match(/Opera Mini/i) != null; var is_WindowsMobile = navigator.userAgent.match(/IEMobile/i) != null; if (is_iOS || is_Android || is_BlackBerry || is_OperaMini || is_WindowsMobile) { responsiveMode = true; return false; } else if (jQuery(window).width() < 1024) { responsiveMode = true; return false; } } function responsiveGridItemsHover(context) { jQuery('.box-item .upper-box-normal', context).on('click', function (event) { jQuery('.box-item .upper-box-hover', context).hide(); var elem = jQuery(this).parent().find('.upper-box-hover').show().addClass('opened'); scroll_if_not_visible(elem.children('.upper-box-hover-content')); jQuery(this).css({'box-shadow': 'none'}); }); jQuery(document).mouseup(function (e) { var container = jQuery(".upper-box-hover.opened"); if (!container.is(e.target) // if the target of the click isn't the container... && container.has(e.target).length === 0) // ... nor a descendant of the container { hideHover(container); } }); } function hideHover(element) { element.hide().removeClass('opened'); element.parent().find('.upper-box-normal').css({ 'box-shadow': '0px 0px 2px #ADAFB1', '-webkit-box-shadow': '0px 0px 2px #ADAFB1', '-moz-box-shadow': '0px 0px 2px #ADAFB1' }); } function responsiveGridCarouselItemsHover(id) { jQuery(id + ' .block-content .upper-box-normal').click(function (e) { jQuery('.mini-grid-products .upper-box-hover').css('visibility', 'hidden'); jQuery('.mini-grid-products .upper-box-normal').css('display', 'block'); jQuery(this).parent().find('.upper-box-normal').css('display', 'none'); jQuery(this).parent().find('.upper-box-hover').show().addClass('opened'); jQuery(this).parent().find('.upper-box-hover').css('visibility', 'visible'); }); jQuery(document).mouseup(function (e) { if (isAnyHoverOpen()) { var container = jQuery(".upper-box-hover"); if (!container.is(e.target) // if the target of the click isn't the container... && container.has(e.target).length === 0) // ... nor a descendant of the container { container.css('visibility', 'hidden'); container.parent().find('.upper-box-normal').css('display', 'block'); } } }); } function isAnyHoverOpen() { return jQuery('.upper-box-hover.opened').length ? true : false; } var id2; function closeOnScroll() { if (!automaticScroll && isAnyHoverOpen()) { hideHover(jQuery('.upper-box-hover.opened')); jQuery('.mini-grid-products .upper-box-hover').css('visibility', 'hidden'); jQuery('.mini-grid-products .upper-box-normal').css('display', 'block'); } setTimeout(function () { automaticScroll = false; }, 450); } /** End Mini products list **/ var check_iphone_resize = false; var is_chrome; var is_explorer; var is_firefox; var is_safari; var is_opera; function check_user_agent() { is_chrome = navigator.userAgent.indexOf('Chrome') > -1; is_explorer = navigator.userAgent.indexOf('MSIE') > -1; is_firefox = navigator.userAgent.indexOf('Firefox') > -1; is_safari = navigator.userAgent.indexOf("Safari") > -1; is_opera = navigator.userAgent.toLowerCase().indexOf("op") > -1; if ((is_chrome) && (is_safari)) { is_safari = false; } if ((is_chrome) && (is_opera)) { is_chrome = false; } } function checkResponsiveDesign() { checkIfResponsive(); if (responsiveMode) { jQuery('body').addClass("is-responsive"); } } let isRegisterPage = false; let isSalesOrderView = false; let updateActiveClassOnMenu = true; let isCurrentLinkAjax = false; let currentAjaxLinkUrl = ""; let currentAjaxLinkName = ""; let currentAjaxLInkDestUrl = ""; console.log("isSalesOrderView)"+isSalesOrderView); async function showPaginationContent(dataSource,pagination) { return new Promise((resolve) => { var html= ''; /*var html = '
No se han encontrado pedidos
"); jQuery("#pagination-container").hide(); dataContainer.show(); }else{ html = response; dataContainer.html(html); jQuery("#pagination-container").show(); dataContainer.show(); } resolve(); } }); }); } jQuery(document).ready(function () { if(jQuery("body").hasClass("customer-account-create")){ isRegisterPage = true; }else if(jQuery("body").hasClass("sales-order-view")){ isSalesOrderView = true; } console.log("isSalesOrderView)"+isSalesOrderView); checkIfResponsive(); if (responsiveMode) { jQuery('body').addClass("is-responsive"); check_user_agent(); initial_mobile_size = jQuery(window).width() * jQuery(window).height(); if (typeof is_iphone !== 'undefined') { if (is_iphone()) { jQuery('body').addClass('iphone'); if (is_safari) { check_iphone_resize = true; onresize_safari(); } } } jQuery(window).on('scroll', function () { clearTimeout(id2); id2 = setTimeout(closeOnScroll, 100); // si el usuari va molt ràpid se li pot tancar el hover. Però així evitem tantes crides }); } jQuery(document).on('click', '.domino-button', function(e) { createRipple(e); }); jQuery('.backdrop').click(function (e) { if (jQuery(e.target).hasClass('ripple')) { return; // No hagas nada si el clic fue en el span.ripple } let target = jQuery(e.target); let body = jQuery('body'); if (jQuery(this).is('#stock-change')) { if (target.attr('class') !== "dialog" && target.parents(".dialog").size() === 0) { modifyqty(productsQty, urlModify); } } else if (!jQuery(this).hasClass('loginform')) { // Para no cruzar con el backdrop del account if (target.attr('class') !== "dialog" && target.parents(".dialog").size() === 0) { let backdropId = target.closest('.backdrop').attr('id'); closeDialog(backdropId); if (backdropId === 'menu-backdrop') { if (showMenu) { isBlocked = 1; close_menu_responsive(); } } } } // sidebar menu mobile close if (target.attr('class') !== 'login-sidebar' && target.parents('.login-sidebar ').size() === 0 && target.attr('class')!="btn btn-primary btn-cac") { let menuMobile = jQuery('#login-sidebar-mobile'); let menuMobileAccount = jQuery('#login-sidebar-mobile-account'); menuMobile.hide('slide', function () { jQuery('#menu-backdrop').hide(); body.removeClass('stop-scrolling'); body.unbind('touchmove'); }); menuMobileAccount.hide('slide', function () { jQuery('#menu-backdrop').hide(); body.removeClass('stop-scrolling'); body.unbind('touchmove'); }); } }); /* Todos los dialog, si necesitan scroll debe ser el Custom */ // jQuery('.backdrop .dialog').mCustomScrollbar(); // Login validation button let loginForm = jQuery('#login-form'); let loginEmail = loginForm.find('#email'); loginForm.bind('propertychange change click keyup input paste', function () { validationLoginEmailAndPassword(loginForm); }); loginForm.on('submit', function (e) { showMainContainerLoading(); //jQuery('.overlay-loading').show(); }); jQuery(document).on('click', '.order-actions a[id^="order-view"]', function(e) { //showMainContainerLoading(); showAccountSectionLoading(); }); jQuery(document).on('click', '.order-actions button[id^="order-tracking"]', function(e) { //showMainContainerLoading(); //jQuery('.overlay-loading').show(); showAccountSectionLoading(); }); jQuery(document).on('click', '.order-actions button[id^="order-invoice"]', function(e) { //showMainContainerLoading(); showAccountSectionLoading(); }); if(isRegisterPage || isSalesOrderView){ jQuery('a').on('click', function (e) { if(jQuery('.is-responsive').length > 0){ if(jQuery(e.target).closest('a').is('.level1.has-child')){ return false; } } if(jQuery(e.target).is('.menu-span') || jQuery(e.target).is('.menu-span-opened')){ return false; } /*if(jQuery(this).parent().parent().is("#toplogin") && responsiveMode){ return false; }*/ if(jQuery(this).attr('class') == "v-button v-accept"){ return false; } if(jQuery(this).attr('href') != undefined && jQuery(this).attr('href') != ''){ if(isRegisterPage){ if(!allFieldsEmpty() && showExitModal){ jQuery("#redirect_url").val(jQuery(this).attr('href')); openDialog('modal_exit_notice'); updateActiveClassOnMenu = false; return false; } }else if(isSalesOrderView){ if(someReturnSelected() && showExitModal){ jQuery("#redirect_url").val(jQuery(this).attr('href')); openDialog('modal_exit_notice'); updateActiveClassOnMenu = false; return false; }else if(jQuery(this).attr('href')!="#" && jQuery(this).attr('href')!="javascript:void(0)" && jQuery(this).attr('target') != "target='_blank'" && jQuery(this).attr('target') != "_blank"){ //if(jQuery(this).attr('href').indexOf('sales/order/history') !== -1){ if(!(jQuery(this).parent().parent().is("#toplogin") && responsiveMode)){ showAccountSectionLoading(); } //} } } } }); } //if(!isSalesOrderView){ jQuery(".col-left.login-sidebar a").on('click', function(e) { //showMainContainerLoading(); if(jQuery("#modal_exit_notice").css('display') == 'none' || jQuery("#modal_exit_notice").css('display') == undefined){ showAccountSectionLoading(); } }); jQuery("#login-sidebar-mobile-account a").on('click', function(e) { //showMainContainerLoading(); showAccountSectionLoading(); }) //} // Show clear button if email is readonly if (loginForm.find('#email').is('[readonly]')) { loginEmail.parent().find('.login-container-inner-email-clear').show(); } // Reset password validation button let resetPasswordForm = jQuery('#form-validate'); resetPasswordForm.bind('propertychange change click keyup input paste', function () { validationResetPassword(resetPasswordForm); }); // Forgot password form let forgotPasswordBox = jQuery('#forgot-password-box'); forgotPasswordBox.bind('propertychange change click keyup input paste', function () { validationResetPassword(forgotPasswordBox, true); }); // Reset password validation button let createAccount = jQuery('#register-form-validate'); createAccount.bind('propertychange change click keyup input paste', function () { validationEmail(createAccount); showClearButton(createAccount); }); let createAccountPassword = jQuery('#register-password-form-validate'); createAccountPassword.bind('propertychange change click keyup input paste', function () { validationPassword(createAccountPassword); }); // Add active class to sidebar menu on reload setActiveClassOnReload(); // set active class on sidebar menu setActiveClassOnMenu(null, true); jQuery('#login-sidebar .login-sidebar-sections').click(function () { if(updateActiveClassOnMenu){ setActiveClassOnMenu(jQuery(this), true); } }); // set active class on account menu setActiveClassOnMenu(); // mobile menu active class get the active class of the account menu jQuery('#login-sidebar-mobile-account .login-sidebar-sections').click(function () { if(updateActiveClassOnMenu){ setActiveClassOnMenu(jQuery(this)); } }); jQuery('#confirm_exit_notice').on('click', function () { if(jQuery("#redirect_url").val().indexOf('sales/order/history') !== -1){ //showMainContainerLoading(); closeDialog('modal_exit_notice'); showAccountSectionLoading(); } window.location.href = jQuery("#redirect_url").val(); //updateActiveClassOnMenu = true; }); jQuery('#confirm_return_order_exit_notice').on('click', function () { if(isCurrentLinkAjax){ ajaxCustomerLink(currentAjaxLinkUrl, currentAjaxLinkName, currentAjaxLInkDestUrl,true); closeDialog('modal_exit_notice'); showAccountSectionLoading(); }else{ //if(jQuery("#redirect_url").val().indexOf('sales/order/history') !== -1){ //showMainContainerLoading(); closeDialog('modal_exit_notice'); showAccountSectionLoading(); //} window.location.href = jQuery("#redirect_url").val(); } //updateActiveClassOnMenu = true; }); if (window.innerWidth <= 767) { let body = jQuery('body'); let closeMobileMenu = jQuery('.close-menu-mobile'); let mobileMenu = jQuery('#login-sidebar-mobile'); let mobileMenuAccount = jQuery('#login-sidebar-mobile-account'); // close mobile menu closeMobileMenu.click(function () { mobileMenu.hide('slide', function () { jQuery('#menu-backdrop').hide(); }); body.removeClass('stop-scrolling'); }); closeMobileMenu.click(function () { mobileMenuAccount.hide('slide', function () { jQuery('#menu-backdrop').hide(); }); body.removeClass('stop-scrolling'); }); // open mobile menu jQuery('#login_icon').click(function (e) { e.preventDefault(); mobileMenu.show('slide', function () { jQuery('#menu-backdrop').show(); }); body.addClass('stop-scrolling'); body.bind('touchmove', function(e){e.preventDefault()}); }); jQuery('.myaccountbutton').click(function (e) { e.preventDefault(); mobileMenuAccount.show('slide', function () { jQuery('#menu-backdrop').show(); }); body.addClass('stop-scrolling'); body.bind('touchmove', function(e){e.preventDefault()}); }); // set active class menu jQuery('#login-sidebar-mobile .login-sidebar-sections').click(function () { if(updateActiveClassOnMenu){ setActiveClassOnMenu(jQuery(this)); } }); // Add active class to mobile sidebar menu setActiveClassOnReload(true) // set account menu to top 0 on scroll on desktop and tablet jQuery(document.body).on('touchmove', mainMenuTopScroll); jQuery(window).on('scroll', mainMenuTopScroll); // fix the bug of not showing the account menu in 768px if (window.innerWidth > 767) { let accountMenu = jQuery('.col-left.sidebar .block-content'); let accountContent = jQuery('.main-container.col2-left-layout .col-main'); if (accountMenu.hasClass('no-display')) { accountMenu.removeClass('no-display'); } accountContent.css('width', 'calc(100% - 265px)'); } } // Soy socio after submit let form = jQuery('.soy-socio-member-check'); form.on('submit', function () { localStorage.setItem('soySocio', 'soySocio'); // save the value of the checkbox to local storage let cardIdValue = jQuery('#socio_card_id').val(); let emailValue = jQuery('#socio_card_email').val(); let isByCard = jQuery('#is_socio_card_id_check').val(); if(isByCard){ if (cardIdValue && isByCard) { localStorage.setItem('soySocioValue', cardIdValue); } }else{ if (emailValue) { localStorage.setItem('soySocioValue', emailValue); } } }); if (localStorage.getItem('soySocio')) { //afterSocioSubmit(); localStorage.removeItem('soySocio'); } //Make the checkbox radio style let cardIdBox = form.find('#socio_card_id_check'); let cardIText = form.find('.socio-form-number-text-inner-2'); let cardIdButton = form.find('#button-soy-number'); //let reCaptchaCard = jQuery('#recaptcha-card .g-recaptcha-response'); let emailBox = form.find('#socio_email_check'); let emailText = form.find('.socio-form-number-text-inner'); let emailButton = form.find('#button-soy-email'); //let reCaptchaEmail = jQuery('#recaptcha-email .g-recaptcha-response'); cardIdBox.click(function () { cardIText.toggle(100); cardIdButton.toggle(100); emailText.hide(100); emailButton.hide(100); emailBox.attr('checked', false); //reCaptchaEmail.prop('required', false); //reCaptchaCard.prop('required', true); }); emailBox.click(function () { emailText.toggle(100); emailButton.toggle(100); cardIText.hide(100); cardIdButton.hide(100); cardIdBox.attr('checked', false); //reCaptchaEmail.prop('required', true); //reCaptchaCard.prop('required', false); }); //Make the checkbox radio style register page let formRegister = jQuery('#register-form-validate'); let socioYesCheckBox = formRegister.find('#socio-yes-check'); let socioYesCheckBoxText = formRegister.find('.socio-yes-check-text-inner'); //let cardIdButton = form.find('#button-soy-number'); let socioNoCheckBox = formRegister.find('#socio-no-check'); //let emailText = form.find('.socio-form-number-text-inner'); //let emailButton = form.find('#button-soy-email'); socioYesCheckBox.click(function () { socioYesCheckBoxText.toggle(100); //cardIdButton.toggle(100); //emailText.hide(100); //emailButton.hide(100); socioNoCheckBox.attr('checked', false); jQuery('#socio-yes-check').removeClass('validate-one-required-by-name'); jQuery('#socio-no-check').removeClass('validate-one-required-by-name'); jQuery("#check-socio-no").val("0"); jQuery("#check-socio-yes").val("1"); }); socioNoCheckBox.click(function () { socioYesCheckBoxText.hide(100); //emailButton.toggle(100); //cardIText.hide(100); //cardIdButton.hide(100); socioYesCheckBox.attr('checked', false); jQuery('#socio-yes-check').removeClass('validate-one-required-by-name'); jQuery('#socio-no-check').removeClass('validate-one-required-by-name'); jQuery("#check-socio-no").val("1"); jQuery("#check-socio-yes").val("0"); }); //My account page socios section let beMemberCheck = jQuery('#my_account_be_member_check'); let beMemberText = jQuery('.be-member-text-section'); let beMemberdButton = jQuery('#button-be-member'); beMemberCheck.click(function () { beMemberText.toggle(100); if (!beMemberCheck.is(':checked')) { beMemberdButton.attr('disabled', true); }else{ enableBeMemberButton(); } //beMemberdButton.toggle(100); //emailText.hide(100); //emailButton.hide(100); //emailBox.attr('checked', false); //reCaptchaEmail.prop('required', false); //reCaptchaCard.prop('required', true); }); jQuery('.sales-order-history').on('click', '.filter-arrow-container', function(e){ jQuery(this).closest(".order-element").toggleClass('closed'); jQuery(this).closest(".order-element").find(".order-relateds").slideToggle(); }); let timeout; //jQuery('.sales-order-history').on('input', '#searchInput', function(e){ jQuery('.sales-order-history').on('click', '#searchButton', function(e){ clearTimeout(timeout); timeout = setTimeout(() => { let searchTerm = jQuery('#searchInput').val().toLowerCase(); searchTerm = searchTerm.trim(); jQuery('#searchInput').val(searchTerm); const filteredData = dataSources.filter(item => { const allDocNos = [ item.order?.DocumentNo, ...Object.values(item.devos || {}).map(dev => dev.DocumentNo), ...Object.values(item.invoices || {}).map(inv => inv.DocumentNo), ...Object.values(item.creditMemos || {}).map(credit => credit.DocumentNo) ].filter(Boolean); // Elimina valores undefined o null return allDocNos.some(docNo => docNo.toLowerCase().includes(searchTerm) ); }); jQuery('#pagination-container').pagination({ dataSource: filteredData, showSizeChanger: true, pageSize: jQuery(".J-paginationjs-size-select").val(), callback: async function(data, pagination) { //const html = data.map(item => `