// Cart functions
var cart = new Array();
var setcart = new Array();

var cartVisible = false;
var cartActionToggled = false;
var lastToggled = '';
var disabledDays;

function initiateHeader() {
	seriaLoad();
	var html = '<div id="logodiv" style="width:320px;height:70px;"><a href="/"><img src="/assets/images/logo.png" border="0" /></a></div>';
	$('#header').html(html);
	html = '	<div id="cartContainer">'+
					'<div id="innerCartdiv" onClick="toggleCart()"></div>'+
					'<div id="innerDartdiv"></div>'+
					'<div id="cartdiv">'+
						'<div id="cartTextdiv"></div>'+
						'<div id="cartFadediv">'+
							'<div id="cartArticlesdiv"></div>'+
							'<div id="cartButtonsdiv"></div>'+
							'<div id="cartActionsdiv"></div>'+
						'</div>'+
					'</div>'+
				'</div>';
	$('#bar').prepend(html);
	initiateCart();
	updateCart();
}

function initiateCart() {
	var howmany = (cart.length == 1) ? 'artikel' : 'artiklar';
	var html = '<i>Du har för närvarande <span style="font-size:16px;font-weight:bold;">'+cart.length+'</span> '+howmany+' i din kundkorg</i>';
	$('#cartTextdiv').html(html);
	$('#ukLink span').html(' (<span class="num">' + cart.length + '</span>)');
}

function openCart(load) {
	if (!load) {
		if (cartVisible) {
			if (cartActionToggled)
				toggleCartAction('load');
			else
				toggleCart();
		} else {
			toggleCart();
		}
	} else {
		if (cartVisible) {
			if (cartActionToggled)
				toggleCart(true);
			else
				toggleCartAction('load');
		} else {
			toggleCart(true);
		}
	}
}

function toggleCart(load) {
	if(cartVisible) {
		$('#innerDartdiv').css('background', 'transparent url(/assets/images/shopdart-r.png) 0 0 no-repeat');
		$('#cartFadediv').fadeOut(500, function() {		
			$('#cartdiv').animate({height:'46px', width:'340px'}, 1000, 'easeOutQuart', function() {
				// animation finished
				cartVisible = false;
				cartLoadToggled = false;
				$('#cartActionsdiv').css('display', 'none');
				cartActionToggled = false;
			});
		});
	} else {
		$('#innerDartdiv').css('background', 'transparent url(/assets/images/shopdart-d.png) 0 0 no-repeat');
		$('#cartdiv').animate({height:'346px', width:'540px'}, 1000, 'easeOutQuart', function() {
			// animation finished
			$('#cartFadediv').fadeIn(500);
			cartVisible = true;
			
			if (load)
				toggleCartAction('load');
		});

	}
}

function toggleCartAction(toggleName) {
	if(cartVisible) {
		if(!cartActionToggled) {
			
			cartActionToggled = true;
			$('#cartdiv').animate({height:'536px'}, 1000, 'easeOutQuart', function() {
				cartActionHtml(toggleName);
				$('#cartActionsdiv').fadeIn(500);
			});
		} else {
			if(toggleName == lastToggle) {
				cartActionToggled = false;
				$('#cartActionsdiv').fadeOut(500, function() {
					$('#cartdiv').animate({height:'346px'}, 1000, 'easeOutQuart', function() {
					});
				});
			} else {
				$('#cartActionsdiv').fadeOut(250, function(){
					cartActionHtml(toggleName);
					$('#cartActionsdiv').fadeIn(250);
				});
			}
		}
		lastToggle = toggleName;
	}
}

