{"version":3,"file":"scripts.js","sources":["scripts.js"],"sourcesContent":["var redirectToUrl;\r\nvar loadedPersonalSuggestions;\r\n\r\nfunction getLoginReturnUrl() {\r\n return encodeURIComponent(redirectToUrl ? redirectToUrl : window.location.hash);\r\n}\r\n\r\n/* SCRIPTS */\r\n$(function ($) {\r\n const url = new URL(window.location.href);\r\n if (url.searchParams.has('IsSearchboxQuery')) {\r\n url.searchParams.delete('IsSearchboxQuery');\r\n history.replaceState({}, null, url.toString());\r\n }\r\n\r\n // Init hi module.\r\n $.hi = $.hi || {};\r\n\r\n // Validations\r\n\r\n // By default validator ignores hidden fields.\r\n // change the setting here to ignore nothing\r\n $.validator.setDefaults({ ignore: null });\r\n\r\n $.validator.addMethod('requiredforvalue', function (value, element, param) {\r\n var targetInput = $(param[0]);\r\n var currentValue = targetInput.is(':radio') ? targetInput.filter(':checked').val() : targetInput.val();\r\n var requiredForValue = param[2];\r\n\r\n if (currentValue === requiredForValue) {\r\n var val = $(element).val();\r\n return val && val.length > 0;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n $.validator.unobtrusive.adapters.add('requiredforvalue', ['property', 'value'], function (options) {\r\n var $targetElement = $(options.form).find('#' + options.params.property);\r\n\r\n options.rules['requiredforvalue'] = [$targetElement[0], options.params.property, options.params.value];\r\n options.messages['requiredforvalue'] = options.message;\r\n });\r\n\r\n $.validator.addMethod(\"requiredif\", function (value, element, param) {\r\n var $targetElement = $(`input[name=${param.propertyname}]`);\r\n const regex = new RegExp(element.dataset.valRequiredifPattern);\r\n\r\n var isRequired = $targetElement.is(':checkbox')\r\n ? $targetElement.is(':checked').toString() == param.propertyvalue\r\n : $targetElement.val().toLowerCase() == param.propertyvalue;\r\n\r\n const regexValid = element.dataset.valRequiredifPattern\r\n ? regex.test($.trim(value))\r\n : true;\r\n\r\n if (isRequired) {\r\n if (!this.depend(param, element))\r\n return \"dependency-mismatch\";\r\n switch (element.nodeName.toLowerCase()) {\r\n case 'select':\r\n var val = $(element).val();\r\n return val && val.length > 0;\r\n case 'input':\r\n if (this.checkable(element))\r\n return this.getLength(value, element) > 0 && regexValid;\r\n default:\r\n return $.trim(value).length > 0 && regexValid;\r\n }\r\n }\r\n\r\n return true;\r\n });\r\n\r\n $.validator.unobtrusive.adapters.add(\"requiredif\", [\"property\", \"value\"], function (options) { \r\n options.rules[\"requiredif\"] = {\r\n propertyname: options.params.property,\r\n propertyvalue: options.params.value\r\n };\r\n options.messages[\"requiredif\"] = options.message;\r\n });\r\n\r\n $.validator.addMethod('requiredconsent', function (value, element, param) {\r\n var $element = $(element);\r\n\r\n if ($element.is(':checkbox')) {\r\n return $element.is(':checked');\r\n }\r\n\r\n return true;\r\n });\r\n\r\n $.validator.unobtrusive.adapters.add('requiredconsent', ['property', 'value'], function (options) {\r\n options.rules['requiredconsent'] = [];\r\n options.messages['requiredconsent'] = options.message;\r\n });\r\n\r\n $.validator.addMethod('rangeforvalue', function (value, element, params) {\r\n var targetInput = $(params[0]);\r\n var currentValue = targetInput.is(':radio') ? targetInput.filter(':checked').val() : targetInput.val();\r\n var rangeforvalue = params[2];\r\n var minValue = parseInt(element.dataset.valRangeforvalueMin);\r\n var maxValue = parseInt(element.dataset.valRangeforvalueMax);\r\n\r\n if (currentValue === rangeforvalue) {\r\n var val = parseInt($(element).val());\r\n return val && val >= minValue && val <= maxValue;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n $.validator.unobtrusive.adapters.add('rangeforvalue', ['property', 'value'], function (options) {\r\n var $targetElement = $(options.form).find('#' + options.params.property);\r\n\r\n options.rules['rangeforvalue'] = [$targetElement[0], options.params.property, options.params.value];\r\n options.messages['rangeforvalue'] = options.message;\r\n });\r\n}(jQuery));\r\n\r\nfunction debounce(func, wait, immediate) {\r\n var timeout;\r\n return function () {\r\n var context = this,\r\n args = arguments;\r\n\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n};\r\n\r\nfunction showFlashMessage(message, isError) {\r\n const color = isError ? 'error' : 'success';\r\n $('.js-flash-message-container').html(`
`);\r\n}\r\n\r\nfunction copyUrl(url) {\r\n if (!url) {\r\n url = `${$(location).attr('origin')}${$(location).attr('pathname')}`;\r\n }\r\n\r\n var $temp = $(\"\");\r\n $(\"body\").append($temp);\r\n $temp.val(url).select();\r\n document.execCommand(\"copy\");\r\n $temp.remove();\r\n}\r\n\r\n$(document).ready(function () {\r\n // Things to hide on click\r\n\r\n $('body').click(function (e) {\r\n var $clickedElement = $(e.target);\r\n if ($clickedElement.hasClass('js-search-item')) {\r\n return;\r\n }\r\n\r\n if ($clickedElement.closest('.js-search-item').length) {\r\n return;\r\n }\r\n\r\n closeFullTextSearch();\r\n });\r\n\r\n // popup close on escape\r\n\r\n $('body').keydown(function (e) {\r\n if (e.keyCode == 27 && $('.c-new-ad__step-1--visible').length > 0) {\r\n $('.js-step-1').removeClass('c-new-ad__step-1--visible');\r\n $('body').removeClass('u-no-scroll');\r\n }\r\n else if (e.keyCode == 27 && $('.c-user-popup--visible').length > 0) {\r\n $('.js-user-popup').removeClass('c-user-popup--visible');\r\n $('body').removeClass('u-no-scroll');\r\n loginOpen = false;\r\n }\r\n else if (e.keyCode == 27 && $('.c-filter-popup--visible').length > 0) {\r\n $('.js-filters-container').removeClass('c-filter-popup--visible');\r\n $('body').removeClass('u-no-scroll');\r\n }\r\n else if (e.keyCode == 27 && $('.c-message-popup--visible').length > 0) {\r\n $('.js-message-popup').removeClass('c-message-popup--visible');\r\n $('body').removeClass('u-no-scroll');\r\n }\r\n else if (e.keyCode == 27 && $('.c-new-ad__step-3--visible').length > 0) {\r\n $('.js-step-3').removeClass('c-new-ad__step-3--visible');\r\n $('body').removeClass('u-no-scroll');\r\n }\r\n else if (e.keyCode == 27 && $('.c-popup--visible').length > 0) {\r\n $('.c-popup').removeClass('c-popup--visible');\r\n $('body').removeClass('u-no-scroll');\r\n }\r\n });\r\n\r\n // Menu scrolling\r\n\r\n var lastScrollTop = 0;\r\n\r\n $(window).scroll(function (event) {\r\n var st = $(this).scrollTop();\r\n if (st > lastScrollTop && st > 100) {\r\n $('.js-header-compact').addClass('c-header-compact--hidden');\r\n $('.js-side-bar').removeClass('c-main__side-bar--scrolling-top');\r\n $('.js-side-banners').removeClass('c-main__banners--scrolling-top');\r\n } else {\r\n $('.js-header-compact').removeClass('c-header-compact--hidden');\r\n $('.js-side-bar').addClass('c-main__side-bar--scrolling-top');\r\n $('.js-side-banners').addClass('c-main__banners--scrolling-top');\r\n $('#adfContainer').removeClass('scrolling');\r\n }\r\n\r\n if (st > lastScrollTop) {\r\n $('#adfContainer').addClass('scrolling');\r\n } else {\r\n $('#adfContainer').removeClass('scrolling');\r\n }\r\n lastScrollTop = st;\r\n });\r\n\r\n\r\n $(window).bind('load', function () {\r\n\r\n var bannerTimer = setInterval(bannerTime, 500);\r\n var bannerTimerinterator = 0;\r\n\r\n function bannerTime() {\r\n if ($('#adfContainer').length > 0) {\r\n $('.js-banner-leader-main').removeClass('c-banner__leaderboard--no-padding');\r\n $('.c-desktop-search').removeClass('c-desktop-search--no-banner');\r\n $('.c-header-compact__placeholder').removeClass('.c-header-compact__placeholder--bg');\r\n $('.c-header__placeholder').removeClass('.c-header__placeholder--bg');\r\n clearInterval(bannerTimer);\r\n }\r\n\r\n else {\r\n $('.js-banner-leader-main').addClass('c-banner__leaderboard--no-padding');\r\n $('.c-desktop-search').addClass('c-desktop-search--no-banner');\r\n $('.c-header-compact__placeholder').addClass('.c-header-compact__placeholder--bg');\r\n $('.c-header__placeholder').addClass('.c-header__placeholder--bg');\r\n }\r\n\r\n if (bannerTimerinterator >= 4) {\r\n clearInterval(bannerTimer);\r\n }\r\n\r\n bannerTimerinterator++;\r\n }\r\n\r\n function stopBannerTime() {\r\n clearInterval(bannerTimer);\r\n }\r\n });\r\n\r\n\r\n\r\n // User menu\r\n\r\n $('.js-user-menu-switch').click(function (e) {\r\n e.stopPropagation();\r\n $('.js-user-menu').toggleClass('open');\r\n });\r\n\r\n // User list and article technical support\r\n\r\n $(document).on('click', '.js-user-list-switch', function (e) {\r\n e.preventDefault();\r\n $(this).siblings('.js-user-list-text').toggleClass('c-user-form__list-text--active');\r\n $(this).find('.js-user-list-image').toggleClass('c-user-form__list-image--active');\r\n });\r\n\r\n\r\n // Categories\r\n\r\n $(document).on('click', '.js-category-switch', function (e) {\r\n e.preventDefault();\r\n $('.js-categories').toggleClass('c-categories--active');\r\n $('.js-category-switch').toggleClass('js-category-switch--active');\r\n });\r\n\r\n $(document).on('click', '.js-continue-to-step-3', function (e) {\r\n e.preventDefault();\r\n $('.js-step-3').addClass('c-new-ad__step-3--visible');\r\n $('body').addClass('u-no-scroll');\r\n });\r\n\r\n function newAdPopup() {\r\n window.location.hash = \"\";\r\n\r\n $.ajax({\r\n url: \"/inzeraty/NewStep1\",\r\n success: function (html) {\r\n $(\"#js-popup-container\").html(html);\r\n $('.js-step-1').addClass('c-new-ad__step-1--visible');\r\n $.validator.unobtrusive.parse(\"#new-ad-step1\");\r\n loadCategoriesByParentId();\r\n },\r\n error: function (response) {\r\n if (response.status === 403) {\r\n // We need to first set fragment to know where to return from login\r\n window.location.hash = '#new-ad';\r\n loginPopup();\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (window.location.hash === \"#new-ad\") {\r\n newAdPopup();\r\n }\r\n\r\n $(document).on('click', '.js-add', function (e) {\r\n e.preventDefault();\r\n newAdPopup();\r\n window.dataLayer.push({\r\n 'event': 'user-action',\r\n 'category': 'Inzerat',\r\n 'action': 'VlozeniBtn'\r\n });\r\n });\r\n\r\n $(document).on('click', '.js-close-step-1', function (e) {\r\n $('.js-step-1').removeClass('c-new-ad__step-1--visible');\r\n window.location.hash = '';\r\n });\r\n\r\n $(document).on('click', '.js-step-1', function (e) {\r\n window.dataLayer.push({\r\n 'event': 'user-action',\r\n 'category': 'Inzerat',\r\n 'action': 'VlozeniPrvniKrok'\r\n });\r\n });\r\n\r\n /* USER POPUP */\r\n\r\n $(document).on('click', '.js-close-user-popup', function (e) {\r\n e.preventDefault();\r\n loginOpen = false;\r\n window.location.hash = '';\r\n $('.c-user-popup__container--active').removeClass('c-user-popup__container--active');\r\n $('.js-user-popup').removeClass('c-user-popup--visible');\r\n });\r\n\r\n\r\n // Textarea character counter\r\n\r\n var stringLength = 0;\r\n\r\n\r\n function charCounter(el) {\r\n var textareaValue = el.val();\r\n var maxlength = el.attr('maxlength');\r\n\r\n // Count new lines - js ignore new lines in text\r\n var numberOfLineBreaks = (textareaValue.match(/(\\r\\n|\\n|\\r)/g) || []).length;\r\n // Shortens the text according to the max length\r\n el.val(textareaValue.slice(0, maxlength - numberOfLineBreaks));\r\n // Rewrite value\r\n textareaValue = el.val();\r\n\r\n var stringLength = textareaValue.length + numberOfLineBreaks;\r\n\r\n var target = el.closest('.js-counter').find('.js-counter-target');\r\n target.html(stringLength);\r\n\r\n if (stringLength >= parseInt($('.js-counter-limit').html())) {\r\n target.addClass('o-counter__number--over');\r\n } else {\r\n target.removeClass('o-counter__number--over');\r\n }\r\n }\r\n\r\n $('.js-counter-source').each(function () {\r\n charCounter($(this));\r\n });\r\n\r\n $(document).on('keyup', '.js-counter-source', function (e) {\r\n charCounter($(this));\r\n });\r\n\r\n // Show password\r\n\r\n $(document).on('mousedown touchstart', '.js-show-password', function (e) {\r\n $('#' + $(this).attr('data-for')).attr('type', 'text');\r\n });\r\n\r\n $(document).on('mouseup mouseleave touchend', '.js-show-password', function () {\r\n $('#' + $(this).attr('data-for')).attr('type', 'password');\r\n $('#' + $(this).attr('data-for')).focus();\r\n });\r\n\r\n\r\n // CATEGORY SELECT\r\n\r\n var mq = window.matchMedia('(min-width: 1024px)');\r\n\r\n // DESKTOP\r\n\r\n let currentCategoryId = -1;\r\n let currentCategoryContent = '';\r\n\r\n function loadCategoriesByParentId(categoryId) {\r\n if (categoryId === currentCategoryId) {\r\n $('.js-category-select-container').html(currentCategoryContent);\r\n return;\r\n }\r\n\r\n $('.js-category-select-container').addClass('loading');\r\n\r\n $.ajax({\r\n url: '/inzeraty/Subcategories',\r\n data: {\r\n categoryId: categoryId\r\n },\r\n success: function (result) {\r\n $('.js-category-select-item-container').fadeIn();\r\n $('.js-category-select-container').html(result);\r\n $('.js-category-select-container').removeClass('loading');\r\n currentCategoryId = categoryId;\r\n currentCategoryContent = result;\r\n }\r\n });\r\n };\r\n\r\n let loadCategoriesByNameLastQuery = null;\r\n\r\n var loadCategoriesByName = debounce(function () {\r\n var query = $('#js-popup-container .js-category-select-input').val();\r\n if (loadCategoriesByNameLastQuery !== query) {\r\n $('#AdCategoryId').val(null);\r\n }\r\n loadCategoriesByNameLastQuery = query;\r\n\r\n if (query.length > 2) {\r\n $('.js-category-select-item-container').fadeIn();\r\n $('.js-category-select-container').addClass('loading');\r\n $('.js-category-select-change').hide();\r\n $('.js-category-select-input-container, .js-category-select-container, .js-category-select').addClass('open');\r\n\r\n var url = '/inzeraty/FindCategories?query=' + query;\r\n $.ajax({\r\n url: url,\r\n success: function (result) {\r\n $(\".js-category-select-container\").html(result);\r\n $('.js-category-select-container').removeClass('loading');\r\n\r\n currentCategoryId = -1;\r\n },\r\n error: function () {\r\n $('.js-category-select-container').removeClass('loading');\r\n\r\n currentCategoryId = -1;\r\n }\r\n });\r\n } else {\r\n loadCategoriesByParentId();\r\n }\r\n }, 500);\r\n\r\n if (mq.matches) {\r\n $(document).on('click', '.js-category-select-switch, .js-category-select-change', function (e) {\r\n e.preventDefault();\r\n $('.js-category-select-input-container, .js-category-select-container').toggleClass('open');\r\n\r\n if ($('.js-category-select').hasClass('open')) {\r\n setTimeout(function () {\r\n $('.js-category-select').toggleClass('open');\r\n $('.js-category-select-change').toggle();\r\n }, 300);\r\n } else {\r\n loadCategoriesByParentId();\r\n\r\n $('.js-category-select').toggleClass('open');\r\n $('.js-category-select-change').toggle();\r\n }\r\n });\r\n }\r\n // MOBILE\r\n else {\r\n function openCategorySelector() {\r\n $('.js-category-select, .js-category-select-input-container, .js-category-select-container, .js-category-select-header').addClass('open');\r\n $('.js-category-select-switch').addClass('hidden');\r\n $('.js-category-select-search-button').addClass('visible');\r\n\r\n if ($('.js-category-select-container .js-select-category-item').length === 0) {\r\n loadCategoriesByName();\r\n }\r\n }\r\n\r\n $(document).on('click', '.js-category-select-input-container', openCategorySelector);\r\n $(document).on('focus', '.js-category-select-input', openCategorySelector);\r\n\r\n $(document).on('click', '.js-category-select-close', function () {\r\n $('.js-category-select, .js-category-select-input-container, .js-category-select-container, .js-category-select-header').removeClass('open');\r\n $('.js-category-select-switch').removeClass('hidden');\r\n $('.js-category-select-search-button').removeClass('visible');\r\n });\r\n\r\n $(document).on('click', '.js-category-select-search-button', function () {\r\n $('.js-category-select-container').addClass('loading');\r\n loadCategoriesByName();\r\n });\r\n }\r\n\r\n // DESKTOP & MOBILE UNIVERSAL\r\n\r\n $(document).on('keydown', '.js-category-select-input', function () {\r\n loadCategoriesByName();\r\n });\r\n\r\n $(document).on('click', '.js-category-back-button', function (e) {\r\n e.preventDefault();\r\n loadCategoriesByParentId($(this).data('parent-category-id'));\r\n });\r\n\r\n $(document).on('click', '.js-select-category-item', function (e) {\r\n e.preventDefault();\r\n\r\n if ($(this).hasClass('js-select-category-item-has-sub')) {\r\n loadCategoriesByParentId($(this).data('id'));\r\n $('.js-category-select-item-container').fadeIn();\r\n } else {\r\n loadCategoriesByNameLastQuery = $(this).attr('data-name');\r\n $('.js-category-select-input').val(loadCategoriesByNameLastQuery);\r\n $('.js-category-select-item-container').fadeOut();\r\n $('#AdCategoryId').val($(this).data('id'));\r\n $('#new-ad-step1').validate().form();\r\n $('.js-category-select, .js-category-select-input-container, .js-category-select-container, .js-category-select-header').removeClass('open');\r\n\r\n if (!mq.matches) {\r\n $('.js-category-select-switch').removeClass('hidden');\r\n $('.js-category-select-search-button').removeClass('visible');\r\n } else {\r\n $('.js-category-select-change').toggle();\r\n }\r\n }\r\n });\r\n\r\n // Fulltext search\r\n\r\n var searchItems = 0;\r\n var index = 0;\r\n\r\n var closeFullTextSearch = function () {\r\n selectedItem = 0;\r\n $('.js-search-results').removeClass('c-search-results--visible');\r\n $('.js-search-results').empty();\r\n };\r\n\r\n $(document).on('click', '.js-search-item', function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n suggestionSelected($(this));\r\n });\r\n\r\n $('.js-search-area').click(function (e) {\r\n var $clickedElement = $(e.target);\r\n if (!($clickedElement.hasClass('js-search-item') || $clickedElement.parent('.js-search-item'))) {\r\n e.stopPropagation();\r\n }\r\n });\r\n\r\n $(document).on('submit', '.js-search-form', function (ev) {\r\n $(this).find('.js-data-submit-query').val(true);\r\n });\r\n\r\n var fullTextSearch = debounce(function (query) {\r\n if (query) {\r\n $('.js-search-area').addClass('loading');\r\n\r\n $.ajax({\r\n url: '/inzeraty/suggest',\r\n data: {\r\n query: query\r\n },\r\n success: function (suggestions) {\r\n var html = '';\r\n\r\n var hasCategories = suggestions.categories.length > 0;\r\n var hasTerms = suggestions.data.length > 0;\r\n\r\n if (hasCategories) {\r\n var items = suggestions.categories.map(function (c) {\r\n return '