/* acmebel@main.js */
//window.onerror = function(e, f, ln){ alert(e + '\n\n' + f + ', ' + ln); return true; }

var Catalog = new function(){ // client engine from catalog's pages
	this.init = function(data){
		scroller = document.getElementById('scroller');
		for(var i = 0; i < limit; i++){
			cards[i] = {
				card:document.getElementById('card_' + i),
				link:document.getElementById('link_' + i),
				title:document.getElementById('title_' + i),
				photo:document.getElementById('photo_' + i),
				trans:document.getElementById('trans_' + i),
				price:document.getElementById('price_' + i)
			}
		}
		Favorites.init(); // инитим объект список фаворитов
		if(data.length) this.showResult(data);
	}
	this.showResult = function(data){ // выводит результаты поиска
		tpage = 0; all = 0; list = []; 
		if(!data){ 
			try { while(scroller.hasChildNodes) scroller.removeChild(scroller.lastChild); } catch(e) { }
			hinter.style.display = 'block'; results.style.display = 'none'; return; 
		} 
		// выводим скроллер
		list = data; all = Math.ceil(list.length / limit);
		//for(var i = 0; i < all; i++){
		//	var el = document.createElement('div');  
		//	var txt = document.createTextNode(i + 1); el.appendChild(txt); scroller.appendChild(el); 
		//	scroller.lastChild.onclick = function(){ Catalog.scroll(this.firstChild.nodeValue); };
		//} 
		scroller.style.display = 'block'; this.scroll(1); 
	}
	this.scroll = function(pg){ // скролл страниц выборки
		pg = parseInt(pg) - 1; var scrl = scroller.getElementsByTagName('div');
		removeClass(scrl.item(tpage), "tpage"); applyClass(scrl.item(pg), "tpage"); tpage = pg;
		page = list.slice(pg * 4, pg * 4 + 4);
		for (var i = 0; i < limit; i++) { // отрисовка карточек
			try{
				cards[i].card.style.display = 'block';
				cards[i].link.setAttribute('href', '/catalog/' + page[i].id + '.html');
				cards[i].photo.src = '/catalog/mebel/' + page[i].id + '.jpg';
				cards[i].title.setAttribute('href', '/catalog/' + page[i].id + '.html');
				//alert(cards[i].title.nodeValue)
				cards[i].title.innerHTML = page[i].title;
				if(page[i].tid != '1'){ 
					cards[i].trans.setAttribute('href', '/transform/' + page[i].tid + '.html');
					cards[i].trans.firstChild.nodeValue = page[i].trans;
					cards[i].trans.style.visibility = 'visible';	
				} else { cards[i].trans.style.visibility = 'hidden'; }
				cards[i].price.firstChild.nodeValue = page[i].price; 
			}catch(e){ try{ cards[i].card.style.display = 'none'; }catch(e){} } 
		}
	}
	this.addToFavor = function(t, pos){ // добавление в список избранных
		//t.style.display = 'none'; 
		Favorites.addToFavor(t, page[pos].id);
	}
	var scroller; // экранные объекты
	// массив экранных карточек, список карточек в выборке, текущая страница, лимит на странице, всего найдено страниц
	var cards = []; var list = []; var tpage = 0; var limit = 4; var all = 0; var page = [];

}

