/*
	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.lang.repr");
dojo.require("dojo.lang.common");
dojo.require("dojo.AdapterRegistry");
dojo.require("dojo.string.extras");
dojo.lang.reprRegistry = new dojo.AdapterRegistry();
dojo.lang.registerRepr = function (name, check, wrap, override) {
	dojo.lang.reprRegistry.register(name, check, wrap, override);
};
dojo.lang.repr = function (obj) {
	if (typeof (obj) == "undefined") {
		return "undefined";
	} else {
		if (obj === null) {
			return "null";
		}
	}
	try {
		if (typeof (obj["__repr__"]) == "function") {
			return obj["__repr__"]();
		} else {
			if ((typeof (obj["repr"]) == "function") && (obj.repr != arguments.callee)) {
				return obj["repr"]();
			}
		}
		return dojo.lang.reprRegistry.match(obj);
	}
	catch (e) {
		if (typeof (obj.NAME) == "string" && (obj.toString == Function.prototype.toString || obj.toString == Object.prototype.toString)) {
			return obj.NAME;
		}
	}
	if (typeof (obj) == "function") {
		obj = (obj + "").replace(/^\s+/, "");
		var idx = obj.indexOf("{");
		if (idx != -1) {
			obj = obj.substr(0, idx) + "{...}";
		}
	}
	return obj + "";
};
dojo.lang.reprArrayLike = function (arr) {
	try {
		var na = dojo.lang.map(arr, dojo.lang.repr);
		return "[" + na.join(", ") + "]";
	}
	catch (e) {
	}
};
(function () {
	var m = dojo.lang;
	m.registerRepr("arrayLike", m.isArrayLike, m.reprArrayLike);
	m.registerRepr("string", m.isString, m.reprString);
	m.registerRepr("numbers", m.isNumber, m.reprNumber);
	m.registerRepr("boolean", m.isBoolean, m.reprNumber);
})();

