var activeOrder = false;
var cntBoxes;
var info = new DisplayInfo(false);

var tmp_sum = 0;
var order = new Array();

var flexions = new Array();
flexions[0] = 'is';
flexions[1] = 'iai';
flexions[2] = unescape('i\u0173');

function setBasket(obj)
{
	var parent = obj.parentElement ? obj.parentElement : obj.parentNode;
	var objname = parent.id;
	//info.info.alert(objname);
	//if value is zero and that was not a fact earlier, this array element is deleted
	if (obj.value == 0 && order[objname] != 'undefined')
	{
		delete order[objname];
	}
	else order[objname] = obj.value;

	var sum = sumItems(order);
	

	/*for(i=0; i<sweets.length; i++)
	{
		tmp = parseInt(sweets[i]);
		sum += tmp;
	}*/
	if (sum > inbasket) 
	{
		alert("Galite pasirinkti tik " + inbasket + " saldainių vienoje dėžutėje. Surinkote " + sum + ".");
		obj.options[0].selected = true;
		delete order[objname];
		sum_basket.innerHTML = sumItems(order) + " " + setFlexion(sum, 'saldain', flexions) + unescape(' i\u0161 ') + inbasket;
		
	}
	else 
	{
		tmp_sum = sum;
		sum_basket.innerHTML = sum + " " + setFlexion(sum, 'saldain', flexions) + unescape(' i\u0161 ') + inbasket;
	}
	setCookie('activeOrder', 1);
	//info.alert("Box: " + combine(order, ','));
	setCookie(currbox, order);

	if ((sum > 0) && (document.all['orderBtn'].className == 'hidden'))
	{
		showOrderBtn('show');
	}
	//else if (sum == 0) showOrderBtn('hidden');
	var boxes = getBoxes();
	if (boxesFull()) 
	{
		el('orderBtn').className = 'show';
		el('boxSelection').className = 'show';
	}
	else 
	{
		el('orderBtn').className = 'hidden';
		if (boxes.length < 2) el('bSel').className = 'hidden';
	}
	boxesFull();
	//info.alert(document.cookie + "\n" + unescape(combine(box, ',')));
}//setBasket

function getCookieVal(offset)
{
	var endstr = document.cookie.indexOf(";", offset);
	if (endstr == -1)
		endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}//getCookieVal

//return cookie's value or null
function getCookie(name)
{
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen)
	{
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg)
			return getCookieVal(j);
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break;
	}//while
	return 0;
}//getCookie

//checks if value is an array and joins it with separator ','
function setCookie(name, value)
{
	var divider;
	if (arguments[2] == null) divider = ',';
	else divider = arguments[2];
	var vtype = typeof value;
	if(vtype != 'object')
	{
		document.cookie = name + "=" + value;
	}
	else
	{
		document.cookie = name + "=" + combine(value, divider);
	}
}//setCookie

function getOrderedProducts(boxname)
{
	var box = getCookie(boxname);
	if (box == 0) return 0;
	delete box['inbasket'];
	return box;
}//getOrderedProducts

function getCookieArray(name, divider)
{
	var arr = new Array();
	var tmp = new Array();
	var modifier = null;
	if (getCookieArray.arguments.length == 3)
		modifier = 0;
	else modifier = 1;
	var orderString = getCookie(name);
	if (orderString == 0) {return 0;}
	var splitted = orderString.split(divider);
	for (i=0; i<(splitted.length)-modifier; i++)//-1 'cause the last comma defines no item: "10=1,12=5,"
	{
		tmp = splitted[i].split('=');
		arr[''+tmp[0]] = tmp[1];
	}
	return arr;
}

function getBox(boxname)
{
	return getCookieArray(boxname, ',');
}

function setBoxes(boxes)
{
	//info.alert("Inside setBoxes: " + combine(boxes, ';'));
	var len = boxes.length;
	var str = '';
	for (i=0; i<len; i++)
	{
		if (i != (len-1))
			str += boxes[i] + ',';
		else str += boxes[i];
	}
	document.cookie = "boxes=" + str;
}//setBoxes

function getBoxes()
{
	var str = getCookie('boxes');
	//if there is only one item in string, it isn't divided with comma
	//fo instance: boxes=box1
	if (str == 0) return 0;
	if (str.indexOf(',') == -1) 
	{
		var arr = new Array();
		arr[0] = str;
		return arr;
	}
	//else boxes:box1,box2
	var boxes = str.split(',');
	return boxes;
}//getBoxes


function combine(arr, divider)
{
	var tmpstr = '';
	if (divider == undefined) divider = ',';
	for (var name in arr)
	{
		tmpstr += name + "=" + arr[name] + divider;
	}//for
	return tmpstr;
}//combine

function sumItems(arr)
{
	var asum = 0;
	for (var name in arr)
	{
		if (name != 'inbasket')
			asum += parseInt(arr[name]);
	}//for
	return asum;
}//sumItems

