var descMaxLen = 100;
var latest_menuplan_url = "/oppskrifter/ukemeny/menuplans-xml";
var single_recipe_url = "/system-pages/recipe-summary-xml";
var loadingMenuPlan = false;
//var loggedInAs = null;

var currentMenuPlan = {
	'loadedFromServer': false,
	'key': '',
	'title': '',
	'days': new Array()
};

var menuPlannerAdditionalRecipes = new Array();

$("#account-menuplan").live("click", function(e) {
	e.preventDefault();

	$('.account-button-active').removeClass("account-button-active");
	$('#account-menuplan').addClass("account-button-active");

	html = "<a class='roundedbutton colorblue' id='ukemenyButton' href='/oppskrifter/ukemeny'>Til ukemeny</a>";

	if(getLoggedInUser() == false) {
		html += "<h2>Mine ukemenyer</h2><p>Du må være <a href='#' class='openloginbutton2'>innlogget</a> for å kunne hente frem dine lagrede ukemenyer. Gå til <a href='/oppskrifter/ukemeny'>ukemenyen</a> for å sette sammen din egen ukemeny, som lagres midlertidig på din datamaskin.</p>";

	} else {
		var menuplans = getMenuPlansByEmail(getLoggedInUser().email);

		var html = "<h2>Mine lagrede ukemenyer</h2><ul class='account-menuplans-list'>";
		for(var i = 0; i < menuplans.length; i++) {
			html += "<li>";
			html += "<a class='linkbullet' href='/oppskrifter/ukemeny#menuplan=" + menuplans[i].id + "'>" + menuplans[i].name + "</a>";
			html += "<p>Opprettet " + menuplans[i].created + "</p>";
			html += "</li>";
		}
		html += "</ul>";
	}

	$(".account-content").html(html);
	Cufon.replace('.account-content h2');

	$('.openloginbutton2').click(function(e) {
		showLogin();

		return false;
	});
});

$(".account-menuplans-list a").live('click', function(e) {
	if(window.location.href.indexOf("oppskrifter/ukemeny") != -1) {
		e.preventDefault();
		window.location = this.href;
		window.location.reload();
	}
});

function addToMenuPlanner(recipekey, title) {
	var target = JSON.parse($.cookie("mpTarget"));

	// GA tracking
	_gaq.push(['_trackEvent', 'Ukemeny', 'Legg til oppskrift', title + ' (' + recipekey + ')']);

	var ret;
	if(supports_html5_storage()) {
		ret = loadMenuPlanFromLocalStorage();
	} else {
		ret = loadMenuPlanFromCookie();
	}

	var payload = ret.payload;
	var additional = ret.additional;
	var source = ret.source;

	if(target != null && payload != null) {
		payload[target] = recipekey;
		$.cookie("mpTarget", null, { path: '/' });
	} else {
		additional.push(recipekey);
	}

	if(supports_html5_storage()) {
		saveMenuPlanToLocalStorage(JSON.stringify(payload), JSON.stringify(additional), JSON.stringify(source));
	} else {
		saveMenuPlanToCookie(JSON.stringify(payload), JSON.stringify(additional), JSON.stringify(source));
	}

	var sendUserToMenuPlanner = true;

	if(sendUserToMenuPlanner) {
		window.location.href = "http://www.tine.no/oppskrifter/ukemeny";

	} else {
		$(".addToMenuPlannerHelp").show();
	}

	return false;
}

function isMenuPlanInBrowser() {
	if(supports_html5_storage()) {
		if(window.localStorage.getItem("mpExpiry") != null) {
			var expiry = Date.parse(window.localStorage.getItem("mpExpiry"));
			return (
				(Date.today().compareTo(expiry) != 1) && 
				((window.localStorage.getItem("mpCurrent") != null) && (window.localStorage.getItem("mpCurrent") != "null"))
			);
		} else {
			return (window.localStorage.getItem("mpCurrent") != null);
		}
	} else {
		return (JSON.parse($.cookie("mpCurrent")) != null);
	}
}

