/* Stars 94 website javascript library * AIP Solutions`2016 - http://aip.solutions */ /* page management */ var page = {active: '', conf: {title: 'page.title', main: 'main', spare: 'catalog.spare', formStock: 'form.stock', spareList: 'catalog.spare.list', universal:'catalog.universal', universalList:'catalog.universal.list'}, type: {home: 'home', catalog: 'catalog', category: 'category', prdDetail: 'product.detail', prdDetailCms: 'product.detail.cms', document: 'document', reference: 'reference', result: 'result'} } page.init = function(page) { this.active = page; if(page != this.conf.main && page != this.conf.spare && page != this.conf.spareList) return; if(!dl.l.hash) filter.get(); } page.load = function(url) { dl.l.href = url; } var reserved = {} reserved.init = function() { filter.history(); } /* data processing */ var data = { file: '/get.data.ajax.php', } data.req = function(url, cb) { dl.el('loading').add('show'); // loads from data base only if dl.xhr(url, function(res) { if(res) { try{ var res = JSON.parse(res) cb(res); } catch(e) { //debug(e); //debug(res); //cb(false); } } else cb(false); }); } String.prototype.replaceAll = function(obj) { let finalString = ''; let word = this; for (let each of word){ for (const o in obj){ const value = obj[o]; if (each == o){ each = value; } } finalString += each; } return finalString; }; window.addEventListener('message',function(event) { if(event.origin !== 'https://www.yq.stars94.bg') return; if (event.data.titleMsg) { var newttl = event.data.titleMsg; document.title = newttl; document.querySelector('meta[property="og:title"]').setAttribute("content", newttl); ga('set', 'title', newttl); ga('send', 'pageview', newttl); ga('send','event','Search', newttl); } if (event.data.h) { var height = event.data.h.toString(); //console.log(event.data.h); var vin = document.getElementById('vin'); vin.style.height = height + "px"; } if (event.data.MonetaIDs) { var results = event.data.MonetaIDs.toString(); var result = results.replaceAll({'&':'%26'});//, '/':'%47', '"':'%34' var oemres = "OE " + event.data.OEMNumber.replaceAll({' ':''}); var params = 'code='+result+ ' &oemcode='+oemres; //console.log(oemres); var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { dl.el("vin.res").innerHTML = this.responseText; } }; xhttp.open("POST", "vin.results.ajax.php", true); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhttp.send(params); document.getElementById('vin.res').scrollIntoView({behavior: 'smooth'}); } else { dl.el("vin.res").innerHTML = ''; } }); data.sort = function(list, sortBy, asc, integer) { var sortBy = sortBy || 'name'; var asc = asc || true; if(integer) { var out = []; for(var i in list) { var item = list[i]; if(item[sortBy] == undefined) return; out[item[sortBy]] = item; } return out; } var newList = []; var j = 0; for(var i in list) newList[j++] = list[i]; /* taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort improved by: VG */ var out = newList.sort(function(a, b) { if(a[sortBy] == undefined) return; var valueA = a[sortBy].toUpperCase(); // ignore upper and lowercase var valueB = b[sortBy].toUpperCase(); // ignore upper and lowercase if(asc) { if(valueA < valueB) return -1; if(valueA > valueB) return 1; } else { if(valueA > valueB) return -1; if(valueA < valueB) return 1; } // names must be equal return 0; }); return out; } /* filter data management */ var filter = { conf: {list: 'filter.history', active: 'filter.active', limit: 10} } filter.get = function(id) { if(id !== undefined) { var data = this.load(id); this.active.set(data); } var data = dl.storage.get(this.conf.active); if(!data) return false; if(data['brand.code']) dl.l.hash = car.hash(data); else if(data['search'] && data['search'] == car.direct) dl.l.hash = 'search='+car.direct+'&code='+data['code']; return false; } filter.load = function(id) { var list = dl.storage.get(this.conf.list); if(id !== undefined) return list[id]; else return list; } filter.save = function() { if(dl.hash('search') == car.direct) { var val = dl.el('car.code').value; var xmlhttp; if(val != '') dl.storage.set(this.conf.active, {'search':car.direct, 'code':val}); else dl.storage.del(this.conf.active); console.log(this.conf.active); } if(car.brand.code && car.model.code && car.engine.code) { var info = car.info(true); info['model.code'] = car.model.code; var d = new FormData(); d.append('search', JSON.stringify(info)); //d = 'data':JSON.stringify(info); // console.log(d); //dl.xhr('filter.ajax.php?what=set',info); dl.xhr('filter.ajax.php?what=set',d).ondata = function(data){}; //new http('xhr', 'filter.ajax.php?what=set', 'POST', info).ondata = function(data){}; dl.storage.set(this.conf.active, info); var list = this.load(); if(!list) list = [info]; else list.push(info); if(list.length > this.conf.limit) list.shift(); dl.storage.set(this.conf.list, list); } else return dl.storage.del(this.conf.active); } filter.clear = function(){ dl.storage.del(this.conf.active) dl.l.hash = ''; dl.l.reload(); } /* car data management */ var car = { brand: {code: 0, list: [], data: {}, conf: {el: 'car.brand', field: 'car.brand.field', title: 'car.brand.title', hash: 'brand'}}, model: {code: 0, list: [], data: {}, brand: 0, conf: {el: 'car.model', field: 'car.model.field', title: 'car.model.title', hash: 'model'}}, year: {code: 0, list: [], data: {}, model: 0, conf: {el: 'car.year', field: 'car.year.field', title: 'car.year.title', hash: 'year'}}, engine: {code: 0, list: [], data: {}, year: 0, conf: {el: 'car.engine', field: 'car.engine.field', title: 'car.engine.title', hash: 'engine', cont:'car.engine.cont'}}, category: {code: 0, list: [], data: {}, engine:0, conf: {el: 'car.category', hash: 'category', cont:'car.category.cont', loading:'car.category.loading', empty:'car.category.empty'}}, conf: {field: 'car.field'}, root: {}, select: 'select', direct: 'direct', skipYear: 1985, } car.init = function(data, root) { this.bind(); if(data) { var raw = JSON.parse(data); this.brand.data = {}; this.model.data = {}; for(var i in raw){ var el = raw[i]; this.brand.data[el.code] = {code:el.code, name:el.name, order:el.order}; var list = {} for(var j in el.list) { var sub = el.list[j]; //console.log(sub); //ok list[j] = {code:sub.code, name:sub.name, from:sub.from, to:sub.to, order:sub.order, id:j} } //console.log(list); //overwrite this.model.data[el.code] = list; } } if(root) this.root = JSON.parse(root); if(page.active == page.conf.spareList) { this.subcat.init(); } else this.tab_(); } car.tab = function(what){ dl.hash('search', what); } car.tab_ = function(){ var tab = dl.hash('search'); if(tab == this.select) { dl.el('numbsw').remove('active'); dl.el('carsw').add('active'); car.list(); } else if(tab == this.direct) { if(page.active == page.conf.formStock) { dl.hash('search', 'select'); dl.hash('code', false); } dl.el('carsw').remove('active'); dl.el('numbsw').add('active'); if(page.active == page.conf.spare) dl.el('car.empty').remove('hide').html('
Моля, въведете код на продукт.
'); else car.list(); } else dl.hash('search', this.select); } car.list = function() { if(dl.hash('search') == car.direct) { var code = (!dl.hash('code'))? '' : dl.hash('code'); dl.el('car.code').value = dl.w.decodeURIComponent(code); if(page.active == page.conf.spare) { dl.el('car.category').hide(); dl.el('car.product').show(); dl.el('car.product.cont').html('
Търсене на резервни части... Моля, изчакайте!
') dl.el('car.select.back').hide(); if(dl.hash('code')) car.product.direct(); else { dl.el('car.product.cont').html() dl.el('car.empty').html('
Моля, въведете код на продукт!
').show(); } } } else { this.brand.get(); this.model.get(); this.year.get(); this.engine.get(); if(page.active == page.conf.spare) { if(dl.hash('category')) { dl.el('car.category').hide(); dl.el('car.product').show(); dl.el('car.empty').hide(); car.product.get(); dl.el('car.select.back').show(); } else if(dl.hash('engine')) { dl.el('car.category').show(); dl.el('car.product').hide(); dl.el('car.empty').hide(); dl.el('car.select.back').hide(); car.category.get(); } else { dl.el('car.category').hide(); dl.el('car.product').hide(); dl.el('car.empty').html('
Моля, изберете автомобил!
').show(); dl.el('car.loading').hide(); dl.el('car.select.back').hide(); } } this.info(); } } car.bind = function() { 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; if(page.active == page.conf.spareList) car.subcat.init(); else car.tab_(); }) if(page.active != page.conf.spareList) { dl.el(car.brand.conf.el).on("change", car.brand.select.bind(car.brand)); dl.el(car.model.conf.el).on("change", car.model.select.bind(car.model)); dl.el(car.year.conf.el).on("change", car.year.select.bind(car.year)); } if(dl.is.el('car.code')) { dl.el('car.code').on("keyup", function(e){ if(this.value) { dl.el('numb.error').hide(); if(e.key == 'Enter') car.search(car.direct, dl.el('car.code').data('search')); } else dl.el('numb.error').html('Моля, въведете код на продукт!').show(); }) } } car.info = function(ret) { var el = dl.el('car.info'); var out = []; var detail = {} dl.el('car.error').hide(); detail['search'] = dl.hash('search')? dl.hash('search') : car.select; if(car.brand.code && car.brand.data[car.brand.code]) { detail['brand.code'] = car.brand.data[car.brand.code].code; detail['brand.name'] = car.brand.data[car.brand.code].name; out.push(detail['brand.name']); if(car.model.code && car.model.data[car.brand.code] && car.model.data[car.brand.code][car.model.code]) { detail['model.code'] = car.model.data[car.brand.code][car.model.code].code; detail['model.name'] = car.model.data[car.brand.code][car.model.code].name; out.push(detail['model.name']); } else detail['model.code'] = 0; } else { detail['brand.code'] = 0; detail['model.code'] = 0; } if(car.model.code && car.engine.code && car.engine.data[car.model.code] && car.engine.data[car.model.code][car.engine.code]) { detail['engine.code'] = car.engine.data[car.model.code][car.engine.code].code; detail['engine.name'] = car.engine.data[car.model.code][car.engine.code].name; out.push(detail['engine.name']); } else detail['engine.code'] = 0; if(car.year.code > 0) { detail['year'] = car.year.code; out.push(' - '+detail['year']); } else detail['year'] = ''; if(ret) { detail['code'] = [detail['brand.code'], detail['model.code'], detail['engine.code'], detail['year']].join('.') detail['string'] = out.join(' '); return detail; } else { if(el.parentNode) { el.html(out.join(' ')); if(out.length) dl.el(el.parentNode).show(); else dl.el(el.parentNode).hide(); } } } car.hash = function(data){ var hash = []; if(data) { if(data['brand.code']) hash.push(car.brand.conf.hash + '=' + data['brand.code']); if(data['model.code']) hash.push(car.model.conf.hash + '=' + data['model.code']); if(data['engine.code']) hash.push(car.engine.conf.hash + '=' + data['engine.code']); if(data['year']) hash.push(car.year.conf.hash + '=' + data['year']); } else { if(car.brand.code) hash.push(car.brand.conf.hash + '=' + car.brand.code); if(car.model.code) hash.push(car.model.conf.hash + '=' + car.model.code); if(car.engine.code) hash.push(car.engine.conf.hash + '=' + car.engine.code); if(car.year) hash.push(car.year.conf.hash + '=' + car.year); } return (hash.length)? hash.join('&') : ''; } car.search = function(type, url){ var error = ''; if(type == 'select') { if(+this.engine.code > 0) dl.el('car.engine').remove('error'); else { dl.el('car.engine').add('error'); error = "Моля, изберете модификация!"; } if(+dl.el('car.model').value > 0) dl.el('car.model').setCustomValidity(""); else { dl.el('car.model').setCustomValidity("Изберете модел") error = "Моля, изберете модел!"; } if(+dl.el('car.brand').value > 0) dl.el('car.brand').setCustomValidity(""); else { dl.el('car.brand').setCustomValidity("Изберете марка") error = "Моля, изберете марка!"; } } if(type == 'direct') { var val = dl.el('car.code').value.toString().trim(); if(val != '') { dl.el('car.code').setCustomValidity(""); dl.hash('code', encodeURIComponent(val)); } else { dl.el('car.code').setCustomValidity("Въведете код") error = "Моля, въведете код на продукт!"; } } if(!error) { filter.save(); if(page.active == page.conf.spareList) { if(type == 'select') dl.hash('category', false); dl.hash('ts', dl.gmt()); dl.l.href = url + dl.l.hash; } else { dl.el(dl.el('car.info').parentNode).show(); dl.el('car.error').hide() dl.l.href = url + dl.l.hash; } } else { if(type == 'select') { dl.el(dl.el('car.info').parentNode).hide(); dl.el('car.error').show().html(error); } if(type == 'direct') { dl.el('numb.error').show().html(error); } } } /* car.brand */ car.brand.get = function() { var self = this; var code = dl.hash(this.conf.hash); if(code && this.code == code) return; dl.el(this.conf.el).disable(); this.code = code; //load from service if(!this.data) { var url = data.file + '?get=car.brand'; data.req(url, function(data) { info('car.brand.load()') if(data) self.data = data; self.render(); car.info(); }); } else //render this.render(); } car.brand.render = function() { this.el = dl.el(this.conf.el); var out = ['']; var list = data.sort(this.data, 'order'); for(var i in list) { var item = list[i]; out.push(''); } this.el.html(out.join('')); this.active(); this.el.enable(); } car.brand.active = function() { dl.delay(function(){ dl.el(car.brand.conf.el).value = +car.brand.code if(+car.brand.code > 0) dl.el(car.brand.conf.el).setCustomValidity(""); else dl.el(car.brand.conf.el).setCustomValidity("Изберете марка"); }, 1); } car.brand.select = function() { dl.l.hash = this.conf.hash+'='+dl.el(this.conf.el).val(); } /* car.model */ car.model.get = function() { dl.el(this.conf.el).disable(); var self = this; var code = dl.hash(this.conf.hash); //no brand selected if(+car.brand.code == 0) this.clear(); //model changed this.code = code; this.brand = +dl.hash('brand'); //console.log(this.data[this.brand]); if(car.brand.code && !this.data[this.brand]) { var url = data.file + '?get=car.model&brand='+this.brand; data.req(url, function(data) { if(data){ //console.log(data); self.data[this.brand] = data; } self.render(); car.info(); }); } else //render this.render(); } car.model.render = function() { this.el = dl.el(this.conf.el); var out = ['']; var brandList = (this.brand)? [car.brand.data[this.brand]] : data.sort(car.brand.data); var year = dl.hash(car.year.conf.hash); for(var i in brandList) { var brand = brandList[i]; out.push(''); //console.log(brandList[i]); var list = data.sort(this.data[brand.code]); for(var j in list) { var item = list[j]; //console.log(item); if(car.skipYear < item.to) { //var cls = car.year.inRange(item, year)? 'active' : 'inactive'; //out.push(''); if(car.year.inRange(item, year)) out.push(''); } } out.push(''); } this.el.html(out.join('')); this.active(); this.el.enable(); } car.model.clear = function(){ this.brand = 0; dl.el(this.conf.el).html(''); } car.model.active = function() { dl.delay(function(){ dl.el(car.model.conf.el).value = +car.model.code; if(+car.model.code > 0) dl.el(car.model.conf.el).setCustomValidity(""); else dl.el(car.model.conf.el).setCustomValidity("Изберете модел"); }, 1); } car.model.select = function() { var el = dl.el(this.conf.el); var brand = dl.el(el.options[el.options.selectedIndex].parentNode).data('code'); if(brand) dl.hash(car.brand.conf.hash, brand); if(page.active == page.conf.formStock) el.setCustomValidity(""); else dl.hash(this.conf.hash, el.val()); } car.model.findBrand = function(code){ for(var i in this.data) for(var j in this.data[i]) if(code == this.data[i][j].code) return i; return false; } /* car year */ car.year.get = function() { dl.el(this.conf.el).disable(); this.code = dl.hash(this.conf.hash); var list = {}; if(+car.brand.code > 0) { list = car.model.data[car.brand.code]; //console.log(car.model.data[car.brand.code]); if(+car.model.code > 0){ for(k in car.model.data[car.brand.code]){ //console.log(car.model.data[car.brand.code][k].code); if(car.model.data[car.brand.code][k].code == car.model.code){ cid = k; break; } } list = {0:car.model.data[car.brand.code][cid]}; //car.model.code } } var min = this.min(list); var max = this.max(list); if(this.code < min || this.code > max) this.code = 0; var out = [] for(; min <= max; min++) out.push(min); this.data = out; this.render(); } car.year.render = function() { this.el = dl.el(this.conf.el); //console.log('xxxxx'); //console.log(this.data); this.data.reverse(); if(this.data.length) { var out = ['']; for(var i in this.data) { var item = this.data[i]; out.push(''); } this.active(); this.el.enable(); } else var out = ['']; this.el.html(out.join('')); } car.year.active = function() { dl.delay(function(){dl.el(car.year.conf.el).value = +car.year.code}, 1); } car.year.select = function(el) { dl.hash(this.conf.hash, dl.el(this.conf.el).val()); } car.year.min = function(list) { var min = 3000; for(var i in list) min = (list[i])? Math.min(list[i].from, min) : min; return Math.max(min, car.skipYear); } car.year.max = function(list) { var max = 0; for(var i in list) max = (list[i])? Math.max(list[i].to, max) : max; return max; } car.year.inRange = function(item, year) { if(+year == 0) return true; return (year >= item.from && year <= item.to)? true : false; } /* car.engine */ car.engine.get = function() { dl.el(this.conf.el).disable(); var self = this; var code = dl.hash(this.conf.hash); //no model selected if(+car.model.code == 0) return this.clear(); else if(this.model != car.model.code) { var el = dl.el(this.conf.el); el.html(''+el.title+''); } //engine changed this.code = code; this.model = car.model.code; if(this.model && !this.data[this.model]) { this.data[this.model] = {} var url = data.file + '?get=car.engine&model=' + this.model; data.req(url, function(data) { if(data) { for(var i in data) { var el = data[i]; self.data[self.model][el.code] = el; } } self.render(); car.info(); }); } else //render this.render(); } car.engine.render = function() { this.el = dl.el(this.conf.el); var year = dl.hash(car.year.conf.hash); var out = [''+this.el.attr('title')+'']; if(this.data[this.model]) { out.push(''); } this.el.html(out.join('')); this.active(); this.el.enable(); } car.engine.active = function(){ var list = dl.el(this.conf.el).list('[data-engine]'); for(var i=list.length;i--;) dl.el(list[i]).remove('active'); if(dl.is.el(this.conf.el+'.'+this.code)) { var el = dl.el(this.conf.el+'.'+this.code); el.add('active'); dl.el(this.conf.el+'.title').html(el.data('name')); } else this.code = 0; if(this.code > 0) dl.el(this.conf.el).remove('error'); else dl.el(this.conf.el).add('error'); } car.engine.select = function(code) { car.engine.code = code; filter.save(); dl.hash(this.conf.hash, code); } car.engine.toggle = function() { if(car.model.code && dl.is.el(this.conf.el+'.cont')) { var cont = dl.el(this.conf.el+'.cont'); if(cont.style.display == 'block') cont.hide(); else cont.show(); } } car.engine.clear = function() { this.model = 0; var el = dl.el(this.conf.el); el.html(''); dl.el(this.conf.cont).hide(); } /*car.engine.check = function(el, e) { debug('car.engine.check()'); var self = this; if(e.keyCode == 13) { dl.el('prd.status').className = 'loading'; // load from service var url = data.file + '?get=engine&engineId=' + el.value; data.req(url, function(data) { trace(data); self.data = data; if(data) { self.updateCheck(); dl.el('prd.status').className = 'found'; } else { dl.el('prd.code').setCustomValidity('afdafdsaa'); dl.el('prd.status').className = 'missing'; } }); } } car.engine.updateCheck = function() { var cont = dl.el('input.list'); var inpNum = parseInt(cont.getElementsByTagName('input').length) + parseInt(1); var inpId = 'engine.' + inpNum; var input = document.createElement("input"); input.id = inpId; input.type = 'text'; input.name = 'frm[engine][field.' + inpNum + ']'; input.setAttribute('onkeyup', 'car.engine.check(this, event)'); input.focus(); cont.appendChild(input); // put it into the DOM dl.el(inpId).focus(); } */ /* car.category */ car.category.get = function() { var engine = dl.hash('engine'); this.engine = engine; dl.el(this.conf.cont).html(); dl.el('car.loading').show(); var self = this; var id = dl.hash(this.conf.hash); if(this.engine) { // console.log(url); var url = data.file+'?get=car.category&engine='+this.engine; data.req(url, function(data) { if(data) self.render(data); else self.render(false); }); } else //render this.render(); } car.category.render = function(data) { dl.el('car.loading').hide(); this.el = dl.el(this.conf.cont); var out = []; if(data === false) out.push('No results found'); else if(data === undefined) out.push('No engine selected'); else { dl.el('car.empty').hide(); for(var i in data) { var item = data[i]; out.push('
'); out.push(''); //2016-11-03mss: out.push(''); out.push(''+item['name']+''); if(Array.isArray(item.list)) { out.push(''); if(cnt > 4) out.push('покажи всички'); } out.push('
'); } } //renrer ui this.el.html(out.join('')); } car.category.select = function(code){ var url = dl.el('car.category').data('url'); dl.url(url+dl.l.hash+'&'+this.conf.hash+'='+code); //dl.hash(this.conf.hash, id); } car.category.toggle = function(code, btn){ var el = dl.el(this.conf.el+'.'+code); if(el.has('active')) { el.remove('active'); dl.el(btn).html('покажи всички'); } else { el.add('active'); dl.el(btn).html('скрий'); } } /* subcategories for a car */ car.subcat = {cache:{}} car.subcat.init = function(){ //setting up the page title var nfo = dl.storage.get('filter.active'); if(dl.hash('search') == 'direct') { dl.el('car.product.title').hide(); dl.el('car.select.back').hide(); dl.el('car.code').val(dl.decode(dl.hash('code'))); car.product.direct(); } else { dl.el('car.product.title').show(); if(nfo.string) dl.el('car.product.info').html(nfo.string); this.get(); } } car.subcat.get = function() { var self = this; var cont = dl.el('car.product.aside'); var engine = dl.hash('engine'); var category = dl.hash('category'); cont.html('').add('loading'); if(engine && category) { cont.add('loading'); // if(this.cache[engine+'.'+category]) // return this.render(this.cache[engine+'.'+category]); var url = data.file+'?get=car.subcat&engine='+engine+'&parent='+category; data.req(url, function(data) { // self.cache[engine+'.'+category] = data; self.render(data); }); } else if(!engine) cont.html('Моля, изберете автомобил!'); else if(!category) cont.html('Моля, изеберете категория!'); else cont.html('Моля, изберете категория и автомобил!'); } car.subcat.render = function(data) { var html = []; var cont = dl.el('car.product.aside'); cont.remove('loading'); //alert(data.list.length); if(data.list.length < 2) data.list = false; if(data) { html.push('
'); html.push('
'); html.push(this.renderTree(data)) html.push('
'); html.push('
'); } cont.html(html.join("\n")); //loading products var active = dl.hash('subcat'); var catel = dl.el('car.subcat.'+active); if(!catel.has('children')) { var cat = (!data.list)? dl.hash('category') : active; if(cat) car.product.get(cat); else dl.el('car.product.cont').remove('loading').html('
Моля, изберете категория!
'); } else dl.el('car.product.cont').remove('loading').html('
Моля, изберете категория!
'); } car.subcat.renderTree = function(data, level){ if(!data) return ''; var html = []; var level = level || 0; var active = dl.hash('subcat'); if(!data.list) return ''; for(var i in data.list) { var css = ['list', 'level-'+level]; var item = data.list[i]; if(!item.list || !item.list.length) item.list = false; if(item.code == active) css.push('active'); if(this.childActive(active, item.list)) css.push('open'); if(item.list) css.push('children'); html.push(''+item.name+''); if(item.list) { html.push(''); } } return html.join("\n"); } car.subcat.select = function(code){ var active = dl.hash('subcat'); if(active) { dl.el('car.subcat.'+active).remove('active').remove('open'); dl.el('car.product.cont').remove('loading').html('
Моля, изберете категория!
'); if(active == code) { dl.hash('subcat', false); return; } } dl.hash('subcat', code); dl.w.scrollTo(0,0); } car.subcat.childActive = function(code, list){ if(!code || !list) return false; for(var i in list) { var item = list[i]; if(item.code == code) return true; if(item.list && this.childActive(code, item.list)) return true; } return false; } /* car product groups */ car.group = {id:'car.group', categoryId:0, active:0} car.group.get = function(){} car.group.render = function(data){ var html = []; if(data) { html.push('
'); html.push('
'); for(var i in data) { var item = data[i]; if(!item.list || !item.list.length) continue; var css = (item.code == this.active)? 'main-asaid active' : 'main-asaid'; html.push(''+item.name+''); } html.push('
'); } dl.el('car.group.aside').html(html.join("\n")).remove('loading'); if(!this.active && data) { this.select(data[Object.keys(data)[0]].code); return; } } car.group.select = function(id){ var list = dl.list('[car-group-list]'); for(var i=list.length;i--;) dl.el(list[i]).hide(); if(this.active) { dl.el(this.id+'.'+this.active+'.link').remove('active'); dl.el(this.id+'.'+this.active).hide(); } this.active = id; dl.el(this.id+'.'+this.active+'.link').add('active'); var rect = dl.el(this.id+'.'+this.active).show().getBoundingClientRect(); if(rect.top && rect.top < 100) dl.w.scroll(dl.w.scrollX, +dl.w.scrollY+rect.top-100); } car.group.clear = function(){ dl.hash('group', false); } car.group.active = function(num){ dl.el('car.group.'+num).toggle('hide'); } /* products for a car */ car.product = {id:'car.product', engineId:null, categoryId:null} car.product.get = function(id){ trace('car.product.get'); var self = this; var engine = dl.hash('engine'); var category = id || dl.hash('subcat'); dl.el('car.product').add('select').remove('direct'); var title = dl.el('car.subcat.'+category).innerHTML; dl.el('car.product.cont').html('
Търсене на резервни части... Моля, изчакайте!
').show(); dl.el('car.loading').show(); dl.el('car.empty').hide(); if(category) { var url = data.file+'?get=car.product&engine='+engine+'&category='+category; data.req(url, function(data) { self.render(data); }); } else self.render(); } car.product.direct = function(){ //trace('car.product.direct'); var self = this; var code = dl.hash('code'); dl.el('car.product').add('direct').remove('select'); dl.el('car.product.cont').html(); dl.el('car.loading').show(); dl.el('car.empty').hide(); if(code != '') { var url = data.file+'?get=car.product.direct&product='+code; data.req(url, function(res) { //trace('car.product.direct.xhr'); self.renderDirect(res); }); } } car.product.render = function(data){ dl.el('car.loading').hide(); var html = []; var direct = (dl.hash('search') == car.direct)? true : false; var category = dl.hash('subcat'); //if(direct) // html.push(''); if(!direct) { title = dl.el('car.subcat.'+category).innerHTML; if(title) html.push(''); } if(data) { var list = data; var title = ''; if(direct) { for(var i in list) { var item = list[i]; if(!item) continue; html.push('
'); for(var j=0; j'); } } else { var nfo = car.info(true); if(nfo.string) title = ' за '+nfo.string.trim()+''; for(var i=0; iНяма намерени резервни части'); dl.el(this.id+'.cont').html(html.join("\n")); if(direct) { car.group.active = 0; car.group.render(data); } this.image(); this.purchase(); } car.product.renderDirect = function(data){ //trace('car.product.renderDirect'); dl.el('car.loading').hide(); var html = ['']; if(data) { var cnt = 0; var title = ''; for(var i in data) { var title = i || 'разни'; html.push('

'+title+'

'); html.push('
'); for(var j=0; j'); cnt++; } dl.el('car.product.cont').className = dl.el('car.product.cont').className = 'product-list '+cnt+''; } else html.push('
Няма намерени резервни части
'); dl.el(this.id+'.cont').innerHTML = html.join("\n"); dl.delay(function(){ car.product.image(); car.product.purchase(); }, 100) } car.product.item = function(item){ var html = []; var click = (item.link)? ' onclick="dl.url(\''+item.link+'\')"' : ''; html.push('
'); html.push('
') // trace(item); if(!item.image || item.image == '') html.push(' '); else html.push(' '); html.push('
'); html.push('
'); html.push('

'+item.name+'

'); html.push(' Код: '+item.code+''); if(item.stock > 0 && item.price > 0){ //console.log(item); if(parseFloat(item.pricepromo) < parseFloat(item.price) && parseFloat(item.pricepromo) > 0){ html.push(' Цена: '+item.price.replace('.',',')+' '+item.pricepromo.replace('.',',')+' лв.'); }else{ html.push(' Цена: '+item.price.replace('.',',')+' лв.'); } } if(parseFloat(item.stockbg) > 0){// console.log(item); html.push(' Наличен'); if(item.stock > 0) html.push(' Поръчай'); }else{ html.push(' '+item.stockName+''); if(item.stock > 0) html.push(' Поръчай'); } if(item.stock < 1) html.push(' Запитване'); html.push('
'); html.push('
'); return html.join("\n"); } car.product.name = function(name) { var arr = name.toString().trim().split(' '); var len = arr.length; if(len <= 1) return name; if(arr[1].length <= 2) return arr[0]; if(arr[1].match(/\d/)) return arr[0]; return arr[0]+' '+arr[1]; } car.product.image = function(){ var list = dl.list('img[data-image]'); for(var i=0;i'+(data['tecdoc']['name'])+''); html.push('
'); for(var i=0;i'+(item['name'])+'
'+(item['value'])+' '+(item['unit']? item['unit'] : '')+'
'); } html.push('
'); dl.el('prd.info.cont').html(html.join("\n")); } else dl.el('prd.info.link').add('disable'); if(data['tecdoc']['oenList']) { var src = data['tecdoc']['oenList']; var html = []; html.push('

ОЕМ Номера

'); html.push('
    '); for(var i=0;i'+(item)+''); } html.push('
'); dl.el('prd.oem.cont').html(html.join("\n")); } else dl.el('prd.oem.link').add('disable'); } if(0 && data['reusable']) { var src = data['reusable']; html = ['']; html.push('

Заменими продукти

'); html.push('
'); for(var i=0;i'+(item['code'])+'
'+(item['name'])+'
'); } html.push('
'); dl.el('prd.alt.cont').html(html.join("\n")); } else dl.el('prd.alt.link').add('disable'); if(data['car']) { var src = data['car']; var html = []; html.push('

Приложение

'); html.push('
    '); for(var i=0;i'+(item['car.string'])+''); } html.push('
'); dl.el('prd.car.cont').html(html.join("\n")); } else dl.el('prd.car.link').add('disable'); if(0 && data['stock']) { var src = data['stock']; var html = []; html.push('

Наличност

'); html.push('
'); for(var i=0;i 0) html.push('
'+(item['name'])+'
'); //html.push('
'+(item['name'])+'
'+(item['stock'])+'
'); } html.push('
'); dl.el('prd.stock.cont').html(html.join("\n")); } else dl.el('prd.stock.link').add('disable'); }); } /* universal products */ var uni = {active:'uni.active'} uni.init = function(){ //if(dl.hash('action') == 'back' && dl.session.get(uni.active)) // dl.l.hash = dl.session.get(uni.active); this.bind(); this.list(); } uni.bind = function(){ 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 uni.list(); }) } uni.list = function(){ if(page.active == page.conf.universal) this.category.get(); if(page.active == page.conf.universalList) { if(!dl.hash('categoryId')) dl.hash('categoryId', dl.session.get(uni.active)); if(dl.hash('categoryId')) { dl.session.set(uni.active, dl.hash('categoryId')); this.group.get(); this.product.get(); } } } uni.category = {id:'uni.category', hash:'category'} uni.category.get = function(){ dl.el(this.id+'.cont').html('
Зареждане на категории... Моля, изчакайте!
'); dl.el('uni.loading').show(); var url = data.file+'?get='+this.id; var self = this; data.req(url, function(data) { self.render(data); }); } uni.category.render = function(data){ dl.el('uni.loading').hide(); if(!data) { dl.el(this.id+'.cont').html('
Няма намерени категории!
'); return; } var html = []; for(var i in data) { var item = data[i]; html.push('
'); html.push(' '+item.name+''); html.push(' '+item.name+''); html.push('
'); } dl.el(this.id+'.cont').html(html.join("\n")); } uni.category.select = function(id){ dl.hash('category', id); } uni.category.clear = function(){ dl.hash('category', false); dl.hash('group', false); } /* uni product groups */ uni.group = {id:'uni.group', cid:0, hash:'group', list:'[uni-group-list]', cache:{}} uni.group.get = function(){ var self = this; var cont = dl.el('uni.product.aside'); var categoryId = dl.hash('categoryId'); cont.html(''); if(categoryId) { cont.add('loading'); if(this.cache[categoryId]) return this.render(this.cache[categoryId]); var url = data.file+'?get=uni.group.list&categoryId='+categoryId; data.req(url, function(data) { self.cache[categoryId] = data; self.render(data); }); } else cont.html('Моля, изеберете категория!'); } uni.group.render = function(data) { var html = []; var active = dl.hash('group'); if(!active && data.list && data.list.length) { this.select(data.list[0].Id); return; } if(data) { html.push('
'); html.push('
'); if(data.children && data.list) { for(var i in data.list) { var item = data.list[i]; var css = (item.Id == active)? 'main-asaid active' : 'main-asaid'; if(this.childActive(active, item.list)) css+= ' open'; html.push(''+item.name+''); if(item.children && item.list) { html.push(''); } } } html.push('
'); html.push('
'); } dl.el('uni.product.aside').html(html.join("\n")).remove('loading'); } uni.group.active = function(id){ } uni.group.select = function(id){ dl.hash('group', id); } uni.group.childActive = function(id, list){ if(!id || !list) return false; for(var i in list) { var item = list[i]; if(item.Id == id) return true; if(item.list && this.childActive(id, item.list)) return true; } return false; } uni.group.clear = function(){ dl.hash('group', false); } /* universal products */ uni.product = {id:'uni.product'} uni.product.get = function(){ var self = this; var catId = (+dl.hash('group') > 0)? dl.hash('group') : dl.hash('categoryId'); var title = dl.el('uni.group.'+catId).innerHTML; title = (title)? '' : ''; dl.el(this.id+'.cont').html(title+'
Зареждане на продукти... Моля, изчакайте!
'); var url = data.file+'?get=uni.product.list&categoryId='+catId; data.req(url, function(data) { self.render(data); }); } uni.product.render = function(data){ dl.el('uni.loading').hide(); var catId = (+dl.hash('group') > 0)? dl.hash('group') : dl.hash('categoryId'); var html = []; var title = dl.is.el('uni.group.'+catId)? dl.el('uni.group.'+catId).innerHTML : dl.el('uni.subcat.'+catId).innerHTML; if(title) html.push(''); if(data) { for(var i in data) { var item = data[i]; var click = (item.link)? ' onclick="dl.url(\''+item.link+'\')"' : ''; html.push('
'); html.push('
') if(!item.image) html.push(' '); else html.push(' '); html.push('
'); html.push('
'); html.push('

'+item.name+'

'); html.push(' Код: '+item.code+''); // if(item.price > 0) // html.push(' Цена: '+item.price.replace('.',',')+' лв.'); if(item.stock > 0 && item.price > 0){// console.log(item); if(parseFloat(item.pricepromo) < parseFloat(item.price) && parseFloat(item.pricepromo) > 0){ html.push(' Цена: '+item.price.replace('.',',')+' '+item.pricepromo.replace('.',',')+' лв.'); }else{ html.push(' Цена: '+item.price.replace('.',',')+' лв.'); } } if(parseFloat(item.stockbg) > 0){// console.log(item); html.push(' Наличен'); if(item.stock > 0) html.push(' Поръчай'); }else{ html.push(' '+item.stockName+''); if(item.stock > 0) html.push(' Поръчай'); } html.push('
'); html.push('
'); } } dl.el(this.id+'.cont').html(html.join("\n")); this.purchase(); } uni.product.html = function(item){ var html = []; var click = (item.url)? ' onclick="uni.product.select('+item.Id+', \''+item.url+'\')"' : ''; html.push('
'); html.push('
') html.push(' '); html.push('
'); html.push('
'); html.push('

'+item.name+'

'); html.push(' Код: '+item.code+''); if(item.price > 0) html.push(' Цена: '+item.price.replace('.',',')+' лв.'); html.push(' '+item.stockName+''); html.push(' Поръчай'); html.push('
'); html.push('
'); return html.join("\n"); } uni.product.info = function(id){ if(!id) return false; dl.el('prd.tab').hide(); dl.el('prd.loading').show(); var url = data.file+'?get=uni.product.info&productId='+id; data.req(url, function(data) { dl.el('prd.tab').show(); dl.el('prd.loading').hide(); if(data['tecdoc']) { if(data['tecdoc']['criteria']) { var src = data['tecdoc']['criteria']; var html = []; html.push('

'+(data['tecdoc']['name'])+'

'); html.push('
'); for(var i=0;i'+(item['name'])+'
'+(item['value'])+' '+(item['unit']? item['unit'] : '')+'
'); } html.push('
'); dl.el('prd.info.cont').html(html.join("\n")); } else dl.el('prd.info.link').add('disable'); if(data['tecdoc']['oenList']) { var src = data['tecdoc']['oenList']; var html = []; html.push('

ОЕМ Номера

'); html.push('
    '); for(var i=0;i'+(item)+''); } html.push('
'); dl.el('prd.oem.cont').html(html.join("\n")); } else dl.el('prd.oem.link').add('disable'); } if(data['reusable']) { var src = data['reusable']; html = ['']; html.push('

Заменими продукти

'); html.push('
'); for(var i=0;i'+(item['code'])+'
'+(item['name'])+'
'); } html.push('
'); dl.el('prd.alt.cont').html(html.join("\n")); } else dl.el('prd.alt.link').add('disable'); if(data['car']) { var src = data['car']; var html = []; html.push('

Приложение

'); html.push('
    '); for(var i=0;i'+(item['car.string'])+''); } html.push('
'); dl.el('prd.car.cont').html(html.join("\n")); } else dl.el('prd.car.link').add('disable'); if(data['stock']) { var src = data['stock']; var html = []; html.push('

Наличност

'); html.push('
'); for(var i=0;i 0) html.push('
'+(item['name'])+'
'); //html.push('
'+(item['name'])+'
'+(item['stock'])+'
'); } html.push('
'); dl.el('prd.stock.cont').html(html.join("\n")); } else dl.el('prd.stock.link').add('disable'); }); } uni.product.select = function(id, page){ if(+id == 0) return false; dl.session.set(uni.active, dl.l.hash); dl.url(page+'?productId='+id); } uni.product.clear = function(){ trace('uni.product.clear()'); } uni.product.purchase = function(){ var list = dl.list('a[data-purchase]'); for(var i=0;iКатегории'); // list main categories for(var i in this.data) { var sub = 0; var item = this.data[i]; if(!item.Id) continue; var custom = ''; if(item.custom) custom = '&custom=true'; var id = this.conf.el + '.' + item.Id; // list subcategories if(parseInt(item.hasSub)) { out.push('
'); out.push(''); out.push('' + item.name + ''); out.push(''); } else { out.push(''); } info('!!! category.repaint'); this.el.html(out.join('')); //add to list this.list = this.el.childNodes; } prd.category.renderTree = function() { debug('prd.category.renderTree()'); dl.el('loading.all').remove('show'); this.el = dl.el(this.conf.el); if(!this.list.length) { var out = []; out.push('
'); out.push(''); out.push('
'); // list main categories for(var i in this.data) { var item = this.data[i]; var id = this.conf.el + '.' + item.Id; if(!item.Id || !item.name) continue; // list subcategories if(parseInt(item.hasSub)) { out.push('' + item.name + ''); out.push(''); } else out.push('' + item.name + ''); } out.push('
'); out.push('
'); info('!!! category.repaint'); trace(this.el) this.el.html(out.join('')); //add to list this.list = this.el.childNodes; //this.setActive(); } this.active(this.data); } prd.category.active = function(level1, level2, level3){ var catName = ''; for(var i in level1) { var item = level1[i]; if(this.id == item.Id) { dl.el(this.conf.title).html(item.name); dl.el(this.conf.el + '.' + item.Id).add('active'); if(item.parentId) { dl.el(this.conf.el + '.' + item.parentId).add('active'); if(level2 == undefined) return; var parentId = level2[item.parentId].parentId; if(parentId && level3) { dl.el(this.conf.el + '.' + parentId).add('active'); if(level3[parentId].parentId) dl.el(this.conf.el + '.' + level3[parentId].parentId).add('active'); } } continue; } dl.el(this.conf.el + '.' + item.Id).remove('active'); if(item.hasSub) this.active(item.list, level1, level2) } } prd.category.clear = function() { debug('car.category.clear()'); } prd.category.select = function(id, loadCustom) { debug('-- car.category.select()'); var custom = (loadCustom) ? '&custom=true' : ''; var id = id.replace(this.conf.el + '.', ''); dl.l.hash = this.conf.hash + '=' + id + '&' + car.engine.conf.hash + '=' + car.engine.code + custom; } prd.category.toggle = function(id) { var el = this.conf.el + '.' + id; var elBtn = this.conf.btnMore + '.' + id; dl.el(el).toggle('active'); if(dl.el(el).className.indexOf('active') > -1) dl.el(elBtn).html('Скрий'); else dl.el(elBtn).html('Зареди още'); } /** prd methods **/ prd.get = function() { debug('prd.get()') this.id = decodeURIComponent(dl.hash(this.conf.hash)); this.hashLocalId = dl.hash(this.conf.hashLocalId); this.code = decodeURI(dl.hash(this.conf.hashCode)); if(page.active == page.type.category) if(!this.category.id) return; this.load(); } prd.load = function() { debug('prd.load()') var self = this; //load from service switch(page.active) { case page.type.category: { var custom = ''; if(dl.hash('custom')) custom = '&custom=true' var url = data.file + '?get=product&engineId=' + car.engine.code + '&categoryId=' + this.category.id + custom; break; } case page.type.prdDetail: { if(this.id) var url = data.file + '?get=product&product=' + encodeURIComponent(this.id); if(this.hashLocalId) var url = data.file + '?get=product&productId=' + this.hashLocalId; if(this.code && this.code != 'false') var url = data.file + '?get=product&prdCode=' + this.code; break; } case page.type.result: { var url = data.file + '?get=product&prdCode=' + this.code; break; } case page.type.prdDetailCms: { var prdCode = dl.el(this.conf.code).value; var url = data.file + '?get=product&prdCode=' + prdCode; break; } } data.req(url, function(data) { if(data) self.data = data; else self.data = false; self.render(); }); } prd.render = function() { // switch rendering page switch(page.active) { case page.type.category: { this.renderList(); break; } case page.type.result: { this.renderResult(); break; } case page.type.prdDetail: { this.renderDetail(); break; } case page.type.prdDetailCms: { this.renderDetailCms(); break; } } } prd.renderList = function() { trace('prd.renderList()'); dl.el('loading').remove('show'); //renrer ui this.el = dl.el(this.conf.list); var out = []; var list = data.sort(this.data, 'quantity', false); for(var i in list) { var item = list[i]; //if(this.skipNotInStock && (!item.quantity || item.quantity == '0.00')) continue; var id = this.conf.el + '.' + item.Id; //out.push('
'); if(item.url) out.push('
'); else out.push('
'); out.push(''); out.push('
'); out.push('