function setSelects(arr)
{
	if (arr['candy0'] != null) delete arr['candy0'];
	for (var name in arr)
	{
		//info.alert(unescape(name + "\n" + arr[name]));
		//document.all[name].elements[0].options[arr[name]].selected = true;
		if (document.forms[name] != null)
		{
			//info.alert("inside: " + name + ":" + arr[name]);
			document.forms[name].elements[0].options[arr[name]].selected = true;
		}
	}//for
}

function initOrder()
{
	if(el("inbasket") == null) return;
	var cbox = 0;
	//alert(document.cookie);
	if (getCookie('prod') != 0)
	{
		showOrderBtn('show');

		var gg = el('cat_id');
		if(gg!=null)
		var catId = gg.value;

		var opr = null;
		if (catId == 14 || catId == 15)
		{
			opr = new OtherProds();
		}
		
		if (getCookie("prods") != 0)
		{
			//alert(document.cookie);
			info.alert("here");
			cart = new Cart();
			cart.init();
			el('orderBtn').className = 'show';
		}
		//el('orderBtn').className = 'show';
		
		var imgOrder = document.getElementById("order_img");
		var imgOrderA = el("orderImgA");
		if(imgOrderA!=null){
		imgOrderA.href = "index.php?page_id=6#boxesImg";
		if (getCookie("prods") != 0 && getCookie("boxes") == 0)
		{
			
			if (catId == 14 || catId == 15)
				imgOrder.className = "hidden";
			else
			{
				imgOrder.src = "images/btn_chooseboxtype.gif";
				imgOrder.width = 221;
				imgOrder.height = 59;
			}
		}
		else
			imgOrder.className = "hidden";
		}
		//alert(el('orderBtn').className);
	}
	if (getCookie('activeOrder') != 0)
	{
		
		activeOrder = true;
		if(currbox){
			cbox = getBox(currbox);
			inbasket = cbox['inbasket'];
			if (sumItems(order) > 0) showOrderBtn('show');
			if (sumItems(order) == inbasket) el('orderBtn').className = 'show';
			else el('orderBtn').className = 'hidden';
			//el('boxSelection').className = 'show';

			var imgOrder = document.getElementById("order_img");
			var catId = el('cat_id').value;
			var imgOrderA = el("orderImgA");
			imgOrderA.href = "index.php?page_id=6#boxesImg";
			if (getCookie("prods") != 0 && getCookie("boxes") == 0)
			{
			
				if (catId == 14 || catId == 15)
					imgOrder.className = "hidden";
				else
				{
					imgOrder.src = "images/btn_chooseboxtype.gif";
					imgOrder.width = 221;
					imgOrder.height = 59;
				}
			}
			else
				imgOrder.className = "hidden";
		
			//info.alert("cat id: " + catId);
			var opr = null;
			if (catId == 14 || catId == 15)
			{
				opr = new OtherProds();
			}
		
			if (getCookie("prods") != 0)
			{
				info.alert("here");
				cart = new Cart();
				cart.init();
			}
		}
		
	}//if
				
		var newbox = getCookie('newbox');
		if (newbox != 0)
		{
			setCookie('newbox', '0');
		}
	//info.alert('Class name: ' + document.forms[1][2].className);
		showAllForms();
		var boxes = getBoxes();
		if (document.forms[1] != null && boxes != 0)
		{
			if (boxes.length > 1) 
			{	
				el('boxSelection').className = 'show';
				el('bselLabel').className = 'show';
				el('bSel').className = 'show';
				if (document.all.deleteBoxBtn.className == 'hidden')
					document.all.deleteBoxBtn.className = 'show';
			}
			buildSelect(0, boxes);
		}
	
		 
}//initOrder

function showAllForms()
{
	var forms = document.forms;
	var len = forms.length;
	var str = "";
	for (i=0; i<len; i++)
	{
		str += i + ": " + forms[i].id + "\n";
	}
	//info.alert("forms: " + unescape(str)); 
}//showAllForms

function showOrder()
{
	var orderForm = el('doOrder');
	orderForm['req'].value = setRequest();
	//alert(orderForm['req'].value);
	return true;
}//showOrder

function show(id)
{
	var obj = document.all[id];
	if (obj.className == 'hidden') obj.className = 'show';
	else obj.className = 'hidden';
}//show

function showOrderBtn(name)
{
	//var btn = document.all['orderBtn'];
	var txt = document.all['orderBtnTxt'];
	//var header = document.getElementById('boxSelHeader');
	//btn.className = name;
	//alert(name);
	if(txt)
	txt.className = name;
	//header.className = name;
}//showOrderBtn

