/*
* @name         DOM Manipulation Tool
* @description  Un-obtrusive JavaScript tool for DOM manipulation
* @author       Scott Lewis
* @date         October 10, 2008
* @version      0.0.1
*/

var DomTool = function() {};

DomTool.prototype.get_by_id = function(id) {
    return document.getElementById(id);
};

DomTool.prototype.add = function(tag, attrs, cdata) {
	
};

DomTool.prototype.remove = function(element) {
    element.parentNode.removeChild(element);
};

DomTool.prototype.append = function(parent, tag, attrs, cdata) {
    parent.appendChild(this.create(tag, attrs, cdata));
};

DomTool.prototype.after = function(newElement, targetElement) {
	var parent = targetElement.parentNode;
	if (parent.lastchild == targetElement) {
		return parent.appendChild(newElement);
	} 
	else {
		return parent.insertBefore(newElement, targetElement.nextSibling);
	}
};

DomTool.prototype.clone = function(node) {
    return node.cloneNode(true);
};

DomTool.prototype.create = function(tag, attrs, cdata) {
    var element = document.createElement(tag);
	for (key in attrs) {
		element.setAttribute(key, attrs[key]);
	}
	if (cdata != undefined) {
	    element.appendChild(document.createTextNode(cdata));
	}
	return element;
};

DomTool.prototype.html = function(element, str) {
   if (typeof(str) != undefined) {
       element.innerHTML = str;
   }
   else {
       return element.innerHTML;
   }
};

DomTool.prototype.text = function(element, str) {
    if (element == undefined) return null;
    if (str != undefined) {
        if (element.innerContent != undefined) {
            element.innerContent = str;
        }
        else {
            element.innerText = str;
        }
    }
    else {
        for (var i=0; i<element.childNodes.length; i++) {
            if (element.childNodes[i].nodeType == 3) {
                return element.childNodes[i].nodeValue;
            }
        }
        return "";
    }
};

DomTool.prototype.findParentByNodeName = function(node, nodeToFind) {
    var max = 5;
    var n = 0;
    var newNode = node;
    while (newNode.nodeName != nodeToFind && n < max) {
        newNode = newNode.parentNode;
        n++;
    }
    return newNode;
};

/*
* Add the functionality of this tool 
* to the base ScriptHelper Object
*/

Helper.extend(DomTool);