/*
	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.profile");
dojo.profile = {_profiles:{}, _pns:[], start:function (name) {
	if (!this._profiles[name]) {
		this._profiles[name] = {iters:0, total:0};
		this._pns[this._pns.length] = name;
	} else {
		if (this._profiles[name]["start"]) {
			this.end(name);
		}
	}
	this._profiles[name].end = null;
	this._profiles[name].start = new Date();
}, end:function (name) {
	var ed = new Date();
	if ((this._profiles[name]) && (this._profiles[name]["start"])) {
		with (this._profiles[name]) {
			end = ed;
			total += (end - start);
			start = null;
			iters++;
		}
	} else {
		return true;
	}
}, dump:function (appendToDoc) {
	var tbl = document.createElement("table");
	with (tbl.style) {
		border = "1px solid black";
		borderCollapse = "collapse";
	}
	var hdr = tbl.createTHead();
	var hdrtr = hdr.insertRow(0);
	var cols = ["Identifier", "Calls", "Total", "Avg"];
	for (var x = 0; x < cols.length; x++) {
		var ntd = hdrtr.insertCell(x);
		with (ntd.style) {
			backgroundColor = "#225d94";
			color = "white";
			borderBottom = "1px solid black";
			borderRight = "1px solid black";
			fontFamily = "tahoma";
			fontWeight = "bolder";
			paddingLeft = paddingRight = "5px";
		}
		ntd.appendChild(document.createTextNode(cols[x]));
	}
	for (var x = 0; x < this._pns.length; x++) {
		var prf = this._profiles[this._pns[x]];
		this.end(this._pns[x]);
		if (prf.iters > 0) {
			var bdytr = tbl.insertRow(true);
			var vals = [this._pns[x], prf.iters, prf.total, parseInt(prf.total / prf.iters)];
			for (var y = 0; y < vals.length; y++) {
				var cc = bdytr.insertCell(y);
				cc.appendChild(document.createTextNode(vals[y]));
				with (cc.style) {
					borderBottom = "1px solid gray";
					paddingLeft = paddingRight = "5px";
					if (x % 2) {
						backgroundColor = "#e1f1ff";
					}
					if (y > 0) {
						textAlign = "right";
						borderRight = "1px solid gray";
					} else {
						borderRight = "1px solid black";
					}
				}
			}
		}
	}
	if (appendToDoc) {
		var ne = document.createElement("div");
		ne.id = "profileOutputTable";
		with (ne.style) {
			fontFamily = "Courier New, monospace";
			fontSize = "12px";
			lineHeight = "16px";
			borderTop = "1px solid black";
			padding = "10px";
		}
		if (document.getElementById("profileOutputTable")) {
			dojo.body().replaceChild(ne, document.getElementById("profileOutputTable"));
		} else {
			dojo.body().appendChild(ne);
		}
		ne.appendChild(tbl);
	}
	return tbl;
}};
dojo.profile.stop = dojo.profile.end;