//sets flexion in accordance with number
//takes a number, word's base and array of flexions: [singular, plural, plural genitive]
function setFlexion(number, base, flexions)
{
	var num = "" + number;
	if (num.charAt(num.length-1) == '1' && num != '11') return base + flexions[0]; //1 saldain-is
	else if (num.charAt(num.length-1) == '0') return base + flexions[2];//10 saldainiu
	else if (number > 10 && number < 20) return base + flexions[2];//12 saldainiu
	else return base + flexions[1];//9 saldainiai
}//setFlexion

function el(id)
{
	var elem = document.getElementById(id);
	if (elem != null) return elem;
	else return null;
}//el

function deleteBox()
{
	var boxes = document.all['boxesSelect'];
	var index = boxes.selectedIndex;
	var len = boxes.length;
	var boxname = boxes.options[index].value;
	boxes.options[index] = null;
	boxes.options[0].selected = true;
	if (boxes.length == 1) 
	{
		document.all.deleteBoxBtn.className = "hidden";
		el('bselLabel').className = 'hidden';
		el('bSel').className = 'hidden';
	}
	var boxlist = getBoxes();
	var length = boxlist.length;
	for (i=0; i<length; i++)
	{
		if (boxlist[i] == boxname)
			boxlist[i] = 0;
	}
	var cleanArr = rearrangeArr(boxlist);
	setBoxes(cleanArr);
	updateSelects(boxes);
}//deleteBox

function removeBox(boxname)
{
	var boxlist = getBoxes();
	var length = boxlist.length;
	for (i=0; i<length; i++)
	{
		if (boxlist[i] == boxname)
			boxlist[i] = 0;
	}
	var cleanArr = rearrangeArr(boxlist);
	setBoxes(cleanArr);
}//removeBox
				
function createBox()
{
	var boxes = document.all['boxesSelect'];
	var len = boxes.length;
	cntBoxes++;
	var dezeesc = " d\u0117\u017E\u0117";
	var deze = unescape(dezeesc);
	boxes.options[len] = new Option(cntBoxes + deze, cntBoxes);
	if (document.all.deleteBoxBtn.className == "hidden") document.all.deleteBoxBtn.className = "show";
}//createBox

function newBox()
{
	setCookie('newbox', '1');
	var cnt = parseInt(getCookie('boxcounter'));
	if (cnt == 0) cnt = 1; //if there was no mark, this is a first box, that is created by default
	cnt++; //and a second box is created now
	setCookie('boxcounter', cnt);
	setCookie('currbox', 'box'+cnt);
	var boxes = new Array();
	var len;
	if (cnt >= 2)
	{
		boxes = getBoxes();
		len = boxes.length;
	}
	else len = 0;
	boxes[len] = 'box'+cnt;
	setBoxes(boxes);
	document.all.frmBoxes.submit();
}//newBox

function getBoxNumber(str)
{
	var i = 3;
	var codeZero = 48;
	var codeNine = 57;
	var num = "";
	for (i; i>0; i--)
	{
		var tmp = str.charAt(str.length - i);
		if (tmp.charCodeAt() >= codeZero && tmp.charCodeAt() <= codeNine)
			num += tmp;
	}
	return num;
	
}//getBoxNumber

function buildSelect(name, arr)
{
	var obj;
	if (document.forms[name] != null)
		obj = document.forms[name][0];
	//info.alert("Forms[name]: " + document.forms[name][0].options.length);
	//delete all options 
	//info.alert("IsSelects: " + obj.options);
	if (obj.options != null)
	{
		obj.options.length = 0;
		var currbox = getCookie('currbox');
		var len = arr.length;
		var dezeesc = "d\u0117\u017E\u0117 ";
		var deze = unescape(dezeesc);
		for (i=0; i<len; i++)
		{
			obj.options[i] = new Option(deze + getBoxNumber(arr[i]), arr[i]);
			if (arr[i] == currbox)
				obj.options[i].selected = true;
		}//for
	}//if
}//buildSBoxes

function updateSelects(obj)
{
	var boxname = obj.options[obj.selectedIndex].value;
	var boxarr = getBox(boxname);
	var amount = boxarr['inbasket'];
	inbasket = amount;
	delete boxarr['inbasket'];
	setCookie('currbox', boxname);
	currbox = boxname;
	order = getBox(currbox);
	var cidfield = document.getElementById("cat_id");
	//alert("cat_id: " + cidfield.value);
	if ((cidfield.value == 14) || (cidfield.value == 15))
		window.location = "index.php?page_id=8";
	var len = document.forms.length;
	var forms = new Array();
	var j = 0;
	var str = '';
	for (i=0; i<len; i++)
	{
		if (document.forms[i].id.indexOf('candy') != -1)
		{
			forms[j] = document.forms[i];
			j++;
		}	
	}//for
	len = forms.length;
	for (i=0; i<len; i++)
	{
		var res = contents(boxarr, forms[i].id);
		var mform = forms[i];
		mform[0].options.length = 0;
		mform[0].options.length = parseInt(amount)+1;
		for (v=0; v<=amount; v++)
		{
			mform[0].options[v].text = v;
			mform[0].options[v].value = v;
		}//for
		if (res)
		{
			var prodName = forms[i].id;
			var index = boxarr[prodName];
			mform[0].options[index].selected = true;
		}//if
	}//for
	
	sum_basket.innerHTML = sumItems(order) + " " + setFlexion(sumItems(order), 'saldain', flexions) + unescape(' i\u0161 ') + inbasket;
}//updateSelects

