var sitebase = "http://" + window.location.host;
var loginreq;
var favreq;
var topboxreq;
var topboxtimeout;
var commreq;
var commtimeout;
var commpostreq;
var msgtimeout;
var msgreq;
var msgpostreq;
var shouttimeout;
var shoutreq;
var shoutpostreq;
var chattimeout;
var chatreq;
var chatpostreq;
var votetimeout = -1;

function ajaxrequest()
{
	var r;
	if (window.XMLHttpRequest)
	{
		try { r = new XMLHttpRequest(); }
		catch (e) {}
	}
	else if (window.ActiveXObject)
	{
		try { r = new ActiveXObject("Msxml2.XMLHTTP"); }
		catch (e)
		{
			try { r = new ActiveXObject("Microsoft.XMLHTTP"); }
			catch (e) {}
		}
	}
	return r;
}

function frontchtab(tab, offset) 
{
	req = ajaxrequest();
	if(!req) return true;
        req.onreadystatechange=function()
        {
                if(req.readyState==4)
                {
                        var container = document.getElementById('gamecontainer');
                        if (container) container.innerHTML = req.responseText;
                }
        }
        req.open("GET","/ajax/show/"+tab+"/"+offset,true);
        req.send(null);
	return false;
}

function jatekokfrontchtab(tab, offset)
{
        req = ajaxrequest();
        if(!req) return true;
        req.onreadystatechange=function()
        {
                if(req.readyState==4)
                {
                        var container = document.getElementById('gameBox');
                        if (container) container.innerHTML = req.responseText;
                }
        }
        req.open("GET","/jatekokajax/show/"+tab+"/"+offset,true);
        req.send(null);
        return false;
}

function playchtab(gid, tab)
{
        req = ajaxrequest();
        if(!req) return true;
        req.onreadystatechange=function()
        {
                if(req.readyState==4)
                {
                        var container = document.getElementById('gametabmain');
                        if (container) container.innerHTML = req.responseText;
                }
        }
        req.open("GET","/play/ajax/"+gid+"/show/"+tab,true);
        req.send(null);
        return false;
}

function jatekokplaychtab(gid, tab)
{
        req = ajaxrequest();
        if(!req) return true;
        req.onreadystatechange=function()
        {
                if(req.readyState==4)
                {
                        var container = document.getElementById('gameInfo');
                        if (container) container.innerHTML = req.responseText;
                }
        }
        req.open("GET","/play/jatekokajax/"+gid+"/show/"+tab,true);
        req.send(null);
        return false;
}

function peoplepaginate(offset)
{
        req = ajaxrequest();
        if(!req) return true;
        req.onreadystatechange=function()
        {
                if(req.readyState==4)
                {
                        var container = document.getElementById('peopleContainer');
                        if (container) container.innerHTML = req.responseText;
                }
        }
        req.open("GET","/ihmiset/nayta/"+offset+"?ajax=1",true);
        req.send(null);
        return false;
}

function peoplesearchpaginate(term, offset)
{
        req = ajaxrequest();
        if(!req) return true;
        req.onreadystatechange=function()
        {
                if(req.readyState==4)
                {
                        var container = document.getElementById('peopleContainer');
                        if (container) container.innerHTML = req.responseText;
                }
        }
        req.open("GET","/ihmiset/etsi/"+term+"/"+offset+"?ajax=1",true);
        req.send(null);
        return false;
}

function playpaginate(gid, offset)
{
        req = ajaxrequest();
        if(!req) return true;
        req.onreadystatechange=function()
        {
                if(req.readyState==4)
                {
                        var container = document.getElementById('gametabmain');
                        if (container) container.innerHTML = req.responseText;
                }
        }
        req.open("GET","/ajax_play_chtab.php?gid="+gid+"&tab=comments&offset="+offset,true);
        req.send(null);
        return false;
}

