var PKDropDownMenu = {

	dropdownmenulabels: [],
	dropdownmenus: [],
	zIndexVal: 10000, 

	alignmenu:function( dropdownmenu_pos ) {
		var $ = jQuery;
	
		var dropdownmenu = this.dropdownmenus[ dropdownmenu_pos ];
		var $anchor		 = dropdownmenu.$anchorobj;
		var $menu	     = dropdownmenu.$menuobj;

 		var menuleft     = ($(window).width()  - (dropdownmenu.offsetx - $(document).scrollLeft()) > dropdownmenu.actualwidth)  ? dropdownmenu.offsetx : dropdownmenu.offsetx - dropdownmenu.actualwidth + dropdownmenu.anchorwidth; //get x coord of menu
		var menutop      = ($(window).height() - (dropdownmenu.offsety - $(document).scrollTop()   + dropdownmenu.anchorheight) > dropdownmenu.actualheight ) ? dropdownmenu.offsety + dropdownmenu.anchorheight : dropdownmenu.offsety - dropdownmenu.actualheight; //get y coord of menu
		$menu.css( {left:menuleft + "px", top:menutop + "px"} );
	},

	showmenu:function( dropdownmenu_pos ) {
		var dropdownmenu = this.dropdownmenus[ dropdownmenu_pos ];
		var $menu        = dropdownmenu.$menuobj;
		var $menuinner   = dropdownmenu.$menuinner;
		if ( $menu.css("display") == "none" ) {
			this.alignmenu( dropdownmenu_pos);
			$menuinner.css( 'visibility', 'visible' );
			$menu.show();
		}
		return false
	},
	
	hidemenu:function( dropdownmenu_pos ){
		var dropdownmenu = this.dropdownmenus[ dropdownmenu_pos ];
		var $menu		 = dropdownmenu.$menuobj;
		var $menuinner   = dropdownmenu.$menuinner;
		$menuinner.css( 'visibility', 'hidden' );
		$menu.hide();
	},

	definemenu:function( AnchorID, MenuID, Width ) {
		this.dropdownmenulabels.push( [AnchorID, MenuID, Width] );
	},

	render:function( $ ) {
		for (var i = 0, labels = this.dropdownmenulabels[i]; i < this.dropdownmenulabels.length; i++, labels = this.dropdownmenulabels[i] ) {
			this.dropdownmenus.push( { $anchorobj: $( "#" + labels[0] ), $menuobj:$( "#" + labels[1] ), $menuinner:$( "#"+ labels[1] ).children('ul:first-child') } );
 
			var dropdownmenu = this.dropdownmenus[i];

			dropdownmenu.$anchorobj.add( dropdownmenu.$menuobj ).attr( "_dropdownmenupos", i + "pos" );
			dropdownmenu.$menuobj.css( { width: labels[2] + "px" } );
	
			dropdownmenu.actualwidth  = dropdownmenu.$menuobj.outerWidth();
			dropdownmenu.actualheight = dropdownmenu.$menuobj.outerHeight();

			dropdownmenu.offsetx	  = dropdownmenu.$anchorobj.offset().left;
			dropdownmenu.offsety	  = dropdownmenu.$anchorobj.offset().top;
	
			dropdownmenu.anchorwidth  = dropdownmenu.$anchorobj.outerWidth();
			dropdownmenu.anchorheight = dropdownmenu.$anchorobj.outerHeight();
	
			dropdownmenu.$menuobj.css( "z-index", 30000 /*++this.zIndexVal*/ ).hide();
			dropdownmenu.$menuinner.css( "visibility", "hidden" );
			
			dropdownmenu.$anchorobj.bind( "mouseenter", function() {
					return PKDropDownMenu.showmenu( parseInt(this.getAttribute("_dropdownmenupos")) );
			});
			dropdownmenu.$anchorobj.bind("mouseleave", function( EventArgs ) {
				var $menu = PKDropDownMenu.dropdownmenus[parseInt(this.getAttribute("_dropdownmenupos"))].$menuobj;
				//check that mouse hasn't moved into menu object
				if ( EventArgs.relatedTarget != $menu.get(0) && $(EventArgs.relatedTarget).parents( "#"+ $menu.get(0).id ).length == 0 )
					PKDropDownMenu.hidemenu( parseInt(this.getAttribute("_dropdownmenupos")) );
			});

			dropdownmenu.$menuobj.bind("click mouseleave", function() {
				PKDropDownMenu.hidemenu( parseInt(this.getAttribute("_dropdownmenupos")) );
			});
		}

		$(window).bind("resize", function() {
			for ( var i = 0; i < PKDropDownMenu.dropdownmenus.length; i++ ) {
				var dropdownmenu = PKDropDownMenu.dropdownmenus[i];
				dropdownmenu.offsetx = dropdownmenu.$anchorobj.offset().left;
				dropdownmenu.offsety = dropdownmenu.$anchorobj.offset().top;
			}
		});
	}
}
