// ZolkaBlog AJAX extension

var xmlHttpReq = null;
var waitingForAnswer = false;
var AjaxImgText = ["AJAX kijelző", 
	"<img src=\"img/ajaxloadoff.gif\" alt=\"\" style=\"vertical-align: -5px;\"/> - "
	+ "Nincs kapcsolat<br/>"
	+ "<img src=\"img/ajaxload.gif\" alt=\"\"  style=\"vertical-align: -5px;\"/> - "
	+ "Kérés elküldve, várakozás a szerverre"];

var counterAjaxRequest = 1;			// counts how many ajax requests were done
var arrayAvailableAjaxServices = Array(		
//  Array("name",    registered?, max counter, worker func, "image", "page", "default data")
	Array("onlinerstatus", false,  1, DisplayOnlinerData, null, null, null),
	Array("postcount",     false, 10, DisplayChangedBlog, "img/newblog.gif",  "index.php", ""),	// always gives back the monthcount, and the newest month's postcount
	Array("gallerycount",  false, 30, DisplayChangedBlog, "img/newpic.gif",   "gallery.php", ""),	// gives back galery count, album count in each galery
	Array("favcount",      false, 10, DisplayChangedBlog, "img/newfav.gif",   "favourites.php", ""),	// gives back fav.cat. count, link counts
	Array("audiocount",    false, 30, DisplayChangedBlog, "img/newaudio.gif", "audiocount.php", ""),	// gives back category count, audio count

	Array("commentcount",  false,  1, CheckChangedComments, null, "", ""),	// will gives back the comments of the also given page
	Array("comments",      false,  1, DisplayChangedComments, null, "", null)	// needs the position where it is: fav, audio, monthid, gid+aid
);
var currentPlaceUrlParams = "";

// Gets the actual url
var uri = new Object();
GetURL(uri);

// calls repeatedly the getdata
window.setInterval(this.AJAX_RequestBlogData, 10000);


function SetAjaxService(servicename, state)
{
	for(var i = 0; i < arrayAvailableAjaxServices.length; i++)
	{
		if (arrayAvailableAjaxServices[i][0] == servicename)
		{
			arrayAvailableAjaxServices[i][1] = state;
			return;
		}
	}
}
function SetAjaxServiceDefaultData(servicename, defdata)
{
	for(var i = 0; i < arrayAvailableAjaxServices.length; i++)
	{
		if (arrayAvailableAjaxServices[i][0] == servicename)
		{
			arrayAvailableAjaxServices[i][6] = defdata;
			return;
		}
	}
}
function GetAjaxServiceDefaultData(servicename)
{
	for(var i = 0; i < arrayAvailableAjaxServices.length; i++)
	{
		if (arrayAvailableAjaxServices[i][0] == servicename)
			return arrayAvailableAjaxServices[i][6];
	}
	
	return "";
}

function IndicateAjax(doingAjax)
{
	var oAjaxImg = document.getElementById("AjaxIMG");
	if (oAjaxImg)
		oAjaxImg.src = doingAjax ? "img/ajaxload.gif" : "img/ajaxloadoff.gif";
}

function DisplayOnlinerData(responseline)
{
	var intColIndex = responseline.indexOf(":");
	if (intColIndex < 3)
		return;
	var linepart = responseline.substring(intColIndex + 1);
	
	var values = linepart.split(" ");
	if (values.length < 4)
		return;

	var cell;
	
	cell = document.getElementById("pagehit");
	if (cell)
		cell.innerHTML = values[0].toString();
		
	cell = document.getElementById("uniqueip");
	if (cell)
		cell.innerHTML = values[1].toString();
		
	cell = document.getElementById("nowreads");
	if (cell)
		cell.innerHTML = values[2].toString();
		
	cell = document.getElementById("owner");
	if (cell)
		cell.innerHTML = (values[3] == 1 ? "Itt van" : "Nincs itt");
}
function DisplayChangedBlog(responseline)
{
    var imgNewItem = document.getElementById("NewItemIMG");
    if (!imgNewItem)
    	return;
    
    var foundchange = false;
	for(var j = 0; j < arrayAvailableAjaxServices.length; j++)
	{
		if (arrayAvailableAjaxServices[j][6] == null)	// no default data
			continue;
		if (arrayAvailableAjaxServices[j][6] == "")		// default data not set
			continue;
		
		var name = arrayAvailableAjaxServices[j][0];
		if (responseline.substring(0, name.length) == name)
		{
			if (foundchange)
			{
				SetAjaxService(arrayAvailableAjaxServices[j][0], false);
			}
		    else if (responseline.substring(name.length + 1) != arrayAvailableAjaxServices[j][6])
		    {
			    foundchange = true;
			    SetAjaxService(arrayAvailableAjaxServices[j][0], false);
			    imgNewItem.src = arrayAvailableAjaxServices[j][4];
			    imgNewItem.style.cursor = "pointer";
			    imgNewItem.href = uri.dir + "/" + arrayAvailableAjaxServices[j][5];
			    if (sessionID == "owner")
			    	imgNewItem.href += "?zolkavagyokneszamolj=42";
			    imgNewItem.onclick = function() { window.location.href = this.href; };
		    }
	    }
	}
}