function loginpost()
{
	var loginform = document.getElementById('pelikone_navi_top_box_login_form');
	var username = document.getElementById('pelikone_login');
	var password = document.getElementById('pelikone_password');
	var stickylogin = document.getElementById('pelikone_sticky');
	var l;
	var newlogin;
	
	// SSL doesn't work with Ajax yet.
	if (loginform.action.substring(0, 6) == 'https:') return true;
	
	if (topboxtimeout) clearTimeout(topboxtimeout);
	if (commtimeout) clearTimeout(commtimeout);
	loginreq = ajaxrequest();
	if (loginreq)
	{
		loginreq.onreadystatechange = function() {
			if (loginreq && loginreq.readyState == 4 && (loginreq.status == 200 || loginreq.status == 0)) {
				var ok = false;
				if (loginreq.responseXML && loginreq.responseXML.documentElement && loginreq.responseXML.documentElement.getAttribute("status") == "LOGGEDIN") {
					ok = true;
					newlogin = loginreq.responseXML.documentElement.getAttribute("login");
					
					l = document.getElementById('login_right');
					if (l) { l.style.display = ""; }
					l = document.getElementById('pelikone_navi_top_box_verify_error');
					if (l) { l.style.display = "none"; }
					// Messages (profile.php)
					l = document.getElementById('loginmessages');
					if (l) l.style.display = "none";
					l = document.getElementById('addmessage');
					if (l) l.style.display = "";
					l = document.getElementById('addmessagelogin');
					if (l) { l.innerHTML = newlogin; l.href = "/users/" + newlogin; }
					// Comments (play.php)
					l = document.getElementById('logincomments');
					if (l) l.style.display = "none";
					l = document.getElementById('addcomment');
					if (l) l.style.display = "";
					l = document.getElementById('addcommentlogin');
					if (l) { l.innerHTML = newlogin; l.href = "/users/" + newlogin; }
					// Add to favorites (play.php)
					l = document.getElementById('addtofavorites');
					if (l) l.style.display = "";
					// Shoutbox post form
					l = document.getElementById('pelikone_box_shoutform');
					if (l) l.style.display = "";
					// Chat post form
					l = document.getElementById('pelikone_chat_form');
					if (l) l.style.display = "";
					l = document.getElementById('forum_tab');
					if (l) l.style.display = "";
					l = document.getElementById('registerscores');
					if (l) l.style.display = "none";
					// My box on right side of every page
					updatetopbox(true);
					// Generic onlogin handler
					if (window.onlogin) onlogin(newlogin);
				}
				else if (loginreq.responseXML && loginreq.responseXML.documentElement && loginreq.responseXML.documentElement.getAttribute("status") == "NOTVERIFIED") {
					ok = true;
					l = document.getElementById('pelikone_navi_top_box_verify_error');
					if (l) { l.style.display = ""; }
					
					l = document.getElementById('pelikone_navi_top_box_login_error');
					if (l) { l.style.display = "none"; }
					
					l = document.getElementById('login_right');
					if (l) { l.style.display = "none"; }
				}
				if (!ok)
				{
					l = document.getElementById('login_right');
					if (l) { l.style.display = ""; }
					
					l = document.getElementById('pelikone_navi_top_box_verify_error');
					if (l) { l.style.display = "none"; }
					
					l = document.getElementById('pelikone_navi_top_box_login_error');
					if (l) { l.style.display = ""; }
				}
			}
			else if (loginreq && loginreq.readyState == 4 && loginreq.status == 403) {
				// Banned
				l = document.getElementById('pelikone_navi_top_box_login_error');
				if (l) { l.style.display = ""; l.innerHTML= "User account is banned"; }
			}
		};
		try
		{
			loginreq.open("POST", loginform.action + "?ajaxlogin=1", true);
			loginreq.send(username.value + ":" + (stickylogin.checked ? "1" : "0") + ":" + password.value);
		}
		catch (e)
		{
			alert('XMLHttpRequest failed: ' + e.description);
			return true;
		}
		username.value = "";
		password.value = "";
		username.focus();
		return false;
	}
	return true;
}