function contents(arr, elem)
{
	for (var name in arr)
	{
		if (name == elem) return 1;
	}//for
	return 0;
}//contents

function rearrangeArr(arr)
{
	var len = arr.length;
	var tmp = new Array();
	var j = 0;
	for (i=0; i<len; i++)
	{
		if (arr[i] != 0)
		{
			tmp[j] = arr[i];
			j++;
		}
	}
	//info.alert("Rearrange: " + combine(tmp, ','));
	return tmp;
}//rearrangeArr

function boxesFull()
{
	var boxes = getBoxes();
	var blen = boxes.length;
	var flag = false;
	for (var i=0; i<blen; i++)
	{
		var content = getBox(boxes[i]);
		var amount = parseInt(content['inbasket']);
		delete content['inbasket'];
		var sum = sumItems(content);
		if (sum == amount) flag = true;
		else return false; //if just one pair is not equal, return false
	}
	return flag;
}//boxesFull

//forms request to another page
//boxes=box1,box2;box1=candy1=1,candy2=3;...
function setRequest()
{	var request = "";
	var boxes = getCookie('boxes');
	if (boxes != 0)
		request += "boxes=" + boxes + ";";
	var boxlist = getBoxes();
	
	var blen = (boxlist==0)? 0 : boxlist.length;
	for (var i=0; i<blen; i++)
		{
			var content = getCookie(boxlist[i]);
			var chopped = content.substring(0, content.length - 1); //chops the last comma
			if (i != (blen-1))
				request += boxlist[i] + "=" + chopped + ';';
			else 
				request += boxlist[i] + "=" + chopped; //the last item goes with no divider
		}
	var semicolon = (blen==0) ? "" : ";";
	var req = "";
	if (cart)
	{
		var prods = "prods=" + getCookie('prods') + ';';
		for (var type in cart.types)
		{
			if (cart.types[type] > 0)
				prods += type + '=' + getCookie(type) + ';';
		}
		prods = prods.substr(0, prods.length-1);//omits the last ;
		request += semicolon + prods;
	}//if cart

	return request;
}//setRequest

///////////////////////////////////////////////////////
//class OtherProds
///////////////////////////////////////////////////////
function initOPEls(id)
{
	var tbl = document.createElement("table");
	//first line
	var tr = document.createElement("tr");
	var td = document.createElement("td");
	td.className = "otherProds";
	var textNode = document.createTextNode("Kiekis: ");
	td.appendChild(textNode);
	tr.appendChild(td);
	td = document.createElement("td");
	td.id = id;
	var input = document.createElement("input");
	input.id = "quantity";
	input.type = "text";
	input.className = "ph_frm";
	input.style.width = "30px";
	input.style.fontSize = "11px";
	input.maxlength = "3";
	input.value = 0;
	//input.onkeyup = "updateCart(this)";
	td.appendChild(input);
	tr.appendChild(td);
	tbl.appendChild(tr);
	//second line
	if (this.catId == 14)
	{
		tr = document.createElement("tr");
		td = document.createElement("td");
		td.className = "otherProds";
		textNode = document.createTextNode("Masė:");
		td.appendChild(textNode);
		tr.appendChild(td);
		td = document.createElement("td");
		td.id = id;
		var select = document.createElement("select");
		select.id = "mass";
		select.style.fontSize = "11px";
		//select.onchange = "updateCart(this)";
		var data = new Array(0.9, 1.3, "Kita");
		for (var i=0; i<data.length; i++)
		{
			select.options[i] = new Option(data[i], data[i]);
		}
		select.onchange = "displayWarning(this)";
		td.appendChild(select);
		tr.appendChild(td);
		tbl.appendChild(tr);
	}
	//third line
	tr = document.createElement("tr");
	td = document.createElement("td");
	td.align = "center";
	td.colspan = "2";
	td.id = id;
	var btn = document.createElement("input");
	btn.type = "button";
	btn.className = "btn";
	btn.value = "Pridėti";
	btn.onclick = "addProd(this)";
	td.appendChild(btn);
	tr.appendChild(td);
	tbl.appendChild(tr);
	//forth line
	/*tr = document.createElement("tr");
	td = document.createElement("td");
	td.align = "center";
	td.colspan = "2";
	td.id = id;
	var btn = document.createElement("input");
	btn.type = "button";
	btn.className = "btn";
	btn.value = "Pakeisti";
	btn.onclick = "updateCart(this)";
	td.appendChild(btn);
	tr.appendChild(td);
	tbl.appendChild(tr);
	//fifth line
	tr = document.createElement("tr");
	td = document.createElement("td");
	td.align = "center";
	td.colspan = "2";
	td.id = id;
	var btn = document.createElement("input");
	btn.type = "button";
	btn.className = "btn";
	btn.value = "Trinti";
	btn.onclick = "removeProd(this)";
	td.appendChild(btn);
	tr.appendChild(td);
	tbl.appendChild(tr);*/
	
	return tbl;
}//initOPEls

