var is_ie = ( /msie/i.test(navigator.userAgent) &&
		   !/opera/i.test(navigator.userAgent) );

var is_ie5 = ( is_ie && /msie 5\.0/i.test(navigator.userAgent) );

/// detect Opera browser
var is_opera = /opera/i.test(navigator.userAgent);

/// detect KHTML-based browsers
var is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent);

var currentHidden = new Array();

function hideShowCovered(menuObjs) {
	if (!is_ie && !is_opera)
		return;

	function getVisib(obj){
		var value = obj.style.visibility;
		if (!value) {
			if (document.defaultView && typeof (document.defaultView.getComputedStyle) == "function") { // Gecko, W3C
				if (!is_khtml)
					value = document.defaultView.
						getComputedStyle(obj, "").getPropertyValue("visibility");
				else
					value = '';
			} else if (obj.currentStyle) { // IE
				value = obj.currentStyle.visibility;
			} else
				value = '';
		}
		return value;
	};

//	var tags = new Array("applet", "iframe", "select");
	var tags = new Array("applet", "select");

	// Bei zu vielen betroffenen Tags auf einer Seite wird die Funktionalität 
	// aus Performancegründen abgeschaltet
	var countAffectedTags = 0;
	for (var k = tags.length; k > 0; ) {
		var ar = document.getElementsByTagName(tags[--k]);
		countAffectedTags += ar.length;
	}

	if (countAffectedTags > 100)
		return;

	// Alle anzeigen, die vorher verdeckt waren ...
	for (var k = currentHidden.length; k-- > 0;) {
		cc = currentHidden.pop();

		if (!cc.__msh_save_visibility) {
			cc.__msh_save_visibility = getVisib(cc);
		}
		cc.style.visibility = cc.__msh_save_visibility;
	}

	// ... dann alle verdecken, die von aktuell aufgeklappten Menüs betroffen sind
	for (var j = 0; j < menuObjs.length; j++ ) {
		var el = menuObjs[j];

		var p = getAbsolutePos(el);
		var EX1 = p.x;
		var EX2 = el.offsetWidth + EX1;
		var EY1 = p.y;
		var EY2 = el.offsetHeight + EY1;

		for (var k = tags.length; k > 0; ) {
			var ar = document.getElementsByTagName(tags[--k]);
			var cc = null;

			for (var i = ar.length; i > 0;) {
				cc = ar[--i];

				p = getAbsolutePos(cc);
				var CX1 = p.x;
				var CX2 = cc.offsetWidth + CX1;
				var CY1 = p.y;
				var CY2 = cc.offsetHeight + CY1;

				if (CX1 <= EX2 &&  CX2 >= EX1 && CY1 <= EY2 && CY2 >= EY1) {
					if (!cc.__msh_save_visibility) {
						cc.__msh_save_visibility = getVisib(cc);
					}
					cc.style.visibility = "hidden";
					currentHidden.push(cc);
				}
			}
		}
	}
};

function getAbsolutePos(el) {
	var SL = 0, ST = 0;
	var is_div = /^div$/i.test(el.tagName);
	if (is_div && el.scrollLeft)
		SL = el.scrollLeft;
	if (is_div && el.scrollTop)
		ST = el.scrollTop;
	var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
	if (el.offsetParent) {
		var tmp = getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
};

function mOvr(src){
	var name = navigator.appName
  if (name == "Microsoft Internet Explorer") {
		if (!src.contains(event.fromElement)){ 
			src.style.cursor = 'hand'; 
			src.bgColor = "#2f2fbe"; 
		}
	} 
}

function mOut(src){ 
	var name = navigator.appName
  if (name == "Microsoft Internet Explorer") {
		if (!src.contains(event.toElement)){ 
			src.style.cursor = 'default';
			src.bgColor = "#1717a1"; 
		}
	} 
}

function mClk(src){ 
	var name = navigator.appName
  if (name == "Microsoft Internet Explorer") {
		if(event.srcElement.tagName=='TD') {
			src.children.tags('A')[0].click();
		}
	}
}

function ReturnBack()
{
        var name = navigator.appName
        if (name == "Microsoft Internet Explorer")
                location.href = "javascript:history.back()";
        else
                location.href = "javascript:window.back()";
}

/** löscht bei einen HTML-Link den Parameter href. übergeben wird die ID des Links 
 *  primär da um Doppelklicks beim Submit zu verhindern */
function deleteHTMLLink(id) {
	var obj = document.getElementById(id);
	if (obj) {
		if(obj.tagName == 'A') obj.href='#';
	}
}

function format_number(pnumber,decimals) 
{
  var strNumber = new String(pnumber);
  var arrParts = strNumber.split('.');
  var intWholePart = parseInt(arrParts[0],10);
  var strResult = '';
  if (isNaN(intWholePart))
    intWholePart = '0';
  if(arrParts.length > 1)
  {
    var decDecimalPart = new String(arrParts[1]);
    var i = 0;
    var intZeroCount = 0;
     while ( i < String(arrParts[1]).length )
     {
       if( parseInt(String(arrParts[1]).charAt(i),10) == 0 )
       {
         intZeroCount += 1;
         i += 1;
       }
       else
         break;
    }
    decDecimalPart = parseInt(decDecimalPart,10)/Math.pow(10,parseInt(decDecimalPart.length-decimals-1)); 
    Math.round(decDecimalPart); 
    decDecimalPart = parseInt(decDecimalPart)/10; 
    decDecimalPart = Math.round(decDecimalPart); 

    //If the number was rounded up from 9 to 10, and it was for 1 'decimal' 
    //then we need to add 1 to the 'intWholePart' and set the decDecimalPart to 0. 

    if(decDecimalPart==Math.pow(10, parseInt(decimals)))
    { 
      intWholePart+=1; 
      decDecimalPart="0"; 
    } 
    var stringOfZeros = new String('');
    i=0;
    if( decDecimalPart > 0 )
    {
      while( i < intZeroCount)
      {
        stringOfZeros += '0';
        i += 1;
      }
    }
    decDecimalPart = String(intWholePart) + "." + stringOfZeros + String(decDecimalPart); 
    var dot = decDecimalPart.indexOf('.');
    if(dot == -1)
    {
      decDecimalPart += '.'; 
      dot = decDecimalPart.indexOf('.'); 
    } 
    var l=parseInt(dot)+parseInt(decimals); 
    while(decDecimalPart.length <= l) 
    {
      decDecimalPart += '0'; 
    }
    strResult = decDecimalPart;
  }
  else
  {
    var dot; 
    var decDecimalPart = new String(intWholePart); 

    decDecimalPart += '.'; 
    dot = decDecimalPart.indexOf('.'); 
    var l=parseInt(dot)+parseInt(decimals); 
    while(decDecimalPart.length <= l) 
    {
      decDecimalPart += '0'; 
    }
    strResult = decDecimalPart;
  }
  return strResult;
}

