function debugObject( div_el, mixed )
{
  var el;
  var buf = "";

  div_el.innerHTML = "";

  for (var x in mixed) {
    el = document.createElement('div');
    switch ( typeof( mixed[x] ) ) {
      case 'object':
      case 'array':
        el.style.fontWeight = "bold";
        if (mixed[x] != null) {
          el.name = x;
          el.style.textDecoration = "underline";
          el.style.cursor = "pointer";
          el.onclick = function() { debugObject(div_el,mixed[this.name]); }
        }

        buf = typeof( mixed ) + " :: " + x;
      break;
      default:
        el = document.createElement('div');

        buf = typeof( mixed[x] ) + " :: " + x + ": " + mixed[x];;
      break;
    }
    div_el.appendChild(el);

    buf = buf.replace(/&/g, "&amp;" );
    buf = buf.replace(/</g, "&lt;" );
    buf = buf.replace(/>/g, "&gt;" );
    el.innerHTML = buf;
  }
}

function debug( mixed )
{
  var div_el;
  var el;

  div_el = document.createElement('div');
  div_el.id = "__debug_output__";
  div_el.style.width = "700px";
  div_el.style.height = "500px";
  div_el.style.overflow = "scroll";
  div_el.style.border = "1px solid black";
  div_el.style.margin = "0 auto";
  div_el.style.backgroundColor = "#FFFFE1";
  div_el.style.textAlign = "left";

  if (debug.arguments.length > 1) { el = debug.arguments[1]; } else { el = mixed; }
  el.appendChild(div_el);

  debugObject(div_el,mixed);
}