function saveMenuPlanToBrowser() {
	_d("saveMenuPlanToBrowser(): Saving menu plan to browser storage");

	var payload = new Array();
	for(d = 0; d < currentMenuPlan.days.length; d++) {
		if(currentMenuPlan.days[d] != null) {
			payload[d] = currentMenuPlan.days[d].id;
		} else {
			payload[d] = -1;
		}
	}

	var additional = new Array();
	for(i = 0; i < menuPlannerAdditionalRecipes.length; i++) {
		additional[i] = menuPlannerAdditionalRecipes[i].id;
	}

	if(currentMenuPlan.loadedFromServer) {
		var source = {
			'fromServer': true,
			'key': currentMenuPlan.key,
			'title': currentMenuPlan.title
		};
	} else {
		var source = {
			'fromServer': false
		};
	}

	if(supports_html5_storage()) {
		saveMenuPlanToLocalStorage(JSON.stringify(payload), JSON.stringify(additional), JSON.stringify(source));
	} else {
		saveMenuPlanToCookie(JSON.stringify(payload), JSON.stringify(additional), JSON.stringify(source));
	}
}

function saveMenuPlanToLocalStorage(currentPayload, additionalPayload, sourcePayload) {
	_d("saveMenuPlanToLocalStorage(): Using HTML5 local storage");

	var expiryStr = Date.today().next().sunday().set({hour: 23, minute: 59 }).toJSONString();
	expiryStr = expiryStr.substring(0, expiryStr.length - 1);

	window.localStorage.setItem("mpExpiry", expiryStr);
	window.localStorage.setItem("mpSource", sourcePayload);
	window.localStorage.setItem("mpCurrent", currentPayload);
	window.localStorage.setItem("mpAdditionalRecipes", additionalPayload);
}

function saveMenuPlanToCookie(currentPayload, additionalPayload, sourcePayload) {
	_d("saveMenuPlanToCookie(): Using cookies");

	var d = Date.today().next().sunday().set({hour: 23, minute: 59 })

	$.cookie("mpCurrent", currentPayload, { expires: d, path: '/' });
	$.cookie("mpSource", sourcePayload, { expires: d, path: '/' });
	$.cookie("mpAdditionalRecipes", additionalPayload, { expires: d, path: '/' });
}

function loadAdditionalRecipesFromBrowser() {
	_d("loadAdditionalRecipesFromBrowser(): Loading addtional recipes from browser");

	var ret;
	if(supports_html5_storage()) {
		ret = loadMenuPlanFromLocalStorage();
	} else {
		ret = loadMenuPlanFromCookie();
	}

	var additional = ret.additional;

	if(additional == null || additional.length == 0) {
		menuPlannerAdditionalRecipes = new Array();
		return;
	}

	var keys = "";
	for(i = 0; i < additional.length; i++) {
		keys += "," + additional[i];
	}
	keys = keys.substring(1);

	menuPlannerAdditionalRecipes = new Array();

	$.get(single_recipe_url, { 'r': Math.random(), 'key': keys }, function(xml) {
		for(i = 0; i < additional.length; i++) {
			var recipe = $("recipe[key = '" + additional[i] + "']", xml);
			menuPlannerAdditionalRecipes.push(recipeXMLtoObject(recipe));
		}
	});
}

