var DDSPEED = 10;
var DDTIMER = 15;
var OFFSET = -2;
var ZINT = 300;

dom.event.addEventListener(window, 'load', flyoutInit);

function flyoutInit(){
  var oneFOheader = "";
  var oneFOcontent = "";
  var flyouts = document.getElementsByClassName('flyout');
  for(var i = 0; i < flyouts.length; i++){
    oneFOheader = flyouts[i].getElementsByTagName("dt")[0];
    oneFOcontent = flyouts[i].getElementsByTagName("dd")[0];
    var base = oneFOcontent.getAttribute('id').split('-')[0];
    dom.event.addEventListener( oneFOheader, 'mouseover', foMenu(base,1) );
    dom.event.addEventListener( oneFOheader, 'mouseout', foMenu(base,-1) );
    dom.event.addEventListener( oneFOcontent, 'mouseover', focancelHide(base) );
    dom.event.addEventListener( oneFOcontent, 'mouseout', foMenu(base,-1) );
  }
}

function foMenu(id,d){
  return function(ev){
    var h = document.getElementById(id + '-ddheader');
    var c = document.getElementById(id + '-ddcontent');
    clearInterval(c.timer);
    if(d == 1){
      clearTimeout(h.timer);
      c.style.display = 'block';
      if(c.maxh && c.maxh <= c.offsetHeight){return}
      else if(!c.maxh){
        c.style.left = (h.offsetWidth + OFFSET) + 'px';
        c.style.height = 'auto';
        c.maxh = c.offsetHeight;
        c.style.height = '0px';
      }
      ZINT = ZINT + 1;
      c.style.zIndex = ZINT;
      c.timer = setInterval(function(){foSlide(c,1)},DDTIMER);
    }else{
      h.timer = setTimeout(function(){foCollapse(c)},50);
    }
  }
}

function foCollapse(c){
  c.timer = setInterval(function(){foSlide(c,-1)},DDTIMER);
}

function focancelHide(id){
  return function(ev){
    var h = document.getElementById(id + '-ddheader');
    var c = document.getElementById(id + '-ddcontent');
    clearTimeout(h.timer);
    clearInterval(c.timer);
    if(c.offsetHeight < c.maxh){
      c.timer = setInterval(function(){foSlide(c,1)},DDTIMER);
    }
  }
}

function foSlide(c,d){
  var currh = c.offsetHeight;
  var dist;
  if(d == 1){
    dist = Math.round((c.maxh - currh) / DDSPEED);
  }else{
    dist = Math.round(currh / DDSPEED);
  }
  if(dist <= 1 && d == 1){
    dist = 1;
  }
  c.style.height = currh + (dist * d) + 'px';
  c.style.opacity = currh / c.maxh;
  c.style.filter = 'alpha(opacity=' + (currh * 100 / c.maxh) + ')';
  if(currh > (c.maxh - 2) && d == 1){
    clearInterval(c.timer);
  }else if(dist < 1 && d != 1){
    clearInterval(c.timer);
    c.style.display = 'none';
  }
}

