
var undefined;

function DocumentFader() {
  
}   

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DocumentFader._timeOut = undefined;
DocumentFader._timeOutDelay = 100;

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DocumentFader._load = function(event){
 DocumentFader._fadeIn(0);
}   
 

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DocumentFader._unload = function(event){
  //alert('start');
  /*
  var str = '';
  for (var i in event){
    str += i +' = ' + event[i] + '\n';
  }
  var win = window.open();
  var doc = win.document;
  doc.open();
  doc.write(str);
  doc.close();
  */
  DocumentFader.eventStopPropagation(event);
  DocumentFader.eventPreventDefault(event);
  DocumentFader._fadeOut(0, event);  
}    
 

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DocumentFader._fadeIn = function(trans){
  if (DocumentFader._timeOut){
    window.clearTimeout(DocumentFader._timeOut);
  }
  var fadeElem = document.getElementById('documentFader-Facing');
  if (! fadeElem) {
    return;
  }
  if (fadeElem.filters != undefined){
    // IE
    var opValue = parseFloat(100 - parseFloat(trans));
    fadeElem.filters['Alpha']['opacity'] = opValue;
    fadeElem.filters['Alpha']['finishopacity'] = opValue;
    trans += 5;
  } else {
    // Other
    var opValue = parseFloat(1 - parseFloat(trans));
    fadeElem.style.opacity = opValue;
    trans += 0.05;
  }
  if (opValue > 0) {
    var func = function () {DocumentFader._fadeIn(trans)};
    DocumentFader._timeOut = window.setTimeout(func, DocumentFader._timeOutDelay);
    return;
  }
  fadeElem.style.display = 'none';
}    
 

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DocumentFader._fadeOut = function(trans, event){
  DocumentFader.eventStopPropagation(event);
  if (DocumentFader._timeOut){
    window.clearTimeout(DocumentFader._timeOut);
  }
  var fadeElem = document.getElementById('documentFader-Facing');
  if (! fadeElem) {
     return;
  }  
  fadeElem.style.display = 'block';
  var opGrenzwert = 1;
  if (fadeElem.filters != undefined){
    // IE
    opGrenzwert = 100;
    var opValue = parseFloat(0 + parseFloat(trans));
    fadeElem.filters['Alpha']['opacity'] = opValue;
    fadeElem.filters['Alpha']['finishopacity'] = opValue;
    trans += 8;
  } else {
    // Other
    var opValue = parseFloat(0 + parseFloat(trans));
    fadeElem.style.opacity = opValue;
    trans += 0.08;
  }
  if (opValue < opGrenzwert) {
    var func = function () {DocumentFader._fadeOut(trans, event)};
    DocumentFader._timeOut = window.setTimeout(func, DocumentFader._timeOutDelay);
    return;
  }
}  
 

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DocumentFader.init = function(){
  DocumentFader.addEvent('load', window, DocumentFader._load);
  DocumentFader.addEvent('unload', window, DocumentFader._unload);
}  

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DocumentFader.addEvent = function(handler, obj, oneEvent, bol, ieWindow){
  if (arguments.length < 3) {
    focus();
    throw new Error('DocumentFader.addEvent: Falsche Anzahl von Argumenten!');
  }
  if(window.addEventListener){
    // Other
    obj.addEventListener(handler, oneEvent, false);
  } else if(obj.attachEvent){
    // IE
    var win = window;
    if (ieWindow) {
      win = ieWindow;
    }
    obj['e' + handler + oneEvent] = oneEvent;
    obj[handler + oneEvent] = function() { obj['e' + handler + oneEvent] ( win.event ); win.event.cancelBubble = true;};
    obj.attachEvent('on' + handler, obj[handler + oneEvent]);
  }
  return obj;
}

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DocumentFader.removeEvent = function(handler, obj, oneEvent, bol){
  if (arguments.length < 3) {
    focus();                                              
    throw new Error('DocumentFader.removeEvent: Falsche Anzahl von Argumenten!');
  }
  if(window.removeEventListener){
    // Other
    obj.removeEventListener(handler, oneEvent, bol);
  } else if(obj.detachEvent){
    // IE
    obj.detachEvent( "on"+ handler, obj[handler + oneEvent] );
    obj[handler + oneEvent] = undefined;
    obj["e" + handler + oneEvent] = undefined;
  }
  return true;
}

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DocumentFader.eventStopPropagation = function(event){
  if (arguments.length!=1){
    focus();
    throw new Error("DocumentFader:eventStopPropagation: Falsche Anzahl von Argumenten!");
  }
  if (event.stopPropagation){
    // Other
    event.stopPropagation();
  } else {
    // IE
    event.cancelBubble = true;
  }
}

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DocumentFader.eventPreventDefault = function(event){
  if (arguments.length!=1){
    focus();
    throw new Error("DocumentFader:eventPreventDefault: Falsche Anzahl von Argumenten!");
  }
  if (event.preventDefault){
    // Other
    event.preventDefault();
  } else {
    // IE
    event.returnValue = false;
  }
}