function cartActionHtml(toggleName) {
	var html = '';
	if(toggleName == 'save') { // save
		if (cart.length > 0) {
			html += 'Här kan du skapa en inköpslista av ovanstående varukorg. Du kan sedan ladda denna via knappen "Hämta inköpslista". Skriv ett namn på din inköpslista och klicka på spara.';
			html += '<p style="padding-top:6px;text-align:right;"><input type="text" id="cartActionSaveText" style="width:300px">&nbsp;&nbsp;&nbsp;';
			html += '<input id="cartSaveButton" type="button" value="Spara" onClick="cartActionListSave();" /></p>';
		} else {
			html += '<span class="fail">För att kunna skapa en inköpslista måste du först lägga artiklarna som du önskar till din inköpslista i varukorgen.</span>';
		}
		$('#cartActionsdiv').html(html);
		$('#cartSaveButton').button();
	} else if(toggleName == 'load') { // load
		$.post('/assets/ajax/ua_lists.php', {'op':'list', 'SESSID':SESSID}, function(ret){
			$.each(ret, function(i){
				html += '<div style="min-height:16px"><img src="/assets/images/icons/basket_delete.png" align="right" onClick="cartActionListDelete('+ret[i].id+', \''+ret[i].listname+'\')" style="cursor:pointer;" />';
				html += '<span onClick=\"cartActionListLoad('+ret[i].id+')\" style="cursor:pointer;">'+ret[i].listname+'</span></div>';
			});
			$('#cartActionsdiv').html(html);
		}, 'json');
	} else if(toggleName == 'store') { // store
		$.post('/assets/ajax/lev.php', {'SESSID':SESSID, 'op':'levlist', 'userid':USERID}, function(json) {
			var ret = $.parseJSON(json);
			html += '<div style="width:170px;float:right;">';
			html += 'Önskat leveransdatum<br /><input type="text" id="orderDate" onChange="checkOrderButton()" disabled="disabled" readonly="true" style="margin-bottom: 8px;" /><br />';
			html += 'Ert ordernummer<br /><input type="text" id="custOrderNo" style="margin-bottom: 8px;" /><br />';
			html += '<input type="checkbox" id="orderTerms" onclick="checkOrderButton();" /> Jag har läst och godkänner de allmänna villkoren.<br />';
			html += '<input style="display:none; margin-top: 8px;" type="button" id="orderButton" value="Skicka order" onClick="makeOrderFromCart()" /></div>';
			html += '<div style="width:280px;">Önskad leveransadress<br /><select class="ui-corner-all ui-widget" id="orderDestination" onChange="checkOrderButton()"><option value="none">Välj leveransställe</option>';
			if(!ret) html += '<option value="none">Inga leveransadresser registrerade</option>';
			else {
				$.each(ret, function(ind, lev){
					var levname = lev.name;
					// if(lev.levadress1 > '') levname += ', '+lev.levadress1;
					// if(lev.levadress2 > '') levname += ', '+lev.levadress2;
					if(lev.levadress3 > '') levname += ', '+lev.levadress3;
					html += '<option value="'+lev.adrkod+'|'+lev.id+'">' + lev.adrkod + ' - ' + levname + '</option>';
				});
			}
			html += '</select></div>';
			html += '<div style="width:280px;margin-top:8px;">Kommentar<br /><textarea class="ui-corner-all" id="orderComment" onChange="checkOrderButton()"></textarea></div>';
			$('#cartActionsdiv').html(html);
			$('#orderButton').button();
			
			$(function() {
				var minD = (arlaLate || orderStop) ? 2 : 1;
				
				if (leadDays > minD)
					minD = leadDays;
				
				$( "#orderDate" ).datepicker({
												showWeek: 		true,
												dayNamesMin: 	['Sö', 'Må', 'Ti', 'On', 'To', 'Fr', 'Lö'],
												monthNames: 	['Januari','Februari','Mars','April','Maj','Juni','Juli','Augusti','September','Oktober','November','December'],												
												firstDay: 		1, 
												dateFormat:		'yy-mm-dd',
												minDate:		minD,
												beforeShowDay:	function (date) {
													var day = date.getDay();
	
													for (i = 0; i < disabledDays.length; i++) {
														if ($.inArray(day, disabledDays) != -1)
															return [false]
													}
													
													return [true];
												}
											});
			}); 
		});		
	}
}

function checkArla() {
	arlaLate = false;
	
	if (cart.length > 0) {
		$.each(cart, function (i, item) {
			if (item.artcode.substr(0, 4) == 'ARLA')
				arlaLate = true;
		});
	}
}

