﻿// compare basket class		
function X3_CompareBasket(id) {
	this.id = id;

	// product array
	this.arrProducts = new Array();
	this.oldWidgetCategory = null;

	// classes
	this.Product = X3_Product;

	// functions
	this.addProduct = X3_addProduct;
	this.removeProduct = X3_removeProduct;
	this.formatCookie = X3_formatCookie;
	this.setCookie = X3_setCookie;
	this.getCookie = X3_getCookie;
	this.sortByCatName = X3_sortByCatName;
	this.setCompareBoxes = X3_setCompareBoxes;
	this.setCompareBox = X3_setCompareBox;
	this.compareValid = X3_compareValid;
	this.updateWidget = X3_updateWidget;
	this.replaceCategoryName = X3_replaceCategoryName;
	this.countProductsByCategory = X3_countProductsByCategory;
	this.changeColor = X3_changeColor;
}

// product class
function X3_Product(guid, cat, catGuid, modelDCom, modelD, image, url) {
	this.guid = guid;
	this.cat = cat;
	this.catGuid = catGuid;
	this.modelDCom = modelDCom;
	this.modelD = modelD;
	this.image = image;
	this.url = url;
}

// add product to product array and rewrites the cookie
function X3_addProduct(guid, cat, catGuid, modelDCom, modelD, image, url) {
	var prodCounter = 0;

	for (var i = 0, l = this.arrProducts.length; i < l; i++) {
		// if product already exists: break
		if (this.arrProducts[i].guid == guid)
			return;

		// counts products per category
		if (this.arrProducts[i].cat == cat)
			prodCounter++;
	}

	// show basket
	//$get("widgetHolder").style.display = "block";	

	// max compared item 4
	if (prodCounter < 4) {

		// add product
		var product = new this.Product(guid, cat, catGuid, modelDCom, modelD, image, url);
		this.arrProducts[this.arrProducts.length] = product;

		// set cookie
		this.setCookie(this.id, this.formatCookie(), 1);

		// update widget
		this.updateWidget(guid);

		// set color
		this.changeColor(guid, true);
	}
	else {
		alert(ProductTranslate.TooManyProductsToCompare);
		this.setCompareBox(guid, false);
	}
}

function X3_countProductsByCategory(cat) {
	var prodCounter = 0;

	for (var index = 0; index < this.arrProducts.length; index++) {
		if (this.arrProducts[index].cat == cat)
			prodCounter++;
	}

	return prodCounter;
}

// removes product from object array and rewrites the cookie
function X3_removeProduct(guid, uncheck) {

	// find position to remove
	for (var i = 0, l = this.arrProducts.length; i < l; i++) {
		if (this.arrProducts[i].guid == guid) {

			// uncheck box if called from widget remove
			if (uncheck)
				this.setCompareBox(guid, false);

			// set color
			this.changeColor(guid, false);

			this.arrProducts.splice(i, 1);
			l = this.arrProducts.length;
			this.setCookie(this.id, this.formatCookie(), 100);
		}
	}

	//if(this.arrProducts.length == 0)
	//	$get("widgetHolder").style.display = "none";			

	// update widget
	this.updateWidget();

	// Added by Mattias Olsson Logica
	if (this.arrProducts.length < 1) {
		mpPopdown("mp_compareProducts");
	}
}

// format cookie value to JSON string
function X3_formatCookie() {
	var arrOut = new Array();

	for (var i = 0, l = this.arrProducts.length; i < l; i++) {
		if (arrOut.length > 0)
			arrOut[i] = ",";

		arrOut[i] = "{'guid':'" + this.arrProducts[i].guid + "','cat':'" + this.arrProducts[i].cat + "','catGuid':'" + this.arrProducts[i].catGuid + "','modelDCom':'" + this.arrProducts[i].modelDCom + "','modelD':'" + this.arrProducts[i].modelD + "','image':'" + this.arrProducts[i].image + "','url':'" + this.arrProducts[i].url + "'}";
	}

	return "[" + arrOut.join() + "]";
}

