/*
	### SOLARIS
	console javascript
*/

/*
 - Show a HL alike Console on keybind
 - show debugging messages and php errors
 - maybe sometime: use console commands to do things
*/

var now = new Date();
var hours_since = 24;

var baseurl = window.location.toString();
baseurl = baseurl.substring(0, baseurl.lastIndexOf('/'))+'/';
var AJAXURL = baseurl+'request.php5?ajax=';
var JSONURL = baseurl+'request.php5?json=';
var REQUESTURL = baseurl+'request.php5';

window.addEvent('domready', function() {

	window.addEvent('keydown', function(event){
		if (event.key == 'ü')
			solaris_console_toggle();
	});

	function solaris_console_toggle() {
		
		var update = false;
		
		// is there already a console entity?
		if($defined( $('console') )) {
			
			// there is a console, is it visible?^
			var Console = $('console');
			var opacity = Console.getStyle('opacity');

			if(opacity) {
				Console.fade('out');
			} else {
				Console.fade(0.9);
				var lastupdate = $('consolelastupdate').get('html');
				update = Date.parse(lastupdate);
				update = new Date(update);
			}
			
		} else {
			
			// create a console and set last-update to never
			var Console = new Element('div', {'id': 'console'});
			Console.setStyle('opacity', 0);
			Console.inject('ajax');
			
			// create header, lastupdate and list
			var ConsoleHeader = new Element('h1', {'html': 'SOLARIS [build] | Last Update: '});
			ConsoleHeader.inject(Console);
			var ConsoleLastUpdate = new Element('h2', {'id': 'consolelastupdate'});
			ConsoleLastUpdate.inject(Console);		
			var ConsoleDoUpdate = new Element('a', {'id': 'consoledoupdate', 'html': '[Update]', 'href': '#'});
			ConsoleDoUpdate.inject(Console);		
			var ConsoleLog = new Element('ul', {'id': 'log'});
			ConsoleLog.inject(Console);
			
			// show it
			Console.fade(0.35);
		
			// add Events
			Console.addEvents({
				
				'mouseenter': function() {
					Console.fade(0.9);
				},
				'mouseleave': function() {
					Console.fade(0.35);
				}
				
			});
			
			// do update on click
			ConsoleDoUpdate.addEvent('click', function() {
				var lastupdate = $('consolelastupdate').get('html');
				update = Date.parse(lastupdate);
				update = new Date(update);
				solaris_console_update(update);
			});
	
			update = now.getTime()-(hours_since*3600*1000);
			update = new Date(update);
		
		}

		// maybe update data
		if(update != false)
			solaris_console_update(update);
		
	}
	
	// get log lines via json since [since]
	function solaris_console_update(since) {
				
		// set last update string
		var now = new Date();
		var now_datestring = now.toGMTString();
		var ConsoleLastUpdate = $('consolelastupdate');
		ConsoleLastUpdate.set('html', now_datestring);
		
		since = since.getTime();

		var req = new Request({
			method: 'get',
			url: REQUESTURL,
			data: { 'json': 'get_console_lines','since' : since },
			onRequest: function() {
				// show that we are doing something
				$('consoledoupdate').set('html', 'Update in progress...');
			},
			onComplete: function(lines) {
				$('consoledoupdate').set('html', '[Update]');
				if(lines != null) {
					lines = JSON.decode(lines);
					lines.each(function(item, index) {
						// check if logline already exists, if not, create LI and insert
						if( $defined( $('log-'+item.logid) ) == false ) {
							var errorline = '<small><em>'+item.happened+'</em></small> | ['+item.severity+'] <b>'+item.script+'</b> on line <b>'+item.line+'</b> <small>('+item.url+')</small>';
							var line = new Element('li', {
								'id': 'log-'+item.logid,
								'html': errorline
							});
							line.inject($('log'));
						}
					});
				}
			}
		}).send();

	}
		

});