var leadDays;
function checkLead() {
	leadDays = 0;
	
	if (cart.length > 0) {
		$.each(cart, function (i, item) {
			if (item.ledtid > leadDays)
				leadDays = item.ledtid;
		});
	}
}

function checkOrderButton() {
	if ($('#orderDestination').val() != 'none') {
		var id = $('#orderDestination').val().split('|')[1];
		
		if ($('#orderDate').val() == '') {
			$.post('assets/ajax/lev.php', { 'SESSID': SESSID, 'op': 'getlevdays', 'id': id }, function (json) {
				var allowedDays = json.lev_days.split('');
				disabledDays = [];
				
				for (var i = 1; i <= 5; i++) {
					if ($.inArray(i.toString(), allowedDays) == -1)
						disabledDays.push(i);
				}
				
				disabledDays.push(6, 0);
				$('#orderDate').attr('disabled', false);
			}, 'json');
		}
		
		if($('#orderDate').val() > '' && $('#orderTerms').is(':checked')) {
			$('#orderButton').fadeIn();
		} else {
			$('#orderButton').fadeOut();
		}
	} else {
		$('#orderDate').attr('disabled', true);
		$('#orderButton').fadeOut();
	}
}

function makeOrderFromCart() {
	if(confirm("Du har valt att lägga en order med leveransdatum: " + $('#orderDate').val() + "\r\nFortsätt?")) {
		var adrkod = $('#orderDestination').val().split('|')[0];
		$.post('/assets/ajax/orders.php', 	{
												'op':'neworder', 
												'SESSID':SESSID, 
												'destination':adrkod, 
												'levdate':$('#orderDate').val(),
												'cart':cart, 
												'orderComment':$('#orderComment').val(),
												'custorderno':$('#custOrderNo').val()
											}, 
			function(json){
				var ret = $.parseJSON(json);
				//emptyCart();
				//updateCart();
				//toggleCart();
				//seriaSave(true);
				
				// google analytics
				var orderTotal = 0,
					orderItems = [];
				
				$.each(cart, function (i) {
					orderTotal += parseFloat(cart[i].artprice) * parseFloat(cart[i].num);
					// _addItem, order id*, sku/code*, product name, category or variation, unit price*, quantity*
					orderItems.push(['_addItem', ret.toString(), cart[i].artcode, cart[i].artname, getItemCategoryName(cart[i].catcode), cart[i].artprice, cart[i].artsize]);
				});
				
				orderTotal = parseFloat(orderTotal).toFixed(2);
				
				// _addTrans, order id*, affiliation or store name, total*, tax, shipping, city, state or province, country
				_gaq.push(['_addTrans', ret.toString(), '',	orderTotal.toString(), '', '', '', '', '']);
				
				$.each(orderItems, function (i, item) {
					_gaq.push(item);
				});
				
				_gaq.push(['_trackTrans']);
				
				emptyCart();
				updateCart();
				toggleCart();
				seriaSave(true);
				
				// log event
				logThis('Cart', 'Placed order (order id: ' + ret + ')', USERID);
			}
		);
	}
}

function getItemCategoryName(cat) {
	var cats = cat.split('');
	var catRec = 'cret';
	
	for (var i = 0; i < cats.length; i++) {
		catRec += '[\'' + cats[i] + '\']';
	}
	
	var ret = eval(catRec);
	trace(ret.catname);
	
	return ret.catname;
}

function cartActionListDelete(id, listname) {
	if(confirm('Du har valt att radera inköpslistan: '+listname+'\r\nFortsätt?')) {
		$.post('/assets/ajax/ua_lists.php', {'op':'delete', 'SESSID':SESSID, 'id':id}, function(ret){
			cartActionHtml('load');
			
			// log event
			logThis('Cart', 'Deleted shopping list (list id: ' + id + ')', USERID);
		}, 'json');
	}
}

function cartActionListLoad(id) {
	emptyCart();
	$.post('/assets/ajax/ua_lists.php', {'op':'load', 'SESSID':SESSID, 'id':id}, function(ret){
		var arts = ret.artcodes.split(',');
		$.each(arts, function(ind, val){
			var art = val.split('|');
			addToCart(art[0], art[1]);
		})
		toggleCartAction('load');
	}, 'json');
}

