

var TV = {};
TV.productList = [];

TV.addProduct = function(obj) {
	TV.productList[TV.productList.length] = obj;
};



var geo = [];
var priceranges = [];
var vintages = [];
var types = [];


var offers = false;

var searchOptions = {
	types : [],
	geo : [],
	wh: [],
	vintages : [],
	priceranges : [],
	offers : offers,
	orderby : "default",
	page : 1
};

var searchData = {
	totalcount : 0,
	count : 0,
	page : 1,
	pagesize : 0,
	pages : 0,
	enprimeur : false,
	residual : false,
	view : "",
	orderby : "default"
};





var requestHandler = function() {
	this.items = [];
}


requestHandler.prototype.add = function(key, oXMLHttpRequest, oWaitObj) {
	this.items[key] = { xmlHttpRequest : oXMLHttpRequest, waitObj : oWaitObj };
}


requestHandler.prototype.remove = function(key) {
	var item = this.items[key];
	if (item != null) {
		if (item.xmlHttpRequest != null) {
			item.xmlHttpRequest.abort();
		}
		if (item.waitObj != null) {
			item.waitObj.cancel();
		}
	}
}


var myRequests = new requestHandler();





function StringBuffer() { 
   this.buffer = []; 
 } 

 StringBuffer.prototype.append = function append(string) { 
   this.buffer.push(string); 
   return this; 
 }; 

 StringBuffer.prototype.toString = function toString() { 
   return this.buffer.join(""); 
 }; 







function formatPrice(p, a, c) {
	var kiloSeparator = ".";
	var decimalSeparator = ",";

	var s = "";

	p = parseFloat(p);
	if (p < 0) {
		s = "-";
		p = -p;
	}
	var pRes = p.toFixed(a);

	var pInt = "";
	var pDec = "";

	if (a > 0) {
		var rx = /(\d+)\.(\d+)/i;	
		pRes = pRes + "";
		pInt = pRes.replace(rx, "$1");
		pDec = pRes.replace(rx, "$2");
	}
	else {
		pInt = pRes + ""
	}

	var px = "";
	var j = 1;
	for (var i = pInt.length - 1; i >= 0; i--) {
		px = ((j % 3) == 0 ? kiloSeparator : "") + pInt.substr(i, 1) + px;
		j++;
	}
	if (px.substring(0,1) == kiloSeparator) {
		px = px.substring(1, px.length);
	}

	if (a > 0) {
		px = px + decimalSeparator + pDec;
	}

	return s + px +"&nbsp;"+ c;
}






function resetMyOptions() {
	bSearch = false;
	bFetchData = false;
	searchOptions.types = [];
	searchOptions.geo = [];
	searchOptions.wh = [];
	searchOptions.vintages = [];
	searchOptions.priceranges = [];
	searchOptions.offers = false; 
	searchOptions.page = 1;
	searchOptions.orderby = searchData.orderby;

	refreshTypes();
	refreshGeo();
	refreshWinehouses();
	refreshVintages();
	refreshPriceRanges();
	refreshOffers();
	refreshOrderby();
	refreshPage();

	setHash();

	bSearch = true;
	bFetchData = true;

	refreshMyOptions();
	return false;
}


var myOptionsFresh = true;
var bSearch = true;
var bFetchData = true;

function refreshMyOptions() {
	objMyOptions = $("#myOptions");
	objMyOptionsBody = $("#myOptionsBody");
	objMyOptionsData = $("#myOptionsData");

	
	if ((searchOptions.types.length > 0) || 
		(searchOptions.geo.length > 0) ||
		(searchOptions.wh.length > 0) ||
		(searchOptions.vintages.length > 0) ||
		(searchOptions.priceranges.length > 0) ||
		(searchOptions.offers)) {
		
		var str = "";

		
		if (searchOptions.types.length > 0) {
			str += "<div class=\"desc\">Type</div>";
			str += "<ul>";
			$.each(searchOptions.types, function(i, n) {
				str += "<li>"+ n.title +" <a onclick=\"return removeType("+ n.id +")\">(fjern)</a></li>";
			});
			str +="</ul>";
		}


		
		if (searchOptions.geo.length > 0) {
			str += "<div class=\"desc\">Land &amp; område</div>";
			str += "<ul>";
			$.each(searchOptions.geo, function(i, c) {
				str += "<li>"+ c.title +" <a onclick=\"return removeGeo("+ c.id +");\">(fjern)</a>";
				if (c.regions != null) {
					str += "<ul>";
					$.each(c.regions, function(j, r) {
						str += "<li>"+ r.title +" <a onclick=\"return removeGeo("+ r.id +");\">(fjern)</a>";
						if (r.districts != null) {
							str += "<ul>";
							$.each(r.districts, function(k, d) {
								str += "<li>"+ d.title +" <a onclick=\"return removeGeo("+ d.id +");\">(fjern)</a></li>";
							});
							str += "</ul>";
						}
						str += "</li>";
					});
					str += "</ul>";
				}
				str += "</li>";
			});
			str += "</ul>";
		}

		
		if (searchOptions.wh.length > 0) {
			str += "<div class=\"desc\">Vinproducent</div>";
			str += "<ul>";
			$.each(searchOptions.wh, function(i, n) {
				str += "<li>"+ n.title +" <a onclick=\"return removeWinehouse("+ n.id +")\">(fjern)</a></li>";
			});
			str += "</ul>";
		}
	
		
		if (searchOptions.vintages.length > 0) {
			str += "<div class=\"desc\">Årgang</div>";
			str += "<ul>";
			$.each(searchOptions.vintages, function(i, n) {
				str += "<li>"+ n + " <a onclick=\"return removeVintage("+ n +")\">(fjern)</a></li>";
			});
			str += "</ul>";
		}
		
		
		if (searchOptions.priceranges.length > 0) {
			str += "<div class=\"desc\">Pris</div>";
			str += "<ul>";
			$.each(searchOptions.priceranges, function(i, n) {
				str += "<li>"+ n.title +" <a onclick=\"return removePriceRange("+ n.id +")\">(fjern)</a></li>"
			});
			str += "</ul>";
		}

		
		if (searchOptions.offers) {
			str += "<ul>";
			str +="<li>Vis kun tilbud <a onclick=\"return removeOffers()\">(fjern)</a></li>";
			str += "</ul>";
		}


		if (myOptionsFresh) {
			objMyOptionsData.html(str);
			objMyOptionsBody.slideDown("fast", function() {
				objMyOptions.addClass("open");
			});
		}
		else {
			objMyOptionsBody.fadeOut("fast", function() {
				objMyOptionsData.html(str);
				objMyOptions.addClass("open");		
				objMyOptionsBody.fadeIn("fast");
			});
		}

		myOptionsFresh = false;
	}
	
	else {
		objMyOptionsBody.slideUp("fast", function() {
			objMyOptions.removeClass("open");		
		});
		myOptionsFresh = true;
	}

	if (bSearch && bFetchData) {
		doSearch();
	}
}

function refreshPage() {
	var objForm = document.forms["TheisVineSearch"];
	if (objForm.page) {
		objForm.page.value = searchOptions.page;
	}
}

function parsePage(i) {
	searchOptions.page = parseInt(i, 10);
	refreshPage();
}



function setView(v) {
	var b = false;

	if (v != searchData.view) {
		b = true;
		searchData.view = v;
	}

	if (b) {
		var objForm = document.forms["TheisVineSearch"];
		if (objForm.view) {
			objForm.view.value = searchData.view;
		}
		if (v == "liste") {
			searchData.pagesize = 21;
		}
		else {
			searchData.pagesize = 9;
		}
		objForm.pagesize = searchData.pagesize;

		bSearch = true;
		bFetchData = true;
		refreshView();
		setHash();
		doSearch();
	}
	return false;
}


function setPage(i) {
	i = parseInt(i, 10);

	var b = true;

	if (i < 1) {
		i = 1;
		b = false;
	}
	else if (i > searchData.pages) {
		i = searchData.pages;
		b = false;
	}

	if (b) {
		searchOptions.page = i;	
		bSearch = true;
		bFetchData = true;
		refreshPage();
		setHash();
		doSearch();
	}
	return false;
}

function incPage() {
	i = searchOptions.page;

	if (i < searchData.pages) {
		i = i + 1;
		searchOptions.page = i;
		bSearch =  true;
		bFetchData = true;
		refreshPage();
		setHash();
		doSearch();
	}
	return false;
}

function decPage() {
	i = searchOptions.page;
	if (i > 1) {
		i = i - 1;
		searchOptions.page = i;
		bSearch = true;
		bFetchData = true;
		refreshPage();
		setHash();
		doSearch();
	}
	return false;
}


function refreshOrderby() {
	//FIXME: check residual / enprimeur to pre-select order-by
	$("#orderby").selectOptions(searchOptions.orderby, true);
}


function refreshView() {
	var objForm = document.forms["TheisVineSearch"];
	var obj = objForm.view;
	if (obj) {
		searchData.view = obj.value;

		$("div.viewbuttons a.view").each(function() {
			if ($(this).hasClass("view-"+ searchData.view)) {
				$(this).addClass("current");
				$(this).addClass("view-"+ searchData.view +"-current");
			}
			else {
				$(this).removeClass("current");
				$(this).removeClass("view-"+ (searchData.view == "liste" ? "galleri" : "liste") +"-current");
			}
		});

		if (searchData.view == "liste") {
			searchData.pagesize = 21;
		}
		else {
			searchData.pagesize = 9;
		}
	}
}

function parseView(v) {
	var b = false;
	
	switch (v) {
		case "vis-liste" :
			v = "liste";
			b = true;
			break;
		case "vis-galleri" :
			v = "galleri";
			b = true;
			break;
		
	}
	
	if (b) {
		var objForm = document.forms["TheisVineSearch"];
		if (objForm.view) {
			objForm.view.value = v;
			refreshView();
		}
	}
}

