var proXml = new ActiveXObject("MSXML2.DOMDocument");
proXml.async = true;

var onlineUsersXml = new ActiveXObject("MSXML2.DOMDocument");
onlineUsersXml.async = true;

var quotesXml = new ActiveXObject("MSXML2.DOMDocument");
quotesXml.async = true;

var chatXml = new ActiveXObject("MSXML2.DOMDocument");
chatXml.async = true;

var newsXml = new ActiveXObject("MSXML2.DOMDocument");
newsXml.async = true;

var proTimer = null;
var onlineUsersTimer = null;
var quotesTimer = null;
var chatTimer = null;
var blinkTimer = null;
var newsTimer = null;
var newsUpdateTimer = null;

var quotesStart = 8;	// Hour of day to start polling
var quotesEnd = 18;		// Hour of day to end polling
var now = new Date().getHours();

var proInterval = 10000;
var quotesInterval = 10000;
var newsInterval = 10000;
var newsUpdateInterval = 60000;
var onlineInterval = 60000 * 5;
var chatInternal = 5000;
var updatingPro = false;
var updatingUsers = false;
var updatingQuotes = false;
var updatingChat = false;
var updatingNews = false;

var lastBonus = null;
var lastMessageId = 0;
var messageQue = new Array("");

var enableInfoflashSound = false;
var enableMessageSound = false;
var enableCoinSound = false;

var blinkState = false;
function blink(o)
{
	blinkState = !blinkState;
	if(blinkState)
		//o.style.fontWeight = "normal";
		o.style.visibility = "hidden";
	else
		//o.style.fontWeight = "bold";
		o.style.visibility = "visible";
}

function getFriendsAndPro()
{
	if(proXml.readyState == 4)
	{
		if(proXml.parseError.errorCode != 0)
		{
			updatingPro = false;
		}
		else
		{
			try
			{
			
				enableInfoflashSound = (proXml.documentElement.getAttribute("InfoflashSound") == "1");
				enableMessageSound = (proXml.documentElement.getAttribute("MessageSound") == "1");
			
				var isMember = false;
				var memberDays;
				var memberNode = proXml.selectSingleNode("//Role[@Name='Member']");
				if(memberNode != null)
				{
					isMember = true;
					memberDays = parseInt(memberNode.getAttribute("Expires"));
					AgProExpires.innerText = memberDays + " dag" + (memberDays > 1 ? "ar" : "");
					
					if(memberDays > 7)
						AgProExpires.className = "FavBoxPositive";
					else
						AgProExpires.className = "FavBoxNegative";
				}
				
				AGProMember.style.display = (isMember ? "block" : "none");
				AGProNotMember.style.display = (isMember ? "none" : "block");
				
				
				var balance = proXml.documentElement.getAttribute("Balance");
				var dueExpired = proXml.documentElement.getAttribute("DueExpired") == "1";
				if(balance == null) balance = 0;
				if(balance < 0)
				{
					ProAccount.innerText = balance + " kronor";
					ProAccount.className = "FavBoxNegative";
					
					if(blinkTimer == null && dueExpired)
						blinkTimer = setInterval("blink(ProAccount)", 800);
					
					if(dueExpired == false && blinkTimer != null)
					{
						clearInterval(blinkTimer);
						ProAccount.style.visibility = "visible";
					}
				}
				else
				{
					ProAccount.innerText = "+" + balance + " kronor";
					ProAccount.className = "FavBoxPositive";
					
					if(blinkTimer != null)
					{
						clearInterval(blinkTimer);
						ProAccount.style.visibility = "visible";
					}
				}
				
				var unreadMessages = proXml.documentElement.getAttribute("UnreadMessages");
				if(unreadMessages > lastMessageCount)
					playMessage();
				setUnreadMessageCount(unreadMessages);
				
				
				while(tblFavorites.rows.length > 1)
				{
					tblFavorites.deleteRow(tblFavorites.rows.length - 1);
				}
					
				var friends = proXml.selectNodes("//Friend");
				for(var i = 0; i < friends.length; i++)
				{
					addFriend(friends[i].getAttribute("ID"), friends[i].getAttribute("Name"), ((i % 2) != 0 ? "#F4F4F4" : "#FFFFFF"));
				}
				
				
				var infoflashNode = proXml.selectSingleNode("//InfoFlash");
				if(infoflashNode != null)
				{
					initInfoFlash(infoflashNode);
				}
			}
			catch(e)
			{
			}
			updatingPro = false;
			
		}
	}
}

