//
// Global variables
//

// Highest Chat Transcript Entry index
var highestIndex = new Number(-1); // we always add one to get the next entry
var topicId; 
var baseUrl; 
var entriesDiv;
var interval; // millisecs
var debug;
var initialised = false;

// Callback for AJAX Response
function responseComplete(request) {
	try {
		var xmlResponse = request.responseXML;
	 	//alert('response: ' + request.responseText);

		var root = xmlResponse.documentElement;
		var requestedStartFrom = root.getAttribute("startFrom");
		if (debug) {
			$("transcriptStatus").innerHTML='<p>Received XML startFrom=' + requestedStartFrom + '</p>';
		}


	 	for (var i=0; i<root.childNodes.length;i++) {
			var entry = root.childNodes[i];
			if (entry.nodeName == 'question') {
				// Render Question HTML
				var textNode = entry.firstChild;
				var guest = entry.getAttribute("name");
				//alert('isQuestion - guest: ' + guest);
				new Insertion.Bottom(entriesDiv, '<li class="question"><strong>' + guest + ':&nbsp;</strong>' + textNode.nodeValue + '</li>');
				updateIndex(entry);
			} else if (entry.nodeName == 'answer') {
				var textNode = entry.firstChild;
				//alert('isAnswer: ' + textNode.nodeValue);
				var guest = entry.getAttribute("name");
				// Render Answer HTML
				new Insertion.Bottom(entriesDiv, '<li class="answer"><strong>' + guest + ':&nbsp;</strong>' + textNode.nodeValue + '</li>');
				updateIndex(entry);
			} else {
				// alert('ignored');
			}
		}

		// Scroll to bottom on initial loading or scrollbar
            	// near bottom
            	//if ((initialised == false) || (document.body.parentNode.scrollTop > 350)) {
                //  Element.scrollTo('transcriptStatus');
		var div = $("transcriptDiv");
		div.scrollTop = div.scrollHeight;
            	//}
		initialised = true;

		// Do another AJAX request
		setTimeout("request()", interval);
	} catch (e) {
		if (debug) {
			alert('error: ' + e.message);
		}

		// Ensure we try AJAX request again
		setTimeout("request()", interval);
	}
}

function updateIndex(entry) {
	var index = parseInt(entry.getAttribute('index'));
	if (index > highestIndex) {
		highestIndex = index;
	} 
}

// If response fails, retry after interval
function responseFail(request) {
	if (debug) {
		alert('responseFail - highestIndex is: '+ highestIndex);
	}
	setTimeout("request()", interval);
}

// If response fails, retry after interval
function responseException(request, exception) {
	if (debug) {
		alert('responseException - highestIndex is: '+ highestIndex + ', message: ' + exception.message);
	}
	setTimeout("request()", interval);
}


// Do AJAX request for transcript XML
function request() {
	var startFrom = 1 + highestIndex;
	var pars = 'topicId=' + topicId + '&startFrom=' + startFrom;
	if (debug) {
		$("transcriptStatus").innerHTML='<p>Requested XML startFrom=' + (highestIndex + 1) + '</p>';
	}

	var myAjax = new Ajax.Request( baseUrl, 
					  { method: 'get',
						    parameters: pars, 
						    onComplete: responseComplete,
						    onFailure: responseFail,
						    onException: responseException
					  } ); 
}

// Used by onLoad()
function init(_baseUrl, _topicId, _interval, _debug) {
	try {
		// Set global vars 
	 	entriesDiv = $("transcriptEntries");
             	topicId = _topicId;
	       baseUrl = _baseUrl;
		interval = _interval;	
		debug = _debug;

		// Do the first one...
		request();
	} catch (e) {
		alert('init error: ' + e.message);
	}
}
