var cret;
var iret;
var hash = '';
var arlaStop = false;
var arlaLate = false;
var orderStop = false;

// document ready
$(function () {
	$.ajaxSetup({
		cache: false,
    });
	
	if (typeof(USERID) != 'undefined' && USERID !== null)
		initUser();
	else
		initLogin();
	
	initMenu();
	initSearch();
	showArlaCountdown();
	
	$.post('/assets/ajax/store.php', { 'SESSID':SESSID, 'task':'getTree' }, function (json) {
		cret = $.parseJSON(json);
		listCategories();
		
		$.post('/assets/ajax/store.php', { 'SESSID':SESSID, 'task':'getImages' }, function (json) {
			iret = $.parseJSON(json);
			hashChange();
			
			$(window).bind('hashchange', function () {
				if (window.location.hash != hash) {
					hashChange();
				}
			});
		});
	});
});

// infoBox
(function ($) {
    $.fn.infoBox = function (msg, type, callback) {
		var element = this;		
		var msgType = (type == 'ok') ? 'ui-state-highlight ui-corner-all' : 'ui-state-error ui-corner-all';
		var iconType = (type == 'ok') ? 'ui-icon ui-icon-info' : 'ui-icon ui-icon-alert';
		var html =	'<div class="' + msgType + '" style="margin-top: 5px; padding: 8px;">' +
					'	<p><span class="' + iconType + '" style="float: left; margin-right: 4px;"></span>' + msg + '</p>' + 
					'</div>';
					
		this.html(html).hide().slideDown(500).delay(4000).slideUp(500, function () {
			if (typeof callback === 'function')
				callback();
		});
    }
})(jQuery);

// initLogin
function initLogin() {
	$('#userPanel .banner span').html('Logga in');
	$('#loginButton').button();
	$('#email').focus();
}

// login
function login() {
	$('#action').slideUp(400);
	$('#submit').toggleClass('loader');
	
	$.post('/assets/ajax/login.php', { 'SESSID': SESSID, 'email': $('#email').val(), 'password': $('#password').val() }, function (json) {
		var ret = $.parseJSON(json);
		
		if (ret.pass == 1) {
			var to = window.setTimeout('loginOK("Välkommen!")', 2000);
		} else {
			var to = window.setTimeout('loginFail("Felaktig inloggning!")', 2000);
		}
	});
}

// loginOK
function loginOK(msg) {
	$('#submit').toggleClass('loader');
	$('#action').css('background', 'url(/assets/images/icons/accept.png) no-repeat');
	$('#action').html('<span class="ok">' + msg + '</span>');
	
	$('#action').slideDown(600).delay(2000).slideUp(600, function () {
		$('#login').fadeOut(600, function () {
			// ie save login fix
			if ($.browser.msie) {
				var form = document.getElementById('loginForm');
				window.external.AutoCompleteSaveForm(form);
			}
			
			document.location.href = '/';
		});
	});
}

// loginFail
function loginFail(msg) {
	$('#submit').toggleClass('loader');
	$('#action').css('background', 'url(/assets/images/icons/cross.png) no-repeat');
	$('#action').html('<span class="fail">' + msg + '</span>');
	$('#action').slideDown(600);
}

// initUser
function initUser() {
	$.post('/assets/ajax/user.php', { 'SESSID': SESSID, 'task': 'get', 'userid': USERID }, function (json) {
		var ret = $.parseJSON(json);
		$('#userPanel .banner span').html(ret.name);
		var html =	'<div id="user">' +
					'	<div id="uaLink">' +
					'		<a href="javascript:launch(\'Användarkonto\');">Användarkonto</a>' +
					'	</div>' +
					'	<div id="ukLink">' +
					'		<a href="javascript:openCart();">Kundkorg</a><span></span>' +
					'	</div>' +
					'	<div id="uiLink">' +
					'		<a href="javascript:openCart(true);">Inköpslistor</a>' +
					'	</div>' +
					'	<div id="ulLink">' +
					'		<a href="javascript:launch(\'Leveransställen\');">Leveransställen</a>' +
					'	</div>' +
					'	<div id="uoLink">' +
					'		<a href="javascript:launch(\'Orderstatus\');">Orderstatus</a>' +
					'	</div>' +
					'</div>' +
					'<div id="logout">' +
					'	<input id="logoutButton" type="button" value="Logga ut" onClick="logout();" />' +
					'</div>';
		$('#userPanel').append(html);
		$('#logoutButton').button();
		$('#searchBox').focus();
	});
}

// logout
function logout() {
	$.post('/assets/ajax/logout.php', { 'SESSID': SESSID }, function (json) {
		location.href = '/';
	});
}

// initMenu
function initMenu() {
	$.post('/assets/ajax/menus.php', { 'SESSID': SESSID }, function (json) {
		var ret = $.parseJSON(json);
		var html = '<ul>';
		
		$.each(ret, function (i, item) {
			html += '	<li><a href="javascript:launch(\'' + item + '\');">' + item + '</a></li>';
		});
		
		html += '</ul>';
		$('#menu').html(html);
	});
}

// sortCategories
function sortCategories(cat) {
	var sorted = [];
	var original = (cat) ? cat : cret;
	
	$.each(original, function (i, item) {
		if (item.catname)
			sorted.push({ catcode: i, catname: item.catname, order: item.order, hidden: item.hidden });
	});
	
	sorted.sort(function (a, b) {
		return a.order - b.order;
	});
	
	return sorted;
}

// listCategories
function listCategories() {
	var html = '<ul class="menuTree">';
	var a = 0;
	var root = sortCategories();
	
	$.each(root, function (i, item) {
		var alpha = (a++ == 0) ? ' alpha' : '';
		
		if (item.catname) {
			if (!item.hidden)
				html += '	<li id="cat_' + item.catcode + '" class="arrow' + alpha + '"><a href="javascript:listSub(\'' + item.catcode + '\');">' + item.catname + '</a></li>';
		}
	});
	
	html += '</ul>';
	$('.menuTree').remove();
	$('#categoriesPanel').append(html);
	$('#content').css('minHeight', $('#panelsWrapper').height() - 41);
}

