/* DOC CHANGELOG AND REVISIONS */
/* CHANGE 1.1 -- function getInnerText(elm) toegevoegd om de innerText van een element op te halen */
/* CHANGE 1.2 -- function getInnerText(elm) aangepast om de innerText van een element op te halen */
/* CHANGE 1.3 -- JS versies van ColdFusion's URLDecode(inString) en URLEncodedFormat(inString) toegevoegd */
/* CHANGE 1.4 -- getElementsByClassName uitgebreid zodat je vanaf een node kunt zoeken naar specifieke tags */

function createElement(tag,attr){
	var el = document.createElement(tag);
	if(attr!=null) 
		parseAttributes(el,attr);
	return el;
}

function parseAttributes(el,attr){
	for(var i in attr) 
		(i=="className") ? el.className = attr[i] : el.setAttribute(i,attr[i]);
}

function insertText(el,text){
	if (text==null || text=='') 
		return el;
	var DOMText = parseHTML(text);
	if(DOMText.childNodes.length==1 && DOMText.childNodes[0].nodeType==3){
		t = document.createTextNode(DOMText.childNodes[0].nodeValue);
		el.appendChild(t);
	}
	else {
		el.innerHTML += DOMText.innerHTML;
	}
	return el;
}

function setText(el,text){
	el.innerHTML = '';
	return insertText(el,text);
}

function parseHTML(text){
	var div = createElement("DIV");
	div.innerHTML = text;
	return div;
	/*return div.childNodes[0].nodeValue;*/
}

function appendChildren(el, children){
	for(child in children){
		parent.appendChild(child)
	}
	return parent;
}

function getParentByTagName(el,tagName){
	if(typeof el == "string") 
		el = getElementById(el);
	if(!el) 
		return;
	if(el.tagName!=tagName){
		if(el.parentNode) 
			el = getParentByTagName(el.parentNode,tagName);
	}
	return el;
}

getElementsByClassName = function(className, tagName, fromElement) {
  var startNode = fromElement || document;
  var tagFilter = tagName || "*";
  var children = startNode.getElementsByTagName(tagFilter);
  var elements = new Array();
  
  for (var i = 0; i < children.length; i++) {
    var child = children[i];
    var classNames = child.className.split(' ');
    for (var j = 0; j < classNames.length; j++) {
      if (classNames[j] == className) {
        elements.push(child);
        break;
      }
    }
  }
  return elements;
}

function addClass(element, className) {
    if (!hasClass(element, className)) {
        if (element.className) element.className += " " + className;
        else element.className = className;
    }
};

function removeClass(element, className) {
    var regexp = new RegExp("(^|\\s)" + className + "(\\s|$)");
    element.className = element.className.replace(regexp, "$2");
};

function hasClass(element, className) {
    var regexp = new RegExp("(^|\\s)" + className + "(\\s|$)");
    return regexp.test(element.className);
};

/* retrieves all innertext for a given node */
function getInnerText(el){
	var text = (arguments.length==1) ? "" : arguments[1];
	var children = el.childNodes;
	for(var i=0;i<children.length;i++){
		if(children[i].nodeType==3){
			text += children[i].nodeValue
		}
		else {
			if(children[i].nodeType==1){
				text += getInnerText(children[i], text);
			}
		}
	}
	return text;
}

/* retrieves the innerHTML of a given node */
function getInnerHTML(el){
	return el.innerHTML;
}

/* JS versions of ColdFusion's URLEncodedFormat() and URLDecode() */
function URLDecode(inString){
	return unescape(inString);
}

function URLEncodedFormat(inString){
	return escape(inString);
}