' + item.name + '

'); out.push('Код: ' + item.code + ''); out.push('Цена: ' +item.price.replace('.',',')+ ''); //out.push('Наличност: ' + item.quantity + ''); out.push('
'); out.push('Детайли'); //out.push('Поръчай'); out.push('
'); info('!!! category.repaint'); this.el.html(out.join('')); //add to list this.list = this.el.childNodes; } } prd.renderResult = function() { trace('prd.renderResultList()'); dl.el('loading').remove('show'); // load main details dl.el('prd.search').html(this.code); dl.el(this.conf.code).value = this.code; // renrer ui this.el = dl.el(this.conf.list); var out = []; var list = data.sort(this.data, 'price', false); for(var i in list) { var item = list[i]; if(this.skipNotInStock && (!item.quantity || item.quantity == '0.00')) continue; var id = this.conf.el + '.' + item.Id; //out.push('
'); if(item.Id) out.push('
'); else out.push('
'); out.push(''); out.push('
'); out.push('

' + item.name + '

'); out.push('Код: ' + item.code + ''); item.price = (item.price) ? item.price : 'N/A'; out.push('Цена: ' +item.price.replace('.',',')+ ''); out.push('
'); out.push('Детайли'); out.push('Поръчай'); out.push('
'); info('!!! category.repaint'); this.el.html(out.join('')); //add to list this.list = this.el.childNodes; } } prd.renderDetail = function() { trace('prd.renderDetail()'); // load main details dl.el(page.conf.title).html(this.data.name); dl.el(this.conf.title).html(this.data.name); dl.el(this.conf.code).html('Цена: ' + this.data.code); dl.el(this.conf.brand).html(this.data.brandName); dl.el(this.conf.img).src = this.data.img.src; dl.el(this.conf.price).html('Цена: ' + this.data.price); var criteria = this.renderCriteria(this.data.criteria); dl.el(this.conf.criteria).html(criteria); dl.el(this.conf.stock).html(this.data.stockStatus); if(this.id) dl.el('prd.id').value = this.id; if(this.hashLocalId) dl.el('prd.id').value = this.hashLocalId; if(this.data.inStock) dl.el(this.conf.cart).remove('hidden'); else dl.el(this.conf.ask).remove('hidden'); dl.el('prd.imgInput').value = this.data.img.src; // load secondary details dl.el(this.conf.title+'2').html(this.data.name); dl.el(this.conf.code+'2').html(this.data.code); dl.el(this.conf.brand+'2').html(this.data.brandName); dl.el(this.conf.criteria+'2').html(criteria); var oen = this.renderOen(this.data.oenList); dl.el(this.conf.oen).html(oen); var reus = this.renderReus(this.data.reusList); dl.el(this.conf.reus).html(reus); dl.el('product').style.display = 'block'; } prd.renderCriteria = function(list) { if(!list) return false; var out = ''; for(var i = 0; i < list.length; i++){ var item = list[i]; out+= item.name if(item.value != undefined) out+=': ' + item.value; if(item.unit != undefined) out+= ' ' + item.unit; out+= '
'; } return out; } prd.renderOen = function(list) { if(!list) return false; var out = ''; for(var i = 0; i < list.length; i++){ var item = list[i]; out+= item + '
'; } return out; } prd.renderReus = function(list) { if(!list) return false; var out = ''; for(var i in list){ var item = list[i]; out+= item.code + '
'; } return out; } prd.renderDetailCms = function() { if(!this.data.code) dl.el(this.conf.code).setCustomValidity('Няма такъв продукт!'); else { dl.el(this.conf.name).value = this.data.name; dl.el(this.conf.code).setCustomValidity(''); } } prd.active = function() { debug('car.model.active()'); for(var i=0; i'); out.push('Номер'); out.push('Дата'); out.push('Стойност'); out.push('Цена с ДДС'); out.push('Дата на падеж'); out.push('Остатъчна ст.'); out.push(''); // list main categories for(var i in this.data.list) { var item = this.data.list[i]; out.push(''); out.push('' + item.code + ''); out.push('' + item.date + ''); out.push('' + item.amount + ''); out.push('' + item.amountVat + ''); out.push('' + item.dueDate + ''); out.push('' + item.amountLeft + ''); out.push(''); } info('!!! document.repaint'); this.el.html(out.join('')); this.pagination(this.data.page); //add to list this.list = this.el.childNodes; } doc.renderPayment = function() { debug('doc.renderPayment()'); this.el = dl.el(this.conf.list); var out = []; out.push(''); out.push('Номер'); out.push('Дата'); out.push('Стойност'); out.push('Продажба №'); out.push('Дата на продажба'); out.push(''); // list main categories for(var i in this.data.list) { var item = this.data.list[i]; out.push(''); out.push('' + item.code + ''); out.push('' + item.date + ''); out.push('' + item.amount + ''); out.push('' + item.invCode + ''); out.push('' + item.invDate + ''); out.push(''); } info('!!! document.repaint'); this.el.html(out.join('')); this.pagination(this.data.page); //add to list this.list = this.el.childNodes; } doc.renderCredit = function() { debug('doc.renderCredit()'); this.el = dl.el(this.conf.list); var out = []; out.push(''); out.push('Номер'); out.push('Дата'); out.push('Стойност'); out.push('Цена с ДДС'); out.push('Валута'); out.push('Номер на продажба'); out.push('Дата на продажба'); out.push(''); // list main categories for(var i in this.data.list) { var item = this.data.list[i]; out.push(''); out.push('' + item.code + ''); out.push('' + item.date + ''); out.push('' + item.amount + ''); out.push('' + item.amountVat + ''); out.push('' + item.currency + ''); out.push('' + item.toInvCode + ''); out.push('' + item.toInvDate + ''); out.push(''); } info('!!! document.repaint'); this.el.html(out.join('')); this.pagination(this.data.page); //add to list this.list = this.el.childNodes; } doc.renderOrder = function() { debug('doc.renderCredit()'); this.el = dl.el(this.conf.list); var out = []; out.push(''); out.push('Номер'); out.push('Дата'); out.push('Изискана дата на доставка'); out.push('Стойност'); out.push('Цена с ДДС'); out.push(''); // list main categories for(var i in this.data.list) { var item = this.data.list[i]; out.push(''); out.push('' + item.code + ''); out.push('' + item.date + ''); out.push('' + item.reqDelDate + ''); out.push('' + item.amount + ''); out.push('' + item.amountVat + ''); out.push(''); } info('!!! document.repaint'); this.el.html(out.join('')); this.pagination(this.data.page); //add to list this.list = this.el.childNodes; } doc.renderUnpaid = function() { debug('doc.renderUnpaid()'); this.el = dl.el(this.conf.list); var out = []; out.push(''); out.push('Номер'); out.push('Дата'); out.push('Дата на падеж'); out.push('Валута'); out.push('Стойност'); out.push('Цена с ДДС'); out.push('Остатъчна стойност'); out.push(''); // list main categories for(var i in this.data.list) { var item = this.data.list[i]; out.push(''); out.push('' + item.code + ''); out.push('' + item.date + ''); out.push('' + item.dueDate + ''); out.push('' + item.currency + ''); out.push('' + item.amount + ''); out.push('' + item.amountVat + ''); out.push('' + item.amountLeft + ''); out.push(''); } info('!!! document.repaint'); this.el.html(out.join('')); //this.pagination(this.data.page); //add to list this.list = this.el.childNodes; } doc.pagination = function(page) { debug('doc.pagination()'); this.el = dl.el(this.conf.pagination); var out = []; for(var i = 1; i <= page; i++) { var className = (doc.active.page == i) ? 'active' : ''; out.push(' ' + i + ' '); } this.el.html(out.join('')); } doc.renderDetail = function() { debug('prd.category.renderTree()'); dl.el('loading.all').remove('show'); this.el = dl.el(this.conf.el); if(!this.list.length) { var out = []; out.push('
'); out.push(''); out.push('
'); // list main categories for(var i in this.data) { var item = this.data[i]; var id = this.conf.el + '.' + item.Id; // list subcategories if(item.hasSub) { out.push('' + item.name + ''); out.push(''); } else out.push('' + item.name + ''); } out.push('
'); out.push('
'); info('!!! category.repaint'); this.el.html(out.join('')); //add to list this.list = this.el.childNodes; //this.setActive(); } this.active(this.data); } doc.clear = function() { debug('car.category.clear()'); this.active.type = ''; this.active.page = 1; this.active.filter = ''; } doc.page.select = function(page) { trace('---- doc.page.select()') dl.hash(doc.conf.hashPage, page); } doc.type.select = function(el) { trace('---- doc.type.select()') var type = dl.el(el.id).value; doc.clear(); dl.l.hash = doc.conf.hashType + '=' + type; } doc.search = function(by) { var from = dl.el(this.conf.fFrom).value; var to = dl.el(this.conf.fTo).value; var code = dl.el(this.conf.fCode).value; if(by == 'date') dl.l.hash = this.conf.hashType + '=' + this.active.type + '&' + this.conf.hashPeriod + '=' + from + '|' + to; if(by == 'code') dl.l.hash = this.conf.hashType + '=' + this.active.type + '&' + this.conf.hashCode + '=' + code; } var asm = {} asm.switchClass = function(id, oldClass, newClass) { if(oldClass) dl.el(id).remove(oldClass); if(newClass) dl.el(id).add(newClass); } asm.submitOnEnter = function(e, action) { if(e.keyCode == 13) eval(action); }