// listSub
function listSub(cat) {
	var cats = cat.split('');
	var catRec = 'cret';
	
	for (var i = 0; i < cats.length; i++) {
		catRec += '[\'' + cats[i] + '\']';
	}
	
	if ($('#cat_' + cat).hasClass('alpha')) {
		if ($('#cat_' + cat).hasClass('arrow')) {
			$('#cat_' + cat).switchClass('arrow', 'drop', 0);
		} else if ($('#cat_' + cat).hasClass('drop')) {
			$('#cat_' + cat).switchClass('drop', 'arrow', 0);
		}
	} else {
		$('#cat_' + cat).toggleClass('arrow').toggleClass('drop');
	}
	
	if ($('#sub_' + cat).css('color') == '#000' || $('#sub_' + cat).css('color') == 'rgb(0, 0, 0)')
		$('#sub_' + cat).css('color', '#707070');
	else
		$('#sub_' + cat).css('color', '#000');
	
	if (!$('ul', '#cat_' + cat).html()) {
		var html = '';
		html += '<ul class="menuSub">';
		var sub = sortCategories(eval(catRec));
		
		$.each(sub, function (i, item) {
			if (!item.hidden) {
				html += '	<li id="cat_' + cat + item.catcode + '" class="arrow sub">' +
						'		<a id="sub_' + cat + item.catcode + '" href="javascript:listSub(\'' + cat + item.catcode + '\');" style="color: #707070">' + item.catname + '</a>' +
						'	</li>';
			}
		});
		
		var allArticles = new Array();
	
		if (eval(catRec).articles) {
			$.each(eval(catRec).articles, function (i, item) {
				var arr = [item[0], 0, i];
				allArticles.push(arr);
			});
		}
		
		if (eval(catRec).setarticles) {
			$.each(eval(catRec).setarticles, function (i, item) {
				var arr = [item[0], 1, i];
				allArticles.push(arr);
			});
		}
		
		allArticles.sort();
		
		$.each(allArticles, function (i, item) {
			html += '	<li><a class="mArt" href="javascript:getArticle(\'' + item[2] + '\', ' + item[1] + ', \'' + cat + '\');">' + item[0] + '</a></li>';
		});
		
		html += '</ul>';
		$('#cat_' + cat).append(html);
		
		var mw = 0;
		$('#cat_' + cat + ' a').each(function (i, item) {
			mw = ($(this).width() > mw) ? $(this).width() : mw;
		});
		$('#cat_' + cat + ' .menuSub').width(mw + 20);
		
		$('#cat_' + cat + ' .menuSub').mouseover(function (e) {
			$(this).parent().css('overflow', 'visible');
		});
		
		$('#cat_' + cat + ' .menuSub').mouseleave(function (e) {
			$(this).parent().css('overflow', 'hidden');
		});
		
		$('#content').animate( { 'minHeight': $('#panelsWrapper').height() - 41 }, { 'duration': 400 });
		$('ul', '#cat_' + cat).hide().slideToggle(400);
	} else {
		$('ul', '#cat_' + cat).slideToggle(400, function () {
			$('#content').animate( { 'minHeight': $('#panelsWrapper').height() - 41 }, { 'duration': 400 });
			$('ul', '#cat_' + cat).remove();
		});
	}
	
	if (window.location.hash) {
		var hArr = window.location.hash.split('/');
		if ((hArr.length < 3) || (cat != hArr[2].toUpperCase()))
			showCategory(cat);
	} else
		showCategory(cat);
}

// contentChange
function contentChange(html, cat, name, callback) {
	if (cat > "" || name > "")
		generateCrumbs(cat, name);
	
	$('#content').fadeOut(300, function () {
		$('#content').html(html);
		$('#content').fadeIn(300);
		
		if (typeof callback === 'function')
			callback();
	});
}

// generateCrumbs
function generateCrumbs(cat, name) {
	var html =	'<ul>' +
				'	<li class="crumb"><a href="javascript:launch(\'Hem\');">Hem</a></li>';
	
	if (name != 'Hem') {
		if (cat == '') {
			var n = name.split('/');
			
			$.each(n, function (i, item) {
				html += '	<li class="crumb"><a href="javascript:launch(\'' + item + '\');">' + item + '</a></li>';
			});
		} else {
			html += '	<li class="crumb"><a href="javascript:launch(\'' + name + '\');">' + name + '</a></li>';
			var cats = cat.split('');
			var catRec = 'cret';
			var code = '';
			
			for (var i = 0; i < cats.length; i++) {
				catRec += '[\'' + cats[i] + '\']';
				code += cats[i];
				html += '	<li class="crumb"><a href="javascript:showCategory(\'' + code + '\');">' + eval(catRec).catname + '</a></li>';
			}
		}
	}
	
	html += '</ul>';
	$('#crumbs').html(html);
}

