/* The LiveText Machine by Mark Kennedy */
/* namespace lt */
var lt_tested = false;
var lt_supported = false;

var lt_refreshTimer = false;

var _lt_first_run = true;

/* private */
function _lt_testSupport() {
	// test browser support
	if( false == lt_tested ) {
		if( Sarissa ) {
			lt_supported = true;
		}
	}
	lt_tested = true;
	return lt_supported;
}

/* private */
var _lt_current_dom = false;
var _lt_current_target;

var _lt_last_updated;

function lt_updateLines( lines_container ) {
	if( _lt_testSupport() ) {
		if( lt_article_id != undefined ) {
			// deduct a second to account for lines posted at same time as a refresh
			var source = "live_text_frontend.xml.php?article_id=" + lt_article_id + "&time=" + ( _lt_last_updated - 16 );
			_lt_current_target = lines_container;
			_lt_getSource( source );
		}		
	}
}

function _lt_renderLines( _lt_current_dom ) {

	if( _lt_current_dom != false ) {
		//if( _lt_current_dom.readyState >= 4 ) {
			var target = _lt_current_target;
			var content = _lt_processSource( _lt_current_dom );
			_lt_writeLines( target, content );

			_lt_first_run = false;

			lt_refreshTimer = window.setTimeout( lt_updateLines, 20000 );

			// finished with this
			//_lt_current_dom = false;
			//_lt_current_target = false;

			//return true;
		//}
		repositionNewFooter();
	}

	// lt_supported = false;
	// return false;

}

