
var omxspi = $("body > div > div.omxspi");
var stockMarketWorldIndex = $("body > div > div.stock-market-world-index");
var stockMarketTemperature = $("body > div > div.stock-market-temperature");
var stockMarketWinners = $("body > div > div.stock-market-winners");
var stockMarketLosers = $("body > div > div.stock-market-losers");
var stockMarketAnalysis = $("body > div > div.stock-market-analysis");
var myFavorites = $("body > div > div.my-favorites");
var stockMarketHotStock = $("body > div > div.stock-market-hot-stock");
var stockMarketBestField = $("body > div > div.stock-market-best-field");
var stockMarketWorstField = $("body > div > div.stock-market-worst-field");
var postsFromVABors = $("body > div > div.posts-from-va-bors");
var stockAnalysises = $("body > div > div.stock-analysises");
var latestNews = $("body > div > div > div.latest-news");
var stockMarketToday = $("body > div > div > div.stock-market-today");

var defaultTableMenu = [
	{href: "/", text: "Alla"},
	{href: "/", text: "Large"},
	{href: "/", text: "Mid"},
	{href: "/", text: "Small"},
	{href: "/", text: "First.N"}
];

var noTableMenu = null;

var tableCountryMenu = [
	{href: "/", text: "Alla"},
	{href: "/", text: "SE"},
	{href: "/", text: "DK"},
	{href: "/", text: "FI"}
];

//

loadOMXSPI();
loadStockMarketWorldIndex();
loadStockMarketTemperature();

loadStockMarketWinners();
loadStockMarketLosers();

loadStockMarketAnalysis();

loadMyFavorites();
loadStockMarketHotStock();

loadStockMarketBestField();
loadStockMarketWorstField();

loadPostsFromVABors();
loadStockAnalysises();
loadLatestNews();
loadStockMarketToday();

//

function loadStockMarketTemperature(){
	var definitionList = $("<dl/>")
		.appendTo(stockMarketTemperature);
	
	var definitionTitle = $("<dt/>")
		.text("Tempen")
		.appendTo(definitionList);
	
	var definitionDescription = $("<dd/>")
		.appendTo(definitionList);
	
	var list = $("<ul/>")
		.appendTo(definitionDescription);
	
	$.getJSON("/services/stock-market-temperature.js", {}, function(data){
		list.html("");
		
		var height = 80;
		
		var total = data.warm + data.normal + data.cold;
		
		list.append(
			$("<li/>")
				.addClass("cold")
				.css("line-height", (data.cold / total) * height + "px")
				.text(data.cold)
		)
		
		list.append(
			$("<li/>")
				.addClass("normal")
				.css("line-height", (data.normal / total) * height + "px")
				.text(data.normal)
		)
		
		list.append(
			$("<li/>")
				.addClass("warm")
				.css("line-height", (data.warm / total) * height + "px")
				.text(data.warm)
		)
	});
}

function loadStockMarketToday(){
	createList("/services/latest-news.xml", stockMarketToday);
}

function loadLatestNews(){
	createList("/services/latest-news.xml", latestNews);
}

function loadStockAnalysises(){
	createList("/services/stock-analysises.xml", stockAnalysises);
}

function loadPostsFromVABors(){
	createList("/services/posts-from-va-bors.xml", postsFromVABors);
}

function createList(url, element){
	var title = $("<span/>")
		.addClass("title");
	
	var list = $("<ul/>");
	
	var descriptionList = $("<dl/>")
		.addClass("list")
		.appendTo(element);
	
	$("<dt/>")
		.append(title)
		.appendTo(descriptionList);
	
	$("<dd/>")
		.append(list)
		.appendTo(descriptionList);
	
	$.get(url, {}, function(data){
		var urlValue = $(data).find("rss > channel > link").text();
		
		var more = getMoreElement();
		
		more.find("a").attr("href", urlValue);
		
		var titleValue = $(data).find("rss > channel > title").text();
		
		title
			.text(titleValue)
			.append(more);
		
		var links = new Array();
		
		$(data).find("rss > channel > item > title").each(function(index, item){
			links[index] = {
				text: $(item).text(),
				href: ""
			};
		});
		
		$(data).find("rss > channel > item > link").each(function(index, item){
			links[index].href = $(item).text();
		});
		
		for(var i = 0; i < links.length; i++){
			var link = links[i];
			list.append(
				$("<li/>").append(
					$("<a/>")
						.text(link.text)
						.attr("href", link.href)
				)
			);
		};
	});
}

function loadMyFavorites(){
	createTable("Mina favoriter", "/services/my-favorites.js", myFavorites, [{href: "/", text: "Anpassa favoriter"}], false);
}

function loadStockMarketHotStock(){
	createTable("Heta aktier", "/services/stock-market-hot-stock.js", stockMarketHotStock, tableCountryMenu, true);
}

function loadStockMarketBestField(){
	createTable("Bästa bransch", "/services/stock-market-best-field.js", stockMarketBestField, defaultTableMenu, true);
}

function loadStockMarketWorstField(){
	createTable("Sämsta bransch", "/services/stock-market-worst-field.js", stockMarketWorstField, defaultTableMenu, true);
}