function loadMenuPlanFromBrowser(f) {
	_d("loadMenuPlanFromBrowser(): Loading menu plan from browser");

	var ret;
	if(supports_html5_storage()) {
		ret = loadMenuPlanFromLocalStorage();
	} else {
		ret = loadMenuPlanFromCookie();
	}

	var payload = ret.payload;
	var additional = ret.additional;
	var source = ret.source;

	if(payload == null) {
		return;
	}

	var keys = "";
	for(i = 0; i < additional.length; i++) {
		keys += "," + additional[i];
	}
	for(d = 0; d < payload.length; d++) {
		if(payload[d] != -1) {
			keys += "," + payload[d];
		}
	}
	keys = keys.substring(1);

	$.get(single_recipe_url, { 'r': Math.random(), 'key': keys }, function(xml) {
		currentMenuPlan.days = new Array();
		menuPlannerAdditionalRecipes = new Array();

		if(source != null) {
			currentMenuPlan.loadedFromServer = source.fromServer;

			if(currentMenuPlan.loadedFromServer) {
				currentMenuPlan.key = source.key;
				currentMenuPlan.title = source.title;
			}
		}

		for(d = 0; d < payload.length; d++) {
			currentMenuPlan.days[d] = -1;

			var key = payload[d];
			if(key != -1) {
				var recipe = $("recipe[key = '" + key + "']", xml);
				currentMenuPlan.days[d] = recipeXMLtoObject(recipe);
			} else {
				currentMenuPlan.days[d] = null;
			}
		}

		for(i = 0; i < additional.length; i++) {
			var recipe = $("recipe[key = '" + additional[i] + "']", xml);
			menuPlannerAdditionalRecipes.push(recipeXMLtoObject(recipe));
		}

		loadingMenuPlan = false;

		if(typeof f == 'function') {
			f();
		}
	});
}

function loadMenuPlanFromLocalStorage() {
	_d("loadMenuPlanFromLocalStorage(): Using local storage");

	var additional = null;
	var payload = null;
	var source = null;

	// Check if we have expiry information
	if(window.localStorage.getItem("mpExpiry") != null) {
		var expiry = Date.parse(window.localStorage.getItem("mpExpiry"));

		if(Date.today().compareTo(expiry) != 1) {
			// Not expired yet, load from storage
			additional = JSON.parse(window.localStorage.getItem("mpAdditionalRecipes"));
			payload = JSON.parse(window.localStorage.getItem("mpCurrent"));
			source = JSON.parse(window.localStorage.getItem("mpSource"));

		} else {
			// Stored menu plan has expired
			window.localStorage.removeItem("mpAdditionalRecipes");
			window.localStorage.removeItem("mpCurrent");
			window.localStorage.removeItem("mpExpiry");
			window.localStorage.removeItem("mpSource");
		}

	} else {
		// No expiry, just load from storage
		additional = JSON.parse(window.localStorage.getItem("mpAdditionalRecipes"));
		payload = JSON.parse(window.localStorage.getItem("mpCurrent"));
		source = JSON.parse(window.localStorage.getItem("mpSource"));
	}

	if(additional == null) {
		additional = [];
	}

	return {
		'additional': additional,
		'payload': payload,
		'source': source
	};
}

function clearMenuplanFromLocalStorage() {
	window.localStorage.removeItem("mpAdditionalRecipes");
	window.localStorage.removeItem("mpCurrent");
	window.localStorage.removeItem("mpExpiry");
	window.localStorage.removeItem("mpSource");
}

function loadMenuPlanFromCookie() {
	_d("loadMenuPlanFromCookie(): Using cookies");

	var additional = JSON.parse($.cookie("mpAdditionalRecipes"));
	var payload = JSON.parse($.cookie("mpCurrent"));
	var source = JSON.parse($.cookie("mpSource"));
	
	return {
		'additional': additional,
		'payload': payload,
		'source': source
	};
}

function recipeXMLtoObject(recipe) {

	if(recipe.length == 0) {
		return null;
	}

	var r = {
		'id': recipe.attr("key"),
		'img': recipe.attr("img"),
		'focus': recipe.attr("focus"),
		'title': recipe.attr("title"),
		'desc': recipe.attr("desc"),
		'href': recipe.attr("href")
	};

	if(r.img.length < 15) {
		r.imgurl = 'http://www.tine.no/imageresize/' + r.img + '_220_125_' + r.focus + '.jpg';
	} else {
		r.imgurl = 'http://www.tine.no/imageresize/recipe/' + r.img + '/220_125.jpg';
	}

	if(r.desc.length > descMaxLen) {
		s = r.desc.substring(0, descMaxLen).lastIndexOf(".");
		r.desc = r.desc.substring(0, s + 1);
	}

	return r;
}

function _d(s) {
	if(typeof console !== 'undefined') {
		console.log(s);
	}
}