var Favorites = new function(){ // объект операций с избранным
	this.favor = [];
	this.init = function(){ // достаем фавориты из куки
		this.favor = Lib.getCookie("favor", true) || [];
	}
	this.check = function(card){ // проверяет на наличие карточки в списке фаворитов
		for(var i = 0; i < this.favor.length; i++) if(this.favor[i] == card) return true; return false;
	}
	this.addToFavor = function(t, card){ // добавляет карточку в список избранного
		var add = (card) ? card : Card.id;
		if(add){
			Favorites.init(); Favorites.favor.push(add); Lib.setCookie("favor", Favorites.favor, 2, "/");
			t.style.visibility = 'hidden';
		}
	}
	this.del = function(t, card){ // удаляет карточку из избранного
		var k = []; for(var i = 0; i < this.favor.length; i++) if(this.favor[i] != card) k.push(this.favor[i]);
		this.favor = k; Lib.setCookie("favor", Favorites.favor, 2, "/"); t.parentNode.parentNode.style.display = 'none';
	}
	this.showFavorList = function(){ // запрашивает данные с сервера, выводит список избранного
		this.init(); if(this.favor.length){
			document.getElementById('favoriter').innerHTML = 'Секунду, идет загрузка данных ... ';
			var req = new JSHttpRequest(); req.callback = function(data, alerts){ 
				if(data && data.list && data.list.length){
					var htm = ""; for(var i = 0; i < data.list.length; i++){
						htm += '<div class="favor">';
						htm += '<a href="/catalog/' + data.list[i].id + '.html"><img src="/catalog/mebel/' + data.list[i].id + '.jpg" title="' + data.list[i].title + '"/><br /></a>';
						htm += '<div class="tbb"><input type="image" src="/acmebel/img/tbb/del.gif" title="удалить из избранного"/ onclick="Favorites.del(this, ' + data.list[i].id + ')"/><br /><br /><input type="image" src="/acmebel/img/tbb/order.gif" title="добавить в заказ" onclick="Order.addCart(' + data.list[i].id + ')" style="width:27; height:17"/></div>';
						htm += 'Длина: ' + data.list[i].l + ' см<br/>';
						htm += 'Ширина: ' + data.list[i].w + ' см<br/>';
						htm += 'Высота: ' + data.list[i].h + ' см<br/>';
						if(data.list[i].sl != 0) htm += 'Спальное место: ' + data.list[i].sl + ' x ' + data.list[i].sw + ' см'; htm += '<br/>';
						if(data.list[i].tid != 1) htm += '<nobr><a class="tr" href="/transform/' + data.list[i].tid + '.html">' + data.list[i].trans + '</a></nobr>'; htm += '<br/>';
						htm += 'Цена от <b>' + data.list[i].price + '</b> руб.<br/>';
						htm += '</div>';
					} document.getElementById('favoriter').innerHTML = htm;
				}
			}; req.send('getFavorList');
		}
	}
}

var Card = new function(){ // объект операций с карточкой
	this.id = 0; // идентификатор текущего предмета
	this.photos = []; this.photo = 0; // список фотографий для этого предмета, текущее фото
	this.init = function(id, p){
		phi = document.getElementById('photo'); s = document.getElementById('sscrl');
		this.id = id || 0; this.photo = p || 0;
		// собираем идентификаторы фоток
		try {
			var pp = document.getElementById('photos').getElementsByTagName('td'); 
			for(var i = 0; i < pp.length; i++){
				if(pp.item(i).className == 'scrollp') this.photos.push(pp.item(i).id);
			}
		} catch(e) { /* в калькуляторе не требуется */ }
		try{ Textures.showBookmarks(); }catch(e){}
	}
	this.scroll = function(t){ // скроллер фотографий
		if(t && t != s){
			this.photo = parseInt(t.id) || 0; 
			if(this.photo){
				phi.src = '/catalog/photo/' + this.photo + '.jpg'; phi.style.cursor = 'pointer';
			} else { 
				phi.src = '/catalog/mebel/' + this.id + '.jpg'; phi.style.cursor = 'default'; 
			} s.className = 'scrollp'; t.className = 'scrolli'; s = t;
		}
	}
	this.showp = function(){ // окрывает экран просмотра фото из фотобанка
		if(this.photo) showImg('/catalog/photo/full/' + this.photo + '.jpg');
	}
	this.setSelect = function(id, isOsn){ // определяет выбор основы или компаньона
		// показываем маркер выбора и запоминаем выбор для карточки
		if(isOsn){ document.getElementById('osnova').src = '/textures/prev/' + id + '.jpg'; this.osnova = id; }
		else { 
			document.getElementById('companion').src = '/textures/prev/' + id + '.jpg'; this.companion = id; 
			return true;
		}
		// запрашиваем цену с сервера, если она вообще имеется !
		try { var test = document.getElementById('tprice'); }catch(e){}
		if(test){
			var req = new JSHttpRequest(); 
			req.callback = function(data, alerts){
				var prc = document.getElementById('tprice');
				Card.price = data.price || 0; 
				// если нет цены - в этой ценовой категории не производится, блокируем заказ !
				if(!Card.price){
					prc.innerHTML = "В этой ценовой категории не производится !"; prc.style.color = '#CC3300';
					document.getElementById('order_btns').style.display = 'none';
				} else {
					prc.innerHTML = Card.price + " руб."; prc.style.color = 'black'; 
					document.getElementById('order_btns').style.display = 'block';
				}
			}; req.send('getPrice', {textura:id, card:this.id }); return true;
		}
	}
	// фотка предмета, текущий элемент скроллера
	var phi = null; var s = null; 
}

