var showDeprecations = true;
var showAssert = 0;     // 0-NoDispaly, 1-Alert, 2-debugMessage

function assert( isTrue, assertMsg )
{
   if ( ! isTrue && showAssert > 0 )
   {
      if ( showAssert == 1 || ( showAssert == 2 && ! debug( 'Assertion Failure: ' + assertMsg + '</br>' ) ) )
      {
         alert( 'Assertion Failure: ' + assertMsg );
      }
   }
}

function deprecated( oldF, newF )
{
   if ( showDeprecations )
   {
      alert( oldF + ' has been deprecated, please use ' + newF );
   }
}

function showProperties( obj, name, seperator )
{
   assert( obj, "Cannot show properties for null object: " + name );

   var result = "";

   seperator = seperator||"\n";
   name = name||"obj";

   for ( var i in obj )
   {
      result += name + "." + i + " = " + obj[i] + seperator;
   }

   return result
}
function debugClear()
{
   getDebug().innerHTML='';
}
function debug( msg )
{
   getDebug().innerHTML+=msg+'<br/>';
}
function debugObject( obj, name )
{
   debug( showProperties( obj, name||'obj', '<br/>' ) );
}
function getDebug()
{
   var o=$('debugNew');
   if (!o)
   {
      o=createE('div','debugNew');
      Element.setStyle(o,{'position':'absolute','top':'0','left':'0','padding':'2','border':'1px solid #444','width':'200px','background-color':'#ddd','z-index':'100'});
   }
   return o;
}
function createE(type, id, klass)
{
    var o = document.createElement(type);
    if (id) o.id = id;
    if (klass) o.className = klass;
    document.body.appendChild(o);
    return o;
}

_debug_x=0;
function x( msg )
{
   alert( msg ? msg : _debug_x++ );
}
