var debugWindow = null;
function debug(text, reverse) {
	if (debugWindow == null)
 		return;

	time = "-"; //new Date();
	if (reverse) {
		 _proxy_jslib_assign('', $('debug'), 'innerHTML', '=', ( time + " " + text + "<br>"+ 	 _proxy_jslib_handle($('debug'), 'innerHTML', '', 0, 0)));
		debugWindow.getContent().scrollTop=0;
	}
	else {
		 _proxy_jslib_assign('', $('debug'), 'innerHTML', '+=', (  time + " " + text + "<br>"));
		debugWindow.getContent().scrollTop=10000; // Far away 
	}
}

function hideDebug() {
	if (debugWindow) {
		debugWindow.destroy();
		debugWindow = null;
	}
}

function showDebug(bShow) {
 if (debugWindow == null) {
  debugWindow = new (Window)('debug_window', {className: 'dialog',width:250, height:100, right:4, bottom:42, zIndex:1000, opacity:1, showEffect: Element.show, resizable: true, title: "Debug"})
  _proxy_jslib_assign('', debugWindow.getContent(), 'innerHTML', '=', ( "<style>#debug_window .dialog_content {background:#000;}</style> <div id='debug'></div>"));
  date=new (Date);
    date.setMonth(date.getMonth()+3);
    
  //debugWindow.setCookie(null, date);
 }
 if( typeof bShow == 'undefined' || bShow)debugWindow.show()
}


function clearDebug() {
	if (debugWindow == null)
 		return;
	 _proxy_jslib_assign('', $('debug'), 'innerHTML', '=', ( ""));
}

/**
 * document.createElement convenience wrapper
 *
 * The data parameter is an object that must have the "tag" key, containing
 * a string with the tagname of the element to create.  It can optionally have
 * a "children" key which can be: a string, "data" object, or an array of "data"
 * objects to append to this element as children.  Any other key is taken as an
 * attribute to be applied to this tag.
 *
 * Available under an MIT license:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * @param {Object} data The data representing the element to create
 * @return {Element} The element created.
 */
function $E(data) {
  var el;
  if ('string'==typeof data) {
      el=document.createTextNode(data);
  } else {
    //create the element
    el=document.createElement(data.tag);
     _proxy_jslib_assign('delete', (data), ('tag'), '');

    //append the children
    if ('undefined'!=typeof data.children) {
      if ('string'==typeof data.children ||'undefined'==typeof data.children.length) {
        //strings and single elements
        el.appendChild($E(data.children));
      } else {
        //arrays of elements
        for (var i=0, child=null; 'undefined'!=typeof (child= _proxy_jslib_handle(data.children, (i), 0, 0)); i++) {
            el.appendChild($E(child));
        }
      }
       _proxy_jslib_assign('delete', (data), ('children'), '');
    }

    //any other data is attributes
    for (attr in data) {
       _proxy_jslib_assign('', el, (attr), '=', ( _proxy_jslib_handle(data, (attr), 0, 0)));
    }
  }

  return el;
}

// FROM Nick Hemsley
var Debug = {
	inspectOutput: function (container, within) {
		within = within || debugWindow.getContent()
 
 if (debugWindow == null)
 			return;

		within.appendChild(container)
 },
	
	inspect: function(object) {
		var cont = $E({tag: "div", className: "inspector"})
		Debug.inspectObj(object, cont)
 debugWindow.getContent().appendChild(cont)
 },
	
	inspectObj: function (object, container) {
		for (prop in object) {
			Debug.inspectOutput(Debug.inspectable(object, prop), container)
 }
	},
	
	inspectable: function(object, prop) {
		cont = $E({tag: 'div', className: 'inspectable', children: [prop + " value: " +  _proxy_jslib_handle(object, (prop), 0, 0) ]})
 cont.toInspect =  _proxy_jslib_handle(object, (prop), 0, 0)
 Event.observe(cont, 'click', Debug.inspectClicked, false)
 return cont
 },
	
	inspectClicked: function(e) {
		Debug.inspectContained(Event.element(e))
 Event.stop(e)
 },
	
	inspectContained: function(container) {
		if (container.opened) {
			container.parentNode.removeChild(container.opened)
  _proxy_jslib_assign('delete', (container), ('opened'), '')
		} else {
			sibling = container.parentNode.insertBefore($E({tag: "div", className: "child"}), container.nextSibling)
 if (container.toInspect)
				Debug.inspectObj(container.toInspect, sibling)
 container.opened = sibling
 }
	}
}
var inspect = Debug.inspect;
 ;
_proxy_jslib_flush_write_buffers() ;