/*
 * Droppy 0.1.2
 * (c) 2008 Jason Frame (jason@onehackoranother.com)
 */

jQuery.fn.droppy = function(options) {
	var $ = jQuery.noConflict();
	  options = $.extend({speed: 250}, {menu:0}, options || {});
  
  this.each(function() {
    
    var root = this, zIndex = 1000;
    
    function getSubnav(ele,show) {
		if(options.menu==1 && show){
			customMenu(ele);
		}
      if (ele.nodeName.toLowerCase() == 'li') {
        var subnav = $('> ul', ele);
        return subnav.length ? subnav[0] : null;
      } else {
        return ele;
      }
    }
    
    function getActuator(ele) {
      if (ele.nodeName.toLowerCase() == 'ul') {
        return $(ele).parents('li')[0];
      } else {
        return ele;
      }
    }
    
    function hide(t) {
    	if(options.menu==1){
    		$.data(t,'showMenu',false);
    	}
	    var subnav = getSubnav(t,false);
	    if (!subnav) return;
	    $.data(subnav, 'cancelHide', false);
	    setTimeout(function() {
	    	if (!$.data(subnav, 'cancelHide')) {
	          $(subnav).slideUp(options.speed);
	        }
	    }, 250);
    }
  
    function show(t) {
    	if(options.menu==1){
    		$.data(t,'showMenu',true);
    		setTimeout(function(){
    			if($.data(t,'showMenu')){
    				var subnav = getSubnav(t,true);
    				if (!subnav) return;
    				$.data(subnav, 'cancelHide', true);
    				$(subnav).css({zIndex: zIndex++}).slideDown(options.speed);
    				if (t.nodeName.toLowerCase() == 'ul') {
    					var li = getActuator(this);
    					$(li).addClass('hover');
    					$('> a', li).addClass('hover');
    					
    				}
    			}
    		},300);
    	} else {
    		var subnav = getSubnav(t,true);
			if (!subnav) return;
			$.data(subnav, 'cancelHide', true);
			$(subnav).css({zIndex: zIndex++}).slideDown(options.speed);
			if (t.nodeName.toLowerCase() == 'ul') {
				var li = getActuator(this);
				$(li).addClass('hover');
				$('> a', li).addClass('hover');
			}
    	}
    }
    
	function customMenu(ele){
		if($(ele).attr("id")=="") return;
		n=$(ele).find("ul").length;
		if(n==0){
			$(ele).addClass("loading");
			$.ajax({
				url:"/apages/jquery.php",
				type:'POST',
				data: {
					action:'show_submenu',
					id:$(ele).attr("id")},
					async:false,
				success: function(data) {
						$(ele).find("a").after(data);
						$(ele).removeClass("loading");
						$(ele).find("ul li").each(function(){
							$(this).hover(function(){
								show(this);
							},function(){
								hide(this);
							});
						});
				}
			});
			
			
		}
	}
    
    
    $('ul, li', this).hover(
    	function(){
    		show(this);
    	}, 
    	function(){
    		hide(this);
    	}
    );
    $('li', this).hover(
      function() { 
	  	$(this).addClass('hover'); 
		$('> a', this).addClass('hover'); 
		},
      function() { 
	  	$(this).removeClass('hover'); 
		$('> a', this).removeClass('hover'); 
		}
    );
    
  });
  
};