function loadStockMarketAnalysis(){
	var descriptionList = $("<dl/>")
		.addClass("table");
	
	$("<dt/>")
		.addClass("table-heading")
		.text("Marknaden just nu")
		.appendTo(descriptionList);
	
	$("<dd/>")
		.append(
			$("<ul/>")
				.append($("<li/>"))
				.append($("<li/>"))
				.append($("<li/>"))
				.append($("<li/>"))
		)
		.append(
			$("<div/>").addClass("clearing-element")
		)
		.appendTo(descriptionList);
	
	stockMarketAnalysis
		.append(descriptionList);
	
	$.getJSON("/services/stock-market-analysis.js", {}, function(data){
		var list = stockMarketAnalysis.find("ul").html("");
		
		addCurrency(data.dollar);
		addCurrency(data.euro);
		
		addMortgage(data.mortgage_long);
		addMortgage(data.mortgage_short);
		
		function addMortgage(data){
			var firstRow = data.name;
			var secondRow = data.value + " " + data.time;
			
			var increase = data.value != "0,125" ? true : false;
			
			addItem(firstRow, secondRow, increase);
		}
		
		function addCurrency(currency){
			var firstRow = currency.name + " " + currency.change;
			var secondRow = currency.value + " " + currency.time;
			
			var increase = currency.value.substr(0, 1) != "-" ? true : false;
			
			addItem(firstRow, secondRow, increase);
		}
		
		function addItem(firstRow, secondRow, increase){
			var item = $("<li/>");
			
			if(increase){
				item.addClass("increase");
			} else {
				item.addClass("decrease");
			}
			
			item.append(
				$("<dl/>")
					.append($("<dt/>").text(firstRow))
					.append($("<dd/>").text(secondRow))
			);
			
			item.appendTo(list);
		}
	});
}

function loadStockMarketLosers(){
	createTable("Förlorare på börsen", "/services/stock-market-losers.js", stockMarketLosers, defaultTableMenu, true);
}

function loadStockMarketWinners(){
	createTable("Vinnare på börsen", "/services/stock-market-winners.js", stockMarketWinners, defaultTableMenu, true);
}

function loadStockMarketWorldIndex(){
	createTable("Världsindex:", "/services/stock-market-world-index.js", stockMarketWorldIndex, noTableMenu, false);
}

function createTable(title, url, target, menuItems, addMoreButton){
	var title = $("<dt/>")
		.html(title)
		.addClass("table-heading");
	
	if(addMoreButton){
		title.append(getMoreElement());
	}
	
	var table = $("<table/>").attr("cellspacing", "0");
	
	var tableBody = $("<tbody/>").appendTo(table);

	for(var i = 0; i < 7; i++){
		$("<tr/>")
			.append(
				$("<td/>").html("&nbsp;")
			)
			.append(
				$("<td/>").html("&nbsp;")
			)
			.appendTo(tableBody);
	}
	
	var definition = $("<dd/>")
		.addClass("table")
		.append(table);
	
	if(menuItems){
		var linkList = $("<ul/>").addClass("table-menu");
		
		for(var i = 0; i < menuItems.length; i++){
			var menuItem = menuItems[i];
			
			var link = $("<a/>")
				.attr("href", menuItem.href)
				.text(menuItem.text);
			
			if(i == 1){
				link.addClass("selected");
			}
			
			linkList.append($("<li/>").append(link));
		}
		
		linkList.find("li:last").addClass("last");
		linkList.find("li:first").addClass("first");
		
		definition.prepend(linkList);
	}

	$("<dl/>")
		.addClass("table")
		.append(title)
		.append(definition)
		.appendTo(target);
	
	$.getJSON(url, {}, function(data){
		fillTable(table, data);
	});
}

function getMoreElement(){
	return $("<span/>")
		.addClass("more")
		.append(
			$("<a/>")
				.attr("href", "/")
				.text("Fler")
		);
}

function fillTable(table, data){
	table.html("");
	
	for(var i = 0; i < data.items.length; i++){
		var item = data.items[i];
		
		var difference = determineDifference(item.value);
		
		$("<tr/>")
			.append(
				$("<td/>")
					.addClass(item.canonical_name)
					.html(item.name)
			)
			.append(
				$("<td/>")
					.addClass(difference)
					.html(item.value)
			)
			.appendTo(table);
	}
}

function determineDifference(value){
	if(value.substr(0, 1) == "+"){
		return "increase";
	} else if(value.substr(0, 1) == "-"){
		return "decrease";
	} else {
		return "unchanged";
	}
}

function loadOMXSPI(){
	$("<dl/>")
		.append(
			$("<dt/>")
				.text("OMXSPI:")
				.append(
					$("<span/>")
						.addClass("value")
						.text("0.00%")
				)
		)
		.append(
			$("<dd/>")
				.append(
					$("<img/>")
						.attr("src", "/services/omxspi.png")
						.attr("alt", "Diagram över OMXSPI")
				)
				.append(
					$("<span/>")
						.addClass("time")
						.text("00:00")
				)
		)
		.appendTo(omxspi);
	
	
	$.getJSON("/services/omxspi.js", {}, function(data){
		omxspi.find("span.value").text(data.value + "%");
		omxspi.find("span.time").text(data.time);
	});
}
