var joDEBUG = true;

/* ********************************************************************************************************** */

function joDEBUG_Activate (debug_on)
{
	if (!debug_on)
	{
		joHideDivByName ("DEBUG_SHOW_DATA");
		joHideDivByName ("DEBUG_SHOW_XML");
		joHideDivByName ("DEBUG_SHOW_GUI");
		joHideDivByName ("DEBUG_SHOW_SAVE");
		joHideDivByName ("DEBUG_SHOW_REGEX");
		joHideDivByName ("DEBUG_LINE");
	}
	else
	{
		joFIND ("DEBUG_SHOW_SAVE").style.display = "inline";
		joFIND ("DEBUG_SHOW_REGEX").style.display = "inline";
	}
}


/* ********************************************************************************************************** */

var joDEBUG_SCREEN_LINE_FEED = "<br />";
var joDEBUG_SCREEN_TAB = "\t";

/* ********************************************************************************************************** */

function joDEBUG_OUTPUT_XML()
{
	joShowDivByName ('DEBUG');
	joFIND('DEBUG_CONTENT').innerHTML = "<pre>" + joVMM.PrepareSaveData (true) + "</pre>";
}

function joDEBUG_CLOSE_DEBUG_WIN()
{
	joGUI.HideShadow ('DEBUG');
	joHideDiv (joFIND('DEBUG')); return false;
}

/* ********************************************************************************************************** */

function joDEBUG_SHOW_OUTPUTFILE (file_content)
{
	joGUI.ShowShadow ('DEBUG', 19);
	joShowDivByName ('DEBUG');
	joFIND('DEBUG_CONTENT').innerHTML = file_content;
}

/* ********************************************************************************************************** */

var joDEBUG_OUTPUT = "";

function joDEBUG_OUTPUT_DOM (data, depth)
{
	var node;
	if (data) 
	{
		if (!depth) 
		{
			joShowDivByName ('DEBUG');
			joDEBUG_OUTPUT = "";
			joFIND('DEBUG_CONTENT').innerHTML = "";
		}
		for (var i = 0; i < data.childNodes.length; i++)
		{
			node = data.childNodes[i];
			if (node.nodeType == 1)
			{
				for (var j = 0; j < depth; j++) { joDEBUG_OUTPUT += "<span class='line'>|</span>&#160;" }
				joDEBUG_OUTPUT += "<b>" + node.nodeName + "</b>";
			
				for (j = 0; node.attributes && j < node.attributes.length; j++)
				{
					joDEBUG_OUTPUT += " <i>[" + node.attributes[j].nodeName + " = " + node.attributes[j].nodeValue + "]</i>";
				}
				
				joDEBUG_OUTPUT += "<br />";
				joDEBUG_OUTPUT_DOM (node, depth + 1);
			}
			else if (node.nodeType == 3)
			{
				if (escape (node.data.charAt(0)) != "%0A") 
				{
					for (var j = 0; j < depth; j++) { joDEBUG_OUTPUT += "<span class='line'>|</span>&#160;" }
					joDEBUG_OUTPUT += "'" + escape (node.data) + "'<br />";
				}
			}
		}
	}
	else alert ("no data");
	
	if (!depth)
	{
		joFIND('DEBUG_CONTENT').innerHTML = joDEBUG_OUTPUT;
		joDEBUG_OUTPUT = "";
	}
}

/* ********************************************************************************************************** */

function joDEBUG_OUTPUT_CHAIN (data, depth)
{
	if (data) 
	{
		if (!depth) 
		{
			joShowDivByName ('DEBUG');
			joDEBUG_OUTPUT = "";
			joFIND('DEBUG_CONTENT').innerHTML = "";
		}
		
		var obj = data.element_first;
		while (obj)
		{
			for (var j = 0; j < depth; j++) { joDEBUG_OUTPUT += "<span class='line'>|</span>&#160;" }
			joDEBUG_OUTPUT += "<b>" + obj.name + "</b>";
			
			for (j = 0; obj.attributes && j < obj.attributes.length; j++)
			{
				joDEBUG_OUTPUT += " <i>[" + obj.attributes[j][0] + " = " + obj.attributes[j][1] + "]</i>";
			}
			
			joDEBUG_OUTPUT += "<br />";
			if (obj.data != "") 
			{
				for (var j = 0; j < depth + 1; j++) { joDEBUG_OUTPUT += "<span class='line'>|</span>&#160;" }
				joDEBUG_OUTPUT += "'" + obj.data + "'";
				joDEBUG_OUTPUT += "<br />";
			}
			joDEBUG_OUTPUT_CHAIN (obj.childNodes, depth + 1);
			obj = obj.element_next;
		}
	}
	else alert ("no data");
	
	if (!depth)
	{
		joFIND('DEBUG_CONTENT').innerHTML = joDEBUG_OUTPUT;
		joDEBUG_OUTPUT = "";
	}
}