function parseOrderBy(v) {
	
	switch (v) {
		case "pris-billigste" :
		case "price" :
			v = "price";
			searchOptions.orderby = v;
			break;
		case "pris-dyreste" :
		case "pricedesc" :
			v = "pricedesc";
			searchOptions.orderby = v;
			break;
		case "aargang-stigende" :
		case "vintage" :
			v = "vintage";
			searchOptions.orderby = v;
			break;
		case "aargang-faldende" :
		case "vintagedesc" :
			v = "vintagedesc";
			searchOptions.orderby = v;
			break;
		case "type-stigende" :
		case "type" :
			v = "type";
			searchOptions.orderby = v;
			break;
		case "type-faldende" :
		case "type-desc" :
			v = "typedesc";
			searchOptions.orderby = v;
			break;
		case "vinproducent-stigende" :
		case "winehouse" :
			v = "winehouse";
			searchOptions.orderby = v;
			break;
		case "vinproducent-faldende" :
		case "winehousedesc" :
			v = "winehousedesc";
			searchOptions.orderby = v;
			break;
		case "default" :
			v = "default";
			searchOptions.orderby = v;
			break;
	}
	
}

function setOrderby(obj) {
	searchOptions.orderby = obj.value;
	$(obj).blur();
	setHash();
	doSearch();
}




function generateSearchHash() {
	var objForm = document.forms["TheisVineSearch"];
	var objStateForm = document.forms["TheisVineSearchState"];

	var h = "";

	if (objForm.types) {
		if (objForm.types.value != "") {
			
			h += getTypesKeyStr(objForm.types.value);
			
		}
	}

	if (objForm.geo) {
		if (objForm.geo.value != "") {
			
			h += getGeoKeyStr(objForm.geo.value);
			
		}
	}	

	if (objForm.wh) {
		if (objForm.wh.value != "") {
			
			h += getWinehouseKeyStr(objForm.wh.value);
			
		}
	}

	if (objForm.vintages) {
		if (objForm.vintages.value != "") {
			
			h += getVintagesKeyStr(objForm.vintages.value);
			
		}
	}

	if (objForm.priceranges) {
		if (objForm.priceranges.value != "") {
			
			h += getPriceRangesKeyStr(objForm.priceranges.value);
			
		}
	}

	if (objForm.offers) {
		if (objForm.offers.checked) {
			//if (objStateForm.offers.value == "0") {
				
				h += "/tilbud";
				
			//}	
		}
	}

	if (objForm.orderby) {

		if (objForm.orderby.value != "default") {
			
			switch (objForm.orderby.value) {
				case "price" : 
					h += "/pris-billigste";
					break;
				case "pricedesc" :
					h += "/pris-dyreste";
					break;
				case "vintage" :
					h += "/aargang-stigende";
					break;
				case "vintagedesc" :
					h += "/aargang-faldende"; 
					break;
				case "type" :
					h += "/type-stigende";
					break;
				case "typedesc" :
					h += "/type-faldende";
					break;
				case "winehouse" :
					h += "/vinproducent-stigende";
					break;
				case "winehousedesc" :
					h += "/vinproducent-faldende";
					break;
			}

			
		}
	}


	if (objForm.page) {
		if (objForm.page.value != "1") {
			
			h += "/side-"+ objForm.page.value;
			
		}
	}

	if (objForm.view) {
		if (objForm.view.value != "") {
			
			h += "/vis-"+ objForm.view.value;
			
		}
	}

	return h;
}



function updatePager() {
	var pagers = $("div.pager");

	var a = 0; 
	var b = 0; 
	var w = 5; 
	var p = searchData.page;
	var pages = searchData.pages;
	p = (p < 1 ? 1 : p); 
	p = (p > pages ? pages : p); 
	if (p < w) {
		a = 1;
		b = (pages < w ? pages : w);
	}
	else {
		if (w > 2) {
			
			for (var i = 1; i <= pages; i+=w-2) {
				a = i;
				b = a + w - 1;
				if ((a <= p) && (p < b)) {
					break; 
				}
			}

			
			if (b >= pages) {
				b = pages;
				a = b - w + 1;
			}
		}
	}


	if (pages > 1) {
		var s = "";
		var str = "";
		
		s += "<a class=\"bb\" href=\"#\" onclick=\"return setPage(1);\"><span>&lt;&lt;</span></a>";
		
		s += "<a class=\"b\" href=\"#"+ (p > 2 ? "side-"+ (p - 1) : "") +"\" onclick=\"return decPage();\"><span>&lt;</span></a>";
		

		var sHref = "";
		var sClass = "";
		var j = 0;
		for (var i = a; i <= b; i++) {
			
			sHref = "#" + (i > 1 ? "side-"+ i : "");
			
			sClass = (i == p ? " class=\"current\"" : "");
			str = i;
			if ((i > 1) && (i < pages)) {
				if (i == a) {
					str = "..." + str;
				}
				else if (i == b) {
					str = str + "...";
				}
			}
			s += (j > 0 ? "<span>|</span>" : "");
			s += "<a href=\""+ sHref +"\""+ sClass+" onclick=\"return setPage("+ i +");\">"+ str +"</a>";

			j++;
		}

		
		s += "<a class=\"f\" href=\"#"+ (p < pages ? "side-"+ (p + 1) : pages) +"\" onclick=\"return incPage();\"><span>&gt;</span></a>";
		s += "<a class=\"ff\" href=\"#side-"+ pages +"\" onclick=\"return setPage("+ pages +");\"><span>&gt;&gt;</span></a>";
		

		$(pagers).html(s);
	}
	
	else {
		$(pagers).empty();
	}

	$("#wineSearchCount").html(searchData.totalcount +" "+ (searchData.totalcount == 1 ? "vare" : "varer") +" fundet");
	

}


function createWineLink(data) {
	var oA = document.createElement("a");
	$(oA).attr("title", (data.vintage != "" ? data.vintage + " - " : "") + data.title + (data.winehouse != "" ? " - " + data.winehouse : ""));
	$(oA).attr("href", "#");

	$(oA).click(function() {
		addToCart(data.id);
		return false;
	});
	$(oA).html("<span>"+  (data.discount > 0 ? "<del class=\"before\">"+ formatPrice(data.price, 2, "kr.") +"</del>" : "") + formatPrice(data.total, 2, "kr.") +"</span>" );

	return oA;
}

