var vsa_debug_window, vsa_command_input, vsa_command_buffer, vsa_command_err;
var vsa_console_history = Array();
var vsa_currentconsole_index = 0;

function vsa_displaydebug_window(){
	if(typeof(vsa_debug_window)!='object'){
		vsa_debug_window = document.createElement('div');
		vsa_debug_window.id = 'vsa_debug_window';
		vsa_debug_window.style.backgroundColor = '#FFFFFF';
		vsa_debug_window.style.border = '2px solid #BBBBBB';
		vsa_debug_window.style.height = '500px';
		vsa_debug_window.style.width = '600px';
		vsa_debug_window.style.overflow = 'scroll';
		
		vsa_debug_window.style.position = 'absolute';
		vsa_debug_window.style.top = '30px';
		vsa_debug_window.style.left = '30px';
		vsa_debug_window.style.zIndex = '1000';
		
		window.document.body.appendChild(vsa_debug_window);
	}
	
	if(typeof(vsa_command_input)!='object'){
		vsa_command_input = document.createElement('input');
		vsa_command_input.id = 'vsa_command_input';
		vsa_command_input.style.backgroundColor = '#FFFFCC';
		vsa_command_input.style.border = '1px solid #AAAAAA';
		vsa_command_input.style.height = '20px';
		vsa_command_input.style.width = '600px';
		
		vsa_command_input.style.position = 'absolute';
		vsa_command_input.style.top = '530px';
		vsa_command_input.style.left = '30px';
		vsa_command_input.style.zIndex = '1001';
		
		vsa_command_input.onkeyup = function(e){
			vsa_analyze_key_press(e);
		}
		
		window.document.body.appendChild(vsa_command_input);
	}
}

function vsa_analyze_key_press(e){
	var keynum;

	if(window.event) // IE
	{
		keynum = window.event.keyCode;
	}
	else if(e.which) // Netscape/Firefox/Opera
	{
		keynum = e.which;
	}
	// up:38  down:40
	
	if(keynum==13 && vsa_command_input.value){
		vsa_debug_command_eval(vsa_command_input.value);
		
		vsa_console_history[vsa_console_history.length] = vsa_command_input.value;
		vsa_command_input.value = '';
		vsa_currentconsole_index = false;
		vsa_command_buffer = '';
	}
	else if(keynum==38){
		if(typeof(vsa_currentconsole_index)!='number'){
			vsa_command_buffer = vsa_command_input.value;
			vsa_currentconsole_index = vsa_console_history.length;
		}
		if(vsa_currentconsole_index > 0){
			vsa_currentconsole_index--;
		}
		vsa_command_input.value = vsa_console_history[vsa_currentconsole_index];
	}
	else if(keynum==40){
		if(typeof(vsa_currentconsole_index)!='number'){
			vsa_currentconsole_index = vsa_console_history.length - 1;
		}
		if(vsa_currentconsole_index < vsa_console_history.length - 1){
			vsa_currentconsole_index++;
		}
		else if(vsa_currentconsole_index >= vsa_console_history.length - 1){
			vsa_currentconsole_index = false;
			vsa_command_input.value = vsa_command_buffer;
			return;
		}
		vsa_command_input.value = vsa_console_history[vsa_currentconsole_index];
	}
}

function vsa_debug_command_eval(command){
	if(command=='clear'){
		vsa_debug_window.innerHTML = '';
		return;
	}
	else if(command=='exit'){
		vsa_debug_window.parentNode.removeChild(vsa_debug_window);
		vsa_command_input.parentNode.removeChild(vsa_command_input);
	}
	
	try{
		var response = eval(command);
	}
	catch(err){
		vsa_command_err = err;
		var response = '<span style="font-weight:bold;color:#FF0000;">bad command</span>: '+command;
		response += " : " + err.message;
	}
	
	if(typeof(response)=='string' || typeof(response)=='number'){
		vsa_display_debug_msg(response);
	}
}

function vsa_display_debug_msg(message){
	if(!vsa_debug){
		return;
	}
	
	if(typeof(vsa_debug_window)!='object'){
		vsa_displaydebug_window();
	}
	
	var temp_div = document.createElement('div');
	temp_div.style.padding = '2px 5px 2px 5px';
	temp_div.innerHTML = message;
	vsa_debug_window.appendChild(temp_div);
	var prev_scroll = -1;
	
	while(prev_scroll < vsa_debug_window.scrollTop){
		prev_scroll = vsa_debug_window.scrollTop;
		vsa_debug_window.scrollTop = vsa_debug_window.scrollTop+5;
	}
}
