﻿// Various DOM extensions
// 
// Copyright 2008 René Lønstrup @ RLdesign.dk
// 
// May not be used commercially without permission from the author.
// 
// Version: 1.0.0.1
//
//
// CHANGELOG:
// 
// 13-06-2008
//    1.0.0.0 -> 1.0.0.1
//       Extended document.getElementsByClassName() to include a switch for getting childNodes or not

if (!RLdesign) {
	var RLdesign = function() { };
}
if (!RLdesign.Web) {
	RLdesign.Web = function() { };
}
if (!RLdesign.Web.Dom) {
	RLdesign.Web.Dom = function() { };
}
RLdesign.Web.Dom.Extensions = function() {
	// document.getElementsByClassName finder alle elementer med et angivet klassenavn og returnerer et array af elementer
	// eks. var objHej = document.getElementsByClassName('hej');
	if (typeof(document.getElementsByClassName) != "function") {
		document.getElementsByClassName = function(c) {
			var oBase = (arguments.length >= 2) ? arguments[1] : document;
			var oGetChildren = (arguments.length >= 3) ? !!arguments[2] : true;
			var cl = c; //.toLowerCase(); // removed case-insensitivity
			var aE = new Array();
			this.findElements = function() {
				var oCurrent = (arguments.length == 1) ? arguments[0] : oBase;
				var i = 0;
				// klasse sammenligning
				if (oCurrent) {
					if (oCurrent.className) {
						var sCl = oCurrent.className; //.toLowerCase(); // removed case-insensitivity
						if (sCl.indexOf(cl) >= 0) {
							var arrCl = sCl.split(" ");
							for (i = 0; i < arrCl.length; i++) {
								if (arrCl[i] == cl) {
									aE[aE.length] = oCurrent;
									break;
								}
							}
						}
					}
					if (oGetChildren === true) {
						// fortsætter på childNodes
						var children = oCurrent.childNodes;
						for (i = 0; i < children.length; i++) {
							if (children[i].tagName != undefined) this.findElements(children[i]);
						}
					}
				}
			}
			this.findElements();
			return aE;
		}
	}
	return {
		GetElementsByClassName: function(c) {
			var oBase = (arguments.length >= 2) ? arguments[1] : document;
			var oGetChildren = (arguments.length >= 3) ? !!arguments[2] : true;
			var cl = c; //.toLowerCase(); // removed case-insensitivity
			var aE = new Array();
			this.findElements = function() {
				var oCurrent = (arguments.length == 1) ? arguments[0] : oBase;
				var i = 0;
				// klasse sammenligning
				if (oCurrent) {
					if (oCurrent.className) {
						var sCl = oCurrent.className; //.toLowerCase(); // removed case-insensitivity
						if (sCl.indexOf(cl) >= 0) {
							var arrCl = sCl.split(" ");
							for (i = 0; i < arrCl.length; i++) {
								if (arrCl[i] == cl) {
									aE[aE.length] = oCurrent;
									break;
								}
							}
						}
					}
					if (oGetChildren === true) {
						// fortsætter på childNodes
						var children = oCurrent.childNodes;
						for (i = 0; i < children.length; i++) {
							if (children[i].tagName != undefined) this.findElements(children[i]);
						}
					}
				}
			}
			this.findElements();
			return aE;
		}
	}
}();