function parseSearchData(oXML) {
	var objForm = document.forms["TheisVineSearch"];

	var root = oXML.selectSingleNode("theisvinesearch");
	searchData.totalcount = parseInt(root.getAttribute("totalcount"), 10);
	searchData.count = parseInt(root.getAttribute("count"), 10);
	searchData.page = parseInt(root.getAttribute("page"), 10);

	if (searchOptions.page > searchData.page) {
		searchOptions.page = searchData.page;
	}

	searchData.pages = parseInt(root.getAttribute("pages"), 10);
	searchData.pagesize = parseInt(root.getAttribute("pagesize"), 10);


	var items = root.selectNodes("item");
	if (items.length > 0) {

		if (searchData.residual) {
		
			var oTable = document.createElement("table");
			$(oTable).addClass("wineList");
			$(oTable).attr("border", "0");
			$(oTable).attr("cellpadding", "0");
			$(oTable).attr("cellspacing", "0");


			var oTHead = document.createElement("thead");
			var oHTR = oTHead.insertRow(0);

			var oTH1 = document.createElement("th");
			$(oTH1).html("Vare");

			var oTH2 = document.createElement("th");
			$(oTH2).addClass("stock");
			$(oTH2).html("Rest");

			var oTH3 = document.createElement("th");

			var oTH4 = document.createElement("th");
			$(oTH4).addClass("price");
			$(oTH4).html("Pris");

			$(oTHead).append(oTH1);
			$(oTHead).append(oTH2);
			$(oTHead).append(oTH3);
			$(oTHead).append(oTH4);

			$(oTable).append(oTHead);




			var oTBody = document.createElement("tbody");
			oTable.appendChild(oTBody);

			var oTR = null; 

			for (var i = 0; i < items.length; i++) {
				var id = parseInt(items[i].getAttribute("id"), 10);
				var title = oXML.getText(items[i].selectSingleNode("title"));
				var price = oXML.getText(items[i].selectSingleNode("price"));
				var discount = oXML.getText(items[i].selectSingleNode("discount"));
				var total = oXML.getText(items[i].selectSingleNode("total"));

				var winehouse = oXML.getText((items[i].selectSingleNode("winehouse") || items[i].selectSingleNode("altwinehouse")));

				var vintage = oXML.getText(items[i].selectSingleNode("vintage"));
				var stock = parseInt(items[i].getAttribute("stock"), 10);


				oTR = oTBody.insertRow(oTBody.rows.length);
				if ((i % 2) == 1) {
					$(oTR).addClass("odd");
				}

				$(oTR).hover(
					function() {
						$(this).addClass("over");
					},
					function() {
						$(this).removeClass("over");
					}
				);


				oTDtitle = oTR.insertCell(oTR.cells.length);

				oTDstock = oTR.insertCell(oTR.cells.length);
				$(oTDstock).addClass("stock");
				$(oTDstock).html(stock);

				oTDquantity = oTR.insertCell(oTR.cells.length);
				$(oTDquantity).addClass("quantity");

				var oInp = document.createElement("input");
				$(oInp).attr("type", "text");
				$(oInp).addClass("text");
				$(oInp).attr("name", "prod_"+ id);
				$(oInp).attr("id", "prod_"+ id);
				$(oInp).attr("value", "1");
				$(oInp).blur(function(){
					v = str2int($(this).attr("value"));
					$(this).attr("value", v);
				});

				$(oTDquantity).append(oInp);
				$(oTDquantity).append(" stk.");


				oTDprice = oTR.insertCell(oTR.cells.length);
				$(oTDprice).addClass("price");
				
				oH1 = document.createElement("h1");

				$(oTDtitle).append(oH1);



				$(oH1).html((vintage != "" ? vintage +" - " : "") + title + (winehouse != "" ? " - " + winehouse : "")  )

				var oA = createWineLink({
					title: title,
					vintage: vintage,
					winehouse: winehouse,
					id: id,
					discount: discount,
					price: price,
					total: total
				});

				$(oTDprice).append(oA);
			}	
			fadeToResults(oTable);
		}
		else {

			if (searchData.view == "galleri") {
				var oTable = document.createElement("table");
				$(oTable).addClass("wineResults");
				$(oTable).attr({
					"border": "0",
					"cellpadding": "0",
					"cellspacing": "0"
				});

				var oTBody = document.createElement("tbody");
				oTable.appendChild(oTBody);

				var oTR = oTBody.insertRow(oTBody.rows.length);
				
				var maxPerRow = 3;
				var numRows = Math.ceil(searchData.count / maxPerRow);
				var rowNum = 0;

				var j = 1;

				for (var i = 0; i < items.length; i++) {
					rowNum = Math.ceil(j / maxPerRow);

					if ((j % maxPerRow) == 1) {
						if (j == 1) {
							$(oTR).addClass("first");
							if (numRows == 1) {
								$(oTR).addClass("last");
							}
						}
						else if (rowNum == numRows) {
							$(oTR).addClass("last");
						}
					}

					oTD = oTR.insertCell(oTR.cells.length);
					
					if ((j % maxPerRow) == 1) {
						oTD.className = "first";
					}
					else if (j % maxPerRow == 0) {
						oTD.className = "last";
					}


					id = parseInt(items[i].getAttribute("id"), 10);
					title = oXML.getText(items[i].selectSingleNode("title"));
					price = oXML.getText(items[i].selectSingleNode("price"));
					discount = oXML.getText(items[i].selectSingleNode("discount"));
					total = oXML.getText(items[i].selectSingleNode("total"));
					winehouse = oXML.getText((items[i].selectSingleNode("winehouse") || items[i].selectSingleNode("altwinehouse")));
					vintage = oXML.getText(items[i].selectSingleNode("vintage"));
					url = oXML.getText(items[i].selectSingleNode("url"));

					cartUrl = "/idd20.asp?eshpcart=add&amp;prod_id="+ id +"&amp;Prod_"+ id +"=1";

					imgw = 0;
					imgh = 0;
					imgsrc = "";
					imgNode = items[i].selectSingleNode("img");
					if (imgNode != null) {
						imgw = parseInt(imgNode.getAttribute("w"), 10);
						imgh = parseInt(imgNode.getAttribute("h"), 10);
						imgsrc = oXML.getText(imgNode);
					}
				
					oDiv = document.createElement("div");
					$(oDiv).addClass("item");

					oH1 = document.createElement("h1");

					oA = document.createElement("a");
					$(oA).attr("title", (vintage != "" ? vintage + " - " : "")+ title + (winehouse != "" ? " - " + winehouse : ""));
					$(oA).attr("href", url);

					oSpanImg = document.createElement("span");
					$(oSpanImg).addClass("img");

					if (imgsrc != "") {
						oImg = document.createElement("img");
						$(oImg).attr("src", imgsrc);
						$(oImg).attr("width", imgw);
						$(oImg).attr("height", imgh);

						$(oSpanImg).append(oImg);

						
						if ($.browser.msie && ($.browser.version < 8)) {
							$(oSpanImg).click(function() {
								window.location = $(this).parent().attr("href");
							});
						}
					}

					oSpanTitle = document.createElement("span");
					$(oSpanTitle).addClass("title");
					$(oSpanTitle).html((vintage != "" ? vintage + " - " : "") + title);


					if (discount != "0") {
						oSpanOffer = document.createElement("span");
						$(oSpanOffer).addClass("offer");
						$(oSpanOffer).html("Tilbud");
						$(oA).append(oSpanOffer);
					}

					$(oA).append(oSpanImg);
					$(oA).append(oSpanTitle);

					oSpanWinehouse = document.createElement("span");
					$(oSpanWinehouse).addClass("winehouse");
					$(oSpanWinehouse).html((winehouse != "" ? winehouse : "&nbsp;"));
					$(oA).append(oSpanWinehouse);

					$(oH1).append(oA);
					$(oDiv).append(oH1);
			
					oAdd = document.createElement("div");
					$(oAdd).addClass("add");
					$(oAdd).html("<a href=\"#\" onclick=\"window.location='"+ cartUrl +"'; return false\"><span>"+ (discount != "0" ? "<del>"+ formatPrice(price, 2, "kr.") +"</del>" : "")  + formatPrice(total, 2, "kr.") +"</span></a>");


					$(oDiv).append(oAdd);
				
					$(oTD).append(oDiv);


					if (((j % maxPerRow) == 0) || (j == searchData.count)) {
						oTR = oTBody.insertRow(oTBody.rows.length);
					}

					j++;
				}	
				fadeToResults(oTable);

			}
			else {
				
				var oTable = document.createElement("table");
				$(oTable).addClass("wineList");
				$(oTable).attr({
					"border": "0",
					"cellpadding": "0",
					"cellspacing": "0"
				});

				var oTBody = document.createElement("tbody");
				oTable.appendChild(oTBody);

				var oTR = null;

	
				for (var i = 0; i < items.length; i++) {
					var id = parseInt(items[i].getAttribute("id"), 10);
					var title = oXML.getText(items[i].selectSingleNode("title"));
					var price = oXML.getText(items[i].selectSingleNode("price"));
					var discount = oXML.getText(items[i].selectSingleNode("discount"));
					var total = oXML.getText(items[i].selectSingleNode("total"));
					var winehouse = oXML.getText((items[i].selectSingleNode("winehouse") || items[i].selectSingleNode("altwinehouse")));
					var vintage = oXML.getText(items[i].selectSingleNode("vintage"));

					url = oXML.getText(items[i].selectSingleNode("url"));
					cartUrl = "/idd20.asp?eshpcart=add&amp;prod_id="+ id +"&amp;Prod_"+ id +"=1";

					oTR = oTBody.insertRow(oTBody.rows.length);
					if ((i % 2) == 1) {
						oTR.className = "odd";
					}

					$(oTR).hover(
						function() {
							$(this).addClass("over");
						},
						function() {
							$(this).removeClass("over");
						}
					);

					oTDtitle = oTR.insertCell(oTR.cells.length);

					
					oH1 = document.createElement("h1");

					oA = document.createElement("a");
					$(oA).attr("title", (vintage != "" ? vintage + " - " : "")+ title + (winehouse != "" ? " - " + winehouse : ""));
					$(oA).attr("href", url);

					var oSpanTitle = document.createElement("span");
					$(oSpanTitle).addClass("title");
					$(oSpanTitle).html((vintage != "" ? vintage +" - " : "") + title + (winehouse != "" ? " - " + winehouse : ""));


					$(oA).append(oSpanTitle);

					$(oH1).append(oA);


					$(oTDtitle).append(oH1);


					if (discount != "0") {
						var oTDoffer = oTR.insertCell(oTR.cells.length);
						var oSpanOffer = document.createElement("span");
						$(oSpanOffer).addClass("offer");
						$(oSpanOffer).html("Tilbud");
						$(oTDoffer).append(oSpanOffer);
					}
					else {
						$(oTDtitle).attr("colSpan", "2");
					}

					oTDprice = oTR.insertCell(oTR.cells.length);
					$(oTDprice).addClass("price");



					var oA = createWineLink({
						title: title,
						vintage: vintage,
						winehouse: winehouse,
						id: id,
						discount: discount,
						price: price,
						total: total
					});

					$(oTDprice).append(oA);				
				}

				fadeToResults(oTable);
			}
		}
	}
	else {
		searchData.totalcount = 0;
		searchData.count = 0;
		searchData.pages = 0;
		searchData.page = 1;

		fadeToResults(null);
	}

	updatePager();
}


function fadeToResults(obj) {
	$("#wineSearchResultsContent").fadeOut("fast", function() {
		$(this).empty().append(obj).fadeIn("fast");
		$("#wineSearchResultsContent, #wineSearchCount, div.viewbuttons, div.pager").css("visibility", "visible");
	});

}




function doSearch() {
	bFirstLoad = false;

	var objLoading = $("#wineSearchLoading");
	var objForm = document.forms["TheisVineSearch"];

	var reqKey = "theisvinesearch";
	myRequests.remove(reqKey);

	var oXML = new XMLObject();
	var oXMLHttp = new XMLHttpRequestObject();
	oXMLHttp.async = true;
	oXMLHttp.src = "/custom/site/xml/search.asp";

	var params = "";

	if (objForm.types) {
		params += (params != "" ? "&" : "") + "types="+ encodeURIComponent(objForm.types.value);
	}
	if (objForm.geo) {
		params += (params != "" ? "&" : "") + "geo="+ encodeURIComponent(objForm.geo.value);
	}
	if (objForm.wh) {
		params += (params != "" ? "&" : "") + "wh="+ encodeURIComponent(objForm.wh.value);
	}
	if (objForm.vintages) {
		params += (params != "" ? "&" : "") + "vintages="+ encodeURIComponent(objForm.vintages.value);
	}
	if (objForm.priceranges) {
		params += (params != "" ? "&" : "") + "priceranges="+ encodeURIComponent(objForm.priceranges.value);
	}
	if (objForm.offers) {
		params += (params != "" ? "&" : "") + "offers="+ (objForm.offers.checked ? "1" : "0");
	}
	if (objForm.orderby) {
		params += (params != "" ? "&" : "") + "orderby="+ encodeURIComponent(objForm.orderby.value);
	}
	if (objForm.page) {
		params += (params != "" ? "&" : "") + "page="+ encodeURIComponent(objForm.page.value);
	}
	params += (params != "" ? "&" : "") + "pagesize="+ searchData.pagesize;

	if (objForm.enprimeur) {
		params += (params != "" ? "&" : "") + "enprimeur="+ encodeURIComponent(objForm.enprimeur.value);
	}
	if (objForm.residual) {
		params += (params != "" ? "&" : "") + "residual="+ encodeURIComponent(objForm.residual.value);
	}
	if (objForm.view) {
		params += (params != "" ? "&" : "") + "view="+ encodeURIComponent(objForm.view.value);
	}


	oXMLHttp.args = params;

	var waitObj = new waitForIt();
	waitObj.waitFor = function() {
		return oXMLHttp.completed();
	}

	waitObj.whenDone = function() {
		if (oXMLHttp.xml != null) {
			if (oXML.loadXML(oXMLHttp.xml)) {
				parseSearchData(oXML);
				initSearchResults();
				collapseText();
				scrollToResults();
			}
		}
		$(objLoading).css("visibility", "hidden");
	}


	$(objLoading).css("visibility", "visible");
	oXMLHttp.load();
	waitObj.run();
	myRequests.add(reqKey, oXMLHttp, waitObj);
}


function scrollToResults() {
	var obj = $("#wineSearchResultsTop");

	var y = $(window).scrollTop();
	var top = obj.offset().top;

	if (top < y) {
		$.scrollTo(obj, {axis: "y", duration: 200});	
	}
}


