

/**
* blender.js
*
* Ein- und Ausblenden von HTML-Objekten
* Bestandteil der SCREAMDESIGN Basis-Bibliotheken; Alle Rechte vorbehalten.
* @package Common
* @copyright 2007 SCREAMDESIGN GmbH
* @link http://www.screamdesign.de/
* @version $Id: blender.js 32 2008-09-09 15:52:42Z dmartin $
*/

var blenderCycles = 50;
var blenderDuration = 300;

function setOpacity(id, value)
{
   var element = document.getElementById(id);
   value = Math.max(0, Math.min(Math.round(value * 100) / 100, 1));
   element.style.opacity = value;
   element.style.MozOpacity = value;
   element.style.KhtmlOpacity = value;
   element.style.filter = 'Alpha(opacity=' + Math.max(0, Math.min(Math.round(value * 100), 100)) + ')';
}

function getBlenderInstance(id)
{
   var element = document.getElementById(id);
   return (element.blenderInstance > 0) ? element.blenderInstance : 1;
}

function blend(id, opacity, initOpacity)
{
   var element = document.getElementById(id);
   var tag = element.nodeName.toLowerCase();
   var currentOpacity;
   var i;
   if (element.blenderInstance > 0)
   {
      i = ++element.blenderInstance;
      currentOpacity = element.style.opacity;
   } else {
      i = 1;
      element.blenderInstance = 1;
      currentOpacity = initOpacity;
      setOpacity(id, currentOpacity);
   }
   var start = Math.round(currentOpacity * blenderCycles);
   var end = Math.round(opacity * blenderCycles);
   var delta = blenderDuration / blenderCycles;
   var t = 0;

   if (start != end)
   {
	  if ((tag == 'tr') && (!navigator.userAgent.match(/MSIE/i)))
	     element.style.visibility = 'visible';
	  else
	     element.style.display = 'block';
   }

   if (start > end)
   {
      for (var c = start; c >= end; c--)
      setTimeout('if (getBlenderInstance("'+id+'") == '+i+') setOpacity("'+id+'",'+(c/blenderCycles)+');', Math.round(delta*(t++)));
   } else if (start < end) {
      for (var c = start; c <= end; c++)
      setTimeout('if (getBlenderInstance("'+id+'") == '+i+') setOpacity("'+id+'",'+(c/blenderCycles)+');', Math.round(delta*(t++)));
   }
   if (opacity == 0)
   {
      if ((tag == 'tr') && (!navigator.userAgent.match(/MSIE/i)))
         setTimeout('if (getBlenderInstance("'+id+'") == '+i+') document.getElementById("'+id+'").style.visibility = "collapse";', Math.round(delta*t));
      else
         setTimeout('if (getBlenderInstance("'+id+'") == '+i+') document.getElementById("'+id+'").style.display = "none";', Math.round(delta*t));
   }
}
