/**
* Handy functions
*
* @author Armin Retzko <a.retzko@ads.abian.de>
*
*/



/**
 * Usage:
 * addEvent(evListener[i], "mouseover", mouseOverHandler, true);
 * addEvent(evListener[i], "mouseout", mouseOutHandler, true);
 */
function addEvent(obj, eventType, func, useCaption)
{
	if (obj.addEventListener) {
		obj.addEventListener(eventType, func, useCaption);
		return true;
	} else if (obj.attachEvent) {
		// var retVal = obj.attachEvent("on"+eventType, func);
		// return retVal;
		obj["e"+eventType+func] = func;
		obj[eventType+func] = function(){obj["e"+eventType+func](window.event);};
		obj.attachEvent("on"+eventType, obj[eventType+func]);
		//if ( useCaption ) {
		//	window.event.cancelBubble = true;
		//}
		return true;
	} else {
		return false;
	}
}



/**
 * Returns an array of DOM nodes having a given class and tag name
 */
document.getElementsByClassAndTagName = function (className, tagName) {
	var elements = new Array();
	var tagElements = document.getElementsByTagName(tagName);
	for (var i = 0; i < tagElements.length; i++ ) {
		if ( tagElements[i].className.indexOf(className) != -1 ) {
			elements[elements.length] = tagElements[i];
		}
	}
	return elements;
}

/**
 * Returns true if a DOM node is child of a DOM node with the given class name
 */
function isChildOfNodeWithClassName( parentNodeClass, childObj ) {
	var r = false;
	while ( childObj.parentNode.tagName.toLowerCase() != 'html'
	|| childObj.parentNode.tagName.toLowerCase() != 'body'
	|| childObj.parentNode.tagName.toLowerCase() != 'head' ) {
		if ( childObj.parentNode.className && childObj.parentNode.className.indexOf(parentNodeClass) != -1 ) {
			r = true;
			break;
		} else {
			childObj = childObj.parentNode;
		}
	}
	return r;
}

/**
 * Returns true if a DOM node is child of another DOM node
 */
function isChildOfNode( parentNodeObj, childNodeObj ) {
	var r = false;
	while ( childNodeObj.parentNode.tagName.toLowerCase() != 'html'
	|| childNodeObj.parentNode.tagName.toLowerCase() != 'body'
	|| childNodeObj.parentNode.tagName.toLowerCase() != 'head' ) {
		if ( childNodeObj.parentNode == parentNodeObj ) {
			r = true;
			break;
		} else {
			childNodeObj = childNodeObj.parentNode;
		}
	}
	return r;
}



/**
 * Returns an array of child nodes of a given DOM node having a given class and tag name
 */
function getChildrenByClassAndTagName(parentNodeObj, childClassName, childTagName) {
	var children = new Array();
	var elements = document.getElementsByClassAndTagName(childClassName, childTagName);
	for ( var i = 0; i < elements.length; i++ ) {
		if ( isChildOfNode(parentNodeObj, elements[i]) ) {
			children[children.length - 1] = elements[i];
		}
	}
	return children;
}




/**
 * Returns the absolute position of a given DOM node,
 * regardless if it's ancestors are positioned or not
 */
function calcAbsPosOfObj(obj) {
	var absPos = new Array();
	absPos['x'] = obj.offsetLeft;
	absPos['y'] = obj.offsetTop;
	while (obj.offsetParent) {
		absPos['x'] = absPos['x'] + obj.offsetParent.offsetLeft;
		absPos['y'] = absPos['y'] + obj.offsetParent.offsetTop;
		obj = obj.offsetParent;
	}
	return absPos;
}


/**
 * Creates a new CSS node
 */
function CssNode() {
	this.cssFile = '';
	this.loadCssFile = loadCssFile;
}

	function loadCssFile() {
		var cssFile = CSS_PATH + this.cssFile;

		var cssNode = document.createElement('link');
		cssNode.rel = 'stylesheet';
		cssNode.type = 'text/css';
		cssNode.media = 'screen';
		cssNode.href  = cssFile;
		document.getElementsByTagName('head')[0].appendChild(cssNode);
	}



/**
 * Creates a new SCRIPT node
 */
function ScriptNode() {
	this.scriptFile = '';
	this.loadScriptFile = loadScriptFile;
}

	function loadScriptFile() {
		var scriptFile = SCRIPT_PATH + this.scriptFile;

		var scriptNode = document.createElement('script');
		scriptNode.type = 'text/javascript';
		scriptNode.src  = scriptFile;
		document.getElementsByTagName('head')[0].appendChild(scriptNode);
	}


/**
 * returns Internet Explorer Version String
 */

function getExplorerVersion() {
	var ieVersionString = navigator.appVersion;
	var ieVersionPattern = /MSIE\s*(\d+\.\d+)/;
	if (ieVersionPattern.test(ieVersionString))
	{
		ieVersionPattern.exec( ieVersionString );
		reg = RegExp.$1.substring( 0,3 );
	}
	else
	{
		reg = '';
	}
	return reg;
}


