// TemplateCollection Class

function TemplateCollection(nTop, bSkipOrphans) {this._init(nTop, bSkipOrphans);}
TemplateCollection.prototype = new Object();
TemplateCollection.prototype.toString = function() {return "TemplateCollection";};
TemplateCollection.prototype._init = function(nTop, bSkipOrphans) {
	api.writeCall("in TemplateCollection._init");
	nTop = nTop ? nTop : api.gebt("body")[0];
	var oTemplateNodes = new Object();
	var oTemplateButtonNodes = new Object();
	this._findTemplates(nTop, oTemplateNodes, oTemplateButtonNodes);
	var aBlocks;
	this.oTemplates = new Object();
	var currentNode, aCurrentButtons;
	for(var templateId in oTemplateNodes) {
		currentNode = oTemplateNodes[templateId];
		aCurrentButtons = oTemplateButtonNodes[templateId];
		this.oTemplates[templateId] = new Template(currentNode, aCurrentButtons);
	}
	if( ! bSkipOrphans) {this.orphans = new OrphanTemplates(nTop);}
};

TemplateCollection.prototype._findTemplates = function(node, oTemplates, oButtons) {
	api.writeCall("in TemplateCollection._findTemplates: node: " + node.nodeName);
	if(this._isTemplate(node)) {oTemplates[node.id] = node;}
	else if(this._isTemplateButton(node)) {
		if(! oButtons[node.getAttribute("template")]) {
			oButtons[node.getAttribute("template")] = new Array();
		}
		oButtons[node.getAttribute("template")].push(node);
	}
	else if(node.hasChildNodes()) {
		// convoluted hack because IE chokes on text in debug div
		if(node.id) {
			if(node.id != "debug") {this._findTemplates(node.firstChild, oTemplates, oButtons);}
		}
		else {
			this._findTemplates(node.firstChild, oTemplates, oButtons);
		}
	}
	if(node.nextSibling) {
		this._findTemplates(node.nextSibling, oTemplates, oButtons);
	}
};

TemplateCollection.prototype._isTemplate = function(node) {
	api.writeCall("in TemplateCollection._isTemplate");
	if(api.getAttribute(node, "repeat") == "template") {return true;}
	return false;
};

TemplateCollection.prototype._isTemplateButton = function(node) {
	api.writeCall("in TemplateCollection._isTemplateButton");
	if(api.hasAttribute(node, "template")) {return true;}
	return false;
};