function resizeScrollable()
{
	var id = (OnlineFavorites.style.display == "none" ? "ScrollableChat" : "ScrollableFavorites");
	var scrollable = document.getElementById(id);
	scrollable.style.display = "none";
	var newHeight = (document.body.clientHeight - document.getElementById("SideBoxMain").offsetHeight-20);
	scrollable.style.height = newHeight;
	scrollable.style.display = "";
	
	if(id == "ScrollableChat")
	{
		var chatMessages = document.getElementById("Chat_Messages");
		if(chatMessages.childNodes.length > 0)
			chatMessages.childNodes[chatMessages.childNodes.length - 1].scrollIntoView();
	}
}

function addFriend(id, name, bgColor)
{
	var row = tblFavorites.insertRow(tblFavorites.rows.length);
	row.bgColor = bgColor;
	
	var cell = row.insertCell();
	cell.vAlign = "bottom";
	cell.style.cssText = "padding-left: 0px; padding-right: 2px;";
	cell.innerHTML = '<input type="checkbox" name="chkUser" style="margin-top: -2px; margin-bottom: -2px;" value="' + id + ';' + name + '">';
	
	cell = row.insertCell();
	cell.innerHTML = '<a style="color:black; font-weight:normal;" href="javascript: top.user_openInfo(' + id + ');">' + name + '</a>';
}

function getOnlineUsers() {
	if(onlineUsersXml.readyState == 4)
	{
		if(onlineUsersXml.parseError.errorCode != 0)
		{
			updatingUsers = false;
		}
		else
		{
			try
			{
				if( !document.forms["frmUsers"] ) return;
				
				var users = onlineUsersXml.documentElement.childNodes;
				
				document.forms["frmUsers"].strUID.options.length = 0;
				for( var i = 0; i < users.length; i++ )
					document.forms["frmUsers"].strUID.options[i] = new Option(users[i].getAttribute("Login"), users[i].getAttribute("Login"));
				
				users = null;
			}
			catch(e)
			{
			}
			
			updatingUsers = false;
		}
	}
}

function getChatMessages() {
	var newestAtTop = false;
	
	if(chatXml.readyState == 4)
	{
		if(chatXml.parseError.errorCode != 0)
		{
			updatingChat = false;
		}
		else
		{
			//try
			//{
				var chatMessages = document.getElementById("Chat_Messages");
				if( chatMessages == null ) return;
				
				var messages = chatXml.documentElement.childNodes;
				var fade = (lastMessageId > 0);
				if(chatXml.documentElement.getAttribute("LastId") > 0)
					lastMessageId = chatXml.documentElement.getAttribute("LastId");
				
				var messageText;
				for( var i = messages.length - 1; i >= 0 ; i-- )
				{
					messageText = messages[i].firstChild.text.replace(/\n/g, "<br>");
					messageText = messageText.replace(/(^|\s)(\b(www.)\S*\b)/gi, "$1http://$2");
					messageText = messageText.replace(/(\b(http:|https:|ftp:|irc:)\S*\b)/gi, "<a href=\"$1\" target=\"_blank\">$1<\/a>");

					
					chatMessages.insertAdjacentHTML((newestAtTop ? "afterBegin" : "beforeEnd"),
						 "<div class=\"Chat_Item\" " + (fade ? "style=\"background-color: #e4e4e4;\"" : "") + ">" +
						 "<span class=\"From\">" + messages[i].getAttribute("Login") + " " +
						 messages[i].getAttribute("Created") + "</span><br>" +
						 messageText + "</div>");
						 
					if(fade)
						setTimeout("fadeChatItem('" + chatMessages.childNodes[(newestAtTop ? 0 : chatMessages.childNodes.length - 1)].uniqueID + "')", 1500);
				}
				
				if(chatMessages.childNodes.length > 50)
				{
					while(chatMessages.childNodes.length > 50)
						chatMessages.removeChild(chatMessages.childNodes[(newestAtTop ? 50 : 0)]);
				}
				
				if(newestAtTop == false && messages.length > 0)
					chatMessages.childNodes[chatMessages.childNodes.length - 1].scrollIntoView();
				
				if(document.getElementById("Chat_HourGlass") != null)
					document.getElementById("Chat_HourGlass").style.visibility = "hidden";
				
				messages = null;
			/*}
			catch(e)
			{
			}*/
			
			updatingChat = false;
		}
	}
}