function getFormEls()
{
	var frms = document.forms;
	var flen = frms.length;
	var f = new Array();
	var j = 0;
	for (var i=0; i<flen; i++)
	{
		if(frms[i].id.indexOf("candy") != -1)
		{
			f[j] = frms[i];
			j++;
		}
	}
	return f;
}//getFormEls

function OtherProds()
{
	this.getForms = getFormEls;
	this.initEls = initOPEls;
	this.catId = el("cat_id").value;
	//alert(this.catId);
	this.forms = this.getForms();
	this.length = this.forms.length;

	var tbl = null;
	for (var i=0; i<this.length; i++)
	{
		tbl = this.initEls(this.forms[i].id);
		this.forms[i].innerHTML = "";
		var div = document.createElement("div");
		div.appendChild(tbl);
		this.forms[i].innerHTML = div.innerHTML;
		info.alert(div.innerHTML);
	}
	info.alert(document.cookie);
}//OtherProds

//////////////////////////////////
//Product class
//////////////////////////////////
var types = new Array();
types[14] = "cakes";
types[15] = "sweets";

function echoProd()
{
	var str = this.prodId + "=" + this.values[0];
	if (this.type == "cakes")
		str += "&" + this.values[1];
	return str;
}//echoProd

function initFromFrame(frm)
{
	this.prodId = frm.id.replace(/candy(\w+$)/, "$1");
	this.name = frm.title;
	var catId = el("cat_id").value;
	this.type = types[catId];
	this.values[0] = frm.quantity.value;
	if (frm.mass != null)
		this.values[1] = getSelectValue(frm.mass);
}//initFromFrame

function initProduct(attrs)
{
	this.prodId = attrs['id'];
	this.type = attrs['type'];
	this.values[0] = attrs['quantity'];
	if (attrs['mass'] != null)
		this.values[1] = attrs['mass'];
}//initProduct

function Product()
{
	this.id = null;
	this.prodId = null;
	this.name = "";
	this.type = "";
	this.values = new Array();
	this.toString = echoProd;
	if (Product.arguments.length == 1)
	{
		this.init = initFromFrame;
		this.init(Product.arguments[0]);
	}
	else
		this.init = initProduct;
}//Product

//////////////////////////////////
//Cart class
//////////////////////////////////
function addToCart(prod)
{
	if (prod.values[0] == 0)
	{
		alert("Jūs nepasirinkote kiekio.");
		return;
	}
	if (prod.values[1] != null && prod.values[1] == "Kita")
	{
		alert("Kitus svorius galite užsisakyti tik telefonu.");
		return;
	}
	var flag = false;
	for (var i=0; i<this.curId; i++)
	{
		//if product is in the cart
		if (this.products[i] != null && this.products[i].prodId == prod.prodId)
		{
			//product is a cake and there is a that mass product in the cart
			if (prod.type == "cakes" && this.products[i].values[1] == prod.values[1])
			{
				//update that product by adding its quantity
				this.products[i].values[0] = parseInt(this.products[i].values[0]) 
					+ parseInt(prod.values[0]);
				flag = true;
			}
			//if product is a sweet, just add its quantity
			else if (prod.type == "sweets")
			{
				this.products[i].values[0] = parseInt(this.products[i].values[0]) 
					+ parseInt(prod.values[0]);
				flag = true;
			}
		}
	}//for
	if (flag) return;
	prod.id = this.curId;
	this.products[this.curId] = prod;
	this.types[prod.type] += 1;

	this.curId++;
}//addToCart

function updateCart(prod)
{
	var id = prod.id;
	this.products[id] = prod;
}//updateCart

function removeFromCart(prod)
{
	var id = prod.id;
	this.products[id] = null;
}//removeFromCart

function getArrayFromCookie(name, divider)
{
	var arr = new Array();
	var tmp = new Array();
	var modifier = null;
	if (getArrayFromCookie.arguments.length == 3)
		modifier = 0;
	else modifier = 1;
	var orderString = getCookie(name);
	if (orderString == 0) {return 0;}
	var splitted = orderString.split(divider);
	info.alert(splitted);
	return splitted;
}