// initSearch
function initSearch() {
	$.post('/assets/ajax/search.php', { 'task': 'search', 'SESSID': SESSID }, function (json) {
		var ret = $.parseJSON(json);
		
		$('#searchBox').autocomplete({
			minLength: 2,
			source: function (request, response) {
				var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), 'i');
				response($.grep(ret, function (val) {
					return matcher.test(val.value) || matcher.test(val.label);
				}));
			},
			open: function (e, ui) {
				// highlight words
				var keywords = $('#searchBox').val().split(' ');		
				for (kw in keywords) {
					$('a.ui-corner-all', '.ui-autocomplete').each(function () {
						var curText = $(this).html();
						var re = new RegExp(keywords[kw], 'ig');
						var matchNew = curText.match(re);
						var newText = curText.replace(matchNew, '<span class="greenHL">' + matchNew + '</span>');
						$(this).empty().append(newText);
					});
				}
				
				// dropdown position
				var left = parseInt($('.ui-autocomplete').css('left')) - ($('.ui-autocomplete').width() - $('#searchBox').width() + 16);
				$('.ui-autocomplete').css({ left: left, width: 'auto' });
				var width = $('.ui-autocomplete').width() + 20;
				$('.ui-autocomplete').css('width', width);
			},
			focus: function (e, ui) {
				// show article image
				var img = (iret && iret.articles && iret.articles[ui.item.value]) ? '/assets/images/articles/tiny/' + iret.articles[ui.item.value][0].image_name : '';
				
				if (img > '') {
					var x = e.pageX - $('#li_' + ui.item.value).offset().left + 16;
					var y = e.pageY - $('#li_' + ui.item.value).offset().top - 16;
					
					if (!$('#si_' + ui.item.value).html()) {
						$('#li_' + ui.item.value).append('<div id="si_' + ui.item.value + '" style="left: ' + x + 'px; top: ' + y + 'px;" class="sImage"><img src="' + img + '" /></div>');
						$('#si_' + ui.item.value).hide().fadeIn(600);
					
						$('#li_' + ui.item.value).mouseleave(function (e) {
							$('#si_' + ui.item.value).remove();
						});
					}
				}
			},
			select: function (e, ui) {
				getArticle(ui.item.value, 0, ui.item.cat);
				this.value = '';
				return false;
			}
		})
		.data('autocomplete')._renderItem = function (ul, item) {
			return $('<li id="li_' + item.value + '" style="position: relative;"></li>')
					.data('item.autocomplete', item)
					.append('<a><div class="searchArtCode">' + item.value + '</div><div class="searchArtName">' + item.label + '</div></a>')
					.appendTo(ul);
		};
	});
}

// showArlaCountdown
function showArlaCountdown() {
	$.post('/assets/ajax/time.php', { 'task': 'getServerTime', 'SESSID': SESSID }, function (json) {
		var serverTime = new Date(json.time * 1000);
		
		if (serverTime.getDay() != 6 && serverTime.getDay() != 0) {
			var time = json.arla.split(':');
			var deadline = new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate(), time[0], time[1], 0, 0);
			var clientTime = new Date();
			var timespan;
			
			if (clientTime > serverTime)
				timespan = -(Date.parse(new Date(clientTime - serverTime)) / 3600000);
			else
				timespan = (Date.parse(new Date(serverTime - clientTime)) / 3600000);
			
			$('#cdArla').countdown({
				date: deadline,
				offset: timespan,
				onChange: function (e) {
					var h = $('.cd_h', this).html();
					var m = $('.cd_m', this).html();
					var s = $('.cd_s', this).html();
					formatCountdown(this, h, m, s);
				},
				htmlTemplate: '<b>Orderstopp Arla:</b> kl ' + json.arla + '<br /><span class="cd_h">%{h}</span><span class="cd_m">%{m}</span><span class="cd_s">%{s}</span> återstår',
				onComplete: function (e) {
					arlaStop = true;
					$(this).html('');
					showOrderCountdown();
				}
			});
			
			if (!arlaStop)
				$('#countdown').hide().delay(1000).fadeIn();
		}
	}, 'json');
}

// showOrderCountdown
function showOrderCountdown() {
	$.post('/assets/ajax/time.php', { 'task': 'getServerTime', 'SESSID': SESSID }, function (json) {
		var serverTime = new Date(json.time * 1000);
		var time = json.order.split(':');
		var deadline = new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate(), time[0], time[1], 0, 0);
		var clientTime = new Date();
		var timespan;
		
		if (clientTime > serverTime)
			timespan = -(Date.parse(new Date(clientTime - serverTime)) / 3600000);
		else
			timespan = (Date.parse(new Date(serverTime - clientTime)) / 3600000);
		
		$('#cdOrder').countdown({
			date: deadline,
			offset: timespan,
			onChange: function (e) {
				var h = $('.cd_h', this).html();
				var m = $('.cd_m', this).html();
				var s = $('.cd_s', this).html();
				formatCountdown(this, h, m, s);
			},
			htmlTemplate: '<b>Orderstopp:</b> kl ' + json.order + '<br /><span class="cd_h">%{h}</span><span class="cd_m">%{m}</span><span class="cd_s">%{s}</span> återstår',
			onComplete: function (e) {
				orderStop = true;
				$(this).html('');
			}
		});
		
		$('#countdown').hide().delay(1000).fadeIn();
	}, 'json');
}

// formatCountdown
function formatCountdown(element, h, m, s) {
	if (h == '0')
		$('.cd_h', element).html('');
	else if (h == '1')
		$('.cd_h', element).html('1 timme ');
	else
		$('.cd_h', element).html(h + ' timmar ');
	
	if (m == '0' && h == '0')
		$('.cd_m', element).html('');
	else if (m == '1')
		$('.cd_m', element).html('1 minut ');
	else
		$('.cd_m', element).html(m + ' minuter ');
	
	if (h == '0' && m == '0') {
		if (s == '1')
			$('.cd_s', element).html('1 sekund');
		else
			$('.cd_s', element).html(s + ' sekunder');
	} else {
		$('.cd_s', element).html('');
	}
}

