﻿var domLib = {
  version: '$Revision$',
  author: '$Author$', 
  description: 'JS-Sammlung f?r den einfachen DOM-ZUgriff, vor allem ?ber Steuerung der CSS-Klassen',
  emptyFunction: function() {}
}

/* 
oftmals ben?tigt man mehrere Onload-Events f?r Body / Window.
 Dieses einfache Script verhindert das ?berschreiben der Onload-Funktion.
 F?r erweiteres Event-Handling auf andere Objekte siehe Event.js
*/
addOnload = function (func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

// Adding Array.push capability to MacIE (and other)
if(!Array.prototype.push) {
  Array.prototype.push = function(value) {
    this[this.length] = value;
  }
}

/* grab Elements from the DOM by className */
getElementsByClassName = function (className, parNode, tagName) {
  if ( parNode == null ) 	parNode = document;
  if ( tagName == null ) 	tagName = "*";
  var children = parNode.all ? parNode.all : parNode.getElementsByTagName(tagName);
  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;
}

/* quick getElement reference */
function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}

/* Classname helper methods  */
hasClassName = function(element, className) {
    element = $(element);
    if (!element)
      return;
    var a = element.className.split(' ');
    for (var i = 0; i < a.length; i++) {
      if (a[i] == className)
        return true;
    }
    return false;
}

addClassName = function(element, className) {
    element = $(element);
    removeClassName(element, className);
    element.className += ' ' + className;
}

removeClassName = function(element, className) {
    element = $(element);
    if (!element)
      return;
    var newClassName = '';
    var a = element.className.split(' ');
    for (var i = 0; i < a.length; i++) {
      if (a[i] != className) {
        if (i > 0)
          newClassName += ' ';
        newClassName += a[i];
      }
    }
    element.className = newClassName;
}
  

getParentElem = function(elem, tag) {
  if (elem.parentNode){
    return  (elem.parentNode.nodeName.toLowerCase() != tag) ?  getParentElem(elem.parentNode, tag) : elem.parentNode ;
  }
  else {
    return null;
  }
}
   
getStyle = function(obj,styleProp) {
	if (document.defaultView.getComputedStyle) {
		var cssVal = document.defaultView.getComputedStyle(obj,null).getPropertyValue(styleProp);
	}
  else if (obj.currentStyle) {
		var cssVal = eval('obj.currentStyle.' + styleProp);
  }  
	return cssVal;
}    

/* toggle an element's display */
function toggle(obj) {
	var el = document.getElementById(obj);
	if ( el.style.display != 'none' ) {
		el.style.display = 'none';
	}
	else {
		el.style.display = '';
	}
}

/* insert an element after a particular node */
function insertAfter(parent, node, referenceNode) {
	parent.insertBefore(node, referenceNode.nextSibling);
}

/* Array prototype, matches value in array: returns bool */
Array.prototype.inArray = function (value) {
	var i;
	for (i=0; i < this.length; i++) {
		if (this[i] === value) {
			return true;
		}
	}
	return false;
};