function logoutpost()
{
	// force no ajax
	return true; 

	var l;
	
	loginreq = ajaxrequest();
	if (loginreq)
	{
		loginreq.onreadystatechange = function() {
			if (loginreq && loginreq.readyState == 4 && loginreq.status == 200) {
				// Messages (profile.php)
				l = document.getElementById('loginmessages');
				if (l) l.style.display = "";
				l = document.getElementById('addmessage');
				if (l) l.style.display = "none";
				// Comments (play.php)
				l = document.getElementById('logincomments');
				if (l) l.style.display = "";
				l = document.getElementById('addcomment');
				if (l) l.style.display = "none";
				// Add to favorites (play.php)
				l = document.getElementById('addtofavorites');
				if (l) l.style.display = "none";
				// Shoutbox post form
				l = document.getElementById('pelikone_box_shoutform');
				if (l) l.style.display = "none";
				// Chat post form
				l = document.getElementById('pelikone_chat_form');
				if (l) l.style.display = "none";
				l = document.getElementById('forum_tab');
				if (l) l.style.display = "none";
				l = document.getElementById('registerscores');
				if (l) l.style.display = "";
				updatetopbox(true);
				// Generic onlogout handler
				if (window.onlogout) onlogout();
			}
		};
		loginreq.open("POST", sitebase + "/logout?ajax=1", true);
		loginreq.send("");
		return false;
	}
	return true;
}

function favoritepost(uid)
{
	var l;
	
	favreq = ajaxrequest();
	if (favreq)
	{
		favreq.onreadystatechange = function() {
			if (favreq && favreq.readyState == 4 && favreq.status == 200) {
				l = document.getElementById('addedfavorite');
				if (l) l.style.display = "";
			}
		};
		favreq.open("GET", sitebase + "/ajax_addfavorite.php?id=" + uid + "&ajax=1&r=" + Math.floor(Math.random()*10000), true);
		favreq.send("");
		return false;
	}
	return true;
}

function addfavorite(guid)
{
        req = ajaxrequest();
        if(!req) return true;
        req.onreadystatechange=function()
        {
                if(req.readyState==4)
                {
                        var container = document.getElementById('gamebuttonfavorite');
                        if (container) container.innerHTML = req.responseText;
                }
        }
        req.open("GET","/favorites/ajax/add/"+guid,true);
        req.send(null);
        return false;
}

function removefavorite(guid)
{
        req = ajaxrequest();
        if(!req) return true;
        req.onreadystatechange=function()
        {
                if(req.readyState==4)
                {
                        var container = document.getElementById('gamebuttonfavorite');
                        if (container) container.innerHTML = req.responseText;
                }
        }
        req.open("GET","/favorites/ajax/remove/"+guid,true);
        req.send(null);
        return false;
}

function updatetopbox(force)
{
	var l;
	
	l = document.getElementById('login');
	if (l && !force)
	{
		// Not logged in, no use to update.
		return;
	}
	
	topboxreq = ajaxrequest();
	if (topboxreq)
	{
		topboxreq.onreadystatechange = function() {
			if (topboxreq && topboxreq.readyState == 4 && topboxreq.status == 200) {
				l = document.getElementById('pelikone_navi_top_box');
				if (l) l.innerHTML = topboxreq.responseText;
			}
		};
		topboxreq.open("GET", sitebase + "/gettopbox/?r=" + Math.floor(Math.random()*10000), true);
		topboxreq.send("");
		return false;
	}
	return true;
}

function autoupdatetopbox()
{
	updatetopbox();
	topboxtimeout = setTimeout("autoupdatetopbox();", 10000);
}

function updatecomments(id)
{
	var l;
	
	commreq = ajaxrequest();
	if (commreq)
	{
		commreq.onreadystatechange = function() {
			if (commreq && commreq.readyState == 4 && commreq.status == 200) {
				l = document.getElementById('commentsparent');
				if (l) l.innerHTML = commreq.responseText;
			}
		};
		commreq.open("GET", sitebase + "/comments/get/" + id + "&r=" + Math.floor(Math.random()*10000), true);
		commreq.send("");
		return false;
	}
	return true;
}

function autoupdatecomments(id)
{
	updatecomments(id);
	commtimeout = setTimeout("autoupdatecomments('" + id + "');", 10000);
}

function commentpost(game)
{
	var comments = document.getElementById('commentsparent');
	var text = document.getElementById('comment_text');
	
	commpostreq = ajaxrequest();
	if (commpostreq)
	{
		commpostreq.onreadystatechange = function() {
			if (commpostreq.readyState == 4 && commpostreq.status == 200) {
				comments.innerHTML = commpostreq.responseText;
			}
		};
		commpostreq.open("POST", sitebase + "/comments/add/" + game, true);
		commpostreq.send(text.value);
		text.value = "";
		return false;
	}
	else return true;
}

