

jQuery.noConflict()

var jquerycontextmenu={
	arrowpath: 'arrow.gif', 
	contextmenuoffsets: [1, -1], 



	builtcontextmenuids: [], 

	positionul:function($, $ul, e){
		var istoplevel=$ul.hasClass('jqcontextmenu') 
		var docrightedge=$(document).scrollLeft()+$(window).width()-40 
		var docbottomedge=$(document).scrollTop()+$(window).height()-40
		if (istoplevel){ 
			var x=e.pageX+this.contextmenuoffsets[0] 
			var y=e.pageY+this.contextmenuoffsets[1]
			x=(x+$ul.data('dimensions').w > docrightedge)? docrightedge-$ul.data('dimensions').w : x 
			y=(y+$ul.data('dimensions').h > docbottomedge)? docbottomedge-$ul.data('dimensions').h : y
		}
		else{ 
			var $parentli=$ul.data('$parentliref')
			var parentlioffset=$parentli.offset()
			var x=$ul.data('dimensions').parentliw 
			var y=0

			x=(parentlioffset.left+x+$ul.data('dimensions').w > docrightedge)? x-$ul.data('dimensions').parentliw-$ul.data('dimensions').w : x 
			y=(parentlioffset.top+$ul.data('dimensions').h > docbottomedge)? y-$ul.data('dimensions').h+$ul.data('dimensions').parentlih : y
		}
		$ul.css({left:x, top:y})
	},
	
	showbox:function($, $contextmenu, e){
		$contextmenu.show()
	},

	hidebox:function($, $contextmenu){
		$contextmenu.find('ul').andSelf().hide() 
	},


	buildcontextmenu:function($, $menu){
		$menu.css({display:'block', visibility:'hidden'}).appendTo(document.body)
		$menu.data('dimensions', {w:$menu.outerWidth(), h:$menu.outerHeight()}) 
		var $lis=$menu.find("ul").parent() 
		$lis.each(function(i){
			var $li=$(this).css({zIndex: 1000+i})
			var $subul=$li.find('ul:eq(0)').css({display:'block'}) 
			$subul.data('dimensions', {w:$subul.outerWidth(), h:$subul.outerHeight(), parentliw:this.offsetWidth, parentlih:this.offsetHeight})
			$subul.data('$parentliref', $li) 
			$li.data('$subulref', $subul) 
			$li.children("a:eq(0)").append( //add arrow images
				'<img src="'+jquerycontextmenu.arrowpath+'" class="rightarrowclass" style="border:0;" />'
			)
			$li.bind('mouseenter', function(e){ 
				var $targetul=$(this).data('$subulref')
				if ($targetul.queue().length<=1){ 
					jquerycontextmenu.positionul($, $targetul, e)
					$targetul.show()
				}
			})
			$li.bind('mouseleave', function(e){ 
				$(this).data('$subulref').hide()
			})
		})
		$menu.find('ul').andSelf().css({display:'none', visibility:'visible'}) 
		this.builtcontextmenuids.push($menu.get(0).id) 
	},


	init:function($, $target, $contextmenu){
		if (this.builtcontextmenuids.length==0){ 
			$(document).bind("click", function(e){
				if (e.button==0){ 
					jquerycontextmenu.hidebox($, $('.jqcontextmenu'))
				}
			})
		}
		if (jQuery.inArray($contextmenu.get(0).id, this.builtcontextmenuids)==-1) 
			this.buildcontextmenu($, $contextmenu)
			$(document).bind("click", function(e){
				if (e.button==0){ 
					jquerycontextmenu.hidebox($, $('.jqcontextmenu'))
				}
			})
		if ($target.parents().filter('ul.jqcontextmenu').length>0) 
			return
		$target.bind("contextmenu", function(e){
			jquerycontextmenu.hidebox($, $('.jqcontextmenu')) 
			jquerycontextmenu.positionul($, $contextmenu, e)
			jquerycontextmenu.showbox($, $contextmenu, e)
			return false
		})
	}
}

jQuery.fn.addcontextmenu=function(contextmenuid){
	var $=jQuery
	return this.each(function(){ 
		var $target=$(this)
			jquerycontextmenu.init($, $target, $('#'+contextmenuid))
	})
};



