/*  Prototype JavaScript framework, version 1.4.0
 *  (c) 2005 Sam Stephenson <sam@conio.net>
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://prototype.conio.net/
 *
 *  Modified for vBulletin use.
/*--------------------------------------------------------------------------*/

var debugmode = false;

var spymax;
var play = 1;

var posts = new Array();

var highestid = 0;

/* Effect delay of fade-in */
var fadetime = .25;

/* Time delay between updates to table while scrolling */
var pushtime = 1000;

/*--

This must include both slashes: i.e.

var vburl='/forum/';

Use this is you integrate outside /forum with a portal or other product

*/
var vburl = '';

/* Delay between polls to the XML feed for new updates to page */
var xmldelay = 7000;
var debugdiv = null;
var debugcount = 0;
var firstfetch = true;
function debug(text) {
	if (!debugmode) return;
	if (!debugdiv) {
		body = document.getElementsByTagName('body')[0];
		debugdiv = document.createElement('div');
		debugdiv.onclick = function() {
			debugdiv.innerHTML = '';
		}
		body.appendChild(debugdiv);
	}
	debugdiv.innerHTML = (++debugcount) + ': ' + text + '<br/>' + debugdiv.innerHTML;
}

function spyinit() {
	if (is_ie) {
		for (i = spymax; i >= 1; i--){
			document.getElementById("spy_table").rows[i].insertCell();
			document.getElementById("spy_table").rows[i].insertCell();
			document.getElementById("spy_table").rows[i].insertCell();
			document.getElementById("spy_table").rows[i].insertCell();
		}
	}

	getXML();
}

function getXML() {
	debug('Begin getXML()');
	if (highestid > 0) {
		var querystring = "do=xml&last=" + highestid;
	} else {
		var querystring = "do=xml";
	}

	querystring = querystring + '&r=' + Math.random();

	debug('Query string = "' + querystring + '"');

	var url = vburl + "vaispy.php";
	var myAjax = null;

	myAjax = new Ajax.Request(
	url,
		{
			method: 'get',
			asynchronous: true,
			parameters: querystring,
			onComplete: processXML
		});
	debug('End getXML()');
}

var temp = document.createElement('div');

function processXML(request) {
	debug('Begin processXML()');
	var events;
	var event;

	debug('Parsing events');

	try {
		events = request.responseXML.getElementsByTagName("events")[0];
		debug('Events table length = ' + events.length);
		event = events.getElementsByTagName("event");
		debug('Event length = ' + event.length);
		if (event.length == 0) {
			debug('Event is empty, reretrieving xml');
			setTimeout("getXML()", xmldelay);
			return;
		}
	}

	catch (e) {
		debug('Error occured: "' + e + '", reretrieving xml');
		setTimeout("getXML()", xmldelay);
		return;
	}

	for (i = 0; i < event.length; i++) {
		var post = new Object();
		try {
			post.what = event[i].getElementsByTagName("what")[0].firstChild.nodeValue;
		}
		catch (e) {
			post.what = "Unknown";
		}

		try {
			post.when = event[i].getElementsByTagName("when")[0].firstChild.nodeValue;
		}
		catch (e) {
			post.when = "";
		}

		try {
			post.prefix = event[i].getElementsByTagName("prefix")[0].textContent;
			if (post.prefix != '')
				post.prefix += ' - ';
		}
		catch (e) {
			post.prefix = "";
		}

		try {
			post.title = event[i].getElementsByTagName("title")[0].firstChild.nodeValue;
		}
		catch (e) {
			post.title = "";
		}

		try {
			post.preview = event[i].getElementsByTagName("preview")[0].firstChild.nodeValue;
		}
		catch (e) {
			post.preview = "";
		}

		try {
			post.poster = event[i].getElementsByTagName("poster")[0].firstChild.nodeValue;
		}
		catch (e) {
			post.poster = "Guest";
		}

		try {
			post.threadid = event[i].getElementsByTagName("threadid")[0].firstChild.nodeValue;
		}
		catch (e) {
			post.threadid = "";
		}

		try {
			post.postid = event[i].getElementsByTagName("postid")[0].firstChild.nodeValue;
		}
		catch (e) {
			post.postid = "";
		}

		try {
			post.lastpost = event[i].getElementsByTagName("lastpost")[0].firstChild.nodeValue;
		}
		catch (e) {
			post.lastpost = "";
		}

		try {
			post.userid = event[i].getElementsByTagName("userid")[0].firstChild.nodeValue;
		}
		catch (e) {
			post.userid = "";
		}

		try {
			post.spyid = event[i].getElementsByTagName("id")[0].firstChild.nodeValue;
		}
		catch (e) {
			post.spyid = 1;
		}

		try {
			post.forumid = event[i].getElementsByTagName("forumid")[0].firstChild.nodeValue;
		}
		catch (e) {
			post.forumid = 1;
		}

		try {
			post.forumname = event[i].getElementsByTagName("forumname")[0].firstChild.nodeValue;
		}
		catch (e) {
			post.forumname = 1;
		}

		try {
			post.views = event[i].getElementsByTagName("views")[0].firstChild.nodeValue;
		}
		catch (e) {
			post.views = 1;
		}

		try {
			post.replies = event[i].getElementsByTagName("replies")[0].firstChild.nodeValue;
		}
		catch (e) {
			post.replies = 1;
		}
		
		posts.push(post);
		highestid = Math.max(parseInt(post.spyid), highestid);
	}
	
	if (firstfetch) {
		setTimeout("push()", pushtime);
		firstfetch = false;
	}
	
	setTimeout("getXML()", xmldelay);
	
	debug('End processXML()');
}