function jatekokcommentpost(game)
{
        var comments = document.getElementById('comments');
        var text = document.getElementById('comment_text');

        commpostreq = ajaxrequest();
        if (commpostreq)
        {
                commpostreq.onreadystatechange = function() {
                        if (commpostreq.readyState == 4 && commpostreq.status == 200) {
                                comments.innerHTML = commpostreq.responseText;
                        }
                };
                commpostreq.open("POST", sitebase + "/comments/add/" + game, true);
                commpostreq.send(text.value);
                text.value = "";
                return false;
        }
        else return true;
}

function fpchangetab(tab)
{
        var gamecontainer = document.getElementById('gamecontainer');

        chtabreq = ajaxrequest();
        if (chtabreq)
        {
                chtabreq.onreadystatechange = function() {
                        if (chtabreq.readyState == 4 && chtabreq.status == 200) {
                                gamecontainer.innerHTML = chtabreq.responseText;
                        }
                };
                chtabreq.open("GET", sitebase + "/ajax_changetab.php?tab=" + tab, true);
                chtabreqreq.send(text.value);
                text.value = "";
                return false;
        }
        else return true;
}


function updatemessages(user)
{
	var l;
	
	msgreq = ajaxrequest();
	if (msgreq)
	{
		msgreq.onreadystatechange = function() {
			if (msgreq && msgreq.readyState == 4 && msgreq.status == 200) {
				l = document.getElementById('messagesparent');
				if (l) l.innerHTML = msgreq.responseText;
			}
		};
		msgreq.open("GET", sitebase + "/ajax_getmessages.php?user=" + user + "&r=" + Math.floor(Math.random()*10000), true);
		msgreq.send("");
		return false;
	}
	return true;
}

function autoupdatemessages(user)
{
	updatemessages(user);
	msgtimeout = setTimeout("autoupdatemessages('" + user + "');", 10000);
}

function messagepost(recipient)
{
	var messages = document.getElementById('messagesparent');
	var text = document.getElementById('message_text');
	var priv = document.getElementById('message_private').checked ? 1 : 0;
	
	msgpostreq = ajaxrequest();
	if (msgpostreq)
	{
		msgpostreq.onreadystatechange = function() {
			if (msgpostreq.readyState == 4 && msgpostreq.status == 200) {
				messages.innerHTML = msgpostreq.responseText;
			}
		};
		msgpostreq.open("POST", sitebase + "/ajax_addmessage.php?user=" + recipient + "&private=" + priv + "&r=" + Math.floor(Math.random()*10000), true);
		msgpostreq.send(text.value);
		text.value = "";
		return false;
	}
	else return true;
}

function updateshoutbox(gameuid)
{
	var l;
	
	shoutreq = ajaxrequest();
	if (shoutreq)
	{
		shoutreq.onreadystatechange = function() {
			if (shoutreq && shoutreq.readyState == 4 && shoutreq.status == 200) {
				l = document.getElementById('pelikone_box_shoutparent');
				if (l) l.innerHTML = shoutreq.responseText;
			}
		};
		shoutreq.open("GET", sitebase + "/ajax_getshoutbox.php?id=" + gameuid + "&r=" + Math.floor(Math.random()*10000), true);
		shoutreq.send("");
		return false;
	}
	return true;
}

function autoupdateshoutbox(gameuid)
{
	updateshoutbox(gameuid);
	shouttimeout = setTimeout("autoupdateshoutbox('" + gameuid + "');", 10000);
}

function shoutboxpost(gameuid)
{
	var shoutboxparent = document.getElementById('pelikone_box_shoutparent');
	var text = document.getElementById('pelikone_box_shouttext');
	
	shoutpostreq = ajaxrequest();
	if (shoutpostreq)
	{
		shoutpostreq.onreadystatechange = function() {
			if (shoutpostreq.readyState == 4 && shoutpostreq.status == 200) {
				shoutboxparent.innerHTML = shoutpostreq.responseText;
			}
		};
		shoutpostreq.open("POST", sitebase + "/ajax_addshout.php?ajax=1&id=" + gameuid + "&r=" + Math.floor(Math.random()*10000), true);
		shoutpostreq.send(text.value);
		text.value = "";
		return false;
	}
	else return true;
}