function CheckChangedComments(responseline)
{
	for(var j = 0; j < arrayAvailableAjaxServices.length; j++)
	{
		var name = arrayAvailableAjaxServices[j][0];
		if (responseline.substring(0, name.length) == name)
		{
			var nums = responseline.substring(name.length + 1);
			if (nums != arrayAvailableAjaxServices[j][6])
			{
//				alert("Regi info: " + arrayAvailableAjaxServices[j][6] + "\nÚj info: " + nums);
				var newData = nums.split('|');
				var defData = arrayAvailableAjaxServices[j][6].split('|');
				if (newData.length != 3)
				{
					// error
					alert("NewData.length is not 3: " + nums);
					return;
				}
				if (defData.length != 3)
				{
					// error
					alert("DefData.length is not 3: " + arrayAvailableAjaxServices[j][6]);
					return;
				}
				
				if ((defData[0] == newData[0]) && (defData[1] == newData[1]) && 
					(defData[2] != newData[2]))
				{
					DisplayChangedCommentIcons(defData[2], newData[2]);
					SetAjaxServiceDefaultData("commentcount", nums);
				}
				else if ((defData[0] == newData[0]) && (defData[1] != newData[1]))
				{
					// Comment count change, but no new item to comment, so request the new comments
					SetAjaxService("comments", true);
					SetAjaxServiceDefaultData("comments", Array(0, "", ""));	// this will contain the commentcount data
					SetAjaxService("commentcount", false);
				}
			}
	    }
	}
}
function DisplayChangedCommentIcons(oldIconData, newIconData)
{
	if (oldIconData.length != newIconData.length)
		return;		// error
	
	for(var i = 0; i < oldIconData.length; i++)
	{
		var ch1 = oldIconData.charAt(i);
		var ch2 = newIconData.charAt(i);
		if (ch1 == ch2)
			continue;		// not changed
		
		var iconImg = document.getElementById("imgCommentIcon" + i);
		if (iconImg == null)
			continue;
		
		switch(ch2)
		{
			case 'E' : iconImg.src = "img/commentnone.gif"; break;		// Empty comments == 0
			case 'N' : iconImg.src = "img/commentpost.gif"; break;		// Normal comments > 0
			case 'O' : iconImg.src = "img/commentpostnew.gif"; break;	// Orange > 0 and new
			case 'R' : iconImg.src = "img/commentpostnew2.gif"; break;	// Red > 0 and very new
			case 'L' : iconImg.src = "img/commentlocked.gif"; break;	// Locked icon
		}
	}
}
function DisplayChangedComments(responseline)
{
	var name = "comments";
	var commentArray = responseline.substring(name.length + 1).split("|", 4);
	if (commentArray.length != 4)
	{
		alert("Wrong message: " + responseline);
		return;
	}
	
	var oLabel = document.getElementById("lCommentCount" + commentArray[0]);
	if (oLabel != null)
		oLabel.innerHTML = "["+commentArray[1]+"]";
	var oImg = document.getElementById("imgCommentIcon" + commentArray[0]);
	if (oImg != null)
		switch(commentArray[2])
		{
			case 'E' : oImg.src = "img/commentnone.gif"; break;		// Empty comments == 0
			case 'N' : oImg.src = "img/commentpost.gif"; break;		// Normal comments > 0
			case 'O' : oImg.src = "img/commentpostnew.gif"; break;	// Orange > 0 and new
			case 'R' : oImg.src = "img/commentpostnew2.gif"; break;	// Red > 0 and very new
			case 'L' : oImg.src = "img/commentlocked.gif"; break;	// Locked icon
		}
	
	if (CommentText[commentArray[0]] != null)
		CommentText[commentArray[0]][1] = commentArray[3];
	
	var defData = GetAjaxServiceDefaultData("comments");
	defData[0]++;
	defData[1] += commentArray[1];
	defData[2] += commentArray[2];

	// Restores the commentcount service, and updates its default value
	SetAjaxService("comments", false);
	SetAjaxService("commentcount", true);
	var defDataStr = defData[0].toString() + "|" + defData[1] + "|" + defData[2];
	SetAjaxServiceDefaultData("commentcount", defDataStr);
}

