
/* 

Javascript mouseover/out opacity fades

*/
if (document.getElementById && document.getElementsByTagName) {
if (window.addEventListener) window.addEventListener('load', initFades, false);
else if (window.attachEvent) window.attachEvent('onload', initFades);
}

function initFades() {

  //  Get elements with class="fader":
    var animElements = getElementsByClass("fader");
    for(var i=0; i<animElements.length; i++) {
      animElements[i].onmouseover = fadeOpacMem;
      animElements[i].onmouseout = fadeOpacRestore;
    // set default opacity of each element:
      animElements[i].currentOpac = globalMinOpac;
      setOpacity(animElements[i], animElements[i].currentOpac);
      }
    
    
    function fadeOpacMem() {
      if (!this.noMouse) {
        if (!this.currentOpac) this.currentOpac = globalMinOpac;
        doOpacFadeMem(this, this.currentOpac, 99, globalFadeInSpd, true);
        }
      }
    
    function fadeOpacRestore() {
      if (!this.noMouse) {
        if (!this.currentOpac) return;  //avoids error if onmouseout occurs before onmouseover
        doOpacFadeMem(this, this.currentOpac, globalMinOpac, globalFadeOutSpd, true);
        }
      }
    
  }

//*****************************
function doOpacFadeMem(elem, startOpac, endOpac, stepsize, bEaseInOut) {
  if (elem.opacFadeMemStep) window.clearInterval(elem.opacFadeMemStep);
  elem.opacFadeMemStep = window.setInterval(
    function() {
      
      if (bEaseInOut != true) {
          
          if (endOpac > startOpac) {
              elem.currentOpac += stepsize;
            } else {
              elem.currentOpac -= stepsize;
          }
          
        } else {
          
          elem.currentOpac += getEaseInOut(startOpac, endOpac, elem.currentOpac, stepsize);
          
      }
      
      if (endOpac > startOpac) {
          // elem.currentOpac += stepsize;
          // elem.currentOpac += getEaseInOut(startOpac, endOpac, elem.currentOpac, stepsize);
          
          if (elem.currentOpac>=endOpac) {
            elem.currentOpac = endOpac;
            window.clearInterval(elem.opacFadeMemStep);
            }
          
          setOpacity(elem, elem.currentOpac);
            
        } else {
          // elem.currentOpac -= stepsize;
          // elem.currentOpac += getEaseInOut(startOpac, endOpac, elem.currentOpac, stepsize);
          
          if (elem.currentOpac<=endOpac) {
            elem.currentOpac = endOpac;
            window.clearInterval(elem.opacFadeMemStep);
            }
          
          setOpacity(elem, elem.currentOpac);
            
        }
        
    }
    ,30)
}


//*********************************

function getEaseInOut(minVal, maxVal, curVal, oldStep) {
  var newStep = 0.001;
  var deltax = 0.001;
  
  if (maxVal > minVal) {
      
      deltax = 1 - ((curVal - minVal) / (maxVal - minVal));
      newStep = oldStep * deltax;
      if (newStep > oldStep) newStep = oldStep;
      if (newStep < (oldStep * 0.1)) newStep = oldStep * 0.1;
      return newStep;
      
    } else {
      
      deltax = (curVal - maxVal) / (minVal - maxVal);
      newStep = oldStep * deltax;
      if (newStep < 0) newStep *= -1;
      if (newStep > oldStep) newStep = oldStep;
      if (newStep < (oldStep * 0.1)) newStep = oldStep * 0.1;
      return -newStep;
      
  }
}


//***********************************

function setOpacity(elem) {
  if (navigator.appName == "Microsoft Internet Explorer") {
      
      elem.filters.alpha.opacity = elem.currentOpac;
      
    } else {
      
      elem.style.MozOpacity = (elem.currentOpac / 100);
  }
}




//***********************************

/* Special thanks to Dustin Diaz 
(http://www.dustindiaz.com/getelementsbyclass/) 
for this absurdly useful function.
*/

function getElementsByClass(searchClass,node,tag) {
  var classElements = new Array();
  if ( node == null )
    node = document;
  if ( tag == null )
    tag = '*';
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
  for (i = 0, j = 0; i < elsLen; i++) {
    if ( pattern.test(els[i].className) ) {
      classElements[j] = els[i];
      j++;
    }
  }
  return classElements;
}