function openResults() {
	
	var str = generateSearchHash();
	
	
	str = str.replace(/\/side-\d+/gi, "");
	str = str.replace(/\/vis-[^\/]+/gi, "");

	if (searchData.enprimeur) {
		str = "/en-primeur" + str;
	}
	else if (searchData.residual) {
		str = "/restsalg" + str;
	}
	str = "/udskriv" + str;

	
	window.open(str);

	return false;
}




function collapseText() {
	$("#wineSearchParagraphs").each(function() {
		$(this).css("display", "none");
		$("#wineSearch").css("display", "block");
	});
}





function removeGeo(id) {
	id = parseInt(id, 10);

	var bRefresh = false;

	for (var i = 0; i < searchOptions.geo.length; i++) {
		country = searchOptions.geo[i];
	
		if (country.id == id) {
			searchOptions.geo.splice(i, 1);
			bRefresh = true;
			break;
		}
		else {
			if (country.regions != null) {
				for (var j = 0; j < country.regions.length; j++) {
					region = country.regions[j];
					if (region.id == id) {
						country.regions.splice(j, 1);
						country.regions = (country.regions.length > 0 ? country.regions : null);
						bRefresh = true;
						break;
					}
					else {
						if (region.districts != null) {
							for (var k = 0; k < region.districts.length; k++) {
								district = region.districts[k];
								if (district.id == id) {
									region.districts.splice(k, 1);
									region.districts = (region.districts.length> 0 ? region.districts : null);
									bRefresh = true;
									break;
								}
							}
						}
					}
				}
			}
		}
	}

	if (bRefresh) {
		searchOptions.page = 1;
		refreshPage();
		refreshGeo();
		setHash();
		refreshMyOptions();
	}

	return false;
}




function addGeo(id) {
	id = parseInt(id, 10);

	var cId = 0;
	var rId = 0;
	var dId = 0;

	var objCountry = null;
	var objRegion = null;
	var objDistrict = null;

	var found = false;

	for (var i = 0; i < geo.length; i++) {
		country = geo[i];
		if (country.id == id) {
			objCountry = { id : country.id, title : country.title};
			found = true;
			break;
		}
		
		if (!found) {
			if (country.regions != null) {
				for (var j = 0; j < country.regions.length; j++) {
					region = country.regions[j];
					if (region.id == id) {
						objCountry = { id : country.id, title : country.title };
						objRegion = { id : region.id, title : region.title };
						found = true;
						break;
					}

					if (!found) {
						if (region.districts != null) {
							for (var k = 0; k < region.districts.length; k++) {
								district = region.districts[k];
								if (district.id == id) {
									objCountry = { id : country.id, title : country.title };
									objRegion = { id : region.id, title : region.title };
									objDistrict = { id : district.id, title : district.title};
									found = true;
									break;
								}
							}
						}
					}
				}
			}
		}
	}


	if (found) {
		var bRefresh = true;
		var countryFound = false;
		var regionFound = false;
		var districtFound = false;

		for (var i = 0; i < searchOptions.geo.length; i++) {
			country = searchOptions.geo[i];

			
			if (country.id == objCountry.id) {
				countryFound = true;

				
				if ((country.regions != null) && (objRegion != null)) {

					for (var j = 0; j < country.regions.length; j++) {
						region = country.regions[j];
						
						
						if (region.id == objRegion.id) {
							regionFound = true;
							
							if ((region.districts != null) && (objDistrict != null)) {
								
								for (var k = 0; k < region.districts.length; k++) {
									district = region.districts[k];

									
									if (district.id == objDistrict.id) {
										districtFound = true;									
										break;
									}
								}
							}
							if (!districtFound && (objDistrict != null)) {
								if (region.districts == null) {
									region.districts = [];
								}
								region.districts[region.districts.length] = objDistrict;
							}
							else {
								bRefresh = false;
							}
							break;
						}
						
					}

					
					if (!regionFound) {
						if (objDistrict != null) {
							objRegion.districts = [objDistrict];
						}
						country.regions[country.regions.length] = objRegion;
					}

				}
				
				else if (objRegion != null) {
					if (objDistrict != null) {
						objRegion.districts = [objDistrict];
					}
					country.regions = [objRegion];
				}
				else {
					bRefresh = false;
				}
				break;
			}

			searchOptions.geo[i] = country;
		}

		if (!countryFound) {
			country = objCountry;
			if (objRegion != null) {
				if (objDistrict != null) {
					objRegion.districts = [objDistrict];
				}
				country.regions = [objRegion];
			}

			searchOptions.geo[searchOptions.geo.length] = country;
		}

		if (bRefresh) {
			if (bSearch) {
				searchOptions.page = 1;
				refreshPage();
				refreshGeo();
				setHash();
				refreshMyOptions();
			}
		}
	}

	return false;
}


function refreshGeo() {
	var objForm = document.forms["TheisVineSearch"];
	var s = "";

	for (var i = 0; i < searchOptions.geo.length; i++) {
		country = searchOptions.geo[i];
		if (country.regions != null) {
			for (var j = 0; j < country.regions.length; j++) {
				region = country.regions[j];
				if (region.districts != null) {
					for (var k = 0; k < region.districts.length; k++) {
						district = region.districts[k];
						s += ((i > 0) || (j > 0) || (k > 0) ? "," : "") + country.id +"|"+ region.id +"|"+ district.id;
					}
				}
				else {
					s += ((i > 0) || (j > 0) ? "," : "") + country.id +"|"+ region.id;
				}
			}
		}
		else {
			s += (i > 0 ? "," : "") + country.id;
		}
	}

	if (objForm.geo) {
		objForm.geo.value = s;
	}
}


function parseGeo(s) {
	var b = false;
	var rx = /^(\d+)(?:\|(\d+)(?:\|(\d+))*)*$/;
	var sArr = s.split(",");

	if (sArr.length > 0) {
		for (var i = 0; i < sArr.length; i++) {
			if (sArr[i].match(rx)) {
				b = true;
				c = sArr[i].replace(rx, "$1");
				r = sArr[i].replace(rx, "$2");
				d = sArr[i].replace(rx, "$3");

				if (d != "") {
					addGeo(d);	
				}
				else if (r != "") {
					addGeo(r);
				}
				else {
					addGeo(c);
				}
			}
		}
	}
	if (!b) {
		
		var sArr = s.split("_");
		if (sArr.length > 0) {
			for (var i = 0; i < sArr.length; i++) {
				v = getGeoId(sArr[i]);
				if (v > 0) {
					addGeo(v);
				}
			}
		}
	}
}


function parseWinehouses(s) {
	var b = false;

	
	var rx = /^\d+(,\d+)*$/;
	if (s.match(rx)) {
		var sArr = s.split(",");
		$.each(sArr, function(i, m) {
			m = parseInt(m, 10);
			$.each(winehouses, function(j, n) {
				if (n.id == m) {
					b = true;
					addWinehouse(n);
					return false;
				}
			});
		});
	}
	
	if (!b) {
		addWinehouse(getWinehouse({ key: s}));
	}
}


function getWinehouseKeyStr(s) {
	var res = "";
	var sArr = s.split(",");
	
	$.each(sArr, function(i, n) {
		var id = parseInt(n, 10);
		var obj = getWinehouse({id: id});
		if (obj != null) {
			res += "/" + obj.key;
		}
	});
	return res;
}



function getWinehouse(options) {
	var id = (typeof options.id != "undefined" ? options.id : 0);
	var key = (typeof options.key != "undefined" ? options.key : "");

	var res = null;
	$.each(winehouses, function(i, n) {
		if ((n.id == id) || (n.key == key)) {
			res = n;			
			return false;
		}
	});

	return res;
}


function addWinehouse(obj) {
	if (obj != null) {
		var b = true;
		
		$.each(searchOptions.wh, function(i, n) {
			if (n.id == obj.id) {
				b = false;
				return false;
			};
		});

		
		if (b) {
			b = false;
			$.each(winehouses, function(i, n) {
				if (n.id == obj.id) {
					b = true;
					return false;
				}
			});
		}

		
		if (b) {
			searchOptions.wh[searchOptions.wh.length] = obj;

			if (bSearch) {
				searchOptions.page = 1;
				refreshPage();
				refreshWinehouses();
				setHash();
				refreshMyOptions();
			}
		}
	}
	return false;
}


function removeWinehouse(id) {
	id = parseInt(id, 10);
	var idx = -1;
	
	$.each(searchOptions.wh, function(i, n) {
		if (n.id == id) {
			idx = i;
			return false;
		}
	});

	
	if (idx > -1) {
		searchOptions.wh.splice(idx, 1);
		searchOptions.page = 1;
		refreshPage();
		refreshWinehouses();
		setHash();
		refreshMyOptions();
	}
}



function refreshWinehouses() {
	var objForm = document.forms["TheisVineSearch"];
	var s = "";

	$.each(searchOptions.wh, function(i, n) {
		s += (i > 0 ? "," : "") + n.id;
	});

	if (objForm.wh) {
		objForm.wh.value = s;
	}
}




function getPriceRangesKeyStr(ids) {
	var rx = /(\d+)-(\d+)/ig;
	if (ids.match(rx)) {
		ids = ids.replace(rx, "$1kr-$2kr");
	}
	if (ids != "") {
		ids = "/"+ ids;
	}
	return ids.replace(/,/g, "/");
}

function getVintagesKeyStr(ids) {
	if (ids != "") {
		ids = "/"+ ids;
	}
	return ids.replace(/,/g, "/");
}


function getTypesKeyStr(ids) {
	var res = "";
	var sArr = ids.split(",");
	for (var i = 0; i < sArr.length; i++) {
		x = getTypeKey(sArr[i]);
		if (x != "") {
			res += "/"+ x
		}
	}
	return res;
}

function getTypeKey(id) {
	id = parseInt(id, 10);
	for (var i = 0; i < types.length; i++) {
		if (types[i].id == id) {
			return types[i].key;
		}
	}
}
function getTypeId(key) {
	for (var i = 0; i < types.length; i++) {
		if (types[i].key == key) {
			return types[i].id;
		}
	}
}


