// OrphanTemplates Class

function OrphanTemplates(nTop) {this._init(nTop);}
OrphanTemplates.prototype = new Object();
OrphanTemplates.prototype.toString = function() {return "OrphanTemplates";};

OrphanTemplates.prototype.removeOrphanBlock = function(dummyArg, node) {
	while(node = node.parentNode) {
		if(api.getAttribute(node, "repeat")) {
			node.parentNode.removeChild(node);
		}
	}
};

OrphanTemplates.prototype.invalidButton = function(sType) {
	alert(sType + " buttons are not supported for orphan blocks.");
	return false;
};

// PRIVATE

OrphanTemplates.prototype._init = function(nTop) {
	var aInputNodes = api.gebt("input", nTop);
	aInputNodes = api.Object2Array(aInputNodes);
	var aButtonNodes = api.gebt("button", nTop);
	aButtonNodes = api.Object2Array(aButtonNodes);
	var aNodes = aInputNodes.concat(aButtonNodes);
	var max = aNodes.length;
	for(var i = 0; i < max; i++) {
		if(api.hasAttribute(aNodes[i], "type")) {
			switch(aNodes[i].getAttribute("type")) {
				case "add":
					api.setHandlers(aNodes[i], "click", this, "invalidButton", "add");
					aNodes[i].setAttribute("templateType", "add");
				break;
				case "remove":
					api.setHandlers(aNodes[i], "click", this, "removeOrphanBlock");
					aNodes[i].setAttribute("templateType", "remove");
				break;
				case "move-up":
					api.setHandlers(aNodes[i], "click", this, "invalidButton", "move-up");
					aNodes[i].setAttribute("templateType", "moveUp");
				break;
				case "move-down":
					api.setHandlers(aNodes[i], "click", this, "invalidButton", "move-down");
					aNodes[i].setAttribute("templateType", "moveDown");
				break;
			}
			var templateType = api.getAttribute(aNodes[i], "templateType");
			if(templateType) {
				if(document.all && aNodes[i].nodeName.toLowerCase() == "input") {
					aNodes[i] = this._fixExpandoInputButton(aNodes[i]);
				}
				else {aNodes[i].setAttribute("type", "button");}
			}
		}
	}
};

OrphanTemplates.prototype._fixExpandoInputButton = function(nOld) {
	api.writeCall("in OrphanTemplates._fixExpandoInputButton");
	var oSkipOver = {type:1, style:1};
	var nNew = api.newNode("button");
	nNew.className = nOld.className;	// because the class attribute is always undefined in IE
	var sAttribute, sValue;
	var aAttributeNames = nOld.attributes;
	for(var i = 0; i < aAttributeNames.length; i++) {
		sAttribute = aAttributeNames[i].name;
		if(oSkipOver[sAttribute]) {continue;}
		sValue = api.getAttribute(nOld, sAttribute);
		if(sValue == "null" || sValue == undefined) {continue;}
		if(typeof sValue != "object") {
			api.setNodeValue(nNew, sAttribute, sValue);
		}
		else if(api.isArray(sValue)) {
			var aTemp = sValue.shallowCopy();
			api.setNodeValue(nNew, sAttribute, aTemp);
		}
	}
	nOld.parentNode.insertBefore(nNew, nOld);
	nOld.parentNode.removeChild(nOld);
	return nNew;
};