
// ####################################################################################
// getElementByID
// ####################################################################################

function getElementByID2(aDiv,aID)
{
	if ( aDiv.id == aID ) return aDiv;
	for(var I in aDiv.childNodes)
	{
		var res = getElementByID2(aDiv.childNodes[I],aID);
		if ( res ) return res;
	}
	return false;
}

function getElementByID( aID, aFrom )
{
	if ( aFrom ) return getElementByID2(aFrom, aID);
	return (document.getElementById) ? document.getElementById(aID)
                                      : document.all[aID];
}


// ####################################################################################
// Assing fields & field
// ####################################################################################

function AssignFields(aDiv, aFields)
{	
	if ( !aDiv || !aDiv.childNodes ) return;
	var strID = new String(aDiv.id);
	if ( strID.substr(0,8) == "__field_" )
	{
		var fieldName = strID.substring(8,strID.length);
		if ( aFields[fieldName] ) aDiv.innerHTML = aFields[fieldName];
	}
	if ( aDiv.childNodes )
	{		
		for(var I in aDiv.childNodes)
		{
			AssignFields(aDiv.childNodes[I], aFields);
		}
	}
}

function AssignField(aDiv, aFieldName, aFieldValue)
{
	if ( !aDiv ) return;
	var strID = new String(aDiv.id);
	if ( strID.substr(0,8) == "__field_" )
	{
		var fieldName = strID.substring(8,strID.length);
		if ( fieldName == aFieldName ) aDiv.innerHTML = aFieldValue;
	}
	if ( aDiv.childNodes )
	{	
		for(var I in aDiv.childNodes)
		{
			AssignField(aDiv.childNodes[I], aFieldName, aFieldValue);
		}
	}
}

// ####################################################################################
// Assign Options
// ####################################################################################
function AssignOptions(aDiv, aItemName)
{
	if ( !aDiv ) return;	
	var strID = new String(aDiv.id);
	if ( strID.substr(0,5) == "__opt" )
	{		
		aDiv._itemName = aItemName;
	}
	if ( aDiv.childNodes )
	{
		for(var I in aDiv.childNodes)
		{
			AssignOptions(aDiv.childNodes[I], aItemName);
		}
	}
}

// ####################################################################################
// ShowHideDiv
// ####################################################################################
function ShowDiv(el) { el.style.display = ""; }
function HideDiv(el) { el.style.display = "none"; }
function ShowHideDiv(el) { if ( el.style.display == "" ) HideDiv(el); else ShowDiv(el); }

// ####################################################################################
// Clears
// ####################################################################################
function ClearChildren(el)
{
	while(el.childNodes.length != 0) el.removeChild(el.childNodes.item(0));
}

function ClearForm(aForm)
{
	for(var I in aForm.elements)
	{				
		if ( aForm.elements[I] )
		{
			if ( aForm.elements[I].tagName == "INPUT" && aForm.elements[I].type != "submit" && aForm.elements[I].type != "button" ) aForm.elements[I].value = "";
			if ( aForm.elements[I].tagName == "TEXTAREA" ) aForm.elements[I].value = "";
		}
	}
}


function goLink(link,msg)
{
	var ok = true;
	if (msg) {
		ok = confirm(msg);
	}

	if ( ok ) window.location = link;
}



function setOpacity(el,a)
{
	if ( a == 100 )
	{
		el.style.filter = "";
		el.style.opacity = "";
	}
		else
	{
		el.style.filter = "alpha(opacity=" + a + ")";
		el.style.opacity = "." + a;
	
	}
}

function getAbsPos( o, tl )
{	
	var val = 0;
	
	while ( o && o.parentNode && o.parentNode.nodeName != "body")
	{		
		val += (tl == 'top') ? parseInt( o.offsetTop ) : parseInt( o.offsetLeft );
		o = o.offsetParent;
	}
	
	return val;
}

function getTextValue(el) {

	var i;
	var s;

	s = "";
	for (i = 0; i < el.childNodes.length; i++)
		if (el.childNodes[i].nodeType == document.TEXT_NODE) s += el.childNodes[i].nodeValue;
		else if (el.childNodes[i].nodeType == document.ELEMENT_NODE && el.childNodes[i].tagName == "BR") s += " ";
		else s += getTextValue(el.childNodes[i]);
		
	return s;
}

function compareValues(v1, v2) {
	var f1, f2;
	
	f1 = parseFloat(v1);
	f2 = parseFloat(v2);
	
	if (!isNaN(f1) && !isNaN(f2)) {
		v1 = f1;
		v2 = f2;
	}

	if (v1 == v2) return 0;
	if (v1 > v2) return 1
	return -1;
}

function sortTable(sTBody, col,desc) {

	var oTBody = getElementByID(sTBody);  
	var oldDsply = oTBody.style.display;
	oTBody.style.display = "none";

	var tmpEl;
	var i, j;
	var minVal, minIdx;
	var testVal;
	var cmp;

	for (i = 0; i < oTBody.rows.length - 1; i++) {
	
		minIdx = i;
		if (oTBody.rows[i].cells[col].__textValue) minVal = oTBody.rows[i].cells[col].__textValue;
			else oTBody.rows[i].cells[col].__textValue = minVal = getTextValue(oTBody.rows[i].cells[col]);		
    
		for (j = i + 1; j < oTBody.rows.length; j++) {
			if (oTBody.rows[j].cells[col].__textValue) testVal = oTBody.rows[j].cells[col].__textValue;
				else oTBody.rows[j].cells[col].__textValue = testVal = getTextValue(oTBody.rows[j].cells[col]);		
		
			//testVal = getTextValue(oTBody.rows[j].cells[col]);
			cmp = compareValues(minVal, testVal);
			
			if (desc) cmp = -cmp;
			
			if (cmp > 0) {
				minIdx = j;
				minVal = testVal;
			}
		}
	
		if (minIdx > i) {
			tmpEl = oTBody.removeChild(oTBody.rows[minIdx]);
			oTBody.insertBefore(tmpEl, oTBody.rows[i]);
		}
	}
	
	oTBody.style.display = oldDsply;

	return false;
}

function addEvent(aObj, aName, aFunc, aTmp)
{
	if (aObj.addEventListener)
	{
		aObj.addEventListener(aName,aFunc,aTmp);
	}
		else if ( aObj.attachEvent )
	{
		aObj.attachEvent("on" + aName, aFunc); 
	}
}

function genLink(c,a,p) {
	var res = "index.php?controller=" + c;
	if (a) res += "&action=" + a;
	if (p) {
		for(var I in p) {
			res += "&" + I + "=" + p[I];
		}
	}
	return res;
}

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

