/*
	Copyright (c) 2004-2006, The Dojo Foundation
	All Rights Reserved.

	Licensed under the Academic Free License version 2.1 or above OR the
	modified BSD license. For more information on Dojo licensing, see:

		http://dojotoolkit.org/community/licensing.shtml
*/

dojo.provide("dojo.debug.console");
dojo.require("dojo.logging.ConsoleLogger");
if (window.console) {
	if (console.info != null) {
		dojo.hostenv.println = function () {
			if (!djConfig.isDebug) {
				return;
			}
			console.info.apply(console, arguments);
		};
		dojo.debug = dojo.hostenv.println;
		dojo.debugDeep = dojo.debug;
		dojo.debugShallow = function (obj, showMethods, sort) {
			if (!djConfig.isDebug) {
				return;
			}
			showMethods = (showMethods != false);
			sort = (sort != false);
			if (obj == null || obj.constructor == null) {
				return dojo.debug(obj);
			}
			var type = obj.declaredClass;
			if (type == null) {
				type = obj.constructor.toString().match(/function\s*(.*)\(/);
				if (type) {
					type = type[1];
				}
			}
			if (type) {
				if (type == "String" || type == "Number") {
					return dojo.debug(type + ": ", obj);
				}
				if (showMethods && !sort) {
					var sortedObj = obj;
				} else {
					var propNames = [];
					if (showMethods) {
						for (var prop in obj) {
							propNames.push(prop);
						}
					} else {
						for (var prop in obj) {
							if (typeof obj[prop] != "function") {
								propNames.push(prop);
							} else {
								dojo.debug(prop);
							}
						}
					}
					if (sort) {
						propNames.sort();
					}
					var sortedObj = {};
					dojo.lang.forEach(propNames, function (prop) {
						sortedObj[prop] = obj[prop];
					});
				}
				return dojo.debug(type + ": %o\n%2.o", obj, sortedObj);
			}
			return dojo.debug(obj.constructor + ": ", obj);
		};
	} else {
		if (console.log != null) {
			dojo.hostenv.println = function () {
				if (!djConfig.isDebug) {
					return;
				}
				var args = dojo.lang.toArray(arguments);
				console.log("DEBUG: " + args.join(" "));
			};
			dojo.debug = dojo.hostenv.println;
		} else {
			dojo.debug("dojo.debug.console requires Firebug > 0.4");
		}
	}
} else {
	if (dojo.render.html.opera) {
		if (opera && opera.postError) {
			dojo.hostenv.println = opera.postError;
		} else {
			dojo.debug("dojo.debug.Opera requires Opera > 8.0");
		}
	}
}

