// Copyright (c) 2010 Erik van den Berg (http://www.planitworks.nl)
// Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
// and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
//
// Thanks to Denis Evteev for some excellent improvements.
//
// Version: 1.2.1
// Requires jQuery 1.3.2+
(function(c){var d;var b;var f=function(g,h){return{width:(g&&parseInt(g))?(g-c(window).width()-c(window).scrollLeft()):0,height:(h&&parseInt(h))?(h-c(window).height()-c(window).scrollTop()):0}};var e=function(){for(cm in b){c(b[cm].allContext).removeClass(d.activeClass)}};var a=function(){if(d.activeId){c("#"+d.activeId).add("#"+d.activeId+" ul").hide()}d.activeId=null;c(document).unbind(".jeegoocontext")};c.fn.jeegoocontext=function(i,h){if(!d){d={}}if(!b){b={}}if(h&&h.menuClass){d.menuClass=h.menuClass}if(!d.menuClass){d.menuClass="jeegoocontext"}if(h&&h.activeClass){d.activeClass=h.activeClass}if(!d.activeClass){d.activeClass="active"}b[i]=c.extend({hoverClass:"hover",submenuClass:"submenu",operaEvent:"dblclick",fadeIn:200,delay:300,widthOverflowOffset:0,heightOverflowOffset:0,submenuLeftOffset:0,submenuTopOffset:0,autoAddSubmenuArrows:true},h||{});b[i].allContext=this.selector;if(b[i].autoAddSubmenuArrows){c("#"+i).find("li:has(ul)").not(":has(."+b[i].submenuClass+")").prepend('<span class="'+b[i].submenuClass+'"></span>')}c("#"+i).find("li").unbind(".jeegoocontext").bind("mouseover.jeegoocontext",function(o){var r=c(this);window.clearTimeout(b[i].show);window.clearTimeout(b[i].hide);c("#"+i).find("*").removeClass(b[i].hoverClass);var j=r.parents("li");r.add(r.find("> *")).add(j).add(j.find("> *")).addClass(b[i].hoverClass);var k=true;if(b[i].onHover){if(b[i].onHover.apply(this,[o,b[i].context])==false){k=false}}if(!b[i].proceed){b[i].show=window.setTimeout(function(){b[i].proceed=true;r.mouseover()},b[i].delay);o.stopPropagation();return false}b[i].proceed=false;r.parent().find("ul").not(r.find("> ul")).hide();if(!k){o.preventDefault();return false}var n=r.find("> ul");if(n.length!=0){var q=r.offset();var l=f((q.left+r.parent().width()+b[i].submenuLeftOffset+n.width()+b[i].widthOverflowOffset),(q.top+b[i].submenuTopOffset+n.height()+b[i].heightOverflowOffset));var p=n.parent().parent().width();var m=q.top-r.parent().offset().top;n.css({left:(l.width>0)?(-p-b[i].submenuLeftOffset+"px"):(p+b[i].submenuLeftOffset+"px"),top:(l.height>0)?(m-l.height+b[i].submenuTopOffset)+"px":m+b[i].submenuTopOffset+"px"});n.fadeIn(b[i].fadeIn)}o.stopPropagation()}).bind("click.jeegoocontext",function(j){if(b[i].onSelect){if(b[i].onSelect.apply(this,[j,b[i].context])==false){j.stopPropagation();return false}}a();c(b[i].context).removeClass(d.activeClass);j.stopPropagation()});var g=b[i].event;if(!g){g=c.browser.opera?b[i].operaEvent+".jeegoocontext":"contextmenu.jeegoocontext"}else{g+=".jeegoocontext"}return c(this)[b[i].livequery?"livequery":"bind"](g,function(l){b[i].context=this;var j=c("#"+i);var k=f((l.pageX+j.width()+b[i].widthOverflowOffset),(l.pageY+j.height()+b[i].heightOverflowOffset));if(k.width>0){l.pageX-=k.width}if(k.height>0){l.pageY-=k.height}if(b[i].onShow){if(b[i].onShow.apply(j,[l,b[i].context])==false){l.stopPropagation();return false}}a();d.activeId=i;e();c(b[i].context).addClass(d.activeClass);j.find("li, li > *").removeClass(b[i].hoverClass);j.css({left:l.pageX+"px",top:l.pageY+"px"}).fadeIn(b[i].fadeIn);c(document).bind("mouseover.jeegoocontext",function(n){if(c(n.relatedTarget).parents("#"+i).length>0){window.clearTimeout(b[i].show);var m=c(n.relatedTarget).parent().find("li");m.add(m.find("> *")).removeClass(b[i].hoverClass);b[i].hide=window.setTimeout(function(){m.find("ul").hide()},b[i].delay)}}).bind("click.jeegoocontext",function(m){if(d.activeId&&b[d.activeId].onHide){if(b[d.activeId].onHide.apply(c("#"+d.activeId),[m,b[d.activeId].context])==false){return false}}e();a()});l.stopPropagation();return false})};c.fn.nojeegoocontext=function(g){c(this).unbind(".jeegoocontext");if(g&&b[g] instanceof Object){b[g]={}}}})(jQuery);
