function getThis(sId)
{
	var oObject;
	oObject = false;
	
	if (document.getElementById) {
		if (document.getElementById(sId)) {
			oObject = document.getElementById(sId);
		}
	}
	
	return oObject;
}

function changeStyle(oElement, sPropertyName, sNewValue)
{
	if (oElement) {
		var oStyle = oElement.style;
		if (isArray(sPropertyName) && isArray(sNewValue) && sPropertyName.length == sNewValue.length) {
			for (var i = 0; i < sPropertyName.length; i++) {
				eval("oStyle." + sPropertyName[i] + " = '" + sNewValue[i] + "'");
			}
		} else {
			eval("oStyle." + sPropertyName + " = '" + sNewValue + "'");
		}
	}
}

function getStyle(oElement, sPropertyName)
{
	var sReturn = false;
	
	if (oElement) {
		oStyle = oElement.style;
		sReturn = eval("oStyle." + sPropertyName);
	}
	
	return sReturn;
}

function getAncestry(oElement, iLevels)
{
	sEvalString = "oElement";
	
	for (var i = 0; i < iLevels; i++) {
		sEvalString += ".parentNode";
	}
	try {
		return eval(sEvalString);
	} catch(oError) {
		return false;
	}
}

var DEBUG_STATE = true;
function debugInfo(sString)
{
	var oDebugger = getThis("debugger");
	if (DEBUG_STATE && oDebugger != false) {
		oDebugger.innerHTML += "<br />" + sString;
	}
}

function startBenchmark()
{
	dStart = new Date().getTime();
}

function endBenchmark()
{
	dEnd = new Date().getTime();
	alert("Elapsed time: " + ((dEnd - dStart)/1000) + " seconds");
}

function isArray() 
{
	if (typeof arguments[0] == 'object') {  
		var criterion = arguments[0].constructor.toString().match(/array/i);
 		return (criterion != null);
	}
	return false;
}

// event attacher
function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Sorry, your browser does not supported this functionality.");
  }
}

function removeEvent(obj, evType, fn, useCapture){
	if (obj.removeEventListener){
    	obj.removeEventListener(evType, fn, useCapture);
  		return true;
  } else if (obj.detachEvent){
  		var r = obj.detachEvent("on"+evType, fn);
    	return r;
  } else {
    	debugInfo("Handler could not be removed");
  }
}