// set baksed cookie by name, value and exiredays
function X3_setCookie(c_name, value, expiredays) {
	var exdate = new Date();
	exdate.setDate(exdate.getDate() + expiredays);
	document.cookie = c_name + "=" + escape(value) +
		((expiredays == null) ? "" : ";expires=" + exdate.toGMTString()) + ";path=/";
}

// get basket cookie by name
function X3_getCookie(c_name) {
	if (document.cookie.length > 0) {

		c_start = document.cookie.indexOf(c_name + "=");
		if (c_start != -1) {
			c_start = c_start + c_name.length + 1;
			c_end = document.cookie.indexOf(";", c_start);
			if (c_end == -1)
				c_end = document.cookie.length;

			return unescape(document.cookie.substring(c_start, c_end));
		}
	}
	return "";
}

// update widget with selected products
// Modified by Logica 2009-10-29
// Modified by Mattias Olsson (+46 (0)730-922 108)
function X3_updateWidget(productId) {
	// sort by category name
	this.arrProducts.sort(this.sortByCatName);
	this.oldWidgetCategory = null;
	var widget = $("#widget");

	if (widget) {
		widget.html("");

		if ($("#headerCompareValue"))
			$("#headerCompareValue").html(this.arrProducts.length);

		// add category
		for (var c = 0, cl = this.arrProducts.length; c < cl; c++) {

			if (this.arrProducts[c].cat != this.oldWidgetCategory) {
				var div = document.createElement("div");

				var arrProdIds = new Array();
				var arrProdOut = new Array();
				var strOutStart = "";
				var strOutEnd = "";

				// adds products
				var catProdCount = 0;

				for (var p = 0, pl = this.arrProducts.length; p < pl; p++) {
					var prod = this.arrProducts[p];
					if (this.arrProducts[c].cat == prod.cat) {
						var selected = "";
						var justAdded = "";

						if (prod.guid == productId) {
							selected = ' class="selected"';
							justAdded = '<span class="added">' + ProductTranslate.JustAdded + '</span>';
						}

						var modelD;

						if (prod.modelD == prod.modelDCom) {
							modelD = " <span>&nbsp;</span>";
						}
						else {
							modelD = " <span>" + prod.modelD + "</span>";
						}

						arrProdIds[arrProdIds.length] = prod.guid;
						arrProdOut[arrProdOut.length] = '<li' + selected + '>' +
															'<a href="' + prod.url + '">' +
																'<img alt="' + prod.modelDCom + '" src="' + prod.image + '"/>' +
																'<span class="horizontalItemListSubHead">' + prod.modelDCom + modelD + '</span>' +
															'</a>' + justAdded +
															'<div class="tm2 bm2 alignCenter"><a href="javascript:void(0)" onclick="cb_obj.removeProduct(\'' + prod.guid + '\',true)" title="Remove" class="removeItem">' + ProductTranslate.Remove + '</a></div>' +
														'</li>';
						catProdCount++;
					}
				}

				if (catProdCount == 1) {
					arrProdOut[arrProdOut.length] = '<li>' +
														'<a href="' + ProductUrls.ListPage + '?categoryId=' + this.arrProducts[c].catGuid + '" class="addAnotherProduct">' + ProductTranslate.AddAnotherProduct + '</a>' +
													'</li>';
				}

				var strCatStyle = "";
				if (c > 0)
					strCatStyle = ' style="margin-top:10px"';

				strOutStart = '<h3 class="color3 bp2 clear"' + strCatStyle + '><em>' + this.replaceCategoryName(this.arrProducts[c].cat) + '</em><span>' + ProductTranslate.ProductsToCompare + ': <strong>' + arrProdIds.length + '</strong></span></h3>' +
									'<ul class="span-9 horizontalItemList compareProducts clear rm0 tm3">';

				// Modified 2009-11-16 by Mattias Olsson, Logica. Removed "Products to compare" in heading.
				//strOutStart = '<h3 class="colorgreen bp2 clear"' + strCatStyle + '><em>' + this.replaceCategoryName(this.arrProducts[c].cat) + '</em></h3>' +
				//					'<ul class="span-9 horizontalItemList compareProducts clear rm0 tm3">';

				//var queryToken = (ProductUrls.ComparisonPage.indexOf('?') > -1) ? "&" : "?";

				if (arrProdIds.length > 1)
					strOutEnd = '</ul><div class="span-9 buttonWrapper rm0 tp3"><a class="readMore1Btn" href="' + ProductUrls.ComparisonPage + '&productids=' + arrProdIds.join(",") + '"><span>' + ProductTranslate.CompareNow + '</span></a></div>';
				else
					strOutEnd = '</ul>'

				div.className = "tb1 tp4 bp4 clear";
				div.innerHTML = strOutStart + arrProdOut.join("") + strOutEnd;
				widget.append(div);
			}

			// store old category name
			this.oldWidgetCategory = this.arrProducts[c].cat;
		}
	}
}

