/*
 * Simple jQuery logger / debugger.
 * Based on: http://jquery.com/plugins/Authoring/
 * See var DEBUG below for turning debugging/logging on and off.
 *
 * @version   20070111
 * @since     2006-07-10
 * @copyright Copyright (c) 2006 Glyphix Studio, Inc. http://www.glyphix.com
 * @author    Brad Brizendine <brizbane@gmail.com>
 * @license   MIT http://www.opensource.org/licenses/mit-license.php
 * @requires  >= jQuery 1.0.3
 */
// global debug switch ... add DEBUG = true; somewhere after jquery.debug.js is loaded to turn debugging on
var DEBUG = true;
// shamelessly ripped off from http://getfirebug.com/
if (!("console" in window) || !("firebug" in console)){
	var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
	// create the logging div
	jQuery(document).ready(
		function() { $('#DEBUG').append('<ol></ol>');	}
	);
	// attach a function to each of the firebug methods
	window.console = {};
	for (var i = 0; i < names.length; ++i){
		window.console[names[i]] = function(msg){ $('#DEBUG ol').append( '<li>' + msg + '</li>' ); }
	}
}

/*
 * debug
 * Simply loops thru each jquery item and logs it
 */
jQuery.fn.debug = function() {
	return this.each(function() {	$.log(this); });
};

/*
 * log
 * Send it anything, and it will add a line to the logging console.
 * If firebug is installed, it simple send the item to firebug.
 * If not, it creates a string representation of the html element (if message is an object), or just uses the supplied value (if not an object).
 */
jQuery.log = function(message,show){
	// only if debugging is on
	if( window.DEBUG ){
		// if no firebug, build a debug line from the actual html element if it's an object, or just send the string
		var text = message;
		if( !('firebug' in console) ){
			if( typeof(message) == 'object' ) {
        if (typeof message.nodeType !== "undefined") {
          if (message.nodeType == 1) { /* W3C DOM element node */
            text = '&lt;';
            text += message.nodeName.toLowerCase();
            for (var i = 0; i < message.attributes.length; i++) {
              text += ' ' + message.attributes[i].nodeName.toLowerCase() + '="' + message.attributes[i].nodeValue + '"';
            }
            text += '&gt;';
          } else if (message.nodeType == 2) { /* W3C DOM attribute node */
            text += message.nodeName + '="' + message.nodeValue;
          } else if (message.nodeType == 3) { /* W3C DOM text node */
            text += message.nodeValue;
          }
        } else if (typeof message.toJSONString !== "undefined") {
          text = message.toJSONString();
        } else {
        	text = '';
        	$.each(message,function (i,n) {
        		text += $.type(message)+': <font color="#0000FF">'+i+'</font> = <font color="#ff0000">'+n+'</font><br>';
        	});
          //alert(text);
        }
			}
		}
		text += '<hr>';
		if( show ) {
			return text;
		} else {
			console.debug(text);
		}
	}
};

