/*
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.25;

//extension de Prototype pour détecter la version d'IE
if (Prototype.Browser.IE) {
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
        Prototype.BrowserFeatures['Version'] = new Number(RegExp.$1);
//      alert("IE "+Prototype.BrowserFeatures['Version']);
    }
}

/**
 * Si l'élément est un UL, génère un id à partir du lien précédént
 * puis utilise Element::identify() de Prototype (cf http://api.prototypejs.org/dom/element/identify/)
 * 
 * @since 09.11.2010
 * @param element
 * @return string, ID of element
 */
function customIdentify(element){
	if(	element.tagName=="UL" && element.previousSiblings().size()>=1 ){		// si le ul à un frère qui le précède
		var prevSibling = element.previousSiblings()[0];
		if(prevSibling.tagName=="A" && !prevSibling.innerHTML.empty()){
			var id = slug(prevSibling.innerHTML);			// slug(str) défini dans addeo/function.js
			element.writeAttribute('id', id);
		}
	}
	
	return element.identify();
}


function dropliciousShowingUpEffect(element)
{
	// pbm avec effet BlindDown sous IE6/7
	//cf: https://prototype.lighthouseapp.com/projects/8887/tickets/137-effectblinddown-ie67-bug
	//donc on applique pas un effet simple
	
	if (Prototype.Browser.IE && Prototype.BrowserFeatures['Version'] <= 7){
		element.show();
	} else {
		if(!element.visible()){
			new Effect.BlindDown(element, {
				duration: dropliciousShowingUpDuration,
				queue: {
					position: 'end',
					scope: customIdentify(element),
					limit:2
				}
			});
		}
	}
}
 
function dropliciousHidingEffect(element){
	new Effect.BlindUp(element, {
		duration: dropliciousHidingDuration,
		queue: {
			position: 'end',
			scope: customIdentify(element),
			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')){
		
		// 04.11.2010 : modification pour les sous-menu
		if(dropElement.up(1).hasClassName('waitingtohide'))
			dropElement.up(1).removeClassName('waitingtohide');
		
		dropElement.removeClassName('waitingtohide');
	}
}
 
document.observe('dom:loaded', function() {
	$$('a.drops').each(function(name) {
		name.observe('mouseover', linkMouseOver.bindAsEventListener(this));
		name.observe('mouseout', linkMouseOut.bindAsEventListener(this));
	});
	 
	$$('ul.scriptaculously').each(function(name){
		name.observe('mouseover', submenuMouseOver.bindAsEventListener(this));
		name.observe('mouseout', submenuMouseOut.bindAsEventListener(this));
	});
})