function cartActionListSave() {
	var listname = $('#cartActionSaveText').val();
	if(listname.length > 0) {
		var artcodes = "";
		var j = 0;
		$.each(cart, function(i) {
			if(j != 0) artcodes += ",";
			artcodes += cart[i].artcode+"|"+cart[i].num;
			j++;
		});
		$.post('/assets/ajax/ua_lists.php', {'op':'save', 'SESSID':SESSID, 'listname':listname, 'artcodes':artcodes}, function(ret){
			// huge success
			toggleCartAction('save');
			
			// log event
			logThis('Cart', 'Added shopping list (list id: ' + ret + ')', USERID);
		});
	} else alert("Namn på inköpslistan måste anges!");
}

function updateInsideCart(artcode) {
	var subTot = parseFloat($('#piece_'+artcode).val()) + (parseFloat($('#pack_'+artcode).val()) * parseFloat($('#size_'+artcode).val()));
	addToCart(artcode, parseFloat(subTot));
}

function cartRound(artcode, val, split, max) {
	if(max == 0) max = 1;
	if(split > 1) { // if split is a factor
		var mod = val % parseFloat(max/split);
		if(mod != 0) {
			if(mod > parseFloat(max/split) / 2) val = parseFloat(val) + parseFloat(parseFloat(max/split) - mod);
			else val -= mod;
		} 
	}
	
	if(val == max) {
		$('#pack_'+artcode).val(parseFloat($('#pack_'+artcode).val()) + 1);
		val = 0;
	}
	//val = parseFloat(val).toFixed(2);
	$('#piece_'+artcode).val(val);
	updateInsideCart(artcode);
}

// POPULATING CART
function updateCart() {
	var cartTotal = 0;
	var html = 	'<div class="cartItemHeader" style="width:185px">Artikelnamn</div>'+
				'<div class="cartItemHeader" style="width:35px;text-align:center">Förp.st</div>'+
				'<div class="cartItemHeader" style="width:35px;text-align:center">Förp.</div>'+
				'<div class="cartItemHeader" style="width:50px;text-align:center">&nbsp;</div>'+
				'<div class="cartItemHeader" style="width:70px;text-align:right">Á Pris</div>'+
				'<div class="cartItemHeader" style="width:75px;text-align:right">Totalt</div>'+
				'<div class="cartItemHeader" style="width:30px;text-align:right">&nbsp;</div>';
	$.each(cart, function(i) {
		var lineTot = parseFloat(cart[i].artprice) * parseFloat(cart[i].num); 
		cartTotal += lineTot;
		var disabled = ' disabled';
		if(cart[i].num > 0) {
			var numPack = (cart[i].artsize > 0) ? Math.floor(cart[i].num/cart[i].artsize) : 0;
			
			var numPiece = (cart[i].artsize > 0) ? parseFloat(cart[i].num % cart[i].artsize).toFixed(2) : cart[i].num;
			numPiece = (cart[i].artunit == 'st') ? parseInt(numPiece) : numPiece; 
			
			html += 	'<div class="cartItemLine">'+
							'<div class="cartItemLineItem" style="width:185px">'+cart[i].artname+'</div>'+
							'<div class="cartItemLineItem" style="width:35px;text-align:center">('+cart[i].artsize+')</div>';
			disabled = (cart[i].artsize == 0) ? ' disabled' : '';				
			html +=			'<div class="cartItemLineItem" style="width:35px;text-align:center">'+
								'<input type="hidden" id="size_'+cart[i].artcode+'" value="'+cart[i].artsize+'" />'+
								'<input type="hidden" id="split_'+cart[i].artcode+'" value="'+cart[i].artsplit+'" />'+
								'<input id="pack_'+cart[i].artcode+'" type="text" value="'+numPack+'" onChange="updateInsideCart(\''+cart[i].artcode+'\')"'+disabled+' />'+
							'</div>';
			disabled = (cart[i].artsplit == 0) ? ' disabled' : '';
			html += 		'<div class="cartItemLineItem" style="width:50px;text-align:center">'+
								'<input id="piece_'+cart[i].artcode+'" type="text" value="'+numPiece+'" onChange="cartRound(\''+cart[i].artcode+'\', parseFloat(this.value).toFixed(2), '+cart[i].artsplit+', '+cart[i].artsize+')"'+disabled+' /> '+cart[i].artunit+
							'</div>';
			var aPrice = (cart[i].artprice > 0) ? cart[i].artprice + ' kr' : '';
			var tPrice = (cart[i].artprice > 0) ? lineTot.toFixed(2) + ' kr' : '';
			html +=			'<div class="cartItemLineItem" style="width:70px;text-align:right">'+aPrice+'</div>'+
							'<div class="cartItemLineItem" style="width:75px;text-align:right">'+tPrice+'</div>';
			html +=			'<div class="cartItemLineItem" style="width:30px;text-align:right"><img src="/assets/images/icons/basket_delete.png" onClick="deleteFromCart(\''+cart[i].artcode+'\', \''+cart[i].artname+'\')"></div>'+
							'<div class="clear"></div>'+
						'</div>';
		}
	});
	cartTotal = cartTotal.toFixed(2);
	$('#cartArticlesdiv').html(html);
	initiateCart();
	html = '';
	if(typeof(USERID) != "undefined" && USERID !== null) {
		var disabled = (cart.length == 0) ? ' disabled' : '';
		html += '<input id="cartLoadButton" type="button" value="Hämta inköpslista" onClick="toggleCartAction(\'load\');" />&nbsp;';
		html += '<input id="cartCreateButton" type="button" value="Skapa inköpslista" onClick="toggleCartAction(\'save\');" />&nbsp;';
		html += '<input id="cartStoreButton" type="button" value="Till kassa" onClick="toggleCartAction(\'store\');"'+disabled+' />';
	} else {
		html += '<i>Du måste vara inloggad för att nyttja butiken.</i>';
	}
	$('#cartButtonsdiv').html(html);
	$('#cartLoadButton').button();
	$('#cartCreateButton').button();
	$('#cartStoreButton').button();
	seriaSave();
}