function getGeoKeyStr(ids) {
	var res = "";
	var sArr = ids.split(",");
	var rx = /.*?(\d+)$/;
	for (var i = 0; i < sArr.length; i++) {
		x = getGeoKey(sArr[i].replace(rx, "$1"));
		if (x != "") {

			res += "/"+ x;
		}
	}
	return res;
}

function getGeoKey(id) {
	id = parseInt(id, 10);
	for (var i = 0; i < geo.length; i++) {
		c = geo[i];
		if (c.id == id) {
			return c.key;
		}
		else if (c.regions != null) {
			for (var j = 0; j < c.regions.length; j++) {
				r = c.regions[j];
				if (r.id == id) {
					return r.key;
				}
				else if (r.districts != null) {
					for (var k = 0; k < r.districts.length; k++) {
						d = r.districts[k];
						if (d.id == id) {
							return d.key;
						}
					}
				}
			}
		}
	}
	return "";
}

function getGeoId(s) {
	for (var i = 0; i < geo.length; i++) {
		c = geo[i];
		if (c.key == s) {
			return c.id;
		}
		else if (c.regions != null) {
			for (var j = 0; j < c.regions.length; j++) {
				r = c.regions[j];
				if (r.key == s) {
					return r.id;
				}
				else if (r.districts != null) {
					for (var k = 0; k < r.districts.length; k++) {
						d = r.districts[k];
						if (d.key == s) {
							return d.id;
						}
					}
				}
			}
		}
	}
	return 0;
}







function removeType(id) {
	id = parseInt(id, 10);
	for (var i = 0; i < searchOptions.types.length; i++) {
		if (searchOptions.types[i].id == id) {
			searchOptions.types.splice(i, 1);
			searchOptions.page = 1;
			refreshPage();
			refreshTypes();
			setHash();
			refreshMyOptions();
			break;
		}
	}
	return false;
}


function addType(id) {
	id = parseInt(id, 10);
	var obj = null;
	for (var i = 0; i < types.length; i++) {
		if (id == types[i].id) {
			obj = types[i];
			break;
		}
	}

	if (obj != null) {
		var bAdd = true;

		
		for (var i = 0; i < searchOptions.types.length; i++) {
			if (searchOptions.types[i].id == id) {
				bAdd = false;
				break;
			}
		}

		
		if (bAdd) {
			searchOptions.types[searchOptions.types.length] = obj;

			if (bSearch) {
				searchOptions.page = 1;
				refreshPage();
				refreshTypes();
				setHash();
				refreshMyOptions();
			}
		}
	}

	return false;
}


function refreshTypes() {
	var objForm = document.forms["TheisVineSearch"];

	var s = "";
	for (var i = 0; i < searchOptions.types.length; i++) {
		s += (i > 0 ? "," : "") + searchOptions.types[i].id;
	}

	if (objForm.types) {
		objForm.types.value = s;
	}
}


function parseTypes(s) {
	var b = false;
	var rx = /^\d+(,\d+)*$/;
	var sArr = s.split(",");

	if (s.match(rx)) {
		for (var i = 0; i < sArr.length; i++) {
			for (var j = 0; j < types.length; j++) {
				if (types[j].id == parseInt(sArr[i])) {
					b = true;
					addType(sArr[i]);
					break;					
				}
			}	
		}
	}
	if (!b) {
		
		var sArr = s.split("_");
		if (sArr.length > 0) {
			for (var i = 0; i < sArr.length; i++) {
				v = getTypeId(sArr[i]);
				if (v > 0) {
					addType(v);
				}
			}
		}
	}
}






function removeVintage(v) {
	v = parseInt(v, 10);
	for (var i = 0; i < searchOptions.vintages.length; i++) {
		if (searchOptions.vintages[i] == v) {
			searchOptions.vintages.splice(i, 1);
			searchOptions.page = 1;
			refreshPage();
			refreshVintages();
			setHash();
			refreshMyOptions();
			break;
		}
	}
	return false;
}

function addVintage(v) {
	v = parseInt(v, 10);
	var obj = null;
	for (var i = 0; i < vintages.length; i++) {
		if (v == vintages[i]) {
			obj = vintages[i];
			break;
		}
	}

	if (obj != null) {
		var bAdd = true;

		
		for (var i = 0; i < searchOptions.vintages.length; i++) {
			if (searchOptions.vintages[i] == obj) {
				bAdd = false;
				break;
			}
		}
		
		
		if (bAdd) {
			searchOptions.vintages[searchOptions.vintages.length] = obj;

			if (bSearch) {
				searchOptions.page = 1;
				refreshPage();
				refreshVintages();
				setHash();
				refreshMyOptions();
			}
		}
	}

	return false;
}


function refreshVintages() {
	var objForm = document.forms["TheisVineSearch"];
	if (objForm.vintages) {
		objForm.vintages.value = searchOptions.vintages.toString();
	}
}


function parseVintages(s) {
	var rx = /^\d+((?:,|_)\d+)*$/;
	if (s.match(rx)) {
		s = s.split((s.indexOf(",") > -1 ? "," : "_"));
		for (var i = 0; i < s.length; i++) {
			for (var j = 0; j < vintages.length; j++) {
				if (vintages[j] == parseInt(s[i])) {
					addVintage(s[i]);
					break;					
				}
			}	
		}
	}
}




function removePriceRange(id) {
	id = parseInt(id, 10);
	for (var i = 0; i < searchOptions.priceranges.length; i++) {
		if (searchOptions.priceranges[i].id == id) {
			searchOptions.priceranges.splice(i, 1);
			searchOptions.page = 1;
			refreshPage();
			refreshPriceRanges();
			setHash();
			refreshMyOptions();
			break;
		}
	}
	return false;
}

function addPriceRange(id) {
	id = parseInt(id, 10);
	var obj = null;
	for (var i = 0; i < priceranges.length; i++) {
		if (priceranges[i].id == id) {
			obj = priceranges[i];
			break;
		}
	}

	if (obj != null) {
		var bAdd = true;

		
		for (var i = 0; i < searchOptions.priceranges.length; i++) {
			if (searchOptions.priceranges[i].id == obj.id) {
				bAdd = false;
				break;
			}	
		}

		
		if (bAdd) {
			searchOptions.priceranges[searchOptions.priceranges.length] = obj;		
			if (bSearch) {
				searchOptions.page = 1;
				refreshPage();
				refreshPriceRanges();
				setHash();
				refreshMyOptions();
			}
		}
	}

	return false;
}

function refreshPriceRanges() {
	var objForm = document.forms["TheisVineSearch"];
	var s = "";
	for (var i = 0; i < searchOptions.priceranges.length; i++) {
		s += (i > 0 ? "," : "") + searchOptions.priceranges[i].min +"-"+ searchOptions.priceranges[i].max;
	}

	if (objForm.priceranges) {
		objForm.priceranges.value = s;
	}
}

function parsePriceRanges(s) {
	var rx = /^\d+(?:kr)?-\d*(?:kr)?((?:,|_)\d+(?:kr)?-\d*(?:kr)?)*$/;
	if (s.match(rx)) {
		s = s.replace(/[^\-0-9,_]/gi,"");
		sArr = s.split(s.indexOf(",") > -1 ? "," : "_");

		for (var i = 0; i < sArr.length; i++) {
			for (var j = 0; j < priceranges.length; j++) {
				if ((priceranges[j].min +"-"+ priceranges[j].max) == (sArr[i])) {
					addPriceRange(priceranges[j].id);
					break;
				}
			}	
		}
	}
}





function setOffers(obj) {
	searchOptions.offers = obj.checked;
	searchOptions.page = 1;
	refreshPage();
	setHash();
	refreshMyOptions();
}

function removeOffers() {
	searchOptions.offers = false;
	searchOptions.page = 1;
	refreshPage();
	refreshOffers();
	setHash();
	refreshMyOptions();
}

function refreshOffers() {
	var objForm = document.forms["TheisVineSearch"];
	var obj = objForm.offers;
	if (obj) {
		obj.checked = searchOptions.offers;
	}
}

function parseOffers(v) {
	searchOptions.offers = (v == "1");
	refreshOffers();
}













function str2int(s) {
	s = parseInt(s, 10);
	if (isNaN(s)) {
		s = 0;
	}
	return s;
}




function initInputFields() {
	$("input[type = 'text'], input[type = 'password'], textarea").each(function() {
		$(this).bind("focus", function() {
			$(this).addClass("textfocus");
		});
		$(this).bind("blur", function() {
			$(this).removeClass("textfocus");
		});
	});
}

function initNewsTabs() {
	

	$("#fp_newsTabs a, #fp-news-tabs a").click(function() {
		$(this).parent().addClass("current").siblings().removeClass("current");
		$($(this).attr("href")).css("display", "block").siblings().css("display", "none");
		$(this).blur();
		return false;
	});

	
}

function initTabs() {
	
	var oA = $("ul.tabs a");
	oA.bind("click", function() {
		var objA = $(this);
		var objParent = objA.parent();
		var tId = objA.attr("href").substring(1);

		
		objParent.addClass("current");
		objParent.siblings("li").removeClass("current");

		
		$("div.tabdata").each(function() {
			if ($(this).attr("id") == tId) {
				$(this).addClass("current");
				if (tId == "wine-map") {
					refreshGoogleMaps();
				}
			}
			else {
				$(this).removeClass("current");
			}
		});

		
		return false;
	});

	returnFalseForSafari(oA);
}





function toggleSearchSection(objSection) {
	var oSection = $(objSection);

	oSection.children("div.sectionBody").slideToggle("fast", function() {
		oSection.toggleClass("open");
	});

}

function initSearchSections() {
	var oA = $("div.sectionHeader a");
	oA.bind("click", function() {
		$(this).parents("div.section").each(function() {
			toggleSearchSection($(this))
		});		
		return false;
	});
	returnFalseForSafari(oA);
}