// showCategories
function showCategories() {
	var a = 0;
	var html = '<div id="categories" class="content">';
	var root = sortCategories();
	
	$.each(root, function (i, item) {
		if (!item.hidden) {
			var alpha = (a++ % 4 == 0) ? ' alpha' : '';
			if (item.catname) {
				var img = (iret && iret.categories && iret.categories[item.catcode]) ? ' style="background: url(/assets/images/categories/thumbs/' + iret.categories[item.catcode][0].image_name + ') center no-repeat;"' : '';
				html +=	'	<div class="category' + alpha + '">' +
						'		<div class="categoryImage"' + img + ' title="' + item.catname + '" onClick="showCategory(\'' + item.catcode + '\');"></div>' +
						'		<a href="javascript:showCategory(\'' + item.catcode + '\');">' + item.catname + '</a>' +
						'	</div>';
			}
		}
	});
	
	html +=	'	<div class="clear"></div>' +
			'</div>';
	
	contentChange(html, '', 'Kategorier');
	window.location.hash = '/kategorier';
	hash = window.location.hash;
	
	// google analytics
	_gaq.push(['_trackPageview', '/#/kategorier']);
	
	// log event
	logThis('Portal', 'Viewed categories', USERID);
}

// showCategory
function showCategory(cat) {
	var cats = cat.split('');
	var catRec = 'cret';
	
	for (var i = 0; i < cats.length; i++) {
		catRec += '[\'' + cats[i] + '\']';
	}
	
	var a = 0;
	var html = '';
	var hasCat = false;
	var cHtml = '';
	var sub = sortCategories(eval(catRec));
	
	$.each(sub, function (i, item) {
		if (!item.hidden) {
			var alpha = (a++ % 4 == 0) ? ' alpha' : '';
			var img = (iret && iret.categories && iret.categories[cat + item.catcode]) ? ' style="background: url(/assets/images/categories/thumbs/' + iret.categories[cat + item.catcode][0].image_name + ') center no-repeat;"' : '';
			cHtml +=	'	<div class="category' + alpha + '">' +
						'		<div class="categoryImage"' + img + ' title="' + item.catname + '" onClick="showCategory(\'' + cat + item.catcode + '\');"></div>' +
						'		<a href="javascript:showCategory(\'' + cat + item.catcode + '\');">' + item.catname + '</a>' +
						'	</div>';
			hasCat = true;
		}
	});
	
	if (hasCat) {
		html +=	'<div id="categories" class="content">' +
					cHtml +
				'	<div class="clear"></div>' +
				'</div>';
	}
	
	var allArt = [];
	var hasArt = false;
	
	if (eval(catRec).articles) {
		$.each(eval(catRec).articles, function (i, item) {
			var origin = (item[4]) ? item[4].toLowerCase().split('-') : '';
			var country = (origin) ? origin[1].replace(/^\w/, function ($0) { return $0.toUpperCase(); }) : '';
			
			var art = {
				name: item[0],
				setart: 0,
				code: i,
				price: parseFloat(item[2] * item[5]).toFixed(2).replace('.', ','),
				unitprice: item[2],
				stock: (item[3] == 1) ? 'Lagervara' : 'Beställningsvara',
				origin: origin[0],
				country: country,
				size: item[5],
				split: item[7],
				unit: (item[8]) ? item[8] : 'st',
				eco: item[9],
				fair: item[10],
				krav: item[11],
				ledtid: item[12]
			};
			
			allArt.push(art);
			hasArt = true;
		});
	}
	
	if (eval(catRec).setarticles) {
		$.each(eval(catRec).setarticles, function (i, item) {
			var origin = (item[4]) ? item[4].toLowerCase().split('-') : '';
			var country = (origin) ? origin[1].replace(/^\w/, function ($0) { return $0.toUpperCase(); }) : '';
			
			var art = {
				name: item[0],
				setart: 0,
				code: i,
				price: parseFloat(item[2] * item[5]).toFixed(2).replace('.', ','),
				unitprice: item[2],
				stock: (item[3] == 1) ? 'Lagervara' : 'Beställningsvara',
				origin: origin[0],
				country: country,
				size: item[5],
				split: item[7],
				unit: (item[8]) ? item[8] : 'st',
				eco: item[9],
				fair: item[10],
				krav: item[11],
				ledtid: item[12]
			};
			
			allArt.push(art);
			hasArt = true;
		});
	}
	
	if (hasArt) {
		allArt.sort(function (a, b){
			var nameA = a.name.toLowerCase(), nameB = b.name.toLowerCase();
			if (nameA < nameB)
				return -1;
			if (nameA > nameB)
				return 1;
			return 0;
		});
		
		a = 0;
		html += '<div id="articles" class="content">';
		
		$.each(allArt, function (i, art) {
			var alpha = (a++ % 4 == 0) ? ' alpha' : '';
			var ao = (art.split > 1) ? ' alpha' : ' omega';
			var img = (iret && iret.articles && iret.articles[art.code]) ? ' style="background: #fff url(/assets/images/articles/thumbs/' + iret.articles[art.code][0].image_name + ') center no-repeat;"' : '';
			var saleType = (art.size > 0) ? 'Förpackning' : 'Förs.enhet';
			var size = (art.size > 0) ? art.size : 1;
			
			if (alpha > '' && i > 0) {
				html += '	<div class="clear"></div>';
			}
			
			html +=	'	<div class="article' + alpha + '">' +
					'		<div class="articleImageSmall"' + img + ' title="' + art.name + '" onClick="getArticle(\'' + art.code + '\', ' + art.setart + ', \'' + cat + '\');">';
			
			if (art.origin > '' && art.country > '')
				html += '			<img src="/assets/images/icons/flags/' + art.origin + '.png" title="' + art.country + '" />';
				
			html +=	'		</div>' +
					'		<a href="javascript:getArticle(\'' + art.code + '\', ' + art.setart + ', \'' + cat + '\');">' + art.name + '</a>' +
					'		<div class="artRow">' +
					'			<div class="artSLeft">Artikelkod</div>' +
					'			<div class="artSRight">' + art.code + '</div>' +
					'		</div>' +
					'		<div class="artRow">' +
					'			<div class="artSLeft">' + saleType + '</div>' +
					'			<div class="artSRight">' + size.toString().replace('.', ',') + ' ' + art.unit + '</div>' +
					'		</div>';
			
			if (art.unitprice > 0) {
				if (art.size > 0) {
					html +=	'		<div class="artRow">' +
							'			<div class="artSLeft">Pris</div>' +
							'			<div class="artSRight">' + art.price + ' kr</div>' +
							'		</div>';
				}
						
				html +=	'		<div class="artRow">' +
						'			<div class="artSLeft">Á-pris</div>' +
						'			<div class="artSRight">' + parseFloat(art.unitprice).toFixed(2).replace('.', ',') + ' kr</div>' +
						'		</div>';
			}
			
			if (art.size > 0) {
			html +=	'		<div class="artRow alpha">' +
					'			<div class="artSLeft">' +
					'				<div class="artAmount' + ao + '">' +
					'					<div class="packageMinus" onClick="packageMinus(\'' + art.code + '\');"></div>' +
					'					<div class="packageAmount">' +
					'						<input id="packageInput_' + art.code + '" class="amountInput" style="height: 16px;" type="text" value="0" onChange="valPackage(\'' + art.code + '\')" onInput="valPackage(\'' + art.code + '\')" onPaste="valPackage(\'' + art.code + '\')" onKeyUp="valPackage(\'' + art.code + '\')" />' +
					'					</div>' +
					'					<div class="packagePlus" onClick="packagePlus(\'' + art.code + '\');"></div><div></div>' +
					'				</div>' +
					'			</div>' +
					'			<div class="artSRight">' +
					'				antal förp.' +
					'			</div>' +
					'		</div>';
			}
			
			if (art.split >= 1 || art.size == 0) {
				html +=	'		<div class="artRow">' +
						'			<div class="artSLeft">' +
						'				<div class="artAmount omega">' +
						'					<div class="unitMinus" onClick="unitMinus(\'' + art.code + '\', ' + art.split + ', ' + art.size + ');"></div>' +
						'					<div class="unitAmount">' +
						'						<input id="unitInput_' + art.code + '" class="amountInput" style="height: 16px;" type="text" value="0" onChange="valUnit(\'' + art.code + '\', \'' + art.unit + '\', ' + art.size + ')" onInput="valUnit(\'' + art.code + '\', \'' + art.unit + '\', ' + art.size + ')" onPaste="valUnit(\'' + art.code + '\', \'' + art.unit + '\', ' + art.size + ')" onKeyUp="valUnit(\'' + art.code + '\', \'' + art.unit + '\', ' + art.size + ')" />' +
						'					</div>' +
						'					<div class="unitPlus" onClick="unitPlus(\'' + art.code + '\', ' + art.split + ', ' + art.size + ');"></div><div></div>' +
						'				</div>' +
						'			</div>' +
						'			<div class="artSRight">' +
						'				antal ' + art.unit +
						'			</div>' +
						'		</div>';
			}
			
			if (art.ledtid > 0) {
				html +=	'		<div class="artRow">' +
						'			<div class="artSLeft" style="padding-bottom: 3px;">Ledtid</div>' +
						'			<div class="artSRight" style="color: #f00; padding-bottom: 3px;">' + art.ledtid + ' dagar</div>' +
						'		</div>';
			}
			
			html +=	'		<div class="artRow">' +
					'			<div class="artSLeft">' + art.stock + '</div>' +
					'			<div class="artSRight">';
			
			if (art.size == 0) {
				if (art.unit == 'st')
					html += '				<div class="buttonGS" onClick="addToCart(\'' + art.code + '\', parseInt($(\'#unitInput_' + art.code + '\').val()));" title="Lägg till i kundkorg">Lägg till</div>';
				else
					html += '				<div class="buttonGS" onClick="addToCart(\'' + art.code + '\', parseFloat($(\'#unitInput_' + art.code + '\').val()).toFixed(2));" title="Lägg till i kundkorg">Lägg till</div>';
			} else if (art.split >= 1) {
				if (art.unit == 'st')
					html += '				<div class="buttonGS" onClick="addToCart(\'' + art.code + '\', parseInt($(\'#packageInput_' + art.code + '\').val() * ' + size + ' + parseInt($(\'#unitInput_' + art.code + '\').val())));" title="Lägg till i kundkorg">Lägg till</div>';
				else
					html += '				<div class="buttonGS" onClick="addToCart(\'' + art.code + '\', parseFloat($(\'#packageInput_' + art.code + '\').val() * ' + size + ' + parseFloat($(\'#unitInput_' + art.code + '\').val())));" title="Lägg till i kundkorg">Lägg till</div>';
			} else {
				html += '				<div class="buttonGS" onClick="addToCart(\'' + art.code + '\', parseInt($(\'#packageInput_' + art.code + '\').val() * ' + size + '));" title="Lägg till i kundkorg">Lägg till</div>';
			}
			
			html +=	'			</div>' +
					'		</div>' +
					'	</div>';
		});
		
		html +=	'	<div class="clear"></div>' +
				'</div>';
	}
	
	contentChange(html, cat, 'Kategorier');
	window.location.hash = '/kategori/' + cat.toLowerCase();
	hash = window.location.hash;
	
	// google analytics
	_gaq.push(['_trackPageview', '/#/kategori/' + cat.toLowerCase()]);
	
	// log event
	logThis('Categories', 'Viewed category (cat code: ' + cat + ')', USERID);
}