// replaces some characeters
function X3_replaceCategoryName(str) {
	return str.replace("<br>", "").replace("<br />", "");
}

// sort by category name
function X3_sortByCatName(a, b) {
	var catA = a.cat.toLowerCase();
	var catB = b.cat.toLowerCase();

	if (catA != catB) {
		if (catA < catB) { return -1 }
		if (catA > catB) { return 1 }
	}

	return 0;
}

// sets checkboxes
function X3_setCompareBoxes() {
	for (var i = 0, l = this.arrProducts.length; i < l; i++) {
		var checkHolder = $get("p" + this.arrProducts[i].guid);
		if (checkHolder) {
			var check = checkHolder.getElementsByTagName("input");
			if (check[0])
				check[0].checked = true;

			// Update label text
			var $label = $("label", $(checkHolder).parent());

			if ($("span", $label).length > 0)
				$("span", $label).html(ProductTranslate.RemoveFromCompare); // Fix for Product Page
			else
				$label.html(ProductTranslate.RemoveFromCompare);

			// set color
			this.changeColor(this.arrProducts[i].guid, true);
		}
	}
}

// set specific checkbox
function X3_setCompareBox(guid, action) {
	var checkHolder = $get("p" + guid);

	if (checkHolder) {
		var check = checkHolder.getElementsByTagName("input");

		if (check[0]) {
			check[0].checked = action;

			var lblText = action ? ProductTranslate.RemoveFromCompare : ProductTranslate.AddToCompare;
			// Update label text
			var $label = $("label", $(checkHolder).parent());

			if ($("span", $label).length > 0)
				$("span", $label).html(lblText); // Fix for Product Page
			else
				$label.html(lblText);
		}
	}
}

// sets/removes selected color class
function X3_changeColor(guid, action) {
	if (action)
		$($get("p" + guid)).parent().addClass('selected');
	else
		$($get("p" + guid)).parent().removeClass('selected');
}

// check if you can compare
function X3_compareValid() {
	// must have atleast 2 products to be able to compare.
	if (this.arrProducts.length < 2) {
		alert("You have to select more than one product to compare.");
		return false;
	}
	return true;
}

// init class for reading cookie values and creates compare basket in memory
function X3_compareInit() {
	// create compare basket
	cb_obj = new X3_CompareBasket("CompareBasket1");

	// if not empty create eval to JSON object
	var cookieProducts = cb_obj.getCookie(cb_obj.id);
	if (cookieProducts != null && cookieProducts != undefined && cookieProducts != "")
		cookieProducts = eval(cookieProducts);

	// create objects from cookie data
	for (var i = 0, l = cookieProducts.length; i < l; i++) {
		var product = new cb_obj.Product(cookieProducts[i].guid, cookieProducts[i].cat, cookieProducts[i].catGuid, cookieProducts[i].modelDCom, cookieProducts[i].modelD, cookieProducts[i].image, cookieProducts[i].url);
		cb_obj.arrProducts[cb_obj.arrProducts.length] = product;
	}

	// set checkboxes from cookie values
	cb_obj.setCompareBoxes();

	// update widget
	cb_obj.updateWidget();
}

var cb_obj; // basket object "CompareBasket1"