function doSearchToggle(objToggle) {
	var oLi = $(objToggle).parents("li:first");
	var oUl = oLi.children("ul:first");

	var ali = oLi.siblings("li");
	var div = oLi.children("div:first");

	var oSection = $(objToggle).parents("div.section:first");
	var oSectionBody = oSection.children("div.sectionBody:first");
	var oBack = oSectionBody.children("div.back:first");
	var oHeader = oLi.children("div:first");

	var oGrandparent = div.parent("li").parent("ul").parent("li");

	var oA = oGrandparent.find("a:first");
	var oPrevToggle = oGrandparent.find("span.toggle:first");
	var backtitle = (oA.length == 0 ? "landeoversigt" : oA.text());


	oSectionBody.slideUp("fast", function() {  //screws up in old Safari

		//IE css bug fix:
		if ($.browser.msie) {
			if (parseInt($.browser.version.substr(0, 1), 10) >= 7) {
				oLi.css("min-height", "0");
			}
			else {
				oLi.css("height", "0");
			}
		}

		oHeader.css("display", "none"); //hide current header
		oUl.children("li").css("display", "block"); //display all current level items
		oUl.find("li div").css("display", "block"); //set default display on sublevel items
		oUl.find("li ul").css("display", "none"); //hide sublevel items
		oUl.css("display", "block"); //display current level items;
		ali.css("display", "none"); //hide sibling level items

		oBack.children("span:first").text("Tilbage til "+ backtitle);
		oBack.css("display", "block");

		$.each(oBack, function() {
			this.onclick = function() {
				if (oPrevToggle.length == 0) {

					oSectionBody.slideUp("fast", function() { //screws up in old Safari

						oSectionBody.children("ul").children("li").each(function() {
							$(this).children("div").css("display", "block");
							$(this).css("display", "block");
							oBack.css("display", "none");
						});

						oSectionBody.find("ul ul").css("display", "none");

						oSectionBody.slideDown("fast");
					});

				}
				else {
					oPrevToggle.click();
				}

				return false;
				returnFalseForSafari($(this));
			}
		});

		oSectionBody.slideDown("fast");
	});
}

function initSearchToggles() {
	var oSpan = $("div.sectionBody span.toggle");

	oSpan.bind("click", function() {
		doSearchToggle($(this));
	});
}





function getWinehouseCountryByTitle(s) {
	var res = null;
	if (winehousecountries.length > 0) {
		$.each(winehousecountries, function(i, n) {
			if (n.title == s) {
				res = n;
				return false;
			}
		});
	}
	return res;
}




function buildWinehouseToggle(options) {
	var oSection = $("#winehousesection");
	var oSectionBody = $(oSection).children("div.sectionBody");

	var objCountry = (typeof options.country != "undefined" ? options.country : null);
	var objRegion = (typeof options.region != "undefined" ? options.region : null);
	var objDistrict = (typeof options.district != "undefined" ? options.district : null);
	var data = (typeof options.data != "undefined" ? options.data : null);

	var oUL = document.createElement("ul");
	var oBack = document.createElement("div");
	var href = "/" + (searchData.enprimeur ? "en-primeur" : (searchData.residual ? "restsalg" : "vine" )) +"/"

	if (data != null) {
		if (data.countries) {
			$.each(data.countries, function(i, n) {
				var oLI = document.createElement("li");
				var oDiv = document.createElement("div");
			
				var oA = document.createElement("a");
				$(oA).attr("href", href + n.key +"/");
				$(oA).text(n.title);
				$(oA).attr("title", "Vis alle producenter i "+ n.title);
				$(oA).click(function() {
					refreshWinehousesList({
						country: n,
						region: objRegion,
						district: objDistrict,
						id: n.id
					});
					return false;
				});

				$(oDiv).append(oA);
	
				if (n.regions > 0) {
					var oSpan = document.createElement("span");
					$(oSpan).addClass("whtoggle");
					$(oSpan).html("<img width=\"15\" height=\"12\" alt=\"\" src=\"/site/images/blank.gif\" />distrikter");
					$(oSpan).click(function() {
						refreshWinehousesGeo({
							country: n,
							id: n.id
						});

					});
					$(oDiv).append(oSpan);
				}

				$(oLI).append(oDiv);
				$(oUL).append(oLI);						
			});

			$(oSectionBody).empty().append(oUL);
		}
		else if (data.regions) {
			var oDesc = document.createElement("div");
			$(oDesc).text("Distrikter i "+ objCountry.title);
			$(oDesc).addClass("desc");

			$(oBack).addClass("back");
			$(oBack).html("<span></span>");
			$(oBack).text("Tilbage til landeoversigt");

			$(oBack).click(function() {
				refreshWinehousesGeo({});
			});
			$(oBack).css("display", "block");


			$.each(data.regions, function(i, n) {
				var oLI = document.createElement("li");
				var oDiv = document.createElement("div");
			
				var oA = document.createElement("a");
				$(oA).attr("href", href + n.key +"/");
				$(oA).text(n.title);
				$(oA).attr("title", "Vis alle producenter i "+ n.title);
				$(oA).click(function() {
					refreshWinehousesList({
						country: objCountry,
						region: n,
						district: objDistrict,
						id: n.id
					});
					return false;
				});

				$(oDiv).append(oA);
	
				if (n.districts > 0) {
					var oSpan = document.createElement("span");
					$(oSpan).addClass("whtoggle");
					$(oSpan).html("<img width=\"15\" height=\"12\" alt=\"\" src=\"/site/images/blank.gif\" />kommuner");
					$(oSpan).click(function() {
						refreshWinehousesGeo({
							country: objCountry,
							region: n,
							id: n.id
						});
					});
					$(oDiv).append(oSpan);
				}

				$(oLI).append(oDiv);
				$(oUL).append(oLI);						
			});

			$(oSectionBody).empty().append([oBack, oDesc, oUL]);
		}
		else if (data.districts) {
			var oDesc = document.createElement("div");
			$(oDesc).text("Kommuner i "+ objRegion.title);
			$(oDesc).addClass("desc");

			$(oBack).addClass("back");
			$(oBack).html("<span></span>");
			$(oBack).find("span").text("Tilbage til "+ objCountry.title);
			$(oBack).click(function() {
				refreshWinehousesGeo({
					country: objCountry,
					region: objRegion,
					district: objDistrict,
					id: objCountry.id
				});
			});
			$(oBack).css("display", "block");


			$.each(data.districts, function(i, n) {
				var oLI = document.createElement("li");
				var oDiv = document.createElement("div");
			
				var oA = document.createElement("a");
				$(oA).attr("href", href + n.key +"/");
				$(oA).text(n.title);
				$(oA).attr("title", "Vis alle producenter i "+ n.title);
				$(oA).click(function() {
					refreshWinehousesList({
						country: objCountry,
						district: n,
						region: objRegion,
						id: n.id
					});
					return false;
				});

				$(oDiv).append(oA);
				$(oLI).append(oDiv);
				$(oUL).append(oLI);						
			});

			$(oSectionBody).empty().append([oBack, oDesc, oUL]);
		
		}
		else if (data.winehouses) {
			var oDesc = document.createElement("div");
			$(oDesc).addClass("desc");

			var obj = (objCountry || objRegion || objDistrict);
			var id = 0;

			$(oBack).addClass("back");
			$(oBack).html("<span></span>");

			if (objDistrict) {
				$(oDesc).text("Vinproducenter i "+ objDistrict.title);
				$(oBack).children("span").text("Tilbage til "+ objRegion.title);
				id = objRegion.id;
			}
			else if (objRegion) {
				$(oDesc).text("Vinproducenter i "+ objRegion.title);
				$(oBack).children("span").text("Tilbage til "+ objCountry.title);				
				id = objCountry.id;
			}
			else {
				$(oDesc).text("Vinproducenter i "+ objCountry.title);
				$(oBack).children("span").text("Tilbage til landeoversigt");	
				id = 0;
			}

			$(oBack).click(function() {
				refreshWinehousesGeo({
					country: objCountry,
					region: objRegion,
					district: objDistrict,
					id: id
				});
			});
			$(oBack).css("display", "block");


			$.each(data.winehouses, function(i, n) {
				var oLI = document.createElement("li");
				var oDiv = document.createElement("div");
			
				var oA = document.createElement("a");
				$(oA).attr("href", href + n.key +"/");
				$(oA).text(n.title);
				$(oA).click(function() {
					return addWinehouse(n);
				});

				$(oDiv).append(oA);
				$(oLI).append(oDiv);
				$(oUL).append(oLI);						
			});
			

			$(oSectionBody).empty().append([oBack, oDesc, oUL]);
		}
	}
}


function refreshWinehousesList(options) {
	var oSection = $("#winehousesection");
	var oSectionBody = $(oSection).children("div.sectionBody");
	var oLoading = $(oSection).find(".sectionHeader span.loading");

	var objCountry = (typeof options.country != "undefined" ? options.country : null);
	var objRegion = (typeof options.region != "undefined" ? options.region : null);
	var objDistrict = (typeof options.district != "undefined" ? options.district : null);
	var id = (typeof options.id != "undefined" ? options.id : 0);	

	$(oLoading).css("display", "block");

	$(oSectionBody).slideUp("fast", function() {
		var _this = $(this);

		$.ajax({
			url: "/custom/site/json/wh.json.asp",
			data: {
				id: id,
				enprimeur: (searchData.enprimeur ? 1 : 0),
				residual: (searchData.residual ? 1 : 0)
			},
			type: "GET",
			dataType: "json",
			async: true,
			cache: true,
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				
				$(_this).slideDown("fast", function() {	
					$(oLoading).css("display", "none");				
				});
			},
			success: function(data, textStatus) {
								
				if (data) {
					buildWinehouseToggle({
						country: objCountry,
						region: objRegion,
						district: objDistrict,
						data: data
					});

				}
				$(_this).slideDown("fast", function() {
					$(oLoading).css("display", "none");				
				});
			}
		});
	});
}


function refreshWinehousesGeo(options) {
	var oSection = $("#winehousesection");
	var oSectionBody = $(oSection).children("div.sectionBody");
	var oLoading = $(oSection).find(".sectionHeader span.loading");

	var objCountry = (typeof options.country != "undefined" ? options.country : null);
	var objRegion = (typeof options.region != "undefined" ? options.region : null);
	var objDistrict = (typeof options.district != "undefined" ? options.district : null);
	var id = (typeof options.id != "undefined" ? options.id : 0);


	$(oLoading).css("display", "block");

	$(oSectionBody).slideUp("fast", function() {
		var _this = $(this);

		$.ajax({
			url: "/custom/site/json/whgeo.json.asp",
			data: {
				id: id,
				enprimeur: (searchData.enprimeur ? 1 : 0),
				residual: (searchData.residual ? 1 : 0)
			},
			type: "GET",
			dataType: "json",
			async: true,
			cache: true,
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				
				$(_this).slideDown("fast", function() {	
					$(oLoading).css("display", "none");				
				});
			},
			success: function(data, textStatus) {
								
				if (data) {
					buildWinehouseToggle({
						country: objCountry,
						region: objRegion,
						district: objDistrict,
						data: data
					});

				}
				$(_this).slideDown("fast", function() {
					$(oLoading).css("display", "none");				
				});
			}
		});
	});
}