function parseProds(str, dividers)
{
	//string to parse "000=00&00" for instance
	//dividers "=" and "&"
	//first token is 000, the second "00&00" and so on
	var dlen = dividers.length;
	var tokens = new Array();
	for (var i=0; i<dlen; i++)
	{
		var arr = str.split(dividers[i]);
		tokens[i] = arr[0];
		str = arr[1];
		if (i == (dlen-1))
			tokens[i+1] = str;
	}
	return tokens;
}//parseProds

function setProdTypes(prodtype)
{
	var prods = getArrayFromCookie(prodtype, ',', 1);
	info.alert("prodtype: " + prodtype);
	if (prodtype == "sweets")
	{
		for (var i=0; i<prods.length; i++)
		{
			var res = parseProds(prods[i], new Array("="));
			var attrs = new Array();
			attrs['id'] = res[0];
			attrs['quantity'] = res[1];
			attrs['type'] = prodtype;
			var product = new Product();
			product.init(attrs);
			info.alert("attrs[quantity]: " + attrs['quantity']);
			this.add(product);
		}
	}
	else if (prodtype == "cakes")
	{
		for (var i=0; i<prods.length; i++)
		{
			var res = parseProds(prods[i], new Array("=", "&"));
			var attrs = new Array();
			attrs['id'] = res[0];
			attrs['quantity'] = res[1];
			attrs['mass'] = res[2];
			attrs['type'] = prodtype;
			var product = new Product();
			product.init(attrs);
			this.add(product);
		}
	}
}//setProdTypes

function setCartFromCookie()
{
	var prods = getArrayFromCookie("prods", ',', 1);
	info.alert("prods.length: " + prods.length);
	for (var i=0; i<prods.length; i++)
		this.setTypes(prods[i]);
	var idstr = getProdNames(this);
	loadXMLDoc("getnames.php?id=" + idstr);
}//setCartFromCookie

function setNameById(id, name)
{
	var len = this.products.length;
	for (var i=0; i<len; i++)
	{
		if (this.products[i].prodId == id)
			this.products[i].name = name;
	}
}//setNameById

function Cart()
{
	this.products = new Array();
	this.curId = 0;
	this.add = addToCart;
	this.update = updateCart;
	this.remove = removeFromCart;
	this.types = new Array();
	this.types["cakes"] = 0;
	this.types["sweets"] = 0;
	this.init = setCartFromCookie;
	this.setTypes = setProdTypes;
	this.setName = setNameById;
	this.getLength = function()
	{
		return this.types["cakes"] + this.types["sweets"];
	}
}//cart

//////////////////////////////////
//Cart functions
//////////////////////////////////
var cart = null;
var cf = null;
function updateCart(obj)
{
	var parent = obj.parentElement ? obj.parentElement : obj.parentNode;
	var prodId = parent.id.replace(/candy(\w+$)/, "$1");
	var input = new Input(obj);
	var value = input.value;
	info.alert(value);
}//updateCart

function addProd(obj)
{
	var parent = obj.parentElement ? obj.parentElement : obj.parentNode;
	//var prodId = parent.id.replace(/candy(\w+$)/, "$1");
	var frm = document.forms[parent.id];
	if (!isNumber(frm.quantity))
	{
		frm.quantity.focus();
		return;
	}
	el('orderBtn').className = 'show';
	showOrderBtn('show');
	var prod = new Product(frm);
	if (cart == null)
		cart = new Cart();
	cart.add(prod);
	if (cf == null)
		cf = new Cartframe();
	cf.paint(cart);
	info.alert(prod.name);
}//addProd

//////////////////////////////////
//Input class
//////////////////////////////////
function getSelectValue(obj)
{
	var selected = obj.selectedIndex;
	return obj.options[selected].value;
}//getSelectValue

function Input(obj)
{
	this.value;
	this.getSelected = getSelectValue;
	var tagName = obj.tagName;
	if (tagName == "INPUT")
		this.value = obj.value;
	else if (tagName = "SELECT")
		this.value = this.getSelected(obj);
}//Input

