Element.addMethods({  
  getInnerText: function(element) {
    element = $(element);
    return element.innerText && !window.opera ? element.innerText
      : element.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g, ' ');
  }
});

var $log = function(A){
	if(window.console&&typeof (console.log)=="function") {
		console.log(A);
	} else {
		if(window.opera&&typeof (opera.postError)=="function"){
			opera.postError(A);
		}
	}
};

var ReadyState = new Object();
ReadyState.onContentQueue = new Array();
ReadyState.onContent = function()
{
                var errors = new Array();
                ReadyState.isContentLoaded = true;
                for( var i = 0; i < ReadyState.onContentQueue.length; i++ )
                {
                                try
                                {
                                               ReadyState.onContentQueue[i]();  
                                }
                                catch(e)
                                {
                                               //delay errors
                                               errors.push(e);    
                                }                              
                }

                if( errors.length > 0 )
                {
                                //throw first error only.
                                throw errors[0];    
                }

}

ReadyState.addContentObserver = function ( functor )
{
        ReadyState.enableOnContent();  
        if( functor && typeof( functor ) == "function" )
        {
                if( ReadyState.isContentLoaded )
                {
                        functor();  
                }
                else
                {
                        ReadyState.onContentQueue.push( functor );

                }
        }

}

ReadyState.isContentLoaded = false;
ReadyState.isOnContentEnabled = false;

/**
 * Modified from //from http://www.3site.eu/jstests/onContent/final.html
 *
 *
 *
 */
ReadyState.enableOnContent = function( )
{
        if( !ReadyState.isOnContentEnabled )
        {
                var ieScript = "<scr".concat("ipt defer src='//:' on", "readyState" , "change='if(this.", "readyState" ,"==\"complete\"){this.parentNode.removeChild(this);","__onContent__","()}'></scr","ipt>");

                window.__onContent__ = (function(o)
                                {
                                       return function()
                                       {
                                               window.__onContent__ = function(){};
                                               for( var a = arguments.callee; !a.done; a.done=1 )
                                               ReadyState.onContent(o?o():o)
                                       }
                                })(window.__onContent__);

                if( /WebKit|Khtml/i.test(navigator.userAgent) || (window.opera && parseInt(window.opera.version()) < 9 ) )
                {
						  (function(){
						   /loaded|complete/.test(document.readyState) ?
						    window.__onContent__() :
						    setTimeout(arguments.callee, 1);
						  })();

                } else if( document.addEventListener )
                {
                        document.addEventListener( "DOMContentLoaded", window.__onContent__, false);
                }


                else if(/MSIE/i.test(navigator.userAgent))
                {
                                document.write(ieScript);
                } else {
					Event.observe(window,'load',window.__onContent__);
				}
        }

        ReadyState.isOnContentEnabled = true;
}

ReadyState.enableOnContent();

var getQuerystring = function(key, url, default_)
{
  if (default_==null) default_=""; 
  key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
  if(url == null) url = window.location.href;
  var qs = regex.exec(url);
  if(qs == null)
    return default_;
  else
    return qs[1];
}