function initWHSearchToggles() {
	var objA = $("#winehousesection .sectionHeader a");
	$(objA).addClass("clearfix");

	
	var objLoading = document.createElement("span");
	$(objLoading).html("&nbsp;");
	$(objLoading).addClass("loading").css("display", "none");
	$(objA).prepend(objLoading);

	var oSectionBody = $("#winehousesection .sectionBody");

	
	$(oSectionBody).find("a").each(function() {
		var obj = getWinehouseCountryByTitle($(this).text());
		if (obj != null) {
			$(this).attr("href", "/"+ (searchData.enprimeur ? "en-primeur" : (searchData.residual ? "restsalg" : "vine" ))  +"/" + obj.key +"/");		
			$(this).attr("title", "Vis alle producenter i "+ obj.title);

			
			$(this).click(function() {
				refreshWinehousesList({
					country: obj,
					id: obj.id
				});
	
				return false;
			});

			
			$(this).siblings("span.whtoggle:first").click(function() {
				refreshWinehousesGeo({
					country: obj,
					id: obj.id
				});
			});
		}
		else {
			$(this).removeAttr("href");	
		}
	}); 
}



function toggleMapSearch() {
	$("#foo").hide();
	$("#wineSearchFlashMap").slideToggle("normal", function() {
		$("#wineSearchMap").toggleClass("open");		
		$("#foo").show();
	});
}

function initMapSearch() {
	var oA = $("a#mapToggle");

	oA.bind("click", function() {
		toggleMapSearch();
		return false;
	});

	returnFalseForSafari(oA);
}



function initDeliveryMethods() {
	var objC = $(".commentsBlock");
	if (objC.length > 0) {
		
		$("#EshopDMc").change(function() {
			$(this).val($(this).val().substr(0, 1024));
		});
		
		$("input[name='EshopDM']").each(function() {
			$(this).click(function() {
				if ($(this).val() == "2") {
					$(objC).show();
				}
				else {
					$(objC).hide();
					$("#EshopDMc").val("");
				}
			});
		});
	}
}




function returnFalseForSafari(obj) {
	if ($.browser.safari && ($.browser.version.substr(0, 1) == "3")) {
		$.each(obj, function() {
			this.onclick = function() { return false; }
		});
	}
}








function setHash() {
	var h = generateSearchHash();
	$.historyLoad(h);

}






var searchLocation = "";
var bFirstLoad = true;


function initSearchData() {

	var objForm = document.forms["TheisVineSearch"];
	var objStateForm = document.forms["TheisVineSearchState"];

	
	var rx = /^([a-z]+)=([^\.]*)$/i;
	
	var srx = /^([a-z\-_0-9]+)$/i;
	
	var prx = /^side-(\d+)$/i;

	
	bSearch = false;

	
	bFetchData = false;

	var bProceed = true;

	var h = searchLocation;
	h = ((typeof h == "undefined") ? "" : h);

	
	searchOptions.types = [];
	searchOptions.geo = [];
	searchOptions.wh = [];
	searchOptions.vintages = [];
	searchOptions.priceranges = [];
	searchOptions.offers = offers;
	searchOptions.orderby = searchData.orderby; //"default";


	
	if (h == "init") {
		resetMyOptions();
	}
	else if (h != "") {
		h = h.replace(/&/g, "/");
		var hArr = h.split("/");
		
		if (hArr.length > 0) {
			var bPage = false;
			var bArg = false;

			for (var i = 0; i < hArr.length; i++) {

				x = hArr[i];
				
				if (x.match(srx)) {
					bArg = true;
					bFetchData = true;

					switch(x) {
						case "tilbud" : 
							parseOffers(1);
							break;

						default :
							if (x.match(prx)) {
								bPage = true;
								v = x.replace(prx, "$1");
								parsePage(v);
							}
							else {
								parseTypes(x);
								parseGeo(x);
								parseWinehouses(x);
								parseVintages(x);
								parsePriceRanges(x);
								parseView(x);
								parseOrderBy(x);
							}
							break;						
					}		

				}
				
				else if (x.match(rx)) {
					k = x.replace(rx, "$1");
					v = x.replace(rx, "$2");

					switch (k) {
						case "vintype" :
							bArg = true;
							bFetchData = true;
							parseTypes(v);
							break;
						case "omraade" :
							bArg = true;
							bFetchData = true;
							parseGeo(v);
							break;
						case "aargang" :
							bArg = true;
							bFetchData = true;
							parseVintages(v);
							break;
						case "pris" :
							bArg = true;
							bFetchData = true;
							parsePriceRanges(v);
							break;
						case "side" :
							bArg = true;
							bPage = true;
							bFetchData = true;
							parsePage(v);
							break;
						case "orderby" :
							bArg = true;
							bFetchData = true;
							parseOrderBy(v);
							break;
						case "tilbud" :
							bArg = true;
							bFetchData = true;
							parseOffers(1);
							break;
					}
		
				}
			}

			
			if (!bPage && bArg) {
				bFetchData = true;
				parsePage(1);
			}

			
			refreshTypes();
			refreshGeo();
			refreshWinehouses();
			refreshVintages();
			refreshPriceRanges();
			refreshPage();
			refreshOrderby();
			refreshOffers();
			refreshView();

			if (bFetchData) {
				bFirstLoad = false;
			}

			
			bSearch = true;
			refreshMyOptions(); 
		}
	}
	
	else {
		bFetchData = false;
		bSearch = false;

		if (objStateForm.types) {
			parseTypes(objStateForm.types.value);
		}
		if (objStateForm.geo) {
			parseGeo(objStateForm.geo.value);
		}
		if (objStateForm.wh) {
			parseWinehouses(objStateForm.wh.value);
		}
		if (objStateForm.vintages) {
			parseVintages(objStateForm.vintages.value);
		}
		if (objStateForm.priceranges) {
			parsePriceRanges(objStateForm.priceranges.value);
		}
		if (objStateForm.page) {
			parsePage(objStateForm.page.value);
		}
		if (objStateForm.orderby) {
			parseOrderBy(objStateForm.orderby.value);
		}
		if (objStateForm.offers) {
			parseOffers(objStateForm.offers.value);
		}
		if (objStateForm.view) {
			parseView(objStateForm.view.value);
		}
	
		refreshTypes();
		refreshGeo();
		refreshWinehouses();
		refreshVintages();
		refreshPriceRanges();
		refreshPage();
		refreshOrderby();
		refreshOffers();
		refreshView();

		if (!bFirstLoad) {
			bFetchData = true;
			bSearch = true;
		}

		refreshMyOptions();
	}

	
	if (!bFetchData) {
		displaySearchResults();
	}

	bSearch = true;
	bFetchData = true;

}



function initSimpleSearchResults() {
	$("table.wineList tr").each(function() {
		$(this).bind("mouseover", function() {
			$(this).addClass("over");
		});
		$(this).bind("mouseout", function() {
			$(this).removeClass("over");
		});
	});
}

function initSearchResults() {
	if ($.browser.msie) {
		$("#wineSearchResultsContent span.img").each(function() {
			var href = $(this).parent("a").attr("href");
			$(this).click(function() {
				window.location = href;
			});
		});
	}
	$("#wineSearchResultsContent table.wineList tr").hover(
		function() {
			$(this).addClass("over");
		},
		function() {
			$(this).removeClass("over");
		}
	);
}

function hideSearchResults() {
	$("#wineSearchResultsContent, #wineSearchCount, div.viewbuttons, div.pager").css("visibility", "hidden");
}

function displaySearchResults() {
	$("#wineSearchResultsContent, #wineSearchCount, div.viewbuttons, div.pager").css("visibility", "visible");
}




var reqLiteCart = null;
function refreshLiteCart() {
	var obj = $("#tv-cart-header").get(0);
	if (obj != null) {
		var objCount = $(obj).find(".tv-count").get(0);
		var objCheckout = $(obj).find(".tv-checkout").get(0);

		if (reqLiteCart != null) {
			reqLiteCart.abort();
		}

		reqLiteCart = $.ajax({
			url : "/custom/site/json/cart.asp",
			type : "GET",
			dataType : "json",
			async : true,
			cache : false,
			complete : function() {
			
			},
			error : function() {
			
			},
			success : function(data) {
				if (data != null) {
					if (data.count != null) {
						var c = data.count;
						var t = data.total;

						$(obj).fadeOut("fast", function() {
							$(this).removeClass("tv-hidden");

							$(objCount).html( (c > 0 ? c +" "+ (c > 1 ? " varer" : " vare") +" = "+ formatPrice(t, 2, "kr.") : "0 varer"));

							if (c == 0) {
								$(objCheckout).hide();
							}
							else {
								$(objCheckout).show();
							}

							$(this).fadeIn("fast");
						});	
					}
				}
			}
		});
	}
}





function refreshMemo() {
	var reqKey = "refreshmemo";
	myRequests.remove(reqKey);
	
	var oXML = new XMLObject();
	var oXMLHttp = new XMLHttpRequestObject();
	oXMLHttp.async = true;
	oXMLHttp.src = "/custom/site/xml/memocount.asp";

	var waitObj = new waitForIt();
	waitObj.waitFor = function() {
		return oXMLHttp.completed();
	}
	waitObj.whenDone = function() {
		if (oXMLHttp.xml != null) {
			if (oXML.loadXML(oXMLHttp.xml)) {
				var oRoot = oXML.selectSingleNode("memocount");
				var c = parseInt(oRoot.getAttribute("c"), 10);
				$("#favCount").html(c + "");
			}		
		}
	}

	oXMLHttp.load();
	waitObj.run();
	myRequests.add(reqKey, oXMLHttp, waitObj);	
}

