/*
 * Copyright (c) 2006, Numcom Software AG. All Rights Reserved.
 */

/***
finds the actual x/y position of an object inside a document
based on http://www.quirksmode.org/js/findpos.html
***/
function findCumulativePos(obj) {
	var curleft = obj.scrollLeft; // we don't want to count them in the final number, so add them first and remove them later -> avoid special case for first element
	var curtop = obj.scrollTop;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft;
			curleft -= obj.scrollLeft;
			curtop += obj.offsetTop;
			curtop -= obj.scrollTop;

			obj = obj.offsetParent;
		}
	}
	else if (obj.x) {
		curtop += obj.y;
		curleft += obj.x;
	}
	return [curleft, curtop];
}
function findCumulativePosInRelationTo(obj, parent)
{
	var curleft = 0;
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent && obj != parent)
		{
			curleft += obj.offsetLeft;
			curleft -= obj.scrollLeft;
			curtop += obj.offsetTop;
			curtop -= obj.scrollTop;

			obj = obj.offsetParent;
		}
	}
	else if (obj.x) {
		curtop += obj.y;
		curleft += obj.x;
	}
	return [curleft, curtop];
}

/***
adds or removes class names from dom elements.
based on robertnyman.com
***/
function addClassName(domelement, classname){
	var oldclassname = domelement.className;
	if(!new RegExp(classname, "i").test(oldclassname)){
		domelement.className = oldclassname + ((oldclassname && oldclassname.length > 0)? " " : "") + classname;
	}
}

function removeClassName(domelement, classname){
	var oldclassname = new RegExp((classname + "\\s?"), "i");
	domelement.className = domelement.className.replace(oldclassname, "").replace(/^\s?|\s?$/g, "");
}
function hasClassName(domelement, classname){
	if(domelement.className == classname) return(true);
	if(new RegExp("(^|\\s)" + classname + "(\\s|$)").test(domelement.className)) return(true);
	return(false);
}


/**
 * fixes the height of the textarea while the user is typing
 */
function adjustTextareaHeight(textarea) {
	var orig_rows = textarea.rows;

	// make smaller
	var resized = false;
	while (textarea.scrollHeight < textarea.clientHeight && textarea.rows > 1) {
		textarea.rows -= 1;
		resized = true;
	}

	// make larger
	while (textarea.scrollHeight > textarea.clientHeight) {
		textarea.rows += 1;
		resized = true;
	}

	// redraw if resized
	if (resized) {
		textarea.scrollTop = 0;
	}
}
