/*Define class cart*/
function cart(cartname) {
	this.xmlhttp; 												// Объект для AJAX запросов
	this.cartname = cartname; 									// Название объекта корзина
	
	this.userinfo = new Array();								// Информация о пользователе
	
	this.cartdetails = document.getElementById('cartdetails');  // Объект для деталей корзины
	this.totalprice = 0;                                        // Общая сумма заказа
	this.totalitems = 0;										// Единиц в корзине
    this.items = new Array();									// Товары в корзине
	
	/*Добавляем товар*/
	this.addItem = function(item) {
		//console.log(item);
		var curritem = item.parentNode;
		var i = 0;
		//alert(curritem.className);
		//alert(/ ([0-9]+)/.exec(curritem.className)[1]);
		this.items.push(/ ([0-9]+)/.exec(curritem.className)[1]);
		while (curritem.childNodes.length > i) {
			if (/ (price) /.test(' '+curritem.childNodes.item(i).className+' ')) {
				// Могут быть баги, если в содержимое добавится что-то кроме чисел...
				// Надо придумать, как строку нормально конвертировать с число
				// alert(curritem.childNodes.item(i).innerHTML);
				this.totalprice = this.totalprice*1 + 1*curritem.childNodes.item(i).innerHTML;
				this.totalitems++;
				break;
			}
			i++;
		};
		this.saveState();
		this.updateView();
    }
	
	// Сохраняем информацию о пользователе
	this.saveUser = function(item) {
		eval("this.userinfo."+item.name + ' = "' + item.value+'";');
		this.saveState();
	};
	
	
	this.prepare = function(o) {
		return this.itemTpl.replace(/{([^{}]*)}/g,function(a, b) { var r = o[b]; return typeof r === 'string' || typeof r === 'number' ? r : a; } );
	};

	this.itemTpl ='<li class="sell {id}"><img src="/photos/s{image}" alt="{summary}" /><span class="summary">{summary}</span><span class="splitter"></span><span class="price">{price}</span> руб. за штуку.<span class="splitter"></span><span class="count">{count}</span> шт.<span class="splitter"></span>Всего на: <span class="sumprice">{sumprice}</span> руб.<span class="splitter"></span><span class="fromcart" title="Убрать из корзины">Убрать из корзины</span></li>';
	
	// Обрабатываем AJAX запрос
	this.listItemsFE = function(e) {
		if (!e) var e = window.event;
		if(e.target.readyState == 4 && e.target.status == 200) {
			
			eval('var obj='+e.target.responseText);
			
			// Инициализируем поля для подсчета одинаковых товаров в корзине
			for (var j in obj) {
				obj[j].count = 0;
			}
			
			// Считаем одинаковые товары в корзине
			for (var i in this.items) {
				for (var j in obj) {
					if (obj[j].id == this.items[i]) {
						obj[j].count++;
					}
				}
			}
			
			// Считаем общую стоимость каждого набора одинаковых товаров
			for (var j in obj) {
				obj[j].sumprice = obj[j].count * obj[j].price;
			}
			
			// Собираем HTML код корзины
			var result = '<ul class="hListing cart">';
			for (var i in obj) {
				result += this.prepare(obj[i]);
			}
			result += '</ul>';
			
			this.cartdetails.innerHTML = result;
		}
	}

	/*Выводим весь товар*/
	this.listItems = function() {
		var i = 0;
		//alert(this.items.toString());
		
		var cartname = this.cartname;
		// Обработчик пришедшего с сервера результата
		str = cartname+".listItemsFE(e);";
		this.xmlhttp.onreadystatechange=function(e) { eval(str); }
		
		//str = cartname+".addItem(this);";
		//el.childNodes.item(i).onclick = function() { eval(str); };
		
		this.xmlhttp.open("GET","/items.php?params="+this.items.toString(),true);
		this.xmlhttp.send(null);
	}
	/*Удаляем товар*/
	this.delItem = function(item) {
		var i = 0;
	    while (this.items.length > i) {
			if (this.items[i] == item) {
				this.items.splice(i,1);// = null;
			}
			i++;
		}
	}
	
	/*Обновляем вид*/
	this.updateView = function() {
		if(this.cartdetails) {
			this.listItems(); // Собираем подробную информацию
			document.getElementById('codetails').innerHTML = "Общая стоимость: "+this.totalprice+" Руб.\n"+"Всего единиц: "+this.totalitems+"\n";
			
			for (var i in this.userinfo) {
				document.getElementById(i).value = ('undefined' == this.userinfo[i]) ? '' : this.userinfo[i];
			}
		}
		// Обновление суммы в виджете
		if(document.getElementById('cartprice')) {
			document.getElementById('cartprice').innerHTML = this.totalprice;
		}
		// Обновление количества товаров в виджете
		if(document.getElementById('cartitems')) {
			document.getElementById('cartitems').innerHTML = this.totalitems;
		}
	}
	
	/*Сохраняем состояние корзинки*/
	this.saveState = function() {
		//console.log('savestate');
		if (document.cookie.split(';').length < 29) {
			if (escape(this.items.toString()).length < 3333) {
				if(escape(this.items.toString()).length) {
					document.cookie = "cart=" + escape(this.items.toString()) + "; path=/;";
				};
				document.cookie = "totalprice=" + this.totalprice + "; path=/;";
				// Надо бы сериализовать это дело, а не так херней страдать...
				document.cookie = "userinfo=" + escape("{'username':'"+this.userinfo.username+"','usertel':'"+this.userinfo.usertel+"','useremail':'"+this.userinfo.useremail+"','useraddress':'"+this.userinfo.useraddress+"'}") + "; path=/;";
				return true;
			} else {return false};
		} else {return false}
	}
	
	/*Инициализируем корзинку*/
	this.initState = function() {
		if(document.cookie != '') {
			// Получаем товары в корзине
			if(/cart=([A-Za-z0-9%]+); /.exec(document.cookie+'; ')) {
				this.items = unescape(/cart=([A-Za-z0-9%]+); /.exec(document.cookie+'; ')[1]).split(',');
			}
			
			// Инициализация товаров и сумм
			this.totalitems = this.items.length; // Количество товаров
			if(/totalprice=([0-9]+); /.exec(document.cookie+'; ')) {
				this.totalprice = unescape(/totalprice=([0-9]+); /.exec(document.cookie+'; ')[1]);
			}
			
			// Восстанавливаем данные пользователя
			if(/userinfo=([A-Za-z0-9%\+ \.,\)\(@-]+); /.exec(document.cookie+'; ')) {
				eval('this.userinfo = '+unescape(/userinfo=([A-Za-z0-9%\+ \.,\)\(@-]+); /.exec(document.cookie+'; ')[1])+';');
			}
			
			/*if (/userinfo=(.+);/.exec(document.cookie)[1]) {
				var userinfo = /userinfo=(.+);/.exec(document.cookie)[1];
				alert(userinfo);
			}*/
		}
		
		
		// Расставляем обработчики добавления в корзину для общего вида
		var el = document.getElementsByTagName('li');
		var i = 0;
		var elid;
		var str;
		var cartname = this.cartname;
		
		while (el.length > i) {
			if(/(sell)/.test(el[i].className)) {
				var j = 0;
				while (el[i].childNodes.length > j) {
					if (/(tocart)/.test(el[i].childNodes.item(j).className)) {
						str = cartname+".addItem(this);";
						el[i].childNodes.item(j).onclick = function() { eval(str); };
					}
					j++;
				}
			}
			i++;			
		}
		
		// Ставим обработчик для подробного вида
		el = document.getElementById('sellitem');
		i = 0;
		if(el) {
			while (el.childNodes.length > i) {
				if(/(tocart)/.test(el.childNodes.item(i).className)) {
					str = cartname+".addItem(this);";
					el.childNodes.item(i).onclick = function() { eval(str); };
				}
				i++;			
			}
		}
		
		// Ставим обработчики на информацию о пользователе
		if(this.cartdetails) {
			var str = cartname+'.saveUser(this);';
			document.getElementById('username').onblur = function() { eval(str); };
			document.getElementById('usertel').onblur = function() { eval(str); };
			document.getElementById('useremail').onblur = function() { eval(str); };
			document.getElementById('useraddress').onblur = function() { eval(str); };
		}
		
		// Получаем объект для XML
		if (window.XMLHttpRequest) {
			this.xmlhttp=new XMLHttpRequest();
		} else {
			this.xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
		
		this.updateView()
	}
	
	this.initState();
}

	

cart1 = new cart('cart1');

/*function getCookie(name) {
	return unescape(eval("/"+name+"=(.+);/").exec(document.cookie)[1]);
}*/