function AJAX_ParseResponse(responseText)
{
	var lines = responseText.split("\n");
	
	for(var i = 0; i < lines.length; i++)
	{
		var line = lines[i];
		
		for(var j = 0; j < arrayAvailableAjaxServices.length; j++)
		{
			if (arrayAvailableAjaxServices[j][3] == null)	// no handler function, jump to the next
				continue;
			
			var name = arrayAvailableAjaxServices[j][0];
			if (line.substring(0, name.length) == name)
			    arrayAvailableAjaxServices[j][3](line);
		}
	}
}

function AJAX_ReceiveBlogData()
{
	try
	{
		
	  	if (xmlHttpReq.readyState == 4)
	  	{
		    if(xmlHttpReq.status == 200)
		    	AJAX_ParseResponse(xmlHttpReq.responseText);
		    	
			waitingForAnswer = false;
//			alert("Response: \""+xmlHttpReq.responseText+"\"");
			IndicateAjax(false);
		}
	}
	catch(e) 
	{
		if (e.name == "NS_ERROR_NOT_AVAILABLE")			// avoid NS_ERROR_NOT_AVAILABLE
			return;
		
//		alert("Error at reading the received data: \n" + e);
	}	

	if (counterAjaxRequest == undefined)	
		var counterAjaxRequest = 0;
	if (counterAjaxRequest > 1000)
		counterAjaxRequest = 1;
	return;
}

function AJAX_GetXMLHttpReqObj()
{
	var result = null;
	
	if (window.XMLHttpRequest)
	{
		// If IE7, Mozilla, Safari, etc: Use native object
		result = new XMLHttpRequest()
	}
	else if (window.ActiveXObject)
	{
		// ...otherwise, use the ActiveX control for IE5.x and IE6
		result = new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	return result;
}

function AJAX_RequestBlogData()
{
	if (waitingForAnswer && (xmlHttpReq != null))
		xmlHttpReq.abort();
	
	xmlHttpReq = AJAX_GetXMLHttpReqObj();
	if (xmlHttpReq != null)
	{
		IndicateAjax(true);
		xmlHttpReq.open('GET', AJAX_CreateUrl(), true);
		xmlHttpReq.onreadystatechange = this.AJAX_ReceiveBlogData;
		xmlHttpReq.send(null);
		waitingForAnswer = true;
		counterAjaxRequest++;
	}
}

function AJAX_CreateUrl()
{
	var url = uri.dir + "/onlinerajax.php?sessionid=" + sessionID;
	
	for(var i = 0; i < arrayAvailableAjaxServices.length; i++)
		if (arrayAvailableAjaxServices[i][1] && (counterAjaxRequest % arrayAvailableAjaxServices[i][2] == 0))
			url = url + "&" + arrayAvailableAjaxServices[i][0] + "=1";

	if (currentPlaceUrlParams != "")
		url = url + "&" + currentPlaceUrlParams;

	return url;
}

// Current Page Reference
// Copyright Stephen Chapman, 1st Jan 2005
// You may copy this function but please keep the copyright notice with it.
function GetURL(uri) 
{
	uri.dir = location.href.substring(0, location.href.lastIndexOf('\/'));
	uri.dom = uri.dir; 
	if (uri.dom.substr(0, 7) == 'http:\/\/') 
		uri.dom = uri.dom.substr(7);
		
	uri.path = ''; 
	var pos = uri.dom.indexOf('\/'); 
	if (pos > -1) 
	{
		uri.path = uri.dom.substr(pos + 1); 
		uri.dom = uri.dom.substr(0, pos);
	}
	
	uri.page = location.href.substring(uri.dir.length + 1, location.href.length + 1);
	pos = uri.page.indexOf('?');
	if (pos > -1) 
		uri.page = uri.page.substring(0, pos);
	
	pos = uri.page.indexOf('#');
	if (pos > -1) 
		uri.page = uri.page.substring(0, pos);
	
	uri.ext = ''; 
	pos = uri.page.indexOf('.');
	if (pos > -1) 
	{
		uri.ext = uri.page.substring(pos + 1); 
		uri.page = uri.page.substr(0, pos);
	}
	
	uri.file = uri.page;
	if (uri.ext != '') 
		uri.file += '.' + uri.ext;
	if (uri.file == '') 
		uri.page = 'index';
		
	uri.args = location.search.substr(1).split("?");
	return uri;
}                  
