/* file name  : lib.js
 * created    : 23.04.2004 12:15:47
 *
 * verschiedene javascript funktionen
 * allgemeine funktionen die nicht produkt- oder dkb-spezifisch sind
 *
 */

/** 
 * einen halbtransparenten div über das gesamte browserfenster blenden, um die ui zu deaktivieren
 * und dem user zu sagen das wir was tun
 * 
 * @param string text der text der in der mitte angezeigt werden soll  
 * @param int alpha deckkraft des überblendeten div in % 
 * @param string onoff ein- oder ausblenden des bitte warten [on|off]
 * @return 
 */
function bitteWarten(text, alpha, onoff)
{
  if (disableBitteWarten == true) {
    return;
  }
  //  dreckig - wenn von event handler (ohne parameter) aufgerufen wird, zu machen
  if(onoff == 'on') {
    // alle selects ausblenden
    formElements = document.getElementsByTagName('SELECT');
    for(i = 0; i < formElements.length; i++) {
      formElements[i].style.visibility = 'hidden';
    }
    
    if(!document.getElementById('bitteWarten')) {
      // den ausblender
      div = document.createElement("DIV");
      div.id = 'bitteWarten';
      document.body.appendChild(div);
      setOpacity(div, alpha);
    }

    // der text mit deko, ohne alphatransparenz
    if(!document.getElementById('bitteWartenText')) {
      div2 = document.createElement("DIV");
      div2.id = 'bitteWartenText';
      div2.innerHTML = text;
      document.body.appendChild(div2);
    }
  } else {
    // alle selects einblenden
    formElements = document.getElementsByTagName('SELECT');
    for(i = 0; i < formElements.length; i++) {
      formElements[i].style.visibility = 'visible';
    }
    
    if(div = document.getElementById('bitteWarten')) {
     document.body.removeChild(div); 
    }
    if(div2 = document.getElementById('bitteWartenText')) {
     document.body.removeChild(div2); 
    }
  }
}

/** 
 * einblenden via event-handler - kann keine parameter übergeben (geht sicher eleganter)
 * @return 
 */
function bitteWartenEin(e) {
  //removeEvent(window, 'focus', bitteWartenWeg);
  text = 'Bitte warten ...';
  alpha = 75;
  onoff = 'on';
  bitteWarten(text, alpha, onoff);
}
/** 
 * ausblenden via event-handler - kann keine parameter übergeben (geht sicher eleganter)
 * @return 
 */
function bitteWartenAus(e) {
  removeEvent(window, 'focus', bitteWartenAus);
  text = '';
  alpha = 0;
  onoff = 'off';
  bitteWarten(text, alpha, onoff);
}

/** 
 * browserunabhängig die transparenz eines DOM-Elements setzen 
 *
 * @param dom-referenz objRef referenz auf das DOM-Element
 * @param int opacityPercent neue deckkraft in prozent [0-100] 
 * @return null
 */
function setOpacity(objRef, opacityPercent) {
	if (objRef.style.MozOpacity < 0.99)
	{
		// newOp = parseFloat(objRef.style.MozOpacity)+0.01;
		objRef.style.MozOpacity = opacityPercent/100;
	}
	else if (objRef.filters)
	{
		//newOp = cur2.filters.alpha.opacity+1;
		objRef.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity="+opacityPercent+")";
	}
	objRef.style.border = '1px solid #333';
	// window.status = Math.round(opacityPercent*100)/100;
}

function createCookie(name, value, days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

/** 
 * browserunabhängig einen event-handler für ein DOM-Element registrieren
 * 
 * @param ele referenz auf das element fur das der handler registiert werden soll (ohne anführungszeichen übergeben)
 * @param ev string das event auf das die func aufgerufen werden soll 
 * @param func funktion die beim eintreten des events auszuführende funktion (ohne anführungszeichen übergeben)
 * @return 
 */
function addEvent(ele, ev, func) {
  if (ele == null) {
    //alert('fehler beim hinzufügen von event-handler:\n event "'+ ev +'", \nfunktion "' + func + '"');
    return false;
  }
  if (document.attachEvent)
  {
    // ie/win
    ele.attachEvent("on"+ev, func);
  }
  else if (document.addEventListener)
  {
    // gecko + w3c
    ele.addEventListener(ev, func, false);
  }
  else
  {
    // one more try - ie5/mac catches this.
    eval("ele.on"+ev+" ="+func);
  }
}

/** 
 * browserunabhängig einen event-handler für ein DOM-Element wieder entfernen
 * 
 * @param ele referenz auf das element fur das der handler registiert werden soll (ohne anführungszeichen übergeben)
 * @param ev string das event auf das die func aufgerufen werden soll 
 * @param func funktion die beim eintreten des events auszuführende funktion (ohne anführungszeichen übergeben)
 * @return 
 */
function removeEvent(ele, ev, func) {
  if (document.detachEvent)
  {
    ele.detachEvent("on"+ev, func);
  }
  else if (document.removeEventListener)
  {
    ele.removeEventListener(ev, func, false);
  }
  else
  {
    // warning not tested
    eval("ele.on"+ev+" = ''");
  }
}

/** 
 * untested!
 * 
 * @param e 
 * @return 
 */
function setPageHeight(e) {
 pageDiv = document.getElementById('page');
 pageDiv.style.border = "1px solid green"; 
}

function focusElement(elRef) {
  //if((lastFocusedElement != false) && (el = document.getElementById(lastFocusedElement))) {
  if(elRef) {
    elRef.scrollIntoView('true');
    //elRef.focus();
    elRef.style.border = '1px solid red';
  } 
}

/** 
 * fenstergröße browserübergreifend feststellen
 * @return 
 */
function getWinSize() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement &&
      ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  size = new Object();
  size.width = myWidth;
  size.height = myHeight;
  return size;
}

function eAlert(e) {
  e = (e) ? e : ((window.event) ? window.event : '');
  eTarget = e.srcElement ? e.srcElement : e.target; 
  /*while(eTarget.nodeType != 1) {
    eTarget = eTarget.parentNode;
  }*/
  txt = 'event: ' + e.type + '\ntarget: ' + eTarget;
  alert(txt);
  //debug = document.getElementById('debug2');
  //debug.innerHTML = txt;
  return txt;
}

function alertError(e) 
{
  alert("Achtung: Es ist ein Javascript Fehler aufgetreten:\n" + e);
  /*
  out = '';
  for (x in e) {
	  out += x + '\n';
  }
  alert(e + '\n' + out);
  */
}