//////////////////////////////////
//Cartframe class
//////////////////////////////////
function createFrame(cart, type)
{
	var frame = document.createElement("SPAN");
	var header = document.createElement("DIV");
	header.className = type + "header";
	header.onclick = "toggleDisplayMode(this)";
	frame.appendChild(header);
	//this.destination.appendChild(cakeheader);
	var cartframe = document.createElement("DIV");
	cartframe.className = "cartframe";
	var len = cart.curId;
	for (var i=0; i<len; i++)
	{
		if (cart.products[i] == null) continue;
		if (cart.products[i].type != type) continue;
		var prodname = document.createElement("DIV");
		prodname.className = "prodname";
		prodname.onclick = "toggleDisplayMode(this)";
		prodname.onmouseover = "toggleHighlight(this)";
		prodname.onmouseout = "toggleHighlight(this)";
		var name = document.createTextNode("- " + cart.products[i].name);
		prodname.appendChild(name);
		var cartframedata = document.createElement("DIV");
		cartframedata.className = "cartframedata";
		if (type == "cakes")
		{
			var mass = document.createElement("DIV");
			var masstext = document.createTextNode("Svoris: " + cart.products[i].values[1]);
			mass.appendChild(masstext);
		}
		var quantity = document.createElement("DIV");
		var quantitytext = document.createTextNode("Kiekis: " + cart.products[i].values[0]);
		quantity.appendChild(quantitytext);
		var btnAdd = document.createElement("DIV");
		btnAdd.className = "cartframebtn";
		btnAdd.onclick = "addItem(" + cart.products[i].id + ")";
		var btnAddTitle = document.createTextNode("Pridėti 1");
		btnAdd.appendChild(btnAddTitle);
		var btnSub = document.createElement("DIV");
		btnSub.className = "cartframebtn";
		btnSub.onclick = "subItem(" + cart.products[i].id + ")";
		var btnSubTitle = document.createTextNode("Trinti 1");
		btnSub.appendChild(btnSubTitle);
		/*var btnDelete = document.createElement("DIV");
		btnDelete.className = "cartframebtn";
		btnDelete.onclick = "deleteItem(" + cart.products[i].id + ")";
		var btnDeleteTitle = document.createTextNode("Trinti");
		btnDelete.appendChild(btnDeleteTitle);*/
		if (type == "cakes")
			cartframedata.appendChild(mass);
		cartframedata.appendChild(quantity);
		cartframedata.appendChild(btnAdd);
		cartframedata.appendChild(btnSub);
		//cartframedata.appendChild(btnDelete);
		cartframe.appendChild(prodname);
		cartframe.appendChild(cartframedata);
		//info.alert(cakeheader.innerHTML + cartframe.innerHTML);
	}
	frame.appendChild(cartframe);
	return frame;
}//createFrame

function selectFrames(cart)
{
	if(cart.getLength() > 0)
		if (getBoxes() == 0)	
			el('orderBtn').className = 'show';
		else if (boxesFull())
			el('orderBtn').className = 'show';
		else
			el('orderBtn').className = 'hidden';
	else if (getBoxes() != 0)
	{
		if(boxesFull())
			el('orderBtn').className = 'show';
		else 
			el('orderBtn').className = 'hidden';
	}
	else 
		el('orderBtn').className = 'hidden';
	//alert("product amount: " + cart.getLength());
	this.destination.innerHTML = "";
	var len = cart.types.length;
	for (var type in cart.types)
	{
		if (cart.types[type] != 0)
			this.destination.innerHTML += this.formFrame(cart, type).innerHTML;
	}
	this.addCookie(cart);
}//selectFrames

function addToCookie(cart)
{
	var prodtypescookiename = "prods";
	var prodtypescookievalue = "";
	var len = cart.types.length;
	for (var type in cart.types)
	{
		if (cart.types[type] != 0)
		{
			prodtypescookievalue += type + ",";
			var cookiename = type;
			var cookievalue = "";
			var clen = cart.curId;
			for (var i=0; i<clen; i++)
			{
				if (cart.products[i] != null && cart.products[i].type == type)
				{
					cookievalue += cart.products[i].toString() + ",";
				}
			}
			cookievalue = cookievalue.substr(0, cookievalue.length-1);
			info.alert(cookievalue);
			setCookie(cookiename, cookievalue);
		}
	}
	prodtypescookievalue = prodtypescookievalue.substr(0, prodtypescookievalue.length-1); //omits the last comma
	setCookie(prodtypescookiename, prodtypescookievalue);
	info.alert(document.cookie);
}//addToCookie

function Cartframe()
{
	this.destination = el("opro");
	this.paint = selectFrames;
	this.formFrame = createFrame;
	this.addCookie = addToCookie;
}//Cartframe

function addItem(id)
{
	cart.products[id].values[0] = parseInt(cart.products[id].values[0]) 
		+ 1;
	cf.paint(cart);
}//addItem

function subItem(id)
{
	if (cart.products[id].values[0] == 1)
		deleteItem(id);
	else 
		cart.products[id].values[0] = parseInt(cart.products[id].values[0]) - 1;
	cf.paint(cart);
}//addItem

function deleteItem(id)
{
	var type = cart.products[id].type;
	cart.types[type] -= 1;
	cart.products[id] = null;
	cf.paint(cart);
}//deleteItem

function toggleDisplayMode(obj)
{
		var next = obj.nextSibling;
		//info.alert(next.id);
		while(next.nodeName != "DIV")
		{
			//info.alert(next.className);
			next = next.nextSibling;
		}
		if (next.style.display == "")
			next.style.display = "none";
		else
			next.style.display = "";
}//toggleDisplayMode

function toggleHighlight(obj)
{
	if (obj.style.textDecoration != "underline")
		obj.style.textDecoration = "underline";
	else if (obj.style.textDecoration == "underline")
		obj.style.textDecoration = "";
}//toggleHighlight

