let obj = { fr: {0: "Marque", 1: "Modèle", 2: "Résultats", 3: "Carrosserie", 4: "Marques", 5: "Top", 6: "Autre"}, nl: {0: "Merk", 1: "Model", 2: "Resultaten", 3: "Carrosserie", 4: "Merken", 5: "Top", 6: "Andere"}, en: {0: "Make", 1: "Model", 2: "Results", 3: "Body", 4: "Makes", 5: "Top", 6: "Other"}, de: {0: "Marke", 1: "Modell", 2: "Ergebnisse", 3: "Karosserie", 4: "Marken", 5: "Top", 6: "Andere"}, ru: {0: "Марка", 1: "Модель", 2: "Предложений", 3: "Кузов", 4: "Марки", 5: "Топ", 6: "Другие"}, pl: {0: "Marka", 1: "Model", 2: "Wyniki", 3: "Zabudowa", 4: "Marki", 5: "Top", 6: "Inne"}, es: {0: "Marca", 1: "Modelo", 2: "Resultados", 3: "Carrocería", 4: "Hace", 5: "Superior", 6: "Otro"}, it: {0: "Marca", 1: "Modello", 2: "Risultati", 3: "Carrozzeria", 4: "Marche", 5: "Top", 6: "Altro"}, el: {0: "Μάρκα", 1: "Μοντέλο", 2: "Αποτελέσματα", 3: "Αμάξωμα", 4: "Μάρκες", 5: "Κορυφαία", 6: "Άλλα"}, cs: {0: "Značka", 1: "Model", 2: "Výsledky", 3: "Karoserie", 4: "Značky", 5: "Nahoře", 6: "Jiné"}, hu: {0: "Márka", 1: "Modell", 2: "Eredmények", 3: "Karosszéria", 4: "Márkák", 5: "Felső", 6: "Egyéb"}, fi: {0: "Merkki", 1: "Malli", 2: "Tulokset", 3: "Runko", 4: "Tekee", 5: "Yläosa", 6: "Muu"}, no: {0: "Merke", 1: "Modell", 2: "Resultater", 3: "Kropp", 4: "Merker", 5: "Topp", 6: "Annet"}, pt: {0: "Marca", 1: "Modelo", 2: "Resultados", 3: "Carroçaria", 4: "Marcas", 5: "Top", 6: "Outros"}, da: {0: "Mærke", 1: "Model", 2: "Resultater", 3: "Karosseri", 4: "Makes", 5: "Top", 6: "Andet"}, sv: {0: "Märke", 1: "Modell", 2: "Resultat", 3: "Karosseri", 4: "Märken", 5: "Topp", 6: "Övrigt"}, uk: {0: "Марка", 1: "Модель", 2: "Пропозиції", 3: "Кузов", 4: "Марки", 5: "Топ", 6: "Інші"}, tr: {0: "Marka", 1: "Model", 2: "Sonuçlar", 3: "Üstyapı", 4: "Markalar", 5: "Üst", 6: "Diğerleri"}, bg: {0: "Марка", 1: "Модел", 2: "Резултати", 3: "Каросерия", 4: "Марки", 5: "Топ", 6: "Други"}, ro: {0: "Marcă", 1: "Model", 2: "Rezultate", 3: "Caroseria", 4: "Mărci", 5: "Sup", 6: "Altele"}, sr: {0: "Марка", 1: "Модел", 2: "Резултати", 3: "Каросерија", 4: "Марки", 5: "Топ", 6: "Други"}, hr: {0: "Marka", 1: "Model", 2: "Rezultati", 3: "Karoserija", 4: "Marke", 5: "Top", 6: "Drugi"}, lv: {0: 'Marka',1: 'Modelis',2: 'Rezultāti',3: 'Ķermenis',4: 'Ražotāji',5: 'Augšā',6: 'Citi'}, lt: {0: 'Markė',1: 'Modelis',2: 'Rezultatai',3: 'Kūnas',4: 'Gamintojai',5: 'Viršuje',6: 'Kita'}, et: {0: 'Mark',1: 'Mudel',2: 'Tulemused',3: 'Keha',4: 'Teeb',5: 'Ülemine',6: 'Muu'}, az: {0: 'Markasi',1: 'Model',2: 'Nəticələr',3: 'Bədən',4: 'edir',5: 'Üst',6: 'Digər'}, hy: {0: 'Ապրանքանիշ',1: 'Մոդել',2: 'Արդյունքներ',3: 'Մարմին',4: 'Արտադրողներ',5: 'Վերև',6: 'Այլ'}, ka: {0: 'ბრენდი',1: 'მოდელი',2: 'შედეგები',3: 'სხეული',4: 'მარკები',5: 'ზედა',6: 'სხვა'}, sq: {0: 'Markë',1: 'Model',2: 'Rezultatet',3: 'Trupi',4: 'Marka',5: 'Krye',6: 'Të tjera'}, sl: {0: 'Znamka',1: 'Model',2: 'Rezultati',3: 'Telo',4: 'Znamke',5: 'Zgoraj',6: 'Drugo'}, sk: {0: 'Značka',1: 'Model',2: 'Výsledky',3: 'Telo',4: 'Značky',5: 'Hore',6: 'Iné'}, bs: {0: 'Marka',1: 'Model',2: 'Rezultati',3: 'Tijelo',4: 'Marke',5: 'Vrh',6: 'Ostalo'}, mk: {0: 'Марка',1: 'Модел',2: 'Резултати',3: 'Тело',4: 'Марки',5: 'Врв',6: 'Друго'} }, lang = document.documentElement.lang || "en"; lang.includes("-") && (lang = lang.split("-")[0]); let lango = obj[lang]; function indexBoxChange (val,e){ let model = document.getElementById("model"),modInput = document.getElementById("modInput"), truckCat = document.getElementById("typeTruck"),cat=document.getElementById("category") Array.from(document.getElementsByClassName("iconbox")).forEach(box => { box.classList.remove("active") }) document.getElementById(val+"box").classList.add("active") document.getElementById("make").innerHTML = '' model.disabled = true modInput.disabled = true if(val !== "truck"){ model.innerHTML = '' model.hidden = false modInput.hidden = true truckCat.hidden = true truckCat.disabled = true document.getElementById("condition").hidden = false cat.disabled = false cat.value = val }else{ cat.disabled=true modInput.hidden = false model.hidden = true truckCat.hidden = false truckCat.disabled = false document.getElementById("condition").hidden = true } getMakes(val) formCahnge(val,event) } async function formCahnge(val,o) { let query = new URLSearchParams() console.log(val) query.append("category",val) for (const x of new FormData(document.getElementById("indexForm"))){ console.log(x[0],x[1]) if(x[1] !== ""){ query.append(x[0],x[1]) if(x[0] === "zip") { await fetch("https://nominatim.openstreetmap.org/search?q="+x[1]+"+"+query.get("country")+"&format=json&geometry=1&limit=1").then((e => e.json())).then((e => { query.append("lon", e[0].lon) query.append("lat", e[0].lat) })) } } } o.preventDefault() await fetch("/countItems", { method: "put", headers: { "Content-Type": "application/json" }, body: JSON.stringify(Object.fromEntries(query)) }).then((async res => await res.json())).then((res => { document.getElementById("indexSpan").innerHTML = res.count document.getElementById("indexHref").href = query.toString() !== ""?"/"+res.path+"/?"+query.toString():"/"+res.path })) } function urlSearch() { let query = new URLSearchParams(window.location.search) let formId = document.forms[0].id if(document.getElementById('make')){ getMakes(formId,query.get('make'),query.get('model')) } query.delete("add") for (let x of query.entries()){ if(x[0] === "country"){ document.getElementById("flCo").innerHTML = document.getElementById(x[1]+"Span").innerHTML document.getElementById("nameCo").innerHTML = " "+x[1] document.getElementById('zip').disabled = false document.getElementById(x[0]).value = x[1] if(x[1] === "EU"){ document.getElementById('zip').disabled = true document.getElementById('area').disabled = true } }else if(x[0] === "zip"){ document.getElementById('area').disabled = false document.getElementById('area').value = query.get('area') document.getElementById(x[0]).value = x[1] }else if(x[0] === "options"){ document.getElementById(x[1]).checked = true }else if(x[0] !== "page" && x[0] !== "lat" && x[0] !== "lon" && x[0] !== "category"){ document.getElementById(x[0]).value = x[1] } } } async function getLngLat() { let e = document.getElementById("zip").value, t = document.getElementById("city").value, n = document.getElementById("country").value, o = document.getElementById("lon"), a = document.getElementById("lat"), l = e + "+" + t + "+" + n; await fetch("https://nominatim.openstreetmap.org/search?q=" + l + "&format=json&geometry=1&limit=1").then((e => e.json())).then((e => { o.value = e[0].lon, a.value = e[0].lat })) } async function submitClick(e, t) { let n = new URLSearchParams, o = ""; for (const e of new FormData(document.getElementById(t))) "" !== e[1] && ("country" === e[0] && (o = e[1]), n.append(e[0], e[1]), "zip" === e[0] && await fetch("https://nominatim.openstreetmap.org/search?q=" + e[1] + "+" + o + "&format=json&geometry=1&limit=1").then((e => e.json())).then((e => { n.append("lon", e[0].lon), n.append("lat", e[0].lat) }))); location.assign(e + "/?" + n.toString()) } function getMakes (car,makeV,modelV){ const make = document.getElementById("make"),model = document.getElementById('model'), modInput = document.getElementById("modInput") fetch("/"+car+"Data.json").then((res => res.json())).then((makes => { make.insertAdjacentHTML("beforeend", "") for(let key in makes){ if(makes[key].top){ make.insertAdjacentHTML("beforeend", '") } } make.insertAdjacentHTML("beforeend", "") for(let key in makes){ if(!makes[key].top){ make.insertAdjacentHTML("beforeend", '") } } if (make.value !== "" || makeV) { if(makeV)make.value = makeV model?model.disabled = false:modInput.disabled=false "" === make.value && (model.disabled = true) getModels(make.value) if(modelV)model?model.value = modelV:modInput.value = modelV } make.onchange = () => { if(model){ if (model.innerHTML = "", model.insertAdjacentHTML("beforeend", '"),model.disabled = !1, "" === make.value && (model.disabled = !0), "" !== make.value) { getModels(make.value) } }else if(make.value !== ""){ modInput.value = "" modInput.disabled = false }else{ modInput.value = "" modInput.disabled = true } } function getModels(val){ let models = makes[val.replace(/ /g,"-").toLowerCase()].models for (let key in models) { model.insertAdjacentHTML("beforeend", '") if (models[key].series) { for (let x in models[key].series){ let mod = models[key].series model.insertAdjacentHTML("beforeend", '") } } } } })) } async function carsFormChange(page,cat,n) { n.preventDefault() document.getElementById("count").innerHTML = '
\n Loading...\n
' document.getElementById("pag").innerHTML = "" let query = new URLSearchParams() scroll(0, 0) document.getElementById("carsDiv").style.opacity = "0.4" query.append("cat",cat) if(page !== "")query.append("page", page) for (const x of new FormData(document.getElementById(document.forms[0].id))){ if(x[1] !== "" ){ query.append(x[0],x[1]) if(x[0] === "zip") { await fetch("https://nominatim.openstreetmap.org/search?q="+x[1]+"+"+query.get("country")+"&format=json&geometry=1&limit=1").then((e => e.json())).then((e => { query.append("lon", e[0].lon) query.append("lat", e[0].lat) })) } }else { if(x[0] === "make" && x[1] === "")query.delete("model") query.delete(x[0]) } } fetch(cat === "revs"?"/reviews":"/fetchdata", { method: "post", headers: { "Content-Type": "application/json" }, body: JSON.stringify(Object.fromEntries(query)) }).then((e => e.json())).then((res => { document.getElementById("count").innerHTML = res.count document.getElementById("carsDiv").innerHTML = res.items document.getElementById("carsDiv").style.opacity = "1" document.getElementById("pag").insertAdjacentHTML("beforeend", res.paginate) })) history.replaceState(null, null, "?"+query.toString()) } function fetchData(data) { fetch("/fetchdata", { method: "post", body: data }).then((e => e.json())).then((res => { document.getElementById("count").innerHTML = res.count document.getElementById("carsDiv").innerHTML = res.items document.getElementById("carsDiv").style.opacity = "1" document.getElementById("pag").insertAdjacentHTML("beforeend", res.paginate) })) } function coutrnyChange(e, t, n) { document.getElementById(t).value = "" document.getElementById(t).disabled = !1 zipChange(n, t) "EU" === document.getElementById(e).value && (document.getElementById(t).disabled = !0, document.getElementById(n).disabled = !0, document.getElementById(n).value = "") } function zipChange(e, t) { document.getElementById(e).value = "200", document.getElementById(e).disabled = !1, "" === document.getElementById(t).value && (document.getElementById(e).disabled = !0, document.getElementById(e).value = "") } function vatChange() { let e = document.getElementById("price"), t = document.getElementById("deductible"), n = document.getElementById("vat"), o = document.getElementById("total"); n.disabled = !0, o.disabled = !0, "yes" === t.value && (n.disabled = !1, o.disabled = !1), t.onchange = () => { "no" === t.value ? (n.value = "", o.value = "", n.disabled = !0, o.disabled = !0) : "yes" === t.value && (n.disabled = !1, o.disabled = !1) }, n.onchange = () => { o.value = Math.round(e.value * (n.value / 100 + 1) * 100 / 100) }, e.onchange = () => { "yes" === t.value && (o.value = Math.round(e.value * (n.value / 100 + 1) * 100 / 100)) }, o.onchange = () => { "yes" === t.value && (e.value = Math.round(o.value / (n.value / 100 + 1) * 100 / 100)) } } function selectClick(value,form,e) { e.preventDefault() let d = new Event("change") document.getElementById("flCo").innerHTML = document.getElementById(value+"Span").innerHTML document.getElementById("nameCo").innerText = form === "indexForm"?document.getElementById(value+"Name").innerHTML:" "+value document.getElementById("country").value = value document.getElementById("country").dispatchEvent(d) document.getElementById(form).dispatchEvent(d) } async function setCurrency(e) { document.cookie = "currency=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/"; let t = new Date, n = t.getTime() + 36e7; t.setTime(n); let o = "currency=" + e + " ;expires=" + t.toUTCString() + "; path=/"; document.cookie = o, await location.replace(location.pathname + "" + location.search) } async function contactSeller(e, t) { t.preventDefault(); let n = { url: location.href }; for (const t of new FormData(document.getElementById(e))) n[t[0]] = t[1]; await fetch("/"+e, { method: "post", headers: { "Content-Type": "application/json" }, body: JSON.stringify(n) }).then((e => e.json())).then((e => { if(e["ok"]){ alert(e["ok"]) location.reload() }else { alert(e["error"]) } })) } function previewLogo() { let e = document.getElementById("logo"); const t = document.getElementById("imgLogo"), n = document.querySelector("input[type=file]").files[0], o = new FileReader; o.addEventListener("load", (function() { n.size > 999999 ? (alert("File is too big!"), e.value = t.src) : (t.src = o.result, e.value = o.result) }), !1), n && o.readAsDataURL(n) } function touchMobile() { let e; ! function(e) { let t = function() { function e() { this._dropEffect = "move", this._effectAllowed = "all", this._data = {} } return Object.defineProperty(e.prototype, "dropEffect", { get: function() { return this._dropEffect }, set: function(e) { this._dropEffect = e }, enumerable: !0, configurable: !0 }), Object.defineProperty(e.prototype, "effectAllowed", { get: function() { return this._effectAllowed }, set: function(e) { this._effectAllowed = e }, enumerable: !0, configurable: !0 }), Object.defineProperty(e.prototype, "types", { get: function() { return Object.keys(this._data) }, enumerable: !0, configurable: !0 }), e.prototype.clearData = function(e) { null != e ? delete this._data[e] : this._data = null }, e.prototype.getData = function(e) { return this._data[e] || "" }, e.prototype.setData = function(e, t) { this._data[e] = t }, e.prototype.setDragImage = function(e, t, o) { var a = n._instance; a._imgCustom = e, a._imgOffset = { x: t, y: o } }, e }(); e.DataTransfer = t; let n = function() { function e() { if (this._lastClick = 0, e._instance) throw "DragDropTouch instance already created."; let t = !1; if (document.addEventListener("test", (function() {}), { get passive() { return t = !0, !0 } }), "ontouchstart" in document) { var n = document, o = this._touchstart.bind(this), a = this._touchmove.bind(this), l = this._touchend.bind(this), i = !!t && { passive: !1, capture: !1 }; n.addEventListener("touchstart", o, i), n.addEventListener("touchmove", a, i), n.addEventListener("touchend", l), n.addEventListener("touchcancel", l) } } return e.getInstance = function() { return e._instance }, e.prototype._touchstart = function(t) { let n = this; if (this._shouldHandle(t)) { if (Date.now() - this._lastClick < e._DBLCLICK && this._dispatchEvent(t, "dblclick", t.target)) return t.preventDefault(), void this._reset(); this._reset(); let o = this._closestDraggable(t.target); o && (this._dispatchEvent(t, "mousemove", t.target) || this._dispatchEvent(t, "mousedown", t.target) || (this._dragSource = o, this._ptDown = this._getPoint(t), this._lastTouch = t, t.preventDefault(), setTimeout((function() { n._dragSource == o && null == n._img && n._dispatchEvent(t, "contextmenu", o) && n._reset() }), e._CTXMENU), e._ISPRESSHOLDMODE && (this._pressHoldInterval = setTimeout((function() { n._isDragEnabled = !0, n._touchmove(t) }), e._PRESSHOLDAWAIT)))) } }, e.prototype._touchmove = function(e) { if (this._shouldCancelPressHoldMove(e)) this._reset(); else if (this._shouldHandleMove(e) || this._shouldHandlePressHoldMove(e)) { let t = this._getTarget(e); if (this._dispatchEvent(e, "mousemove", t)) return this._lastTouch = e, void e.preventDefault(); this._dragSource && !this._img && this._shouldStartDragging(e) && (this._dispatchEvent(e, "dragstart", this._dragSource), this._createImage(e), this._dispatchEvent(e, "dragenter", t)), this._img && (this._lastTouch = e, e.preventDefault(), t != this._lastTarget && (this._dispatchEvent(this._lastTouch, "dragleave", this._lastTarget), this._dispatchEvent(e, "dragenter", t), this._lastTarget = t), this._moveImage(e), this._isDropZone = this._dispatchEvent(e, "dragover", t)) } }, e.prototype._touchend = function(e) { if (this._shouldHandle(e)) { if (this._dispatchEvent(this._lastTouch, "mouseup", e.target)) return void e.preventDefault(); this._img || (this._dragSource = null, this._dispatchEvent(this._lastTouch, "click", e.target), this._lastClick = Date.now()), this._destroyImage(), this._dragSource && (e.type.indexOf("cancel") < 0 && this._isDropZone && this._dispatchEvent(this._lastTouch, "drop", this._lastTarget), this._dispatchEvent(this._lastTouch, "dragend", this._dragSource), this._reset()) } }, e.prototype._shouldHandle = function(e) { return e && !e.defaultPrevented && e.touches && e.touches.length < 2 }, e.prototype._shouldHandleMove = function(t) { return !e._ISPRESSHOLDMODE && this._shouldHandle(t) }, e.prototype._shouldHandlePressHoldMove = function(t) { return e._ISPRESSHOLDMODE && this._isDragEnabled && t && t.touches && t.touches.length }, e.prototype._shouldCancelPressHoldMove = function(t) { return e._ISPRESSHOLDMODE && !this._isDragEnabled && this._getDelta(t) > e._PRESSHOLDMARGIN }, e.prototype._shouldStartDragging = function(t) { var n = this._getDelta(t); return n > e._THRESHOLD || e._ISPRESSHOLDMODE && n >= e._PRESSHOLDTHRESHOLD }, e.prototype._reset = function() { this._destroyImage(), this._dragSource = null, this._lastTouch = null, this._lastTarget = null, this._ptDown = null, this._isDragEnabled = !1, this._isDropZone = !1, this._dataTransfer = new t, clearInterval(this._pressHoldInterval) }, e.prototype._getPoint = function(e, t) { return e && e.touches && (e = e.touches[0]), { x: t ? e.pageX : e.clientX, y: t ? e.pageY : e.clientY } }, e.prototype._getDelta = function(t) { if (e._ISPRESSHOLDMODE && !this._ptDown) return 0; let n = this._getPoint(t); return Math.abs(n.x - this._ptDown.x) + Math.abs(n.y - this._ptDown.y) }, e.prototype._getTarget = function(e) { for (var t = this._getPoint(e), n = document.elementFromPoint(t.x, t.y); n && "none" == getComputedStyle(n).pointerEvents;) n = n.parentElement; return n }, e.prototype._createImage = function(t) { this._img && this._destroyImage(); let n = this._imgCustom || this._dragSource; if (this._img = n.cloneNode(!0), this._copyStyle(n, this._img), this._img.style.top = this._img.style.left = "-9999px", !this._imgCustom) { var o = n.getBoundingClientRect(), a = this._getPoint(t); this._imgOffset = { x: a.x - o.left, y: a.y - o.top }, this._img.style.opacity = e._OPACITY.toString() } this._moveImage(t), document.body.appendChild(this._img) }, e.prototype._destroyImage = function() { this._img && this._img.parentElement && this._img.parentElement.removeChild(this._img), this._img = null, this._imgCustom = null }, e.prototype._moveImage = function(e) { let t = this; requestAnimationFrame((function() { if (t._img) { let n = t._getPoint(e, !0), o = t._img.style; o.position = "absolute", o.pointerEvents = "none", o.zIndex = "999999", o.left = Math.round(n.x - t._imgOffset.x) + "px", o.top = Math.round(n.y - t._imgOffset.y) + "px" } })) }, e.prototype._copyProps = function(e, t, n) { for (let o = 0; o < n.length; o++) { let a = n[o]; e[a] = t[a] } }, e.prototype._copyStyle = function(t, n) { if (e._rmvAtts.forEach((function(e) { n.removeAttribute(e) })), t instanceof HTMLCanvasElement) { let e = t, o = n; o.width = e.width, o.height = e.height, o.getContext("2d").drawImage(e, 0, 0) } let o = getComputedStyle(t); for (let e = 0; e < o.length; e++) { let t = o[e]; t.indexOf("transition") < 0 && (n.style[t] = o[t]) } n.style.pointerEvents = "none"; for (let e = 0; e < t.children.length; e++) this._copyStyle(t.children[e], n.children[e]) }, e.prototype._dispatchEvent = function(t, n, o) { if (t && o) { let a = document.createEvent("Event"), l = t.touches ? t.touches[0] : t; return a.initEvent(n, !0, !0), a.button = 0, a.which = a.buttons = 1, this._copyProps(a, t, e._kbdProps), this._copyProps(a, l, e._ptProps), a.dataTransfer = this._dataTransfer, o.dispatchEvent(a), a.defaultPrevented } return !1 }, e.prototype._closestDraggable = function(e) { for (; e; e = e.parentElement) if (e.hasAttribute("draggable") && e.draggable) return e; return null }, e }(); n._instance = new n, n._THRESHOLD = 5, n._OPACITY = .5, n._DBLCLICK = 500, n._CTXMENU = 900, n._ISPRESSHOLDMODE = !1, n._PRESSHOLDAWAIT = 400, n._PRESSHOLDMARGIN = 25, n._PRESSHOLDTHRESHOLD = 0, n._rmvAtts = "id,class,style,draggable".split(","), n._kbdProps = "altKey,ctrlKey,metaKey,shiftKey".split(","), n._ptProps = "pageX,pageY,clientX,clientY,screenX,screenY".split(","), e.DragDropTouch = n }(e || (e = {})) } let px = { carTrans: 0, motoTrans: 0, vanTrans: 0, truckTrans: 0 }; function moveItems(val,id,total) { px[id] = px[id] + val; let n = document.getElementById(id); total - n.clientWidth - px[id] < val && (px[id] = px[id] + (total - n.clientWidth - px[id])) n.style.transform = "translate(-"+px[id]+"px, 0px)" } async function addReview(dest,id, e) { e.preventDefault(); let data = {} for (const x of new FormData(document.getElementById(id))) data[x[0]] = x[1]; await fetch(dest, { method: "post", headers: { "Content-Type": "application/json" }, body: JSON.stringify(data) }).then((e => e.json())).then((e => { if(e["ok"]){ alert(e["ok"]) location.reload() }else { alert(e["error"]) } })) } async function getDropShare(link,title,host,key,e){ e.preventDefault() let dropEl = document.getElementById('dropShare'+key) dropEl.innerHTML = "" dropEl.innerHTML= ` Share on Facebook Facebook Share on Twitter Twitter Share on WathsApp WathsApp Send on Email Email ` }