var Calc = new function(){ // калькулятор цены по обивке
	this.init = function(){
		Card.init(document.filter.card.value || 0);
		pages = document.getElementById('scroller').getElementsByTagName('DIV');
		txtrs = document.getElementById('texturescards').getElementsByTagName('DIV');
		for (var i = 0; i < txtrs.length; i++){
			try{
				var tx = txtrs.item(i).getElementsByTagName('IMG')[0];
				data.push({
					id:tx.getAttribute('i'), title:tx.getAttribute('title'), 
					price:tx.getAttribute('p'), skid:tx.getAttribute('s')
				});
			}catch(ex){}
		}
	}
	this.getPrice = function(i){ // запрос цены с сервера
		var osn = document.getElementById('osnova'); txtr = data[i].id;
		osn.src = '/textures/prev/' + txtr + '.jpg'; osn.onclick = this.showTCard; osn.style.cursor = 'pointer';
		var txt = ""; var fld = document.getElementById('tprice'); var skid = document.getElementById('sprice');
		if(data[i].price && data[i].price != 0){
			osn.title = data[i].title;
			Card.osnova = txtr;
			Card.price = data[i].price;
			if(data[i].skid){ 
				fld.innerHTML = 'Розничная цена: <b>' + data[i].price + ' руб. </b>'; 
				var np = parseInt(data[i].price / 100 * (100 - data[i].skid));
				skid.innerHTML = '<br />Cкидка интернет-магазина: ' + data[i].skid + '%<br /><br />Цена со скидкой: <b>' + np + ' руб.</b><br /><a href="/discount.html">при покупке за наличные с частичной предоплатой</a>'; 
			} else { skid.innerHTML = data[i].price + ' руб.'; fld.innerHTML = '<br>'; }
		} else {
//			osn.src = '/acmebel/img/gif.gif'; osn.title = "";
			fld.innerHTML = '<span style="color:#CC3300">В этой обивке не производится !</span>';
		} return true;
	}
	this.scroll = function(t, toPage){ // скролл обивок
		removeClass(pages[page], 'tpage'); applyClass(t, 'tpage'); page = toPage;
		var f = getFilter(); f.page = page;
		var req = new JSHttpRequest(); req.callback = this.setNewList; req.send('getCalcTextures', f);
	}
	this.applyFilter = function(t){ // применение фильтра обивок
		var o = getFilter(); o.page = 0; o.onfilter = 1;
		var req = new JSHttpRequest(); req.callback = this.setNewList; req.send('getCalcTextures', o);
		return false;
	}
	this.showTCard = function(){ // открывает карточку обивки
		var card = window.open('/textures/?id=' + txtr, 'tcard', 'width=500, height=425, resizable=1');
		card.focus();
	}
	this.setNewList = function(dt, alerts){
		data = dt.pages;
		if(dt.all){ // разборка со скроллером
			for (var i = 0; i < pages.length; i++) {
				if(i >= dt.all) pages[i].style.display = 'none';
				else {
					pages[i].style.display = 'block';
					removeClass(pages[i], 'tpage'); 
				}
			} page = 0; applyClass(pages[0], 'tpage');
		}
		for (var i = 0; i < txtrs.length; i++){
			try {
				var tx = txtrs.item(i).getElementsByTagName('IMG')[0];
				tx.setAttribute('title', data[i].title);
				tx.src = '/textures/prev/' + data[i].id + '.jpg';
				txtrs.item(i).style.display = 'block';
			} catch(e) {
				try{ txtrs.item(i).style.display = 'none'; }catch(ex){}
			}
		}
	}
	this.addToCart = function(){ // алиас добавки в корзину
		if(Card.price){
			if(Order.addCart()) alert('Эта позиция добавлена в Ваш заказ.');
		} else alert('Сначала определите стоимость, выбрав желаемую обивку !');
	}
	this.order = function(){ // простой заказ, но с ценой и тряпкой
		document.location.href = '/order/simple/229.html?o=' + Card.osnova + '&p=' + Card.price;
	}
	var txtr = 0; // идентификатор текущей обивки
	var page = 0; // текущая страница скролла
	var pages = []; // список страниц скроллера
	var txtrs = []; // список превьюшек обивок страницы
	var data = []; // данные обивок
	function getFilter(){
		return {
			cat:document.getElementById('filter_cat').value || 0,
			color:document.getElementById('filter_color').value || 0,
			raskras:document.getElementById('filter_raskras').value || 0,
			txr:document.getElementById('filter_txr').value || 0,
			pcat:document.getElementById('filter_pcat').value || 0,
			card:document.getElementById('filter_card').value || 0
		};
	}
}