/////////////////////////////////////////////
//class DisplayInfo
/////////////////////////////////////////////
function doAlert(str)
{
	if (this.echo)
		alert(str);
}//doAlert

function DisplayInfo(flag)
{
	this.echo = flag;
	this.alert = doAlert;
}//DisplayInfo


////////////////////////////////////////////
//isNumber function
function isNumber(elem)
{
	var str = elem.value;
	var oneChar = 0;
	// make sure value hasn't cast to a number data type
	str = str.toString();
	for (var i=0; i<str.length; i++)
	{
		oneChar = str.charAt(i).charCodeAt(0);
		// characters outside of 0 through 9 not OK
		if (oneChar < 48 || oneChar > 57)
		{
			alert("Lauke turi būti tik skaičiai.");
			//elem.focus();
			return false;
		}
	}//for
	return true;
}//isNumber



////////////////////////////////////////////
//XML functions
////////////////////////////////////////////
var xmlhttp = null;
var xmlAns = null;
function loadXMLDoc(url)
{
// code for Mozilla, etc.
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest()
  xmlhttp.onreadystatechange=xmlhttpChange
  xmlhttp.open("POST",url,true)
  xmlhttp.send(null)
  }
// code for IE
else if (window.ActiveXObject)
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
    if (xmlhttp)
    {
    xmlhttp.onreadystatechange=xmlhttpChange;
    xmlhttp.open("POST",url,true);
    xmlhttp.send();
    }
  }
}

function xmlhttpChange()
{
// if xmlhttp shows "loaded"
if (xmlhttp.readyState==4)
  {
  // if "OK"
  if (xmlhttp.status==200)
    {
	    // ...some code here...
	    setProductsNames();
	    //loadXML(xmlAns);
    }
  else
    {
    	alert("Problem retrieving XML data: " + xmlhttp.statusText)
    }
  }
}

var xmlDoc = null;
function loadXML(xmlAns)
{
	//load xml file
	// code for IE
	if (window.ActiveXObject)
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async=false;
		//alert("here");
		xmlDoc.load(xmlAns);
		getmessage();
	}
	// code for Mozilla, etc.
	else if (document.implementation &&
	document.implementation.createDocument)
	{
		xmlDoc= document.implementation.createDocument("","",null);
		xmlDoc.load(xmlAns);
		xmlDoc.onload=getmessage
	}
	else
	{
		alert('Your browser cannot handle this script');
	}
}
var prodnames = new Array();
function getmessage()
{
	//var elem = document.getElementById("main");	
	var namearr = xmlhttp.responseXML.getElementsByTagName("name");
	//alert(xmlAns);
	//alert(namearr.length);
	var idarr = xmlhttp.responseXML.getElementsByTagName("id");
	var len = namearr.length;
	var str = "";
	for (var i=0; i<len; i++)
	{
		prodnames[idarr[i].firstChild.nodeValue] = namearr[i].firstChild.nodeValue;
		str += idarr[i].firstChild.nodeValue + "=" + namearr[i].firstChild.nodeValue;
	}
	//alert(str);
	//elem.innerHTML = str;
}//getmessage

function getProdNames(mcart)
{
	var ids = new Array();
	var len = mcart.products.length;
	for (var i=0; i<len; i++)
	{
		if (mcart.products[i] != null)
			ids[mcart.products[i].prodId.toString()] = 0;
	}
	var idstr = "";
	for (var id in ids)
		idstr += id + ',';
	idstr = idstr.substr(0, idstr.length-1); //omits the last comma
	//alert("getnames.php?id=" + idstr);
	return idstr;
	//loadXML();
	
	
	//alert(" res: " + str);
}//getProdNames

function setProductsNames()
{
	var namearr = xmlhttp.responseXML.getElementsByTagName("name");
	//alert("res: " + xmlhttp.responseText);
	//alert(namearr.length);
	var idarr = xmlhttp.responseXML.getElementsByTagName("id");
	var len = namearr.length;
	var str = "";
	for (var i=0; i<len; i++)
	{
		prodnames[idarr[i].firstChild.nodeValue] = namearr[i].firstChild.nodeValue;
		str += idarr[i].firstChild.nodeValue + "=" + namearr[i].firstChild.nodeValue;
	}
	
	var str = "";
	if (cart)
		mcart = cart;
	for (var id in prodnames)
	{
		mcart.setName(id, prodnames[id]);
		str += id + "=" + prodnames[id];
	}
	//alert(str);
	if (cf == null)
		cf = new Cartframe();
	cf.paint(cart);
}//setProductsNames

function displayWarning(obj)
{
	var select = new Input(obj);
	var str = select.value;
	//alert(str);
	if (str == "Kita")
		alert("Norėdami užsisakyti tortą pagal savo pageidaujamą svorį, turite skambinti telefonu 8-655 31143.");
}//displayWarning

