function ShoppingList()
{
	var url = /*VIPURL*/"/Global/Applications/ShoppingList.jsp";
	
	this.addArticle = function(articlekey, cat)
	{
		var cookie = new Cookie("kaufland_shoppinglist_" + cat, "/");
		var added = false;
		
		if(!cookie.containsValueRegex( "\\d+#" + encodeURIComponent(articlekey)))
			added = cookie.addValueOnce("1#" + encodeURIComponent(articlekey));

		if(document.getElementById("shoppinganz") && added)
		{
			var anz = parseInt(document.getElementById("shoppinganz").innerHTML);
			if(isNaN(anz))
				anz = 0;
			document.getElementById("shoppinganz").innerHTML = anz + 1;
			if(anz == 0)
			{
				document.getElementById("shoppingtext").innerHTML = "&nbsp;" + i18n.getText("inter_shoppinglist_text1_3");
				document.getElementById("shoppingtext").className = "red";
			}
		}
		showConfirmLayer(added, false);
	}	
	
	this.addNote = function(articlekey, cat)
	{
		var cookie = new Cookie("kaufland_shoppinglist_" + cat, "/");
		if(articlekey != null && articlekey.value != null && articlekey.value.length > 0 && !cookie.containsValueRegex( "\\d+#" + articlekey.value))
		{
			var table = document.getElementById("NotesTable");
			var tbody = null;
			var childs = table.childNodes;
			
			for(var i=0; i < childs.length; i++)
			{
				if(childs[i].nodeName.toLowerCase() == "tbody")
				{
					tbody = childs[i];
					break;
				}
			}
			
			var num = table.getElementsByTagName("tr").length;
			
			var tr = document.createElement("tr");
			tr.className="article last";
			tr.id = encodeURIComponent(articlekey.value);
			
			var td = document.createElement("td");
			td.className = "number";
			td.innerHTML = "1";
			tr.appendChild(td);
			
			td = document.createElement("td");
			td.className = "numberbuttons";
			
			var a = document.createElement("a");
			a.className = "article_plus";
			a.href = "?articlekey=" + encodeURIComponent(articlekey.value) + "&shoppinglistaction=plus";
			a.onclick = new Function("shoppinglist.doAction(this,'n'); return false;");
			td.appendChild(a);
			
			a = document.createElement("a");
			a.className = "article_minus_grey";
			td.appendChild(a);
			tr.appendChild(td);
			
			td = document.createElement("td");
			td.className = "spacer";
			td.innerHTML = "&nbsp;";
			tr.appendChild(td);
			
			td = document.createElement("td");
			td.className = "articledescription";
			td.appendChild(document.createTextNode(articlekey.value));
			tr.appendChild(td);
			
			td = document.createElement("td");
			td.className = "spacer";
			td.innerHTML = "&nbsp;";
			tr.appendChild(td);
			
			td = document.createElement("td");
			td.className = "position";
			
			if(num == 1)
			{
				a = document.createElement("a");
				a.className = "arrow_up_grey";
				td.appendChild(a);
			}
			else
			{
				a = document.createElement("a");
				a.className = "arrow_up";
				a.href = "?articlekey=" + encodeURIComponent(articlekey.value) + "&shoppinglistaction=up";
				a.onclick = new Function("shoppinglist.doAction(this,'n'); return false;");
				td.appendChild(a);
			}
			
			a = document.createElement("a");
			a.className = "arrow_down_grey";
			td.appendChild(a);
			tr.appendChild(td);
			
			td = document.createElement("td");
			td.className = "trash";
			
			a = document.createElement("a");
			a.className = "trash";
			a.href = "?articlekey=" + encodeURIComponent(articlekey.value) + "&shoppinglistaction=delete";
			a.onclick = new Function("shoppinglist.doAction(this,'n'); return false;");
			td.appendChild(a);
			tr.appendChild(td);
			
			if(tbody != null)
				tbody.appendChild(tr);
			else
				table.appendChild(tr);
			
			if(num != 1)
			{
				table.getElementsByTagName("tr")[num - 1].className = "article";
				if(num >= 3)
					setPositionAtrributes(table.getElementsByTagName("tr")[num - 1], cat, 2);
				else
					setPositionAtrributes(table.getElementsByTagName("tr")[num - 1], cat, 1);
			}
			
			document.getElementById("Notes").style.display = "block";
			document.getElementById("ShoppingListError").style.display = "none";
			
			var cookie = new Cookie("kaufland_shoppinglist_n", "/");
			cookie.addValue("1#" + encodeURIComponent(articlekey.value));
			
			if(document.getElementById("shoppinganz"))
			{
				var anz = parseInt(document.getElementById("shoppinganz").innerHTML);
				if(isNaN(anz))
					anz = 0;
					document.getElementById("shoppinganz").innerHTML = anz+1;
				if(anz == 0)
				{
					document.getElementById("shoppingtext").innerHTML = "&nbsp;" + i18n.getText("inter_shoppinglist_text1_3");
					document.getElementById("shoppingtext").className = "red";
				}
			}
			// Empty note input field 
			document.getElementById("articlekey").value = "";
		}
		else
		{
			showConfirmLayer(false, true);
		}
	}
	
	this.doAction = function(element, category)
	{
		/*
		var req = getXMLHttpRequest();
		req.open("POST", url + element.href.substring(element.href.indexOf("?")), false);
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
		req.send(null);
	    
	    var result = req.responseText.substring(req.responseText.indexOf("<body>")+6, req.responseText.indexOf("</body>"));
	    document.getElementById("LayerContent").innerHTML = result;
	    */
		
		var params = getUrlParams(element.href);
		var cookie = new Cookie("kaufland_shoppinglist_" + category, "/");
		
		if(params["shoppinglistaction"] == "plus")
			plusminus(1, element, params, cookie);
		else if(params["shoppinglistaction"] == "minus")
			plusminus(-1, element, params, cookie);
		else if(params["shoppinglistaction"] == "up")
			updown(1, element, params, cookie, category);
		else if(params["shoppinglistaction"] == "down")
			updown(-1, element, params, cookie, category);
		else if(params["shoppinglistaction"] == "delete")
			deleteA(element, params, cookie, category);
		
	}
	
	this.showShoppingList = function()
	{
		var req = getXMLHttpRequest();
		req.open("POST", url, false);
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
	    req.send(null);
	    
	    var result = req.responseText.substring(req.responseText.indexOf("<body>")+6, req.responseText.indexOf("</body>"));
	    var div = document.createElement("div");
	    div.id = "LayerContent";
	    div.innerHTML = result;
		var shoppinglistlayer = new Layer();
		shoppinglistlayer.setRedline(false);
		shoppinglistlayer.showContentAsLayer(div, true, i18n.getText("inter_your_shoppinglist"), "");
	}
	
	var showConfirmLayer = function(added, note)
	{
		var div = document.createElement("div");
		div.style.width = "422px";
		div.style.height = "76px";
		div.style.paddingTop = "5px";
		div.style.paddingBottom = "5px";
		
		var layer = new Layer();
		var table = document.createElement("table");
		var tbody = document.createElement("tbody");
		var tr = document.createElement("tr");
		var td = document.createElement("td");
		var tmp = document.createElement("img");
		tmp.src = /*VIPURL*/"/Global/Pictures/pic_shoppinglist_uni.jpg";
		td.appendChild(tmp);
		tr.appendChild(td);
		
		var heading = "";
		if (note) {
			heading = i18n.getText("inter_article_note_exists");
		} else {
			heading = (added) ? i18n.getText("inter_article_added") : i18n.getText("inter_article_exists");
		}

		td = document.createElement("td");
		td.style.verticalAlign = "top";
		
		tmp = document.createElement("div");
		tmp.className = "content5";
		tmp.innerHTML = heading;
		td.appendChild(tmp);
		
		tmp = document.createElement("div");
		tmp.className = "spacer10px";
		td.appendChild(tmp);
		
		td.appendChild(document.createTextNode(i18n.getText("inter_article_confirm_1") + " "));
		if (note) {
			td.appendChild(document.createTextNode(i18n.getText("inter_shoppinglist")));
		} else {
			var a = document.createElement("a");
			a.className = "inlinelink";
			a.href = url;
			a.onclick = function(){layer.close(); shoppinglist.showShoppingList(); return false;};
			a.appendChild(document.createTextNode(i18n.getText("inter_shoppinglist")));
			td.appendChild(a);
		}
		td.appendChild(document.createTextNode(i18n.getText("inter_article_confirm_2")));
		td.appendChild(document.createTextNode(" " + i18n.getText("inter_article_confirm_3")));
		tr.appendChild(td);
		
		tbody.appendChild(tr);
		table.appendChild(tbody);
		div.appendChild(table);
		
		layer.showContentAsLayer(div, true, i18n.getText('inter_your_shoppinglist'),'bgc_neutral');
	}
	
	var getUrlParams = function(paramurl)
	{
		try
		{
			var result = new Array();
			var params = paramurl.substring(paramurl.indexOf("?")+1).split("&");
			for(var i=0; i< params.length; i++)
			{
				var tmp = params[i].split("=");
				if(tmp.length == 2)
					result[tmp[0]] = tmp[1];
			}
			
			return result;
		} 
		catch(e){
			//alert(e);
		}	
	}
	
	var plusminus = function(number, element, params, cookie)
	{
		var td = document.getElementById(params["articlekey"]).getElementsByTagName("TD")[0];
		var anumber = parseInt(document.all ? td.innerText : td.textContent);
		if(!isNaN(anumber))
		{
			if(anumber + number >= 1)
			{
				if(document.all)
					td.innerText = anumber + number;
				else
					td.textContent = anumber + number;
				
				cookie.replaceValue(anumber + "#" + params["articlekey"], (anumber + number) + "#" + params["articlekey"]);
				
				if(anumber + number == 1)
				{
					var href = element.parentNode.getElementsByTagName("a")[1];
					href.className = "article_minus_grey";
				}
				else if(number == 1 && anumber + number > 1)
				{
					var href = element.parentNode.getElementsByTagName("a")[1];
					href.className = "article_minus";
					href.href = "?articlekey=" + params["articlekey"] + "&shoppinglistaction=minus";
					href.onclick = new Function("shoppinglist.doAction(this,'n'); return false;");
				}	
			}
		}
	}
	
	var updown = function(updown, element, params, cookie, category)
	{
		var table = getParent(element, "table");
		var trs = table.getElementsByTagName("tr");
		var position = -1;
		
		for(var i=0; i < trs.length; i++)
		{
			if(trs[i].id == params["articlekey"])
			{
				position = i;
				break;
			}
		}
		
		try
		{
			if(updown == -1)
			{
				if(position + 2 > (trs.length - 1))
				{
					trs[position].parentNode.appendChild(trs[position]);
					trs[position + 1].className = "article last";
					trs[position].className = "article";
					
					setPositionAtrributes(trs[position + 1], category, 3);
					if(position == 1)
						setPositionAtrributes(trs[position], category, 1);
					else
						setPositionAtrributes(trs[position], category, 2);
				}
				else
				{
					trs[position + 2].parentNode.insertBefore(trs[position], trs[position + 2]);
					if(position == 1)
						setPositionAtrributes(trs[position], category, 1);
					else
						setPositionAtrributes(trs[position], category, 2);
					setPositionAtrributes(trs[position + 1], category, 2);
				}
			}
			else if(updown == 1)
			{
				trs[position].parentNode.insertBefore(trs[position], trs[position - 1]);
				if(position == (trs.length - 1))
				{
					setPositionAtrributes(trs[position], category, 3);
					trs[position].className = "article last";
					trs[position - 1].className = "article";
				}
				else 
					setPositionAtrributes(trs[position], category, 2);
				
				if((position - 1) == 1)
					setPositionAtrributes(trs[position - 1], category, 1);
				else
					setPositionAtrributes(trs[position - 1], category, 2);
			}
			
			trs = table.getElementsByTagName("tr");
			var values = cookie.getValues();
			var nvalues = new Array();
			
			for(var i=1; i < trs.length; i++)
			{
				for(var z=0; z < values.length; z++)
				{
					if(values[z].indexOf(trs[i].id) > -1 )
					{
						nvalues[i-1] = values[z];
						break;
					}
				}
			}
			
			cookie.setValues(nvalues);
		}
		catch(e){
			alert(e);
		}
	}
	
	var deleteA = function(element, params, cookie, category)
	{
		var tr = getParent(element, "tr");
		var trparent = tr.parentNode;
		var parentdiv = getParent(element, "div");
		var td = document.getElementById(params["articlekey"]).getElementsByTagName("TD")[0];
		var anumber = parseInt(document.all ? td.innerText : td.textContent);
		
		if(!isNaN(anumber))
		{
			tr.parentNode.removeChild(tr);
			cookie.deleteValue(anumber + "#" + params["articlekey"]);
			
			var trs = trparent.getElementsByTagName("tr");
			if(trs.length > 1)
			{
				if(trs.length != 2)
				{
					setPositionAtrributes(trs[1], category, 1);
					setPositionAtrributes(trs[trs.length - 1], category, 3);
					trs[trs.length - 1].className = "article last";
				}
				else
				{
					setPositionAtrributes(trs[1], category, 0);
					trs[trs.length - 1].className = "article last";
				}
			}
			else
			{
				parentdiv.style.display = "none";
			}
			
			if(document.getElementById("shoppinganz"))
			{
				var articlenumber = document.getElementById("shoppinganz").innerHTML;
				articlenumber = parseInt(articlenumber);
				
				if(!isNaN(articlenumber))
				{
					if (articlenumber == 1)
					{
						document.getElementById("shoppinganz").innerHTML = "";
						document.getElementById("shoppingtext").innerHTML = i18n.getText("inter_shoppinglist_text1_2");
						document.getElementById("shoppingtext").className = "normal";
					}
					else
					{
						document.getElementById("shoppinganz").innerHTML = (articlenumber - 1);
					}
				}
			}

			var seterror = true;
			
			if(document.getElementById("ActualOffersTable"))
				seterror = false;
			
			if(document.getElementById("NextOffersTable"))
				seterror = false;
			
			if(document.getElementById("AssortmentTable"))
				seterror = false;
			
			if(document.getElementById("Notes"))
				if(document.getElementById("Notes").style.display != "none")
					seterror = false;

			if(seterror)
				document.getElementById("ShoppingListError").style.display = "block";
			
		}
	}
	
	var getParent = function(element, type)
	{
		var parent = element.parentNode;
		if(parent.nodeName.toLowerCase() == type.toLowerCase())
			return parent;
		else
			return getParent(parent, type);
	}
	
	/*
	 * tapes:
	 * 0 = only one
	 * 1 = first
	 * 2 = middle
	 * 3 = last
	 */
	var setPositionAtrributes = function(elementtr, category, type)
	{
		var hrefs = getPositionHrefs(elementtr)
		if(hrefs.length == 2)
		{
			if(type == 0 || type == 1)
			{
				hrefs[0].className = "arrow_up_grey";
				hrefs[0].removeAttribute("href");
				hrefs[0].removeAttribute("onclick");
			}
			else if(type == 2 || type == 3)
			{
				hrefs[0].className = "arrow_up";
				hrefs[0].href = "?articlekey=" + elementtr.id + "&shoppinglistaction=up";
				hrefs[0].onclick = new Function("shoppinglist.doAction(this, '" + category + "'); return false;");
			}
			
			if(type == 3 || type == 0)
			{
				hrefs[1].className = "arrow_down_grey";
				hrefs[1].removeAttribute("href");
				hrefs[1].removeAttribute("onclick");
			}
			else if(type == 1 || type == 2)
			{
				hrefs[1].className = "arrow_down";
				hrefs[1].href = "?articlekey=" + elementtr.id + "&shoppinglistaction=down";
				hrefs[1].onclick = new Function("shoppinglist.doAction(this, '" + category + "'); return false;");
			}
		}
	}
	
	var getPositionHrefs = function (elementtr)
	{
		var tds = elementtr.getElementsByTagName("td");
		
		for(var i=0; i < tds.length; i++)
		{
			if(tds[i].className == "position")
			{
				return tds[i].getElementsByTagName("a");
			}
		}
		
		return new Array();
	}
}

var shoppinglist = new ShoppingList();