var fadeColors = new Array("e6e6e6", "eaeaea", "efefef", "f3f3f3", "f6f6f6", "fafafa", "ffffff");
function fadeChatItem(id, item)
{
	elem = document.getElementById(id);
	if(item == null) item = 0;
	
	if(item < fadeColors.length - 1)
	{
		elem.style.backgroundColor = "#" + fadeColors[item];
		setTimeout("fadeChatItem('" + id + "', " + (item+1) + ")", 50);
	}
}

function getQuotes() {
	if(quotesXml.readyState == 4) {
		if(quotesXml.parseError.errorCode != 0)	{
			updatingQuotes = false;
		}
		else {
			try {
				if(!document.frames["oBanner"]) {
					return;
				}
				var x, tm, chp, quote;
				var f = document.frames["oBanner"];
								
				quote = quotesXml.documentElement.selectSingleNode("//record[Id='OMXS30']");
				if(quote != null) {
					x = quote.selectSingleNode("X").text;
					tm = quote.selectSingleNode("Tm").text;
					chp = new Number(quote.selectSingleNode("ChP").text);
					chp = chp.toFixed(2);
					
					f.document.all["omxIndex"].innerText = 
						tm.substring(tm.indexOf("T") + 1, tm.length) + " | " + x;
					
					if(chp == 0)
						f.document.all["omxChange"].style.color = "#000000";
					else
						f.document.all["omxChange"].style.color = (chp < 0) ? "#CC0000" : "#669900";
					
					f.document.all["omxChange"].innerText = chp + "%";
				}
				quote = null;
			}
			catch(e) {
			}
			
			updatingQuotes = false;
		}
	}
}

var newsItemIndex = 0;
function getNews() {
	if(newsXml.readyState == 4) {
		if(newsXml.parseError.errorCode != 0)	{
			updatingNews = false;
		}
		else {
			try {
				if(!document.frames["oBanner"]) {
					return;
				}
				var newsSpan;
				var headline;
				var source;
				var f = document.frames["oBanner"];
				
				var news = newsXml.documentElement.selectNodes("/rss/channel/item");
				if(news != null && news.length > 0) {
					
					if(newsItemIndex > news.length-1) newsItemIndex = 0;
					
					var newsItem = news[newsItemIndex];
					headline = newsItem.selectSingleNode("title").text;
					source = newsItem.selectSingleNode("source").text;
					url = newsItem.selectSingleNode("link").text;
					
					newsItemIndex++;
					
					newsSpan = f.document.getElementById("NewsSpan");
					if(newsSpan != null)
						newsSpan.innerHTML = "<a href=\"" + url + "\" target=\"_blank\">" + headline + " (" + source + ")</a>";
				}
				
				
				news = null;
			}
			catch(e) {
			}
			
			updatingNews = false;
		}
	}
}