// getArticle
function getArticle(artcode, setArt, cat) {
	if (!setArt) setArt = 0;
	var task = (setArt == 0) ? 'getItem' : 'getSetItem';
	
	$.post('/assets/ajax/store.php', { 'SESSID':SESSID, 'task':task, 'artcode':artcode }, function (json) {
		var article = $.parseJSON(json);
		
		$.post('/assets/ajax/store.php', { 'SESSID': SESSID, 'task': 'getMeta', 'artcode': artcode }, function (json) {
			var meta = $.parseJSON(json);
			showArticle(setArt, cat, article, meta);
		});
	});
}

// showArticle
function showArticle(setArt, cat, article, meta) {
	var oc = (article.artorigin) ? article.artorigin.toLowerCase().split('-') : '';
	var origin = (oc) ? oc[0] : '';
	var country = (oc) ? oc[1].replace(/^\w/, function ($0) { return $0.toUpperCase(); }) : '';
	var price = parseFloat(article.artprice * article.artsize).toFixed(2).replace('.', ',');
	var stock = (article.artstocked == 1) ? 'Lagervara' : 'Beställningsvara';
	var unit = (article.artunit) ? article.artunit : 'st';
	var marking = '';
	var saleType = (article.artsize > 0) ? 'Förpackning:' : 'Försäljningsenhet:';
	var size = (article.artsize > 0) ? article.artsize : 1;
	var brand = (meta.h_brand) ? meta.h_brand : meta.d_brand;
	var manufacturer = (meta.h_manufacturer) ? meta.h_manufacturer : meta.d_manufacturer;
	var description = (meta.h_description) ? meta.h_description : '';
	var ingredients = (meta.h_ingredients) ? meta.h_ingredients : meta.d_ingredients;
	var storage = (meta.h_storage) ? meta.h_storage : meta.d_storage;
	var allergy = (meta.h_allergy) ? meta.h_allergy : meta.d_allergy;
	var url = (meta.h_url) ? meta.h_url : meta.d_url;
	var nutrition = '';
	var nutritionObj = (meta.h_nutrition && meta.h_nutrition.length > 0) ? meta.h_nutrition : meta.d_nutrition;
	
	if (article.arteco == 1)
		marking += '<img class="marking" src="/assets/images/eco.png" alt="Ekologiskt" title="Ekologiskt" />';
	
	if (article.artfair == 1)
		marking += '<img class="marking" src="/assets/images/fair.png" alt="Fair Trade" title="Fairtrade" />';
	
	if (article.artkrav == 1)
		marking += '<img class="marking" src="/assets/images/krav.png" alt="Krav" title="Krav" />';
	
	if (description > '') {
		description =	'<h3>Beskrivning</h3>' +
						'<pre>' + description + '</pre>';
	}
	
	if (ingredients > '') {
		ingredients =	'<h3>Ingredienser</h3>' +
						'<pre>' + ingredients + '</pre>';
	}
	
	if (storage > '') {
		storage =	'<h3>Förvaring</h3>' +
					'<pre>' + storage + '</pre>';
	}
	
	if (allergy > '') {
		allergy =	'<h3>Allergiinformation</h3>' +
					'<pre>' + allergy + '</pre>';
	}
	
	if (url > '') {
		url = (url.substr(0, 7) == 'http://') ? url : 'http://' + url;
		url =	'<h3>Webbplats</h3>' +
				'<a href="' + url + '" title="' + manufacturer + '">' + url.replace('http://', '') + '</a>';
	}
	
	var per = false;
		
	if (nutritionObj && nutritionObj.length > 0) {
		nutrition += '<h3>Näringsvärden</h3>';
		$.each(nutritionObj, function (i, item) {
			if (item.status == 'Ej tillagad') {
				if (!per) {
					nutrition += '<div class="per">Per ' + item.base + ' ' + item.baseunit.toLowerCase() + ', ej tillagad</div>';
					per = true;
				}
				
				var rc = (i % 2 == 0) ? ' odd' : ' even';
				var sign = '&nbsp;';
				
				if (item.significance == 'Genomsnittligt värde')
					sign = '~';
				else if (item.significance == 'Mindre än')
					sign = '<';
					
				nutrition +=	'<div class="nutritionRow' + rc + '">' +
								'	<div class="nutritionTitle">' + item.title + '</div>' +
								'	<div class="nutritionData">' +
								'		<div class="nutritionSign">' + sign + '</div>' +
								'		<div class="nutritionAmount">' + item.amount.replace('.', ',') + ' ' + item.unit + '</div>' +
								'	</div>' +
								'	<div class="clear"></div>' +
								'</div>';
			}
		});
	}
	
	var name = (setArt == 0) ? article.artname : article.setartname;
	var html = '';
	html +=	'<div id="article" class="content">' +
			'	<div id="articleLeft">' +
			'		<h2>' + name + '</h2>';
	
	if (origin > '' && country > '')
		html += '&nbsp;&nbsp;<img src="/assets/images/icons/flags/' + origin + '.png" title="' + country + '" />';
	
	if (brand > '')
		html += '		<div id="brand">' + brand + '</div>';
	
	if (manufacturer > '')
		html += '		<div id="manufacturer">' + manufacturer + '</div>';
	
	var img = (iret && iret.articles && iret.articles[article.artcode]) ? ' style="background: #fff url(/assets/images/articles/medium/' + iret.articles[article.artcode][0].image_name + ') center no-repeat;"' : '';
	html += '		<div class="articleImageMedium"' + img + ' title="' + name + '"></div>';
	
	if (img && iret.articles[article.artcode].length > 1) {
		html += '		<div id="articleImageSelect">';
		
		$.each(iret.articles[article.artcode], function(i, image) {
			var img = ' style="background: #fff url(/assets/images/articles/tiny/' + image.image_name + ') center no-repeat;"';
			html +=	'			<div class="articleImageTiny" ' + img + ' onClick="showImageMedium(\'' + image.image_name + '\')"></div>';
		});
		
		html += '		</div>';
	}
	
	html +=	'		<div class="artRow">' +
			'			<div class="artLeft"><span class="middle">Artikelkod:</span></div>' +
			'			<div class="artMiddle"><span class="middle">' + article.artcode + '</span></div>' +
			'		</div>';
	
	if (article.artean > '') {
		html +=	'		<div class="artRow">' +
				'			<div class="artLeft"><span class="middle">EAN-kod:</span></div>' +
				'			<div class="artMiddle"><span class="middle">' + $.trim(article.artean) + '</span></div>' +
				'		</div>';
	}
	
	html +=	'		<div class="artRow">' +
			'			<div class="artLeft"><span class="middle">' + saleType + '</span></div>' + //
			'			<div class="artMiddle"><span class="middle">' + size.toString().replace('.', ',') + ' ' + unit + '</span></div>' + //
			'		</div>';
	
	if (article.artprice > 0) {
		if (article.artsize > 0) {
			html +=	'		<div class="artRow">' +
					'			<div class="artLeft"><span class="middle">Pris:</span></div>' +
					'			<div class="artMiddle"><span class="middle">' + price + ' kr</span></div>' +
					'		</div>';
		}
		
		html +=	'		<div class="artRow">' +
				'			<div class="artLeft"><span class="middle">Á-pris:</span></div>' +
				'			<div class="artMiddle"><span class="middle">' + parseFloat(article.artprice).toFixed(2).replace('.', ',') + ' kr</span></div>' +
				'		</div>';
	}
	
	/*
	'		<div class="artRow">' +
	'			<div class="artLeft"><span class="middle">Jämförpris:</span></div>' +
	'			<div class="artMiddle"><span class="middle">' + parseFloat(article.artcomp).toFixed(2).replace('.', ',') + ' kr</span></div>' +
	'		</div>' +
	*/
	
	if (article.artsize > 0) {
		html +=	'		<div class="artRow">' +
				'			<div class="artLeft"><span class="middle">Antal förp:</span></div>' +
				'			<div class="artAmount">' +
				'				<div class="packageMinus" onClick="packageMinus();"></div>' +
				'				<div class="packageAmount">' +
				'					<input id="packageInput" class="amountInput" style="height: 16px;" type="text" value="0" onChange="valPackage(\'\')" onInput="valPackage(\'\')" onPaste="valPackage(\'\')" onKeyUp="valPackage(\'\')" />' +
				'				</div>' +
				'				<div class="packagePlus" onClick="packagePlus();"></div><div></div>' +
				'			</div>' +
				'		</div>';
	}
	
	if (article.artsplit >= 1 || article.artsize == 0) {
		html +=	'		<div class="artRow">' +
				'			<div class="artLeft"><span class="middle">Antal ' + unit + ':</span></div>' +
				'			<div class="artAmount">' +
				'				<div class="unitMinus" onClick="unitMinus(\'\', ' + article.artsplit + ', ' + article.artsize + ');"></div>' +
				'				<div class="unitAmount">' +
				'					<input id="unitInput" class="amountInput" style="height: 16px;" type="text" value="0" onChange="valUnit(\'\', \'' + unit + '\', ' + article.artsize + ')" onInput="valUnit(\'\', \'' + unit + '\', ' + article.artsize + ')" onPaste="valUnit(\'\', \'' + unit + '\', ' + article.artsize + ')" onKeyUp="valUnit(\'\', \'' + unit + '\', ' + article.artsize + ')" />' +
				'				</div>' +
				'				<div class="unitPlus" onClick="unitPlus(\'\', ' + article.artsplit + ', ' + article.artsize + ');"></div><div></div>' +
				'			</div>' +
				'		</div>';
	}
	
	if (article.ledtid > 0) {
		html +=	'		<div class="artRow">' +
				'			<div class="artLeft"><span class="middle">Ledtid:</span></div>' +
				'			<div class="artMiddle"><span class="middle" style="color: #f00;">' + article.ledtid + ' dagar</span></div>' +
				'		</div>';
	}
	
	html +=	'		<div class="artRow">' +
			'			<div class="artLeft"><span class="middle">Lager:</span></div>' +
			'			<div class="artMiddle"><span class="middle">' + stock + '</span></div>' +
			'			<div class="artRight">';
	
	if (article.artsize == 0) {
		if (unit == 'st')
			html += '				<div class="buttonGS" onClick="addToCart(\'' + article.artcode + '\', parseInt($(\'#unitInput\').val()));" title="Lägg till i kundkorg">Lägg till</div>';
		else
			html += '				<div class="buttonGS" onClick="addToCart(\'' + article.artcode + '\', parseFloat($(\'#unitInput\').val()).toFixed(2));" title="Lägg till i kundkorg">Lägg till</div>';
	} else if (article.artsplit >= 1) {
		if (unit == 'st')
			html += '				<div class="buttonGS" onClick="addToCart(\'' + article.artcode + '\', parseInt($(\'#packageInput\').val() * ' + size + ' + parseInt($(\'#unitInput\').val())));" title="Lägg till i kundkorg">Lägg till</div>';
		else
			html += '				<div class="buttonGS" onClick="addToCart(\'' + article.artcode + '\', parseFloat($(\'#packageInput\').val() * ' + size + ' + parseFloat($(\'#unitInput\').val())));" title="Lägg till i kundkorg">Lägg till</div>';
	} else {
		html += '				<div class="buttonGS" onClick="addToCart(\'' + article.artcode + '\', parseInt($(\'#packageInput\').val() * ' + size + '));" title="Lägg till i kundkorg">Lägg till</div>';
	}
	
	html +=	'			</div>' +
			'		</div>' +
			'	</div>' +
			'	<div id="articleRight">';
	
	if (description > '')
		html += '		<div class="articleInfo">' + description + '</div>';
	
	if (ingredients > '')
		html += '		<div class="articleInfo">' + ingredients + '</div>';
	
	if (nutrition > '')
		html += '		<div class="articleInfo">' + nutrition + '</div>';
	
	if (storage > '')
		html += '		<div class="articleInfo">' + storage + '</div>';
	
	if (allergy > '')
		html += '		<div class="articleInfo">' + allergy + '</div>';
		
	if (url > '')
		html += '		<div class="articleInfo">' + url + '</div>';
	
	if (marking > '')
		html += '		<div class="articleInfo">' + marking + '</div>';
	
	if (article.edit > '')
		html += '		<div id="articleEdit">' + article.edit + '</div>';
	
	html +=	'	</div>' +
			'	<div class="clear"></div>' +
			'</div>';
	contentChange(html, cat, 'Kategorier');
	window.location.hash = '/kategori/' + cat.toLowerCase() + '/artikel/' + article.artcode.toLowerCase();
	hash = window.location.hash;
	
	// google analytics
	_gaq.push(['_trackPageview', '/#/kategori/' + cat.toLowerCase() + '/artikel/' + article.artcode.toLowerCase()]);
	
	// log event
	logThis('Articles', 'Viewed article (art code: ' + article.artcode + ')', USERID);
}

