
TB.widget.FoldingList = new function () {
	var A = {wrapClass:"cat", titleClass:"cat-hx", contentClass:"cat-content", expandClass:"open", collapseClass:"close", multiExpand:true};
	this.decorate = function (B, C) {
		B = $(B);
		C = TB.applyIf(C || {}, A);
		var D = {};
		var E = $D.getElementsByClassName(C.titleClass, "*", B);
		D.expandAll = function () {
			E.forEach(D.expand);
		};
		D.collapseAll = function () {
			E.forEach(D.collapse);
		};
		D.expand = function (G) {
			if (!C.multiExpand) {
				E.filter(function (H) {
					var I = TB.dom.getNextSibling(H);
					return !($D.hasClass(I, C.contentClass) && $D.isAncestor(I, G));
				}).forEach(D.collapse);
			}
			$D.addClass(G.parentNode, C.expandClass);
			$D.removeClass(G.parentNode, C.collapseClass);
			var F = TB.dom.getNextSibling(G);
			if ($D.hasClass(F, C.contentClass)) {
				new YAHOO.util.Anim(F, {height:{to:F.scrollHeight}}, 0.25, YAHOO.util.Easing.easeOutStrong).animate();
			}
		};
		D.collapse = function (G) {
			$D.addClass(G.parentNode, C.collapseClass);
			$D.removeClass(G.parentNode, C.expandClass);
			var F = TB.dom.getNextSibling(G);
			if ($D.hasClass(F, C.contentClass)) {
				new YAHOO.util.Anim(F, {height:{to:0}}, 0.25).animate();
			}
		};
		$E.on(E, "click", function (G) {
			var F = $E.getTarget(G);
			if (F === this || $D.isAncestor(this, F) && F.nodeName !== "IMG" && F.nodeName !== "A") {
				D[($D.hasClass(this.parentNode, C.collapseClass)) ? "expand" : "collapse"](this);
				$E.stopEvent(G);
			}
		});
		return D;
	};
};

