/* 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('');
}
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('');
out.push('- ДвигателТипОбемМощностКод
');
//console.log('xxxxxx');
//console.log(this.data[this.model]);
var list = data.sort(this.data[this.model], 'order', true, true);
for(var i in list) {
var item = list[i];
if(car.skipYear <= item.to && car.year.inRange(item, year))
out.push('- '+item.name+''+item.fuel+''+item.cc+''+item.hp+''+item.motor+'
');
}
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('
');
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('');
for(var j in item.list) {
sub++;
var subItem = item.list[j];
var subItemId = this.conf.el + '.' + subItem.Id
if(parseInt(subItem.hasSub)) {
out.push('' + subItem.name + '');
out.push('');
for(var k in subItem.list) {
var subSubItem = subItem.list[k];
var subSubItemId = this.conf.el + '.' + subSubItem.Id
if(parseInt(subSubItem.hasSub)) {
out.push('' + subSubItem.name + '');
out.push('');
for(var l in subSubItem.list) {
var subsubSubItem = subSubItem.list[l];
var subsubSubItemId = this.conf.el + '.' + subsubSubItem.Id
out.push('' + subsubSubItem.name + '');
}
out.push('');
} else
out.push('' + subSubItem.name + '');
//out.push('' + subSubItem.name + '');
}
out.push('');
} else
out.push('' + subItem.name + '');
}
out.push('');
} else {
out.push('' + item.name);
out.push('
');
}
if(sub > 7)
out.push('Зареди още');
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('');
for(var j in item.list) {
var subItem = item.list[j];
var id = this.conf.el + '.' + subItem.Id
if(parseInt(subItem.hasSub)) {
out.push('' + subItem.name + '');
out.push('');
for(var k in subItem.list) {
var subSubItem = subItem.list[k];
var id = this.conf.el + '.' + subSubItem.Id
if(parseInt(subSubItem.hasSub)) {
out.push('' + subSubItem.name + '');
out.push('');
for(var l in subSubItem.list) {
var subSubSubItem = subSubItem.list[l];
var id = this.conf.el + '.' + subSubSubItem.Id
out.push('' + subSubSubItem.name + '');
}
out.push('');
} else
out.push('' + subSubItem.name + '');
}
out.push('');
} else
out.push('' + subItem.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('');
for(var j in item.list) {
var subItem = item.list[j];
var id = this.conf.el + '.' + subItem.Id
if(subItem.hasSub) {
out.push('' + subItem.name + '');
out.push('');
for(var k in subItem.list) {
var subSubItem = subItem.list[k];
var id = this.conf.el + '.' + subSubItem.Id
out.push('' + subSubItem.name + '');
}
out.push('');
} else
out.push('' + subItem.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);
}