var ELEMENT_NODE = 1; 
var ATTRIBUTE_NODE = 2; 
var TEXT_NODE = 3; 
var CDATA_SECTION_NODE = 4; 
var ENTITY_REFERENCE_NODE = 5;
var ENTITY_NODE = 6;
var PROCESSING_INSTRUCTION_NODE = 7;
var COMMENT_NODE = 8;
var DOCUMENT_NODE = 9;
var DOCUMENT_TYPE_NODE = 10;
var DOCUMENT_FRAGMENT_NODE = 11;
var NOTATION_NODE = 12;

function addHandlerAndEvent(object, theEvent, handler)	{
	if (object.addEventListener)	{
		object.addEventListener(theEvent, handler, true);
		return true;
	} 
	else if (object.attachEvent) 	{
		return object.attachEvent("on" + theEvent, handler);
	}
}
	
function RemoveTextNodes(NODE,RECURSIVE)	{
	var ChildNode;
	for (var i=NODE.childNodes.length-1; i>=0; i--)	{
		ChildNode = NODE.childNodes[i];
		if (ChildNode.nodeType == TEXT_NODE && !(/\S/.test(ChildNode.nodeValue)))	{
			NODE.removeChild(ChildNode);
		}
		else if (RECURSIVE && ChildNode.hasChildNodes())	{
			RemoveTextNodes(ChildNode,true);
		}
	}
}

//create and load the DOM doc
function createDomDoc(FILE,ASYNC)
{
	var Doc;
	try
	{
		Doc = document.implementation.createDocument("", "", null);
	}
	catch (exc)
	{
		Doc = new ActiveXObject("Microsoft.XMLDOM"); 
	}
	if (typeof ASYNC != "undefined") Doc.async=ASYNC;
	Doc.load(FILE);
	return Doc;
}


//Creates a child element in the DOC DOM and appends it to PARENT

function AddChild(DOC, PARENT, CHILD, CHILDTEXT, ATTRIBUTES)
{
	var	ChildElement;
	if (typeof(CHILD) == "string")
	//The typeof() operator will return only these values: 
	//"number" "string" "boolean" "function" "undefined" "object"
	{
		ChildElement = DOC.createElement(CHILD);
	}
	else
	{
		ChildElement = CHILD;
	}
	
	if (typeof CHILDTEXT != "undefined" && CHILDTEXT != null)
	{
		var ChildText = DOC.createTextNode(CHILDTEXT);
		ChildElement.appendChild(ChildText);
	}
	
	if (typeof ATTRIBUTES != "undefined")
	{
		var Attributes = ATTRIBUTES;
		for (Att in Attributes)
		{
			ChildElement.setAttribute(Att,Attributes[Att]);	
		}
	}
	
	PARENT.appendChild(ChildElement);
	return ChildElement;
}


function RemoveAllChildren(PARENT)
{	
	while (PARENT.hasChildNodes())
	{
		PARENT.removeChild(PARENT.childNodes[0]);
	}
}