var Textures = new function(){ // объект каталога обивок
	this.flag = false;
	this.bookmarks = []; // список id выбранных юзером обивок
	this.init = function(){ // инит экранных объектов 
		this.flag = true; filter = document.getElementById('filter'); 
		// собираем элементы картинок обивок
		var t = document.getElementsByTagName('div');
		for (var i = 0; i < t.length; i++){ if(t.item(i).className == 'textura') textura.push(t.item(i)); }
		// собираем элементы страниц скроллера
		var t = document.getElementById('scroller').childNodes;
		for (var i = 0; i < t.length; i++){ if(t.item(i).nodeType == 1) scrollp.push(t.item(i)); }
		document.getElementById('scroller').style.display = 'block';
		// ставим выделение скроллера на 1 страницу, заполняем избранное
		iScroll(0); this.showBookmarks();
	}
	this.showBookmarks = function(){ // выводит список избранного при загрузке страницы
		this.bookmarks = Lib.getCookie("textures", true) || []; this.addBookmark();
	}
	this.applyFilter = function(){ // фильтр по признакам обивки
		var f = { // объект параметров фильтра
			cat:filter.cat.value || 0, color:filter.color.value || 0, txr:filter.txr.value || 0,
			raskras:filter.raskras.value || 0, pcat:filter.pcat.value || 0, yes:filter.yes.value || 0,
			name:filter.title.value || "", articul:filter.articul.value || "", limit:limit
		}; var req = new JSHttpRequest(); req.callback = this.setNewList; req.send('getTextures', f); return false;
	}
	this.setNewList = function(newData, alerts){ // перегрузка списка обивок
		var hint = document.getElementById('hint'); DATA = (newData) ? newData : []; 
		iScroll(0); Textures.scroll(0);
		hint.style.display = (DATA.length) ? 'none' : 'block';
	}
	this.scroll = function(next){ // скролл списка обивок
		iScroll(next, true); var slice = page * limit; var all = DATA.length;
		for(var i = 0; i < limit; i++){
			var el = document.getElementById('t_' + i); var eln = document.getElementById('n_' + i); var j = i + slice;
			try {
				el.parentNode.style.display = 'block'; setImgPrev(el, DATA[j].i); 
				el.title = DATA[j].t; eln.className = 'new-' + DATA[j].n;
			}catch(e){ 
				try { 
					el.parentNode.style.display = 'none'; /*setImgPrev(el, 0);*/ eln.className = 'new-0'; 
				}catch(e){} 
			}
		}
	}
	this.card = function(i, any){ // открывает карточку обивки
		var id = (any) ? i : DATA[page * limit + i].i;
		try {
			var card = window.open('/textures/?id=' + id, 'tcard', 'width=500, height=425, resizable=1');
			card.focus();
		} catch(e) { alert(e) }
		
	}
	this.addBookmark = function(id){ // добавляет обивку в список избранного, статический метод для карточки
		var n = []; if(!Textures.bookmark) Textures.bookmark = []; var del = false; var innh = "";
		for(var i = 0; i < Textures.bookmarks.length; i++){
			if(Textures.bookmarks[i] != id && Textures.bookmarks[i]){ n.push(Textures.bookmarks[i]); 
			innh = showBkm(Textures.bookmarks[i], innh); }
			else del = true;
		} Textures.bookmarks = n; 
		if(!del && id){ Textures.bookmarks.push(id); innh = showBkm(id, innh); } // перерисовываем список избранного
		// запоминаем список в СЕССИОННОЙ куке
		if(Textures.bookmarks) Lib.setCookie("textures", Textures.bookmarks, 2, "/");
		try{ document.getElementById('bookmarks').innerHTML = (innh) ? innh : '<br/>'; }catch(e){}
	}
	var limit = 48; var page = 0; // лимит обивок на страницу, количество обивок с учетом фильтра
	var textura = []; var scrollp = []; // массив объектов текстур (определяется шаблоном), массив ссылок скроллера 
	var filter = null; // форма фильтра
	function setImgPrev(o, id){ // задает uri картинки обивки
		o.src = '/textures/prev/' + (id || 0) + '.jpg'; 
	}
	function showBkm(id, innh){ // показывает прьевьюшку избранной
		innh += '<div class="textura"><img src="/textures/prev/'+ id + '.jpg" onclick="Textures.card(' + id + ', true)"/></div>'; return innh;
	}
	function iScroll(id, nocycle){ // выделение текущей страницы в скроллере
		removeClass(scrollp[page], 'tpage'); applyClass(scrollp[id], 'tpage'); page = id;
		if(!nocycle){ 
			var sp = Math.ceil(DATA.length / limit); // прячем ненужные страницы	
			for(var i = 0; i < scrollp.length; i++) scrollp[i].style.display = (i < sp) ? 'inline' : 'none';
		}
	}
}