// showImageMedium
function showImageMedium(img) {
	var bg = '#fff url(/assets/images/articles/medium/' + img + ') center no-repeat';
	$('.articleImageMedium').fadeOut(250, function () {
		$(this).css('background', bg).fadeIn(250);
	});
}

// packageMinus
function packageMinus(id) {
	var selector = (id > '') ? '#packageInput_' + id : '#packageInput';
	var n = parseInt($(selector).val());
	if (n > 0)
		$(selector).val(n - 1);
}

// packagePlus
function packagePlus(id) {
	var selector = (id > '') ? '#packageInput_' + id : '#packageInput';
	var n = parseInt($(selector).val());
	$(selector).val(n + 1);
}

// unitMinus
function unitMinus(id, factor, size) {
	var selector = (id > '') ? '#unitInput_' + id : '#unitInput';
	var ps = (id > '') ? '#packageInput_' + id : '#packageInput';
	//var f = (factor > '') ? (size / factor) : 1;
	var f = (factor > 1) ? (size / factor) : 1;
	var n = parseInt($(selector).val());
	
	if (n > 0) {
		$(selector).val(n - f);
	} else {
		var p = parseInt($(ps).val());
		
		if (p > 0) {
			$(ps).val(p - 1);
			$(selector).val(size - f);
		} else {
			if (n > 0)
				$(selector).val(n - f);
		}
	}
}

