//send any questions/bugs/issues to sdailey@schoolfusion.com
//please only change options where this plugin is called - not directly in this file.
(function($){
    $.fn.ddAnimate = function(options){
        var defaults = {
                hideDelay: 350,
                target: this.find('> .dropDown'),
                targetSub: this.find('li .dropDown'),
                inSpeed: 500,
                outSpeed: 500,
                slide: false,
                scale: false,
                sfHover: true //if this is true, make sure $_ui->removeIE6CSSfix=true; is in the main php
            },         
            settings = $.extend(defaults, options);

		var msie6 = ($.browser.msie && $.browser.version.substr(0,1)<7), hideUl, hideUl2,
			msie8 = ($.browser.msie && $.browser.version.substr(0,1)>7),
			subActive = false;
		
	    if (msie8) { this.find('li').css({ filter: 'inherit' }); }

		if (settings.sfHover === true && msie6) {
			var $tnlid = $('#nav .dropDown');
			for (var i=0, ii=$tnlid.length; i < ii; i++) {
				$($tnlid[i]).bind('mouseenter', function() {
					$(this).addClass('sfhover');
					$(this).find('> a').addClass('sfhovera');
				}).bind('mouseleave', function() {
					$(this).removeClass('sfhover');
					$(this).find('> a').removeClass('sfhovera');
				});
			}
		}
		
		function showUl(li) {
			var $tul = $(li).find('> ul'),				
				$tulSib = $tul.parent('li').parent('ul').find('ul');

			if ( $tul.is(':visible' || ':animated') ) {
				$tulSib.stop(true, true).hide();
				$tul.stop(true, true).show();
			} else {
				$tulSib.stop(true, true).hide();
	            if ( settings.slide === true ) {
					$tul.stop(true, true).slideDown(settings.inSpeed);
	            } else if ( settings.scale === true ) {
					$tul.stop(true, true).show(settings.inSpeed);
	            } else {
					$tul.stop(true, true).fadeIn(settings.inSpeed);
	            }
           }
		}
				
		settings.target.bind('mouseenter', function() {
			var $tul = $(this).find('> ul');
						
			if ( $tul.is(':visible') && subActive === true ) {
	            clearTimeout(hideUl);
			} else {
	            clearTimeout(hideUl);
	            showUl(this);
			}
		}).bind('mouseleave', function() {
			var $tul = $(this).find('> ul'),
				$tulSib = $tul.parent('li').parent('ul').find('ul');
				
	        hideUl = setTimeout(function() {
		            if ( settings.slide === true ) {
						$tul.slideUp(settings.outSpeed);
						$tulSib.slideUp(settings.outSpeed);
		            } else if ( settings.scale === true ) {
						$tul.hide(settings.outSpeed);
						$tulSib.hide(settings.outSpeed);
		            } else {
						$tul.fadeOut(settings.outSpeed);
						$tulSib.fadeOut(settings.outSpeed);
		            }
	        }, settings.hideDelay);
		});
		
		settings.targetSub.bind('mouseenter', function() {
            subActive = true;
            clearTimeout(hideUl2);
            showUl(this);
		}).bind('mouseleave', function() {
			var $tul = $(this).find('> ul'),
				$tulSib = $tul.parent('li').parent('ul').find('ul');
				
	        hideUl2 = setTimeout(function() {
		            subActive = false;
		            if ( settings.slide === true ) {
						$tul.slideUp(settings.outSpeed);
						$tul.slideUp(settings.outSpeed);
		            } else if ( settings.scale === true ) {
						$tul.hide(settings.outSpeed);
						$tulSib.hide(settings.outSpeed);
		            } else {
						$tul.fadeOut(settings.outSpeed);
						$tulSib.fadeOut(settings.outSpeed);
		            }
	        }, settings.hideDelay);
		});
    };
})(jQuery);