/* private */
function _lt_writeLines( target, content ) {

	if( content == false ) {
		// alert( "Parse error" );
		// TODO. Refresh page and set a 'meta refresh'?
		// actually don't worry, it'll try again in a bit
		
		return false;
	}



	_lt_last_updated = content.updated;

	for( ii = 0; ii < content.dellines.length; ii ++ ) {
		line_id = "line" + content.dellines[ ii ].lineid;
		old_line = $( line_id );
		if( old_line ) {
			old_line.style.display = "none";
		}
	}
	for( ii = 0; ii < content.lines.length; ii ++ ) {

		live_chunk = $( "liveChunk" );

		line_id = "line" + content.lines[ ii ].lineid;
		var new_line = document.createElement( "div" );
		new_line.setAttribute( "id", line_id );
		
		new_line.setAttribute( "class", "liveLine" );
		new_line.setAttribute( "className", "liveLine" );
		
		var ud = new Date();
		ud.setTime( content.lines[ ii ].timestamp * 1000 );
		thing = document.createTextNode( _lt_zeropad( ud.getHours() ) + ":" + _lt_zeropad( ud.getMinutes() ) + ":" + _lt_zeropad( ud.getSeconds() )  + " - " );
		date = document.createElement( "p" );
		
		date.setAttribute( "class", "timestamp" );
		date.setAttribute( "className", "timestamp" );
		
		date.appendChild( thing );
		new_line.appendChild( date );

			//Sarissa.copyChildNodes( content.lines[ ii ].paras, new_line, true );
		for( ps = 0; ps < content.lines[ ii ].paras.length; ps ++ ) {
			//new_line.appendChild( content.lines[ ii ].paras[ ps ] );
			np = document.createElement( "p" );
			
		//alert( Sarissa.serialize( content.lines[ ii ].paras[ ps ] ) );
			Sarissa.copyChildNodes( content.lines[ ii ].paras[ ps ], np, true );		
			
			var replacement = np.innerHTML.toString();
			replacement = replacement.replace(/<div>/gi, "");
			replacement = replacement.replace(/<\/div>/gi, "");
			replacement = replacement.replace(/&amp;#8220;/, "&#8220;");
			replacement = replacement.replace(/&amp;#8222;/, "&#8222;");

			eDiv = document.createElement("p");
			eDiv.innerHTML = replacement;
			new_line.appendChild(eDiv);
		}

		/*for( ps = 0; ps < content.lines[ ii ].paras.length; ps ++ ) {
			np = document.createElement( "p" );
			op = content.lines[ ii ].paras[ ps ];
			if( op.hasChildNodes ) {
				for( p_ch = 0; p_ch < op.length; 
			}
		alert( Sarissa.serialize( content.lines[ ii ].paras[ ps ] ) );
			Sarissa.copyChildNodes( content.lines[ ii ].paras[ ps ], np, true );
			new_line.appendChild( np );
		}*/

		old_line = $( line_id );
		if( old_line ) {
			// replace line
			live_chunk.replaceChild( new_line, old_line );
		} else {
			live_chunk.insertBefore( new_line, live_chunk.firstChild );
		}
		if( ! _lt_first_run ) {
			new_line.style.backgroundColor = "#e0ffe8";
			//alert( "_lt_loLiteLine( \"" + line_id + "\", \"#e8fffa\" )" );
			window.setTimeout( "_lt_loLiteLine( \"" + line_id + "\", \"#e8fffa\" )", 6000 );
			window.setTimeout( "_lt_loLiteLine( \"" + line_id + "\", \"#ecfffb\" )", 6250 );
			window.setTimeout( "_lt_loLiteLine( \"" + line_id + "\", \"#f0fffc\" )", 6500 );
			window.setTimeout( "_lt_loLiteLine( \"" + line_id + "\", \"#f4fffd\" )", 6750 );
			window.setTimeout( "_lt_loLiteLine( \"" + line_id + "\", \"#f8fffe\" )", 7000 );
			window.setTimeout( "_lt_loLiteLine( \"" + line_id + "\", \"#fcffff\" )", 7250 );
			window.setTimeout( "_lt_loLiteLine( \"" + line_id + "\", \"transparent\" )", 7500 );
		}		
	}

}

/* private */
function _lt_getSource( source ) {
	//_lt_current_dom = Sarissa.getDomDocument();
	//_lt_current_dom.async = true;
	//_lt_current_dom.onreadystatechange = _lt_renderLines;
	//_lt_current_dom.load( source );
	//
new Ajax.Request(source, {
  method: 'get',
  onSuccess: function( transport ) {
	_lt_current_dom = transport.responseXML;
	_lt_renderLines( _lt_current_dom );
  }
});
}

function _lt_processSource( dom ) {

	//if( Sarissa.getParseErrorText( dom ) != Sarissa.PARSED_OK ) {
	//	return false;
	//}
	var content = new Object();
	content.lines = new Array();
	content.dellines = new Array();

	xmlDiff = dom.documentElement.getElementsByTagName( "live-text-diff" )[ 0 ]
	content.updated = xmlDiff.getAttribute( "updated" );
	xmlLines = dom.documentElement.getElementsByTagName( "line" );
	if( xmlLines.length > 0 ) {
		var cc;
		for( cc = 0; cc < xmlLines.length; cc ++ ) {
			var obj = new Object();
			obj.paras = xmlLines[ cc ].getElementsByTagName( "p" );
			obj.timestamp = xmlLines[ cc ].getAttribute( "time" );
			obj.lineid = xmlLines[ cc ].getAttribute( "id" );
			content.lines.push( obj );
		}
	}
	xmlDelete = dom.documentElement.getElementsByTagName( "delete" );
	if( xmlDelete.length > 0 ) {
		var dd;
		for( dd = 0; dd < xmlDelete.length; dd ++ ) {
			var obj = new Object();
			obj.lineid = xmlDelete[ dd ].getAttribute( "id" );
			content.dellines.push( obj );
		}
	}
	return content;

}

if( _lt_testSupport() ) {
	jsnote = $( "liveJsNote" );
	nonjsnote = $( "liveNonJsNote" );
	if( jsnote != undefined && nonjsnote != undefined ) {
		jsnote.style.display = "block";
		nonjsnote.style.display = "none";
	}
	lt_refreshTimer = window.setTimeout( lt_updateLines, 5000 );
}

/* omg Date obj is rubbish! */
function _lt_zeropad( n ) {
	if( n < 10 ) { return "0" + n; } else { return n; }
}

function _lt_loLiteLine( lineid, c ) {
	line = $( lineid );
	if( line != undefined ) {
		line.style.backgroundColor = c; 
	}
}