function initInfoFlash(node)
{
	var message = node.text;
	if(message.lastIndexOf("<") > message.lastIndexOf(">"))
		message = message.substring(0, message.lastIndexOf("<"));
		
	var actionUrl = node.getAttribute("ActionUrl");
	if(actionUrl == null)
		actionUrl = "";
		
	var type = node.getAttribute("Type");
	if(type == null)
		type = 0;
	else
		type = parseInt(type);
	
	var messageID = node.getAttribute("MessageID");
	if(messageID == null)
		messageID = 0;
		
	var fromUserID = node.getAttribute("FromUserID");
	if(fromUserID == null)
		fromUserID = 0;
		
	var fromUserName = node.getAttribute("FromUserName");
	if(fromUserName == null)
		fromUserName = "";
		
	var subject = node.getAttribute("Subject");
	if(subject == null)
		subject = "";
	
	playInfoFlash();	
	flashMessage(message, type, actionUrl, subject, fromUserID, fromUserName, messageID);
	
}

function playInfoFlash()
{
	if(enableInfoflashSound)
	{
		if(document.getElementById("infoflashSound") != null)
		{
			document.getElementById("infoflashSound").src = "/sounds/flash.wav";
			setTimeout("clearSounds()", 2000);
		}
	}
}

function playMessage()
{
	if(enableMessageSound)
	{
		if(document.getElementById("messageSound") != null)
		{
			document.getElementById("messageSound").src = "/sounds/notify.wav";
			setTimeout("clearSounds()", 2000);
		}
	}
}

// Eftersom ljuden spelas upp då man återställer minimerat fönster, 
// tar jag borde urlen till ljudet när det spelats upp.
function clearSounds()
{
	document.getElementById("infoflashSound").src = "";
	document.getElementById("messageSound").src = "";
}

function refreshPro()
{
	if(!updatingPro)
	{
		proXml.onreadystatechange = getFriendsAndPro;
		proXml.load("Reloader/FriendsAndPro.aspx");
		updatingPro = true;			
	}
}

function refreshUsers()
{
	if(!updatingUsers)
	{		
		onlineUsersXml.onreadystatechange = getOnlineUsers;
		onlineUsersXml.load("Reloader/OnlineUsers.aspx");
		updatingUsers = true;
	}
}

function refreshChat()
{
	if(!updatingChat)
	{
		if(OnlineFavorites.style.display == "none")
		{
			chatXml.onreadystatechange = getChatMessages;
			chatXml.load("Reloader/GlobalChat.aspx?LastID=" + lastMessageId + "&Message=" + escape(messageQue[0]));
			messageQue[0] = "";
			updatingChat = true;
		}
	}
}

function refreshQuotes()
{
	if(!updatingQuotes)
	{		
		quotesXml.onreadystatechange = getQuotes;
		quotesXml.load("Reloader/Quotes.aspx");
		updatingQuotes = true;
	}
}

function refreshNews()
{
	if(!updatingNews)
	{		
		newsXml.onreadystatechange = getNews;
		newsXml.load("/Partners/news.xml");
		updatingnews = true;
	}
}


function toggleChat()
{
	if(OnlineFavorites.style.display == "none")
	{
		OnlineFavorites.style.display = "block";
		GlobalChat.style.display = "none";
		//ToggleChatButton.src = "images/SideBox_Favorites.png"
	}
	else
	{
		OnlineFavorites.style.display = "none";
		GlobalChat.style.display = "block";
		//ToggleChatButton.src = "images/SideBox_Chat.png"
	}
	
	toggleFavBox(0);
	resizeScrollable();
}



function captureEnter(elem)
{
	if(event.keyCode == 13 && event.shiftKey == false)
	{
		event.returnValue = false;
		event.cancelBubble = true;
		sendMessage(elem.innerText);
	}
}

function sendMessage(message)
{
	if(document.getElementById("Chat_HourGlass") != null && 
		document.getElementById("Chat_HourGlass").style.visibility == "visible")
			alert("Du kan inte skicka fler meddelanden just nu. Var god vänta tills timglaset under skrivrutan släcks. Detta kan ta upp till 5 sekunder.");
	else
	{
		messageQue[0] = message;
		elem = document.getElementById("Chat_NewMessage");
		elem.innerText = "";
		if(document.getElementById("Chat_HourGlass") != null)
			document.getElementById("Chat_HourGlass").style.visibility = "visible";
	}
}