function deleteFromCart(artcode, artname) {
	if(confirm("Du har valt att radera "+artname+"\r\nFortsätt?")) {
		addToCart(artcode, 0);
	}
}

function addToCart(artcode, n) {
	var gotArticle = false;
	for(var i = 0; i < cart.length; i++) {
		if(cart[i].artcode == artcode) {
			gotArticle = true;
			if(parseFloat(n) > 0.00)
				cart[i].num = (cart[i].artunit != 'st') ? parseFloat(n).toFixed(2):parseInt(n);
			else {
				var tmpArr = new Array();
				for(var i = 0; i < cart.length; i++) {
					if(cart[i].artcode != artcode) tmpArr.push(cart[i]); 
				}
				cart = tmpArr;
				checkArla();
				checkLead();
			}
		}
	}
	if(!gotArticle) {
		$.post('/assets/ajax/store.php', {'SESSID':SESSID, 'task':'getItemCart', 'artcode':artcode}, 
			function(json) {
				var row = jQuery.parseJSON(json);
				row.num = (row.artunit != 'st') ? parseFloat(n).toFixed(2):parseInt(n);;
				cart.push(row);
				updateCart();
				checkArla();
				checkLead();
			});
	} else updateCart();
} 

function emptyCart() {
	cart = new Array();
}
 
// Keep cart in SESSION-locker
function seriaSave(unset) {
	var clear = (!unset) ? false : true;
	if(cart.length > -1 || clear) {
		$.post("/assets/ajax/cart_serializer.php", {"seriasave":JSON.stringify(cart)}, function(){
			// Huge success!
			// trace(JSON.stringify(cart));
		});
	}
}

// Retrieving cart from SESSION-locker
function seriaLoad() {
	$.post("/assets/ajax/cart_serializer.php", {"seriaload":"1"}, function(json){
		ret = $.parseJSON(json);
		if(ret && !ret.err) {
			cart = ret;
			updateCart();
			checkArla();
			checkLead();
		}
	});
}

$(function() {
	initiateHeader();
});