/* ********************************************************************************************************** */

function joDEBUG_INFO (data)
{
	joDOM.SetTextByID ("DEBUG_LINE", data);
}


/* ********************************************************************************************************** */

function joDEBUG_REGEX_TESTER_SHOW()
{
	joShowDivByName ('REGEX_TEST');
	joDOM.GetFormElement (joFIND('REGEX_FORM'), 'regex_converted1').value = "";
	joDOM.GetFormElement (joFIND('REGEX_FORM'), 'regex_converted2').value = "";
	joDOM.GetFormElement (joFIND('REGEX_FORM'), 'regex_value3').value = "";
	joDOM.GetFormElement (joFIND('REGEX_FORM'), 'regex_float1').value = "";
	joDOM.GetFormElement (joFIND('REGEX_FORM'), 'regex_float2').value = "";
	joDOM.GetFormElement (joFIND('REGEX_FORM'), 'regex_float3').value = "";
}

/* ********************************************************************************************************** */

function joDEBUG_REGEX_TESTER_TEST (nr)
{
	var form 	= joFIND('REGEX_FORM');
	var regval 	= joDOM.GetFormElement (form, 'regex_value' + nr).value;
	var regtype	= joDOM.GetFormElement (form, 'regex_datatype').value;

	alert (joNumCheck (regval, regtype) ? "Valid" : "Invalid");
}

/* ********************************************************************************************************** */

function joDEBUG_REGEX_TESTER_TOFLOAT (nr)
{
	var form 		= joFIND('REGEX_FORM');
	var field		= joDOM.GetFormElement (form, 'regex_float' + nr);
	var regval 		= joDOM.GetFormElement (form, 'regex_value' + nr).value;
	var val			= new joVirtNumber (regval);
	field.value 	= val.Normalize();
}

/* ********************************************************************************************************** */

function joDEBUG_REGEX_TESTER_CONVERT (nr)
{
	var form 		= joFIND('REGEX_FORM');
	var field		= joDOM.GetFormElement (form, 'regex_converted' + nr);
	var regval 		= joDOM.GetFormElement (form, 'regex_value' + nr).value;
	var val			= new joVirtNumber (regval);
	field.value 	= val.toStr();
}

/* ********************************************************************************************************** */

function joDEBUG_REGEX_TESTER_FREE_REGEX()
{
	var form 						= joFIND('REGEX_FORM');
	var regex_regex				= joDOM.GetFormElement (form, "regex_free_regex").value;
	var regex_test					= joDOM.GetFormElement (form, "regex_free_test").value;
	var regex_result_node		= joDOM.GetFormElement (form, "regex_free_result");
	var regex_stripped_node	= joDOM.GetFormElement (form, "regex_free_stripped");
	
	regex_regex = regex_regex.replace (/\s*/g, "");
	regex_test = regex_test.replace (/\s*/g, "");
	
	regex_stripped_node.value = regex_regex;
	
	try
	{
		var re = new RegExp (regex_regex);
		var result = (re.exec(regex_test));
		regex_result_node.value = result;
//		regex_result_node.value = result ? "OK" : "FALSE";	
		regex_result_node.style.backgroundColor = result ? "#ffffff" : "#ffff66";
	}
	catch (e)
	{
		regex_result_node.value = e;	
		regex_result_node.style.backgroundColor = "#ff6666";
	
	}
	
}

/* ********************************************************************************************************** */

function joDEBUG_REGEX_TESTER_CALC()
{
	var form 		= joFIND('REGEX_FORM');
	var result 		= "";
	var regval1 	= joDOM.GetFormElement (form, 'regex_value1').value;
	var regval2 	= joDOM.GetFormElement (form, 'regex_value2').value;
	var calc			= joDOM.GetFormElement (form, 'regex_calc').value;
	
	var float1		= new joVirtNumber (regval1);
	var float2		= new joVirtNumber (regval2);

	var field		= joDOM.GetFormElement (form, 'regex_value3');
	
	switch (calc)
	{
		case "add": 		result	= float1.Add (float2); 		break;
		case "subtract": result	= float1.Subtract (float2); 	break;
		case "multiply": result	= float1.Multiply (float2); 	break;
		case "devide": 	result	= float1.Devide (float2); 	break;
	}
	field.value 	= result;
}