// unitPlus
function unitPlus(id, factor, size) {
	var selector = (id > '') ? '#unitInput_' + id : '#unitInput';
	var ps = (id > '') ? '#packageInput_' + id : '#packageInput';
	//var f = (factor > '') ? (size / factor) : 1;
	var f = (factor > 1) ? (size / factor) : 1;
	var n = parseInt($(selector).val());
	
	if ((n + f) == size) {
		var p = parseInt($(ps).val());
		$(ps).val(p + 1);
		$(selector).val(0);
	} else {
		$(selector).val(n + f);
	}
}

// valPackage
function valPackage(artcode) {
	$.doTimeout('typing', 1500, function () {
		var selector = (artcode > '') ? '#packageInput_' + artcode : '#packageInput';
		var val = (!isNaN(parseInt($(selector).val()))) ? parseInt($(selector).val()) : 0;
		$(selector).val(val);
	}, true);
}

// valUnit
function valUnit(id, unit, size) {
	$.doTimeout('typing', 1500, function () {
		var selector = (id > '') ? '#unitInput_' + id : '#unitInput';
		var val = (unit == 'st') ? parseInt($(selector).val()) : parseFloat($(selector).val().replace(',', '.')).toFixed(2);
		val = (!isNaN(val)) ? val : 0;
		$(selector).val(val);
		
		if (size > 0 && val >= size) {
			var ps = (id > '') ? '#packageInput_' + id : '#packageInput';
			var p = parseInt($(ps).val());
			var packages = parseInt(val / size);
			var units = (unit == 'st') ? val % size : (val % size).toFixed(2);
			$(selector).val(units);
			$(ps).val(p + packages);
		}
	}, true);
}

