/*

	WRITTEN BY DANIEL G. ARLITT
		
		USED TO INSPECT A JAVASCRIPT OBJECT
		RETURNS THE OBJECT AS AN HTML FORMATTED STRING
	
	PLEASE KEEP THIS COMMENT

*/
// convert object to html
var CO2HTML = function (obj) {
	
	var curlyBraces = 'blue';
	var squareBraces = 'green';
	var parenthesis = 'orange';
	var variables = 'red';
	var values = 'gray';
	var colons = 'black';
	
	var oSrc = obj.toSource();
	var array = oSrc.split('');
	var text = '';
	var prevChar = '';
	var nextChar = '';
	var insideQuote = false;
	var quoteChar = '';
	
	var getNextCharPos = function (pos) {
		// gets the position of the next non-white-space character
		var next = pos + 1;
		if (array.length >= next) {
			
			if (array[next] == ' ') {
				getNextCharPos(next);
			} else {
				return next;
			}
			
		} else {
			return 0;
		}
	}
	
	var setNextChars = function () {
		// set next and nextNext chars
		var nextPos = getNextCharPos(i);
		var nextNextPos = 0;
		
		if (nextPos != 0) {
			nextChar = array[nextPos];
			nextNextPos = getNextCharPos(nextPos+1);
			if (nextNextPos != 0) {
				nextNextChar = array[nextNextPos];
			} else {
				nextNextPos = '';
			}
		} else {
			nextChar = '';
			nextNextChar = '';
		}
	}
	
	text = '<div style="color:' + values + ';">';
	
	for (var i=0; i < array.length; i++) {
		
		setNextChars();
		
		if ( (array[i] == '"' || array[i] == "'") && prevChar != '\\') {
			
			if (insideQuote && array[i] == quoteChar) {
				insideQuote = false;
				//alert("close quote with " + array[i] + " prev char = " + prevChar);
			} else {
				quoteChar = array[i];
				insideQuote = true;
				//alert("open quote with " + array[i] + " next char = " + nextChar);
			}
			
		}
		
		if (! insideQuote) {
			
			if (array[i] == '(') {
				
				text += '<span style="color:' + parenthesis + ';">' + array[i] + '</span>';
				
				if (nextChar != ')' && nextNextChar != ')') {
						
					text += '<ul>';
					text += '<li>';
						
				}
				
			} else if (array[i] == ')') {
				
				
				if (prevChar != '(' && prevPrevChar != '(') {
						
					text += '</li>';
					text += '</ul>';
						
				}
				
				text += '<span style="color:' + parenthesis + ';">' + array[i] + '</span>';
				
			} else 	if (array[i] == '{' || array[i] == '[') {
				
				text += '<ul>';
				text += '<li>';
				text += '<span style="color:' + (array[i] == '{' ? curlyBraces : (array[i] == '[' ? squareBraces : parenthesis)) + ';">' +  array[i] + '</span>';
				
				if (array[i] == '{' && nextChar != '}') {
					text += '<ul>';
					text += '<span style="color:' + variables + ';">'
				}
				
			} else if (array[i] == '}' || array[i] == ']') {
				
				if (array[i] == '}' && prevChar != '{') {
					text += '</span>';
					text += '</ul>';
				}
				
				text += '<span style="color:' + (array[i] == '}' ? curlyBraces : (array[i] == ']' ? squareBraces : parenthesis)) + ';">' + array[i] + '</span>';
				text += '</li>';
				text += '</ul>'
				
			} else if (array[i] == ',') {

				text += array[i];
				text += '</li><li><span style="color:' + variables + ';">';
				
			} else if (array[i] == ':') {
				
				text += '</span>' + '&nbsp;<span style="color:' + colons + ';">' + array[i] + '</span>&nbsp;';
				
			} else {
				
				text += array[i];
				
			}
		
		} else {
			
			text += array[i];
			
		}
		
		if (array[i] != ' ') {
			prevChar = array[i];
			prevPrevChar = prevChar;
		}
	}
	
	text += '</div>';
	
	return text;
}