/*
droplicious v.1.0 Created May 21, 2009
Copyright @2009 http://headfirstproductions.ca Author: Darren Terhune
Contributors: Jan Sovak http://canada-jack.com, Mason Meyer http://www.masonmeyer.com
This software is licensed under the Creative Commons Attribution 2.5 Canada License
<http://creativecommons.org/licenses/by/2.5/ca//>
*/

var dropliciousShowingUpDuration = 0.3;
var dropliciousHidingDuration = 0.1;
var dropliciousHideDelay = 0;

function dropliciousShowingUpEffect(element){
  if(!element.visible()){
    new Effect.BlindDown(element, {
      duration: dropliciousShowingUpDuration,
      queue: {
        position: 'end',
        scope: element.identify(),
        limit:2
      }
    });
  }
}

function dropliciousHidingEffect(element){
  new Effect.BlindUp(element, {
    duration: dropliciousHidingDuration,
    queue: {
      position: 'end',
      scope: element.identify(),
      limit: 2
    }
  });
}

function setDelayedHide(element){
  element.addClassName('waitingtohide')
  if(!element.hasClassName('hidding')){
    if (!element.hasClassName('hiddingtimerset')){
      element.addClassName('hiddingtimerset');
      setTimeout(function(){ delayedHide(element); }, dropliciousHideDelay * 1000);
    }
  }
}
function delayedHide(dropElement){
  dropElement.removeClassName('hiddingtimerset');
  if (dropElement.hasClassName('waitingtohide')){
    dropliciousHidingEffect(dropElement);
    dropElement.addClassName('hidding');
    setTimeout(
    function(){
      dropElement.removeClassName('waitingtohide');
      dropElement.removeClassName('hidding');
      dropElement.removeClassName('active');
    }, dropliciousHidingDuration * 1000);
  }
}

function linkMouseOut(id){
  var dropElement = id.element().next();
  if (dropElement && dropElement.hasClassName('active')){
    setDelayedHide(dropElement);
  }
}

function linkMouseOver(id){
  var dropElement = id.element().next();
  if(dropElement){
    if (!dropElement.hasClassName('hidding')){
      dropElement.removeClassName('waitingtohide');
  }
  if (!dropElement.hasClassName('active')){
    dropElement.addClassName('active');
    dropliciousShowingUpEffect(dropElement);
  }
}
}
function submenuMouseOut(event){
  var dropElement = event.findElement("ul");
  if (dropElement && dropElement.hasClassName('active')){
      setDelayedHide(dropElement);
  }
}

function submenuMouseOver(event){
  var dropElement = event.findElement("ul");
  if (dropElement && !dropElement.hasClassName('hidding')){
    dropElement.removeClassName('waitingtohide');
  }
}

document.observe('dom:loaded', function() {
  $$('a.drops').each(function(name) {
    name.observe('mousemove', linkMouseOver.bindAsEventListener(this));
    name.observe('mouseout', linkMouseOut.bindAsEventListener(this));
  });

  $$('ul.scriptaculously').each(function(name){
    name.observe('mousemove', submenuMouseOver.bindAsEventListener(this));
    name.observe('mouseout', submenuMouseOut.bindAsEventListener(this));
  });
})