// checkSession
function checkSession() {
	$.post('/assets/ajax/auth.php', { 'SESSID': SESSID }, function (json) {
		var ret = $.parseJSON(json);
		
		if (ret.pass == 0) {
			alert('Du har blivit automatiskt utloggad.');
			document.location.href = '/';
		}
	});
}

// paginationStr
function paginationStr(count, page, cb, jump) {
	var pp = (!jump) ? PERPAGE : parseInt(jump);
	var numPages = Math.ceil(parseInt(count)/pp);
	var divider = '&nbsp;&nbsp;';
	var str = '';
	if(numPages <= 11) {
		for(var k = 0; k < parseInt(numPages); k++) {
			var l = k + 1;
			if(k == page) {
				str += '<b>' + l.toString() + '</b>' + divider;
			} else {
				str += '<a href="javascript:'+cb+'('+k+')">'+l.toString()+'</a>'+divider;
			}
		}
	} else {
		var p = 5;
		var m = 5;
		var i = 1;
		
		var trailing = '';
		
		if(page - m < 0) {
			p += (page - m ) * -1; 
			m += (page - m );
		} else {
			str += '<a href="javascript:'+cb+'(0)">1</a> ... ';
		}
		
		if(page + p > numPages) {
			m += ((numPages-1) - (page + p)) * -1;
			p += ((numPages-1) - (page + p));
		} else {
			trailing = '... <a href="javascript:'+cb+'('+(numPages-1)+')">'+numPages+'</a>'; 
		}
		
		for(i = m; i > 0; i--) {
			str += '<a href="javascript:'+cb+'('+(page - i)+')">'+((page - i)+1)+'</a>'+divider;
		}
		
		str += '<b>'+(page + 1)+'</b>'+divider;
		
		for(i = 1; i < p; i++) {
			str += '<a href="javascript:'+cb+'('+(page + i)+')">'+((page + i)+1)+'</a>'+divider;
		}

		str += trailing;
	}
	return str;
}

// logThis
function logThis(where, what, who) {
	who = (!who) ? '' : who;
	$.post('/assets/ajax/log.php', { 'task': 'logevent', 'where': where, 'what': what, 'who': who }, function (json) { }, 'json');
}

// trace
function trace(s) {
	try { console.log(s); } catch (e) { }
};