function updatechat()
{
	var l;
	var etag;
	
	etag = document.getElementById('pelikone_chat_etag');
	if (etag) etag = etag.innerHTML; else etag = "";
	
	chatreq = ajaxrequest();
	if (chatreq)
	{
		chatreq.onreadystatechange = function() {
			if (chatreq && chatreq.readyState == 4 && chatreq.status == 200) {
				l = document.getElementById('pelikone_chat_container');
				if (l) l.innerHTML = chatreq.responseText;
			}
		};
		chatreq.open("GET", sitebase + "/ajax_getchat.php?etag=" + etag + "&r=" + Math.floor(Math.random()*10000), true);
		chatreq.send("");
		return false;
	}
	return true;
}

function autoupdatechat()
{
	updatechat();
	chattimeout = setTimeout("autoupdatechat();", 10000);
}

function chatpost()
{
	var chatcontainer = document.getElementById('pelikone_chat_container');
	var text = document.getElementById('pelikone_chat_text');
	
	chatpostreq = ajaxrequest();
	if (chatpostreq)
	{
		chatpostreq.onreadystatechange = function() {
			if (chatpostreq.readyState == 4 && chatpostreq.status == 200) {
				chatcontainer.innerHTML = chatpostreq.responseText;
				chatcontainer.scrollTop = chatcontainer.scrollHeight;
			}
		};
		chatpostreq.open("POST", sitebase + "/ajax_addchat.php?ajax=1&r=" + Math.floor(Math.random()*10000), true);
		chatpostreq.send(text.value);
		text.value = "";
		return false;
	}
	else return true;
}

// Called with points=-1 on login, points=-2 on logout, otherwise points=0-100 (= TODO)
function votepost(gameuid, points)
{
	var ratingparent = document.getElementById('ratingparent');
	var l;
	
	votepostreq = ajaxrequest();
	if (votepostreq)
	{
		votepostreq.onreadystatechange = function() {
			if (votepostreq.readyState == 4 && votepostreq.status == 200) {
				ratingparent.innerHTML = votepostreq.responseText;
			}
		};
		votepostreq.open("GET", sitebase + "/play/ajax/1/vote/" + gameuid + "/" + points, true);
		votepostreq.send(null);
		return false;
	}
	else return true;
}

function jatekokvotepost(gameuid, points)
{
        var ratingparent = document.getElementById('ratingParent');
        var l;

        votepostreq = ajaxrequest();
        if (votepostreq)
        {
                votepostreq.onreadystatechange = function() {
                        if (votepostreq.readyState == 4 && votepostreq.status == 200) {
                                ratingparent.innerHTML = votepostreq.responseText;
                        }
                };
                votepostreq.open("GET", sitebase + "/play/ajax/1/vote/" + gameuid + "/" + points, true);
                votepostreq.send(null);
                return false;
        }
        else return true;
}

function downloadablesvotepost(gameid, points)
{
        var ratingparent = document.getElementById('ratingParent');
        var l;
        votepostreq = ajaxrequest();
        if (votepostreq)
        {
                votepostreq.onreadystatechange = function() {
                        if (votepostreq.readyState == 4 && votepostreq.status == 200) {
                                ratingparent.innerHTML = votepostreq.responseText;
                        }
                };
                votepostreq.open("GET", sitebase + "/downloadables/vote/1/" + gameid + "/" + points, true);
                votepostreq.send(null);
                return false;
        }
        else return true;
}

function avatarvotepost(userid, collectionnumber, points)
{
        var ratingparent = document.getElementById('ratingparent');
        var l;
        votepostreq = ajaxrequest();
        if (votepostreq)
        {
                votepostreq.onreadystatechange = function() {
                        if (votepostreq.readyState == 4 && votepostreq.status == 200) {
                                ratingparent.innerHTML = votepostreq.responseText;
                        }
                };
                votepostreq.open("GET", sitebase + "/avatar/vote/1/" + userid + "/" + collectionnumber + "/" + points, true);
                votepostreq.send(null);
                return false;
        }
        else return true;
}