/* объект заказа и функционала заказа в карточке */
var Order = new function(){ 
	this.oid = 0; this.id = 0; // идентификатор заказа, идентификатор позиции в заказе (0 - заказа нету)
	this.list = []; // список позиций в заказе
	this.init = function(){}
	this.getOrderParam = function(){ // получает список заказа и выставляет информер
		this.oid = Lib.getCookie("order") || 0;
		if(this.oid){ // получаем список 
			var req = new JSHttpRequest(); req.callback = function(data, alerts){ 
				Order.list = data; 
			}; req.send('getOrderList');
		} 
	}
	this.addCart = function(card){ // добавляет в заказ текущую позицию
		return this.operInCart('addCart', { card:card||Card.id, o:Card.osnova, k:Card.companion, c:Card.comby, p:Card.price });
	}
	this.updCart = function(kol){ // изменяет параметры заказанной позиции или удаляет позицию
		this.operInCart('updCart', { order:Order.id, kol:kol||1, o:Card.osnova, k:Card.companion, p:Card.price });
	}
	this.operInCart = function(type, o){ // операция в корзине, получает объект параметров операции
		var req = new JSHttpRequest(); req.callback = function(data, alerts){
			if(data.oid){ try{
				document.getElementById('itogo-col').innerHTML = data.kol || 0;
				document.getElementById('itogo-price').innerHTML = data.summ || 0;
			}catch(e){}	}
		}; req.send(type, o); return true;
	}
}
var Basket = new function(){ 
	this.init = function(){ }
	this.updCart = function(id, kol){ // операция удаления или изменения количества по позиции
		var nkol = (kol) ? parseInt(kol) : 0;
		if(!nkol){
			if(confirm('Вы уверены, что эту позицию нужно удалить из заказа ?')){
				var req = new JSHttpRequest(); req.callback = function(data, alerts){
					if(data.ok) document.getElementById('pos-' + data.ok).style.display = 'none'; 
				}; req.send('delCart', { id:id }); return true;
			}
		} else { // изменяем количество
			//alert('Количество изменено.');
			var req = new JSHttpRequest(); req.callback = function(data, alerts){
				if(data.ok){
					document.getElementById('sum-' + data.ok).innerHTML = 
						parseInt(document.getElementById('kol-' + data.ok).value) * parseInt(document.getElementById('pr-' + data.ok).innerHTML);
				}
			}; req.send('updKol', { id:id, kol:nkol }); return true;
		}
	}
	function setBasketList(){ // строит таблицу списка заказа
		var list = ""; 
		for(var i = 0; i < Order.list.length; i++){
			var k = Order.list[i].kol * Order.list[i].price; 
			alert([k, Order.list[i].kol, Order.list[i].price])
			list += '<tr id="item-' + i + '"><td class="title">' + Order.list[i].title + '</td><td><input id="' + Order.list[i].id + '" type="text" name="kol" value="' + Order.list[i].kol + '" onchange="Basket.updCart(this)"/></td><td><a href="javascript:void(Basket.updCart(this, true)"><img src="/acmebel/img/del.gif" width="15" height="15" border="0" alt="удалить из заказа" /></a></td><td id="pr-' + Order.list[i].id + '" class="price">' + Order.list[i].price + '</td><td id="sum-' + i + '">' + k + '</td></tr>';
		}; document.getElementById('cartlist').innerHTML = list;
	}
}