function addToMemo(id) {
	var reqKey = "addtomemo";
	myRequests.remove(reqKey);
	
	var oXMLHttp = new XMLHttpRequestObject();
	oXMLHttp.async = true;
	oXMLHttp.src = "/custom/site/xml/memoadd.asp";
	oXMLHttp.args = "id="+ id;

	var waitObj = new waitForIt();
	waitObj.waitFor = function() {
		return oXMLHttp.completed();
	}

	waitObj.whenDone = function() {
		if (oXMLHttp.xml != null) {
			refreshMemo();
		}
	}

	oXMLHttp.load();
	waitObj.run();
	myRequests.add(reqKey, oXMLHttp, waitObj);	
}

function removeFromMemo(id, obj) {
	var reqKey = "removefrommemo";
	myRequests.remove(reqKey);
	
	var oXMLHttp = new XMLHttpRequestObject();
	oXMLHttp.async = true;
	oXMLHttp.src = "/custom/site/xml/memoremove.asp";
	oXMLHttp.args = "id="+ id;

	var waitObj = new waitForIt();
	waitObj.waitFor = function() {
		return oXMLHttp.completed();
	}

	waitObj.whenDone = function() {
		if (oXMLHttp.xml != null) {
			var oTable = $(obj).parents("table:first");
			var oTR = $(obj).parents("tr:first");
			var arrTR = $(oTR).siblings("tr");
			$(oTR).remove();
			if (arrTR.length == 0) {
				$(oTable).remove();
			}
			else {
				for (var i = 0; i < arrTR.length; i++) {
					if (i % 2 == 0) {
						$(arrTR[i]).removeClass("odd");
					}
					else {
						$(arrTR[i]).addClass("odd");
					}
				}
			}
			refreshMemo();
		}
	}

	oXMLHttp.load();
	waitObj.run();
	myRequests.add(reqKey, oXMLHttp, waitObj);	
}

function toggleMemo(id, obj) {
	var reqKey = "togglememo";
	myRequests.remove(reqKey);

	var oXML = new XMLObject();
	var oXMLHttp = new XMLHttpRequestObject();
	oXMLHttp.async = true;
	oXMLHttp.src = "/custom/site/xml/memotoggle.asp";
	oXMLHttp.args = "id="+ id;

	var waitObj = new waitForIt();
	waitObj.waitFor = function() {
		return oXMLHttp.completed();
	}

	waitObj.whenDone = function() {
		if (oXMLHttp.xml != null) {
			if (oXML.loadXML(oXMLHttp.xml)) {
				var oRoot = oXML.selectSingleNode("memotoggle");
				var b = (oRoot.getAttribute("b") == "true");
				if (b) {
					$(obj).addClass("favact");
					$(obj).attr("title", "Fjern fra mine vine");
					$(obj).html("<span>Fjern fra mine vine</span>");
				}
				else {
					$(obj).removeClass("favact");
					$(obj).attr("title", "Tilføj til mine vine");
					$(obj).html("<span>Tilføj til mine vine</span>");
				}
			
				refreshMemo();
			}
		}
	}

	oXMLHttp.load();
	waitObj.run();
	myRequests.add(reqKey, oXMLHttp, waitObj);	

}


function clearMemo() {
	var reqKey = "clearmemo";
	myRequests.remove(reqKey);
	
	var oXMLHttp = new XMLHttpRequestObject();
	oXMLHttp.async = true;
	oXMLHttp.src = "/custom/site/xml/memoclear.asp";

	var waitObj = new waitForIt();
	waitObj.waitFor = function() {
		return oXMLHttp.completed();
	}

	waitObj.whenDone = function() {
		if (oXMLHttp.xml != null) {
			refreshMemo();
		}
	}

	oXMLHttp.load();
	waitObj.run();
	myRequests.add(reqKey, oXMLHttp, waitObj);	
}







function addToCart(id) {
	if ($("#prod_"+ id).length > 0) {
		$("#prod_"+ id).each(function(){
			var v = str2int($(this).attr("value"));
			$(this).attr("value", v);
			if (v > 0) {
				window.location = "/idd20.asp?eshpcart=add&prod_id="+ id +"&prod_"+ id +"="+ v;
			}
		});
	}
	else {
		window.location = "/idd20.asp?eshpcart=add&prod_id="+ id +"&prod_"+ id +"=1";	
	}
}








var oGM = null;
var gmLat = null;
var gmLng = null;


function refreshGoogleMaps() {
	if (oGM != null) {
		oGM.checkResize();
		oGM.setCenter(new GLatLng(gmLat, gmLng), 13);
	}
}





function initProductTabs() {
	
	$.each(TV.productList, function(i, n) {
		if (typeof n.img != "undefined") {
			var objImg = new Image();
			objImg.src = n.img.src;
		}
	});

	
	$(".tv-tab-headers ul a").each(function() {
		var objDiv = $($(this).attr("href")).get(0);

		$(this).click(function() {
			$.each($(".tv-tab"), function(i, n) {
				if (n == objDiv) {
					$(n).addClass("current");
				}
				else {
					$(n).removeClass("current");
				}
			});

			$(this).parent("li").addClass("current").siblings("li").removeClass("current");
			$(this).blur();
			return false;
		});
	});


	
	$("table.tv-tab-list").each(function() {
		/*var obj = $(this).prev("div.tv-tab-img").get(0);
		var objImg = null;
		var objTitle = null;
		var objPrice = null;

		if (obj != null) {
			objImg = $(obj).find("img").get(0);
			objTitle = $(obj).find(".title").get(0);
			objPrice = $(obj).find(".price").get(0);
		}*/


		
		$(this).find("tr").each(function() {
			
			var _tr = this;

			
			/*var rpid = $(_tr).attr("id").replace(/^.*-(\d+-\d+)$/i, "$1"); 

			var objProd = $.grep(TV.productList, function(n, i) {
				return (n.id == rpid);
			});
			if (objProd.length > 0) {
				objProd = objProd[0];
			}*/
	
			
			$(this).hover(
				function() {
					$(this).addClass("hover");
				},
				function() {
					$(this).removeClass("hover");
				}
			);

			
			$(this).click(function() {
				
				
				showProduct($(_tr), false);

				
				/*if ((objTitle != null) && (objPrice != null)) {
					if (objImg != null) {
						$(objImg).stop();
					}

					if (objProd != null) {
					
						
						if (typeof objProd.img != "undefined") {
							$(obj).css("backgroundImage", "url(" + objProd.img.src + ")");	
						}
						else {
							$(obj).css("backgroundImage", "url(/site/images/blank.gif)");
						}


						if (objImg != null) {
							$(objImg).fadeTo("normal", 0, function() {
								if (typeof objProd.img != "undefined") {
									$(objImg).attr({
										"src" : objProd.img.src,
										"width" : objProd.img.w,
										"height" : objProd.img.h
									});
								}
								else {
									$(objImg).attr({
										"src" : "/site/images/blank.gif"
									});
								}
								$(this).css("opacity", "1");
							});
						}

						
						$(objTitle).text(objProd.title);
						$(objTitle).attr("href", objProd.url);

						
						$(objPrice).html((objProd.total != objProd.price ? "<del>" + formatPrice(objProd.price, 2, "kr.") + "</del> " : "") + formatPrice(objProd.total, 2, "kr."));

						$(objPrice).unbind("click").click(function() {
							addToCart(objProd.pid);
							return false;
						});

						$(this).siblings("tr").removeClass("current-row");
						$(this).addClass("current-row");
					}
				}*/		
			});

			
			var objA = $(this).find("a").get(0);
			if (objA != null) {
				$(objA).click(function() {
					$(_tr).click();
					$(this).blur();
					return false;
				});
			}
		});

		//$(this).find("tr:first").click();
		showProduct($(this).find("tr:first"), true);
	});
}

function showProduct(objTr, cycle) {
	
	var rpid = objTr.attr("id").replace(/^.*-(\d+-\d+)$/i, "$1"); 

	var objProd = $.grep(TV.productList, function(n, i) {
		return (n.id == rpid);
	});
	if (objProd.length > 0) {
		objProd = objProd[0];
	}

	var objContent = objTr.parents("table.tv-tab-list:first").prev("div.tv-tab-img").get(0);
	var objImg = null;
	var objTitle = null;
	var objPrice = null;

	if (objContent != null) {
		objImg = $(objContent).find("img").get(0);
		objTitle = $(objContent).find(".title").get(0);
		objPrice = $(objContent).find(".price").get(0);
	}

	if ((objTitle != null) && (objPrice != null)) {
		if (objImg != null) {
			$(objImg).stop();
		}

		if (objProd != null) {
		
			
			if (typeof objProd.img != "undefined") {
				$(objContent).css("backgroundImage", "url(" + objProd.img.src + ")");	
			}
			else {
				$(objContent).css("backgroundImage", "url(/site/images/blank.gif)");
			}


			if (objImg != null) {
				$(objImg).fadeTo("normal", 0, function() {
					if (typeof objProd.img != "undefined") {
						$(objImg).attr({
							"src" : objProd.img.src,
							"width" : objProd.img.w,
							"height" : objProd.img.h
						});
					}
					else {
						$(objImg).attr({
							"src" : "/site/images/blank.gif"
						});
					}
					$(this).css("opacity", "1");
				});
			}

			
			$(objTitle).text(objProd.title);
			$(objTitle).attr("href", objProd.url);

			
			$(objPrice).html((objProd.total != objProd.price ? "<del>" + formatPrice(objProd.price, 2, "kr.") + "</del> " : "") + formatPrice(objProd.total, 2, "kr."));

			$(objPrice).unbind("click").click(function() {
				addToCart(objProd.pid);
				return false;
			});

			objTr.siblings("tr").removeClass("current-row");
			objTr.addClass("current-row");
		}
	}
	
	if (cycle) {
		$(document).oneTime(6000, "cycle", function() {
			var objNextTr = objTr.next("tr").length > 0 ? objTr.next("tr") : objTr.siblings("tr:first");
			showProduct(objNextTr, true);	
		});
	}
	else {
		$(document).stopTime("cycle")
	}
}

$(document).ready(function() {
	initInputFields();
	initNewsTabs();
	initTabs();
	initProductTabs();
	initSearchSections();
	initSearchToggles();
	initWHSearchToggles();
	initMapSearch();
	initSearchResults();
	//refreshLiteCart();
});

