// 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;
}

// product class
// Modified by Logica 2009-10-29
// Modified by Mattias Olsson (+46 (0)730-922 108)
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);

	}
	else {
		alert("Too many products to compare.");
		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);

			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();
}

// format cookie value to JSON string
// Modified by Logica 2009-10-29
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 = $get("widget");

	if (widget) {
		widget.innerHTML = "";

		if ($get("numProducts"))
			$get("numProducts").innerHTML = '<span class="clink">' + ProductTranslate.CompareProductsNow + ':</span> <span id="headerCompareValue">' + this.arrProducts.length + '</span>';

		// 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>';
						}
						arrProdIds[arrProdIds.length] = prod.guid;
						arrProdOut[arrProdOut.length] =	'<li' + selected + '>' +
															'<a href="' + prod.url + '">' +
																'<img alt="' + prod.modelDCom + '" src="' + prod.image + '"/>' +
																'<span class="horizontalItemListSubHead color3">' + prod.modelDCom + ' <span>' + prod.modelD + '</span></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">';

				if (arrProdIds.length > 1)
				    strOutEnd = '<div class="span-9 buttonWrapper rm0 tp3 bm3"><a class="readMore1Btn cursorPointer floatRight" 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.appendChild(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;
		}
	}
}

// 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;
	}
}

// check if you can compare
function X3_compareValid() {
	// must have atleast 2 products to be able to compare.
	if (this.arrProducts.length < 2) {
		alert(ProductTranslate.SelectMore);
		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();
}

// basket object "CompareBasket1"
var cb_obj;

$(document).ready(
	function() {
		$(".mp_compareProducts").mouseover(function() { ClearWidgetTimer(); });
		$(".comparePopup").mouseover
		(
			function() {
				var inner = $(this).children(".inner");
				if (inner.hasClass("errorsOccured")) {
					var pos = inner.children(".checkbox").offset();
					var currPos = $(this).offset();
					inner.removeClass("errorsHidden");
					$(this).offset({ left: currPos.left, top: pos.top - 108 });
				}
			}
		);
		$(".comparePopup").mouseout
		(
			function() {
				$(this).children(".inner").addClass("errorsHidden");
				$(this).css("left", "auto");
				$(this).css("top", "auto");
			}
		);
		$(".comparePopup").children().mouseover(function() { $(this).parents(".comparePopup").mouseover(); });
	}
);

function ToggleCompareBox(sender, product) {
	ClearWidgetTimer();

	if (sender.checked) {
		AddProductToWidget(sender, product);
	}
	else {
		RemoveProductFromWidget(sender, product);

		// Hide errors in popups
		$(".comparePopup .inner").addClass("errorsHidden");
		$(".comparePopup .inner").removeClass("errorsOccured");
	}
}
function AddProductToWidget(sender, product) {
	var cnt = cb_obj.countProductsByCategory(product.cat);
	
	if (cnt < 4) {
		// Add it to the widget
		cb_obj.addProduct(product.guid, product.cat, product.catGuid, product.modelD, product.modelDCom, product.image, product.url);

		// Show compare widget for 3 seconds
		$("#headerCompare").click();
		StartWidgetTimer(3000);

		// Uncomment below to scroll up to compare widget when a new product is added.
		//scrollToId("headerCompare");
	}
else {
    $(".maxComparePopup").show();
		sender.checked = false;
		var pos = $(sender).parent().offset();
		var popup = $(sender).parents(".comparePopup");
		var inner = popup.children(".inner");
		var currPos = popup.offset();

		if (inner.hasClass("errorsHidden"))
			inner.removeClass("errorsHidden");

		inner.addClass("errorsOccured");
		popup.offset({ left: currPos.left, top: pos.top - 108 });
	}
}
function StartWidgetTimer(milliseconds) {
	widgetTimer = window.setTimeout(function() { mpPopdown('mp_compareProducts'); }, milliseconds);
}
function ClearWidgetTimer() {
	window.clearTimeout(widgetTimer);
	widgetTimer = null;
}
function RemoveProductFromWidget(sender, product) {
	cb_obj.removeProduct(product.guid, false); 
}
function RemoveCompareItems() {
	$("#headerCompare").click();
	scrollToId('headerCompare');
}
function CompareNow(product) {
	var arrProdIds = new Array();

	for (var index = 0; index < cb_obj.arrProducts.length; index++) {
		var prod = cb_obj.arrProducts[index];

		if (prod.cat == product.cat) {
			arrProdIds.push(prod.guid);
		}
	}

	if (arrProdIds.length > 1) {
		document.location.href = ProductUrls.ComparisonPage + "?productids=" + arrProdIds.join(",");
	}
}