function push() {
	if (play == 0 || posts.length == 0) {
		setTimeout("push()", pushtime);
		return;
	}
	debug('Begin push()');
	var cell;
	var cellnext;
	var text;
	var clip;
	var poster_clip = '';
	var where = '';
	var post_url;
	var style = '';

	var post = posts.shift();

	if (vB_PHP_Emulator.prototype.stripos(post.what, 'thread')) {
		post_url = vburl + 'showthread.php?t=' + post.threadid;
	} else {
		post_url = vburl + 'showthread.php?p=' + post.spyid + '#post' + post.spyid;
	}

	if(post.title.length == 0) {
		clip = '<strong>Unknown</strong>';
	} else {
		clip = '<strong><a href="' + post_url + '">' + post.prefix + post.title + '</a></strong>';
	}

	if (post.preview.length > 0) {
	    clip = clip + '<br />' + post.preview ;
	}

    clip = clip + ' (' + post.views + ' razy czytano, ' + post.replies + ' odpowiedzi)';

	if (post.userid.length > 0) {
		poster_clip = '<a href="' + vburl + 'member.php?u=' + post.userid + '">' + post.poster + '</a>';
	}

    poster_clip = poster_clip + '<br />' + post.when;

	if (parseInt(post.forumname.length) > 0) {
		where = where + '<strong><a href="' + vburl + 'forumdisplay.php?f=' + post.forumid + '">' + post.forumname + '</a></strong>';
	} else {
		where = '';
	}

    if (is_opera) {
        text = '<table cellpadding="3" cellspacing="0" border="0" width="100%"><tr><td width="20" class="alt1 smallfont" nowrap="nowrap" align="center">' + post.what + '</td><td class="alt1 smallfont" width="225" nowrap="nowrap" align="left">' + poster_clip + '</td><td class="alt1 smallfont" width="80%">' + clip + '</td><td class="alt1 smallfont" width="200" nowrap="nowrap" align="center">' + where + '</td></tr></table>';
	} else {
	    text = '<td class="alt1 smallfont" align="center">' + post.what + '</td><td class="alt2 smallfont">' + poster_clip + '</td><td class="alt1Active smallfont">' + clip + '</td><td align="center" class="alt1 smallfont">' + where + '</td>';
    }

	Element.setOpacity('row1', 0.0);

	if (is_ie) {
		for (i = (spymax - 1); i >= 1; i--) {
			cell = document.getElementById("spy_table").rows[i];
			cellnext = document.getElementById("spy_table").rows[i + 1];
			if (cell.innerHTML.length > 31) {
				cellnext.cells[0].innerHTML = cell.cells[0].innerHTML;
				cellnext.cells[1].innerHTML = cell.cells[1].innerHTML;
				cellnext.cells[2].innerHTML = cell.cells[2].innerHTML;
				cellnext.cells[3].innerHTML = cell.cells[3].innerHTML;
				cellnext.style.display = '';
			}
		}

		document.getElementById("row1").cells[0].innerHTML = '<div class="smallfont"><strong>' + post.what + '</strong></div>';
		document.getElementById("row1").cells[1].innerHTML = '<div class="smallfont">' + poster_clip + '</div>';
		document.getElementById("row1").cells[2].innerHTML = clip;
		document.getElementById("row1").cells[3].innerHTML = '<div class="smallfont">' + where + '</div>';
	} else {
		for (i = (spymax - 1); i >= 1; i--) {
			cell = document.getElementById("row" + i);
			cellnext = document.getElementById("row" + (i + 1));
			if (cell.innerHTML != "") {
				cellnext.innerHTML = cell.innerHTML;
				cellnext.style.display = '';
			}
		}
		document.getElementById("row1").innerHTML = text;
	}

	Effect.Appear('row1', { duration: fadetime });

	setTimeout("push()", pushtime);

	debug('End push()');
}