function voteover(index)
{
	var i;
	var l;
	
	if (votetimeout != -1) { clearTimeout(votetimeout); votetimeout = -1; }
	for (i = 1; i <= 5; i++)
	{
		l = document.getElementById("star" + i);
		if (l) l.src = "/images/bigstar" + (i <= index ? "" : "grey") + ".png";
	}
	l = document.getElementById("ratethis");
	if (l) l.innerHTML = votelabels[index];
}

function voteout(index)
{
	if (votetimeout != -1) { clearTimeout(votetimeout); votetimeout = -1; }
	votetimeout = setTimeout("voterestore();", 1000);
}

function voteoverbig(index)
{
        var i;
        var l;

        if (votetimeout != -1) { clearTimeout(votetimeout); votetimeout = -1; }
        for (i = 1; i <= 5; i++)
        {
                l = document.getElementById("star" + i);
                if (l) l.src = "/themes/pelikone/images/star_" + (i <= index ? "starred" : "unstarred") + ".png";
        }
        l = document.getElementById("ratethis");
        if (l) l.innerHTML = votelabels[index];
}

function voteoutbig(index)
{
        if (votetimeout != -1) { clearTimeout(votetimeout); votetimeout = -1; }
        votetimeout = setTimeout("voterestorebig();", 1000);
	
}

function voterestorebig()
{
        var index;
        var i;
        var l;


        index = origvoteindex;
        votetimeout = -1;
        for (i = 1; i <= 5; i++)
        {
                l = document.getElementById("star" + i);
                if (l) l.src = "/themes/pelikone/images/star_" + (i <= index ? "starred" : "unstarred") + ".png";
        }
        l = document.getElementById("ratethis");
        if (l) l.innerHTML = origvotelabel;
}


function voterestore()
{
	var index;
	var i;
	var l;

	
	index = origvoteindex;
	votetimeout = -1;
	for (i = 1; i <= 5; i++)
	{
		l = document.getElementById("star" + i);
		if (l) l.src = "/images/bigstar" + (i <= index ? "" : "grey") + ".png";
	}
	l = document.getElementById("ratethis");
	if (l) l.innerHTML = origvotelabel;
}

function preroll_progress(containerdiv, rolltimer, rollbar, callback, timeleft, timetotal)
{
	if (timeleft <= 0)
	{
		if (containerdiv) containerdiv.style.display = 'none';
		if (callback) callback();
		return;
	}
	var percent = timetotal <= 0 ? 0 : Math.ceil((timetotal-timeleft)*100 / timetotal);
	rolltimer.innerHTML = "Loading... " + percent + '%';
	rollbar.style.width = percent + '%';
	setTimeout(function(){preroll_progress(containerdiv, rolltimer, rollbar, callback, timeleft-100, timetotal);}, 100);
}

var preroll_loaded_ok = false;

function preroll_loaded(progresstimer, callback, adtime)
{
	var containerdiv = document.getElementById('flashloader');
	if (preroll_loaded_ok) return;
	preroll_loaded_ok = true;
	if (progresstimer > 0) clearTimeout(progresstimer);
	if (window.admanager_ad_time) adtime = window.admanager_ad_time * 1000;
	else { containerdiv.style.display = 'none'; if (callback) callback(); return; }
	var rolltimer = document.getElementById('flashrolltimer');
	var rollbar = document.getElementById('flashrollbar');
	preroll_progress(containerdiv, rolltimer, rollbar, callback, adtime, adtime);
}

function pelikone_init()
{
	var master = document.getElementById('master');
	var mastertop = document.getElementById('mastertop');
	var masterbottom = document.getElementById('masterbottom');
	var masterleft = document.getElementById('masterleft');
	var masterright = document.getElementById('masterright');
	//if (masterleft) masterleft.style.height = (master.clientHeight - mastertop.clientHeight - masterbottom.clientHeight) + "px";
	//if (masterright) masterright.style.height = (master.clientHeight - mastertop.clientHeight - masterbottom.clientHeight) + "px";
}

