/* Stars 94 website javascript library * AIP Solutions`2018 - https://aip.solutions */ /* search component */ if(!dl.o) dl.o = {} if(!dl.o.search) dl.o.search = {}; //list of active searches dl.search = function(id){ var id = id||'search'; if(dl.o.search[id]) //cache lookup return dl.o.search[id]; if(!(this instanceof dl.search)) //auto object creation return dl.o.search[id] = new dl.search(id); //finally the class can start :) this.id = id; this.tick = 0; this.list = {'search':['vehicle', 'direct', 'vin'], 'brand':0, 'model':0, 'year':0, 'engine':0}; if(this.init()) this.bind(); } dl.Search = dl.search.prototype; dl.Search.init = function(){ this.el = dl.el(this.id); if(!dl.hash(this.id)) dl.hash({ 'search': dl.storage.get(this.id) || 'vehicle', 'search.brand': dl.storage.get(this.id+'.brand'), 'search.year': dl.storage.get(this.id+'.year'), 'search.model': dl.storage.get(this.id+'.model'), 'search.engine': dl.storage.get(this.id+'.engine') }); this.load('init'); if(val = dl.storage.get('search.type')) dl.el('search.type').val(val); return true; } dl.Search.bind = function(){ var self = this; var hash = ''; dl.on('hashchange', function(){ if(hash == dl.l.hash) return; //sometimes the hash is called two times for the same event hash = dl.l.hash self.load(); }) for(var i in this.list.search) { var id = this.list.search[i]; dl.el(this.id+'.'+id+'.link').on('click', function(e){ var tid = dl.el(e.target).data(self.id); dl.hash(self.id, tid); }); } dl.el(self.id+'.brand').on('change', function(){ dl.hash({'search.brand': dl.el(self.id+'.brand').val(), 'search.year':false, 'search.model':false, 'search.engine':false}); dl.storage.set(self.id+'.brand', dl.el(self.id+'.brand').val()); dl.storage.del(self.id+'.year'); dl.storage.del(self.id+'.model'); dl.storage.del(self.id+'.engine'); }); dl.el(self.id+'.year').on('change', function(){ dl.hash({'search.year': dl.el(self.id+'.year').val(), 'search.model':false, 'search.engine':false}); dl.storage.set(self.id+'.year', dl.el(self.id+'.year').val()); dl.storage.del(self.id+'.model'); dl.storage.del(self.id+'.engine'); }) dl.el(self.id+'.model').on('change', function(){ dl.hash({'search.model': dl.el(self.id+'.model').val(), 'search.engine':false}); dl.storage.set(self.id+'.model', dl.el(self.id+'.model').val()); dl.storage.del(self.id+'.engine'); }) dl.el(self.id+'.engine').on('click', function(e){ var list = dl.el(self.id+'.engine.list'); if(list.style.display == 'block') list.hide(); else list.show(); var el = e.target; if(el.data && el.dataset.code) var code = el.dataset.code; if(el.parentNode && el.parentNode.dataset.code) var code = el.parentNode.dataset.code; if(code) { dl.hash({'search.engine':code}); var nameBrand = dl.el(self.id+'.brand').options[dl.el(self.id+'.brand').selectedIndex].innerHTML; var nameEngine = dl.el(self.id+'.engine.'+code).data('name'); dl.storage.set(self.id+'.engine', code); dl.storage.set(self.id+'.string', nameBrand+' - '+nameEngine); } }) dl.el(self.id+'.code').on('change', function(){ dl.hash({'search.code': dl.el(self.id+'.code').val()}); dl.storage.set(self.id+'.code', dl.el(self.id+'.code').val()); }) dl.el(self.id+'.vin').on('change', function(){ dl.hash({'search.vin': dl.el(self.id+'.vin').val()}); dl.storage.set(self.id+'.vin', dl.el(self.id+'.vin').val()); }) dl.el(self.id+'.vin.button').on('click', function(e){ var searchData = { 'search': dl.storage.get(self.id) || 'vin', 'search.vin': dl.storage.get(self.id+'.vin'), 'url': dl.l.hash, } console.log(searchData) var d = new FormData(); d.append('search', JSON.stringify(searchData)); dl.xhr('filter.ajax.php?what=set', d, function(data){ console.log('filter saved!'); dl.search().submit('vin'); }); }); dl.el(self.id+'.vehicle.button').on('click', function(e){ //dl.xhr('filter.ajax.php?what=set',d).ondata = function(data){}; //console.log(dl) var searchData = { 'search': dl.storage.get(self.id) || 'vehicle', 'search.brand': dl.storage.get(self.id+'.brand'), 'search.year': dl.storage.get(self.id+'.year'), 'search.model': dl.storage.get(self.id+'.model'), 'search.engine': dl.storage.get(self.id+'.engine'), 'search.vin': dl.storage.get(self.id+'.vin'), 'url': dl.l.hash, 'string': dl.storage.get(self.id+'.string'), } //console.log(searchData) var d = new FormData(); d.append('search', JSON.stringify(searchData)); dl.xhr('filter.ajax.php?what=set', d, function(data){ console.log('filter saved!'); dl.search().submit('vehicle'); }); }); if(dl.is.el('search.type')) dl.el('search.type').on('change', function(e){ dl.storage.set('search.type', dl.el(e.target).val()); }); } dl.Search.load = function(mode){ var self = this; //selects the tab var search = dl.hash(this.id) || this.list[this.id][0]; if(this.list.search.indexOf(search) == -1) search = this.list[this.id][0]; if(this.search != search) { dl.el(this.id+'.'+this.search+'.link').remove('active'); dl.el(this.id+'.'+this.search+'.cont').remove('active'); this.search = search; dl.el(this.id+'.'+this.search+'.link').add('active'); dl.el(this.id+'.'+this.search+'.cont').add('active'); } //brand selection var brand = dl.hash(this.id+'.brand') || 0; var year = dl.hash(this.id+'.year') || 0; var model = dl.hash(this.id+'.model') || 0; var engine = dl.hash(this.id+'.engine')|| 0; var code = dl.hash(this.id+'.code')|| ''; var qry = '&brand='+brand+'&year='+year+'&model='+model+'&engine='+engine+'&langId='+lang; if(mode == 'init') { //trace('brand', brand, this.brand); if(brand) { this.brand = brand; dl.el(this.id+'.brand').val(this.brand); dl.el(this.id+'.year').load('search.ajax.php?get=year.html'+qry).removeAttribute('disabled'); dl.el(this.id+'.model').load('search.ajax.php?get=model.html'+qry).removeAttribute('disabled'); } if(year) this.year = year; if(model) { this.model = model; dl.el(this.id+'.engine').load('search.ajax.php?get=engine.html'+qry).removeAttribute('disabled'); } if(engine) this.engine = engine; } else { if(this.brand != brand) { this.brand = brand; dl.el(this.id+'.brand').val(this.brand); if(this.brand > 0) { dl.el(this.id+'.year').load('search.ajax.php?get=year.html'+qry).removeAttribute('disabled'); dl.el(this.id+'.model').load('search.ajax.php?get=model.html'+qry).removeAttribute('disabled'); } else { dl.el(this.id+'.year').html().setAttribute('disabled', true); dl.el(this.id+'.model').html().setAttribute('disabled', true); } dl.el(this.id+'.engine').html().setAttribute('disabled', true); } if(this.year != year) { this.year = year if(this.year > 0) dl.el(this.id+'.model').load('search.ajax.php?get=model.html'+qry).removeAttribute('disabled'); dl.el(this.id+'.engine').html().setAttribute('disabled', true); } if(this.model != model) { this.model = model if(this.model > 0) dl.el(this.id+'.engine').load('search.ajax.php?get=engine.html'+qry).removeAttribute('disabled'); else dl.el(this.id+'.engine').html().setAttribute('disabled', true); } else if(this.engine != engine) { if(this.engine) { dl.el(this.id+'.engine.'+this.engine).remove('active'); dl.el(this.id+'.engine.title').innerHTML = "Изберете модификация"; this.engine = 0; } if(engine) { this.engine = engine; dl.el(this.id+'.engine.'+this.engine).add('active'); dl.el(this.id+'.engine.title').innerHTML = dl.el(this.id+'.engine.'+this.engine).data('name'); } else this.engine = 0; } if(this.code && search == 'direct') { //trace('code', this.code); } } if(this.engine && search == 'vehicle' && dl.is.el('search.category')) { var el = dl.el('search.category'); el.add('loading') el.load('search.ajax.php?get=category.html&engine='+this.engine+'&langId='+lang, function(){ if(dl.hash('search.engine')) { el.remove('hide'); el.remove('loading'); } }); } } dl.Search.save = function(){ var hash = dl.hash(); for(var i in this.list) if(hash[i]) dl.storage.set(this.id+'.'+i, hash[i]); } dl.Search.submit = function(type){ if(!type) return; var url = dl.el(this.id+'.'+type+'.button').dataset.url; if(type == 'vehicle') { dl.el(this.id+'.vehicle.error').hide(); if(this.brand && this.model && this.engine) { var qry = ['tick='+this.tick++]; for(var i in this.list) if(i == this.id) qry.push(this.id+'='+type); else qry.push(this.id+'.'+i+'='+this[i]); url+='#'+qry.join('&'); //alert(url); dl.url(url); } else if(lang != 0){ dl.el(this.id+'.vehicle.error').show().html('Please select a car!'); }else{ dl.el(this.id+'.vehicle.error').show().html('Моля изберете автомобил!'); } } if(type == 'direct') { dl.el(this.id+'.direct.error').hide(); this.code = dl.el(this.id+'.code').val(); this.type = dl.el(this.id+'.type').val(); if(this.code) { //alert('test'); dl.url(url+'?search=direct&search_code='+encodeURIComponent(this.code)+'&search_type='+encodeURIComponent(this.type)); } else dl.el(this.id+'.direct.error').show().html('Моля въведете код на резервна част!'); } if(type == 'vin') { dl.el(this.id+'.direct.error').hide(); this.code = dl.el('search.vin').value; if(this.code) { //alert('test'); dl.url('catalog.vin.php?search=vin&search_code='+encodeURIComponent(this.code)); } else dl.el(this.id+'.direct.error').show().html('Моля въведете код на резервна част!'); } } dl.Search.clear = function(){ dl.storage.del(this.id+'.brand'); dl.storage.del(this.id+'.year'); dl.storage.del(this.id+'.model'); dl.storage.del(this.id+'.engine'); dl.hash({ 'search.brand':false, 'search.year':false, 'search.model':false, 'search.engine':false }); dl.el('search.category').add('hide'); } dl.Search.categoryToggle = function(code){ var el = dl.el(this.id+'.category.'+code); var btn = dl.el(this.id+'.category.'+code+'.more'); if(el.has('active')) { el.remove('active'); if(lang != 0){ dl.el(btn).html('show all'); }else{ dl.el(btn).html('покажи всички'); } } else { el.add('active'); if(lang != 0){ dl.el(btn).html('hide'); }else{ dl.el(btn).html('скрий'); } } } if(!dl.rt) dl.rt = {}; dl.rt.Accept = 'accept'; dl.rt.bar = {}; dl.bar = function(id){ if(!id) return false; if(dl.rt.bar[id]) return dl.rt.bar[id]; if(!(this instanceof dl.bar)) return new dl.bar(id); this.id = id; this.el = null; this.val = null; this.btn= null; this.init(); } dl.Bar = dl.bar.prototype; dl.Bar.init = function(){ this.el = dl.el(this.id); this.val = dl.cookie(this.id); if(this.val == dl.rt.Accept) return true; this.btn = dl.el(this.el.list('button')[0]); this.bind(); } dl.Bar.bind = function(){ this.btn.on('click', this.accept.bind(this)); this.render(); } dl.Bar.render = function(){ this.el.add('active'); dl.el(dl.d.body).add('bar-'+this.id); } dl.Bar.accept = function(){ dl.cookie(this.id, dl.rt.Accept); this.el.remove('active'); dl.el(dl.d.body).remove('bar-'+this.id); } dl.cookie=function(key,val,ttl) { //ttl is in hours if(!val){ /* get */ var re=new RegExp(key+"=([^;]+)"); return re.test(dl.d.cookie)? dl.decode(RegExp.$1) : false; } /* set */ var ttl = (ttl||24*30*12)*3600; //1 year in seconds var exp = new Date(Date.now()+(ttl*1000)); var out = [dl.encode(key)+'='+dl.encode(val), 'expires='+exp.toGMTString(), 'max-age='+ttl, 'domain='+dl.l.hostname, 'path=/']; var str=out.join('; '); ////trace(str); dl.d.cookie=str; } /* product result list group */ dl.o.group = []; dl.group = function(id){ var id = id||'group'; if(dl.o.group[id]) //cache lookup return dl.o.group[id]; if(!(this instanceof dl.group)) //auto object creation return dl.o.group[id] = new dl.group(id); //finally the class can start :) this.id = id; this.list = null; this.active = null; if(this.init()) { this.bind(); //this.el.select(); //pa 20210329: removed because of js error } } dl.Group = dl.group.prototype; dl.Group.init = function(){ this.el = dl.el(this.id); this.list = this.el.list('[data-item]'); this.active = dl.hash(this.id) || 0; return true; } dl.Group.bind = function(){ var self = this; for(var i = 0; i < this.list.length; i++) { dl.el(this.list[i]).on('click', function(e){ var tid = dl.el(e.target).data(self.id); dl.hash(self.id, tid); }); } dl.on('hashchange', function(){ if(self && self.select) self.select(dl.hash(self.id)); }) } //end of scripts //promo carousel// var slideIndex = 1; showSlides(slideIndex); function plusSlides(n) { showSlides(slideIndex += n); } function currentSlide(n) { showSlides(slideIndex = n); } function showSlides(n) { var i; var slides = document.getElementsByClassName("mySlides"); var dots = document.getElementsByClassName("slide"); if (n > slides.length) {slideIndex = 1} if (n < 1) {slideIndex = slides.length} for (i = 0; i < slides.length; i++) { slides[i].style.display = "none"; } for (i = 0; i < dots.length; i++) { dots[i].className = dots[i].className.replace(" active", ""); } slides[slideIndex-1].style.display = "block"; dots[slideIndex-1].className += " active"; } //toggle// function MyFunctionToggle(){ var element = document.getElementById("group.2.link"); element.classList.toggle("active"); }