src/cm/media/js/lib/fg-menu/fg.menu.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rwxr-xr-x
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*-------------------------------------------------------------------- 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Scripts for creating and manipulating custom menus based on standard <ul> markup
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
Version: 3.0, 03.31.2009
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
By: Maggie Costello Wachs (maggie@filamentgroup.com) and Scott Jehl (scott@filamentgroup.com)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
	http://www.filamentgroup.com
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
	* reference articles: http://www.filamentgroup.com/lab/jquery_ipod_style_drilldown_menu/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
Copyright (c) 2009 Filament Group
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
Dual licensed under the MIT (filamentgroup.com/examples/mit-license.txt) and GPL (filamentgroup.com/examples/gpl-license.txt) licenses.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
--------------------------------------------------------------------*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
var allUIMenus = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
$.fn.menu = function(options){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
	var caller = this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
	var options = options;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
	var m = new Menu(caller, options);	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
	allUIMenus.push(m);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
	$(this)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
	.mousedown(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
		if (!m.menuOpen) { m.showLoading(); };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
	})	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
	.click(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
		if (m.menuOpen == false) { m.showMenu(); }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
		else { m.kill(); };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
		return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
	});	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
function Menu(caller, options){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
	var menu = this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
	var caller = $(caller);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
	var container = $('<div class="fg-menu-container ui-widget ui-widget-content ui-corner-all">'+options.content+'</div>');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
	this.menuOpen = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
	this.menuExists = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
	var options = jQuery.extend({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
		content: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
		width: 180, // width of menu container, must be set or passed in to calculate widths of child menus
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
		maxHeight: 180, // max height of menu (if a drilldown: height does not include breadcrumb)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
		positionOpts: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
			posX: 'left', 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
			posY: 'bottom',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
			offsetX: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
			offsetY: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
			directionH: 'right',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
			directionV: 'down', 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
			detectH: true, // do horizontal collision detection  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
			detectV: true, // do vertical collision detection
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
			linkToFront: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
		},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
		showSpeed: 200, // show/hide speed in milliseconds
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
		callerOnState: 'ui-state-active', // class to change the appearance of the link/button when the menu is showing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
		loadingState: 'ui-state-loading', // class added to the link/button while the menu is created
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
		linkHover: 'ui-state-hover', // class for menu option hover state
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
		linkHoverSecondary: 'li-hover', // alternate class, may be used for multi-level menus		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
	// ----- multi-level menu defaults -----
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
		crossSpeed: 200, // cross-fade speed for multi-level menus
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
		crumbDefaultText: 'Choose an option:',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
		backLink: true, // in the ipod-style menu: instead of breadcrumbs, show only a 'back' link
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
		backLinkText: 'Back',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
		flyOut: false, // multi-level menus are ipod-style by default; this parameter overrides to make a flyout instead
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
		flyOutOnState: 'ui-state-default',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
		nextMenuLink: 'ui-icon-triangle-1-e', // class to style the link (specifically, a span within the link) used in the multi-level menu to show the next level
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
		topLinkText: 'All',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
		nextCrumbLink: 'ui-icon-carat-1-e'	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
	}, options);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
	var killAllMenus = function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
		$.each(allUIMenus, function(i){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
			if (allUIMenus[i].menuOpen) { allUIMenus[i].kill(); };	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
		});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
	this.kill = function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
		caller
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
			.removeClass(options.loadingState)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
			.removeClass('fg-menu-open')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
			.removeClass(options.callerOnState);	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
		container.find('li').removeClass(options.linkHoverSecondary).find('a').removeClass(options.linkHover);		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
		if (options.flyOutOnState) { container.find('li a').removeClass(options.flyOutOnState); };	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
		if (options.callerOnState) { 	caller.removeClass(options.callerOnState); };			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
		if (container.is('.fg-menu-ipod')) { menu.resetDrilldownMenu(); };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
		if (container.is('.fg-menu-flyout')) { menu.resetFlyoutMenu(); };	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
		container.parent().hide();	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
		menu.menuOpen = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
		$(document).unbind('click', killAllMenus);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
		$(document).unbind('keydown');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
	this.showLoading = function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
		caller.addClass(options.loadingState);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
	this.showMenu = function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
		killAllMenus();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
		if (!menu.menuExists) { menu.create() };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
		caller
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
			.addClass('fg-menu-open')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
			.addClass(options.callerOnState);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
		container.parent().show().click(function(){ menu.kill(); return false; });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
		container.hide().slideDown(options.showSpeed).find('.fg-menu:eq(0)');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
		menu.menuOpen = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
		caller.removeClass(options.loadingState);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
		$(document).click(killAllMenus);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
		// assign key events
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
		$(document).keydown(function(event){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
			var e;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
			if (event.which !="") { e = event.which; }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
			else if (event.charCode != "") { e = event.charCode; }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
			else if (event.keyCode != "") { e = event.keyCode; }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
			var menuType = ($(event.target).parents('div').is('.fg-menu-flyout')) ? 'flyout' : 'ipod' ;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
			switch(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
				case 37: // left arrow 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
					if (menuType == 'flyout') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
						$(event.target).trigger('mouseout');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
						if ($('.'+options.flyOutOnState).size() > 0) { $('.'+options.flyOutOnState).trigger('mouseover'); };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
					};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
					if (menuType == 'ipod') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
						$(event.target).trigger('mouseout');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
						if ($('.fg-menu-footer').find('a').size() > 0) { $('.fg-menu-footer').find('a').trigger('click'); };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
						if ($('.fg-menu-header').find('a').size() > 0) { $('.fg-menu-current-crumb').prev().find('a').trigger('click'); };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
						if ($('.fg-menu-current').prev().is('.fg-menu-indicator')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
							$('.fg-menu-current').prev().trigger('mouseover');							
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
						};						
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
					};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
					return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
					break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
				case 38: // up arrow 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
					if ($(event.target).is('.' + options.linkHover)) {	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
						var prevLink = $(event.target).parent().prev().find('a:eq(0)');						
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
						if (prevLink.size() > 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
							$(event.target).trigger('mouseout');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
							prevLink.trigger('mouseover');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
						};						
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
					}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
					else { container.find('a:eq(0)').trigger('mouseover'); }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
					return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
					break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
				case 39: // right arrow 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
					if ($(event.target).is('.fg-menu-indicator')) {						
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
						if (menuType == 'flyout') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
							$(event.target).next().find('a:eq(0)').trigger('mouseover');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
						}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
						else if (menuType == 'ipod') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
							$(event.target).trigger('click');						
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
							setTimeout(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
								$(event.target).next().find('a:eq(0)').trigger('mouseover');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
							}, options.crossSpeed);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
						};				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
					}; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
					return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
					break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
				case 40: // down arrow 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
					if ($(event.target).is('.' + options.linkHover)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
						var nextLink = $(event.target).parent().next().find('a:eq(0)');						
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
						if (nextLink.size() > 0) {							
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
							$(event.target).trigger('mouseout');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
							nextLink.trigger('mouseover');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
						};				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
					}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
					else { container.find('a:eq(0)').trigger('mouseover'); }		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
					return false;						
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
					break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
				case 27: // escape
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
					killAllMenus();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
					break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
				case 13: // enter
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
					if ($(event.target).is('.fg-menu-indicator') && menuType == 'ipod') {							
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
						$(event.target).trigger('click');						
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
						setTimeout(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
							$(event.target).next().find('a:eq(0)').trigger('mouseover');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
						}, options.crossSpeed);					
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
					}; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
					break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
			};			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
		});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
	this.create = function(){	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
		container.css({ width: options.width }).appendTo('body').find('ul:first').not('.fg-menu-breadcrumb').addClass('fg-menu');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
		container.find('ul, li a').addClass('ui-corner-all');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
		// aria roles & attributes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
		container.find('ul').attr('role', 'menu').eq(0).attr('aria-activedescendant','active-menuitem').attr('aria-labelledby', caller.attr('id'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
		container.find('li').attr('role', 'menuitem');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
		container.find('li:has(ul)').attr('aria-haspopup', 'true').find('ul').attr('aria-expanded', 'false');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
		container.find('a').attr('tabindex', '-1');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
		// when there are multiple levels of hierarchy, create flyout or drilldown menu
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
		if (container.find('ul').size() > 1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
			if (options.flyOut) { menu.flyout(container, options); }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
			else { menu.drilldown(container, options); }	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
		else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
			container.find('a').click(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
				menu.chooseItem(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
				return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
			});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
		};	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
		if (options.linkHover) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
			var allLinks = container.find('.fg-menu li a');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
			allLinks.hover(
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
				function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
					var menuitem = $(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
					$('.'+options.linkHover).removeClass(options.linkHover).blur().parent().removeAttr('id');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
					$(this).addClass(options.linkHover).focus().parent().attr('id','active-menuitem');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
				},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
				function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
					$(this).removeClass(options.linkHover).blur().parent().removeAttr('id');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
				}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
			);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
		};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
		if (options.linkHoverSecondary) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
			container.find('.fg-menu li').hover(
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
				function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
					$(this).siblings('li').removeClass(options.linkHoverSecondary);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
					if (options.flyOutOnState) { $(this).siblings('li').find('a').removeClass(options.flyOutOnState); }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
					$(this).addClass(options.linkHoverSecondary);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
				},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
				function(){ $(this).removeClass(options.linkHoverSecondary); }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
			);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
		};	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
		menu.setPosition(container, caller, options);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
		menu.menuExists = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
	this.chooseItem = function(item){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
		// RBA menu.kill();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
		// edit this for your own custom function/callback:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
		$('#menuSelection').text($(item).text());	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
		location.href = $(item).attr('href'); // RBA
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
Menu.prototype.flyout = function(container, options) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
	var menu = this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
	this.resetFlyoutMenu = function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
		var allLists = container.find('ul ul');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
		allLists.removeClass('ui-widget-content').hide();	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
	container.addClass('fg-menu-flyout').find('li:has(ul)').each(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
		var linkWidth = container.width();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
		var showTimer, hideTimer;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
		var allSubLists = $(this).find('ul');		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
		allSubLists.css({ left: linkWidth, width: linkWidth }).hide();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
		$(this).find('a:eq(0)').addClass('fg-menu-indicator').html('<span>' + $(this).find('a:eq(0)').text() + '</span><span class="ui-icon '+options.nextMenuLink+'"></span>').hover(
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
			function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
				clearTimeout(hideTimer);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
				var subList = $(this).next();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
				if (!fitVertical(subList, $(this).offset().top)) { subList.css({ top: 'auto', bottom: 0 }); };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
				if (!fitHorizontal(subList, $(this).offset().left + 100)) { subList.css({ left: 'auto', right: linkWidth, 'z-index': 999 }); };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
				showTimer = setTimeout(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
					subList.addClass('ui-widget-content').show(options.showSpeed).attr('aria-expanded', 'true');	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
				}, 300);	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
			},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
			function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
				clearTimeout(showTimer);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
				var subList = $(this).next();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
				hideTimer = setTimeout(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
					subList.removeClass('ui-widget-content').hide(options.showSpeed).attr('aria-expanded', 'false');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
				}, 400);	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
		);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
		$(this).find('ul a').hover(
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
			function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
				clearTimeout(hideTimer);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
				if ($(this).parents('ul').prev().is('a.fg-menu-indicator')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
					$(this).parents('ul').prev().addClass(options.flyOutOnState);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
				}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
			},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
			function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
				hideTimer = setTimeout(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
					allSubLists.hide(options.showSpeed);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
					container.find(options.flyOutOnState).removeClass(options.flyOutOnState);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
				}, 500);	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
		);	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
	});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
	container.find('a').click(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
		menu.chooseItem(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
		return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
	});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
Menu.prototype.drilldown = function(container, options) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
	var menu = this;	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
	var topList = container.find('.fg-menu');	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
	var breadcrumb = $('<ul class="fg-menu-breadcrumb ui-widget-header ui-corner-all ui-helper-clearfix"></ul>');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
	var crumbDefaultHeader = $('<li class="fg-menu-breadcrumb-text">'+options.crumbDefaultText+'</li>');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
	var firstCrumbText = (options.backLink) ? options.backLinkText : options.topLinkText;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
	var firstCrumbClass = (options.backLink) ? 'fg-menu-prev-list' : 'fg-menu-all-lists';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
	var firstCrumbLinkClass = (options.backLink) ? 'ui-state-default ui-corner-all' : '';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
	var firstCrumbIcon = (options.backLink) ? '<span class="ui-icon ui-icon-triangle-1-w"></span>' : '';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
	var firstCrumb = $('<li class="'+firstCrumbClass+'"><a href="#" class="'+firstCrumbLinkClass+'">'+firstCrumbIcon+firstCrumbText+'</a></li>');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
	container.addClass('fg-menu-ipod');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
	if (options.backLink) { breadcrumb.addClass('fg-menu-footer').appendTo(container).hide(); }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
	else { breadcrumb.addClass('fg-menu-header').prependTo(container); };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
	breadcrumb.append(crumbDefaultHeader);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
	var checkMenuHeight = function(el){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
		if (el.height() > options.maxHeight) { el.addClass('fg-menu-scroll') };	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
		el.css({ height: options.maxHeight });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
	var resetChildMenu = function(el){ el.removeClass('fg-menu-scroll').removeClass('fg-menu-current').height('auto'); };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
	this.resetDrilldownMenu = function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
		$('.fg-menu-current').removeClass('fg-menu-current');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
		topList.animate({ left: 0 }, options.crossSpeed, function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
			$(this).find('ul').each(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
				$(this).hide();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
				resetChildMenu($(this));				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
			});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
			topList.addClass('fg-menu-current');			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
		});		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
		$('.fg-menu-all-lists').find('span').remove();	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
		breadcrumb.empty().append(crumbDefaultHeader);		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
		$('.fg-menu-footer').empty().hide();	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
		checkMenuHeight(topList);		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
	topList
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
		.addClass('fg-menu-content fg-menu-current ui-widget-content ui-helper-clearfix')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
		.css({ width: container.width() })
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
		.find('ul')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
			.css({ width: container.width(), left: container.width() })
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
			.addClass('ui-widget-content')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
			.hide();		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
	checkMenuHeight(topList);	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
	topList.find('a').each(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
		// if the link opens a child menu:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
		if ($(this).next().is('ul')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
			$(this)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
				.addClass('fg-menu-indicator')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
				.each(function(){ $(this).html('<span>' + $(this).text() + '</span><span class="ui-icon '+options.nextMenuLink+'"></span>'); })
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
				.click(function(){ // ----- show the next menu			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
					var nextList = $(this).next();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
		    		var parentUl = $(this).parents('ul:eq(0)');   		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
		    		var parentLeft = (parentUl.is('.fg-menu-content')) ? 0 : parseFloat(topList.css('left'));    		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
		    		var nextLeftVal = Math.round(parentLeft - parseFloat(container.width()));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   368
		    		var footer = $('.fg-menu-footer');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   369
		    		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   370
		    		// show next menu   		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   371
		    		resetChildMenu(parentUl);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   372
		    		checkMenuHeight(nextList);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
					topList.animate({ left: nextLeftVal }, options.crossSpeed);						
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
		    		nextList.show().addClass('fg-menu-current').attr('aria-expanded', 'true');    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   375
		    		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   376
		    		var setPrevMenu = function(backlink){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
		    			var b = backlink;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
		    			var c = $('.fg-menu-current');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
			    		var prevList = c.parents('ul:eq(0)');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
			    		c.hide().attr('aria-expanded', 'false');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   381
		    			resetChildMenu(c);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   382
		    			checkMenuHeight(prevList);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
			    		prevList.addClass('fg-menu-current').attr('aria-expanded', 'true');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
			    		if (prevList.hasClass('fg-menu-content')) { b.remove(); footer.hide(); };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
		    		};		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   387
					// initialize "back" link
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   388
					if (options.backLink) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   389
						if (footer.find('a').size() == 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
							footer.show();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
							$('<a href="#"><span class="ui-icon ui-icon-triangle-1-w"></span> <span>Back</span></a>')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
								.appendTo(footer)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
								.click(function(){ // ----- show the previous menu
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
									var b = $(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
						    		var prevLeftVal = parseFloat(topList.css('left')) + container.width();		    						    		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
						    		topList.animate({ left: prevLeftVal },  options.crossSpeed, function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
						    			setPrevMenu(b);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
						    		});			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
									return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   400
								});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   401
						}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   402
					}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   403
					// or initialize top breadcrumb
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   404
		    		else { 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   405
		    			if (breadcrumb.find('li').size() == 1){				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   406
							breadcrumb.empty().append(firstCrumb);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   407
							firstCrumb.find('a').click(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   408
								menu.resetDrilldownMenu();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   409
								return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   410
							});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   411
						}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   412
						$('.fg-menu-current-crumb').removeClass('fg-menu-current-crumb');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   413
						var crumbText = $(this).find('span:eq(0)').text();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   414
						var newCrumb = $('<li class="fg-menu-current-crumb"><a href="javascript://" class="fg-menu-crumb">'+crumbText+'</a></li>');	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   415
						newCrumb
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   416
							.appendTo(breadcrumb)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   417
							.find('a').click(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   418
								if ($(this).parent().is('.fg-menu-current-crumb')){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   419
									menu.chooseItem(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   420
								}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   421
								else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   422
									var newLeftVal = - ($('.fg-menu-current').parents('ul').size() - 1) * 180;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   423
									topList.animate({ left: newLeftVal }, options.crossSpeed, function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   424
										setPrevMenu();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   425
									});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   426
								
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   427
									// make this the current crumb, delete all breadcrumbs after this one, and navigate to the relevant menu
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   428
									$(this).parent().addClass('fg-menu-current-crumb').find('span').remove();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   429
									$(this).parent().nextAll().remove();									
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   430
								};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   431
								return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   432
							});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   433
						newCrumb.prev().append(' <span class="ui-icon '+options.nextCrumbLink+'"></span>');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   434
		    		};			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   435
		    		return false;    		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   436
    			});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   437
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   438
		// if the link is a leaf node (doesn't open a child menu)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   439
		else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   440
			$(this).click(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   441
				menu.chooseItem(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   442
				return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   443
			});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   444
		};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   445
	});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   446
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   447
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   448
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   449
/* Menu.prototype.setPosition parameters (defaults noted with *):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   450
	referrer = the link (or other element) used to show the overlaid object 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   451
	settings = can override the defaults:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   452
		- posX/Y: where the top left corner of the object should be positioned in relation to its referrer.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   453
				X: left*, center, right
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   454
				Y: top, center, bottom*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   455
		- offsetX/Y: the number of pixels to be offset from the x or y position.  Can be a positive or negative number.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   456
		- directionH/V: where the entire menu should appear in relation to its referrer.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   457
				Horizontal: left*, right
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   458
				Vertical: up, down*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   459
		- detectH/V: detect the viewport horizontally / vertically
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   460
		- linkToFront: copy the menu link and place it on top of the menu (visual effect to make it look like it overlaps the object) */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   461
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   462
Menu.prototype.setPosition = function(widget, caller, options) { 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   463
	var el = widget;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   464
	var referrer = caller;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   465
	var dims = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   466
		refX: referrer.offset().left,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   467
		refY: referrer.offset().top,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   468
		refW: referrer.getTotalWidth(),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   469
		refH: referrer.getTotalHeight()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   470
	};	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   471
	var options = options;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   472
	var xVal, yVal;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   473
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   474
	var helper = $('<div class="positionHelper"></div>');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   475
	helper.css({ position: 'absolute', left: dims.refX, top: dims.refY, width: dims.refW, height: dims.refH });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   476
	el.wrap(helper);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   477
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   478
	// get X pos
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   479
	switch(options.positionOpts.posX) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   480
		case 'left': 	xVal = 0; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   481
			break;				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   482
		case 'center': xVal = dims.refW / 2;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   483
			break;				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   484
		case 'right': xVal = dims.refW;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   485
			break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   486
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   487
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   488
	// get Y pos
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   489
	switch(options.positionOpts.posY) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   490
		case 'top': 	yVal = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   491
			break;				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   492
		case 'center': yVal = dims.refH / 2;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   493
			break;				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   494
		case 'bottom': yVal = dims.refH;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   495
			break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   496
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   497
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   498
	// add the offsets (zero by default)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   499
	xVal += options.positionOpts.offsetX;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   500
	yVal += options.positionOpts.offsetY;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   501
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   502
	// position the object vertically
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   503
	if (options.positionOpts.directionV == 'up') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   504
		el.css({ top: 'auto', bottom: yVal });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   505
		if (options.positionOpts.detectV && !fitVertical(el)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   506
			el.css({ bottom: 'auto', top: yVal });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   507
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   508
	} 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   509
	else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   510
		el.css({ bottom: 'auto', top: yVal });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   511
		if (options.positionOpts.detectV && !fitVertical(el)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   512
			el.css({ top: 'auto', bottom: yVal });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   513
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   514
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   515
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   516
	// and horizontally
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   517
	if (options.positionOpts.directionH == 'left') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   518
		el.css({ left: 'auto', right: xVal });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   519
		if (options.positionOpts.detectH && !fitHorizontal(el)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   520
			el.css({ right: 'auto', left: xVal });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   521
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   522
	} 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   523
	else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   524
		el.css({ right: 'auto', left: xVal });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   525
		if (options.positionOpts.detectH && !fitHorizontal(el)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   526
			el.css({ left: 'auto', right: xVal });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   527
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   528
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   529
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   530
	// if specified, clone the referring element and position it so that it appears on top of the menu
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   531
	if (options.positionOpts.linkToFront) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   532
		referrer.clone().addClass('linkClone').css({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   533
			position: 'absolute', 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   534
			top: 0, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   535
			right: 'auto', 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   536
			bottom: 'auto', 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   537
			left: 0, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   538
			width: referrer.width(), 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   539
			height: referrer.height()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   540
		}).insertAfter(el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   541
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   542
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   543
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   544
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   545
/* Utilities to sort and find viewport dimensions */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   546
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   547
function sortBigToSmall(a, b) { return b - a; };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   548
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   549
jQuery.fn.getTotalWidth = function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   550
	return $(this).width() + parseInt($(this).css('paddingRight')) + parseInt($(this).css('paddingLeft')) + parseInt($(this).css('borderRightWidth')) + parseInt($(this).css('borderLeftWidth'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   551
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   552
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   553
jQuery.fn.getTotalHeight = function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   554
	return $(this).height() + parseInt($(this).css('paddingTop')) + parseInt($(this).css('paddingBottom')) + parseInt($(this).css('borderTopWidth')) + parseInt($(this).css('borderBottomWidth'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   555
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   556
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   557
function getScrollTop(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   558
	return self.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   559
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   560
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   561
function getScrollLeft(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   562
	return self.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   563
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   564
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   565
function getWindowHeight(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   566
	var de = document.documentElement;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   567
	return self.innerHeight || (de && de.clientHeight) || document.body.clientHeight;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   568
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   569
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   570
function getWindowWidth(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   571
	var de = document.documentElement;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   572
	return self.innerWidth || (de && de.clientWidth) || document.body.clientWidth;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   573
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   574
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   575
/* Utilities to test whether an element will fit in the viewport
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   576
	Parameters:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   577
	el = element to position, required
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   578
	leftOffset / topOffset = optional parameter if the offset cannot be calculated (i.e., if the object is in the DOM but is set to display: 'none') */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   579
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   580
function fitHorizontal(el, leftOffset){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   581
	var leftVal = parseInt(leftOffset) || $(el).offset().left;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   582
	return (leftVal + $(el).width() <= getWindowWidth() + getScrollLeft() && leftVal - getScrollLeft() >= 0);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   583
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   584
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   585
function fitVertical(el, topOffset){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   586
	var topVal = parseInt(topOffset) || $(el).offset().top;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   587
	return (topVal + $(el).height() <= getWindowHeight() + getScrollTop() && topVal - getScrollTop() >= 0);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   588
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   589
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   590
/*-------------------------------------------------------------------- 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   591
 * javascript method: "pxToEm"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   592
 * by:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   593
   Scott Jehl (scott@filamentgroup.com) 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   594
   Maggie Wachs (maggie@filamentgroup.com)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   595
   http://www.filamentgroup.com
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   596
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   597
 * Copyright (c) 2008 Filament Group
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   598
 * Dual licensed under the MIT (filamentgroup.com/examples/mit-license.txt) and GPL (filamentgroup.com/examples/gpl-license.txt) licenses.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   599
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   600
 * Description: Extends the native Number and String objects with pxToEm method. pxToEm converts a pixel value to ems depending on inherited font size.  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   601
 * Article: http://www.filamentgroup.com/lab/retaining_scalable_interfaces_with_pixel_to_em_conversion/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   602
 * Demo: http://www.filamentgroup.com/examples/pxToEm/	 	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   603
 *							
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   604
 * Options:  	 								
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   605
 		scope: string or jQuery selector for font-size scoping
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   606
 		reverse: Boolean, true reverses the conversion to em-px
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   607
 * Dependencies: jQuery library						  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   608
 * Usage Example: myPixelValue.pxToEm(); or myPixelValue.pxToEm({'scope':'#navigation', reverse: true});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   609
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   610
 * Version: 2.0, 08.01.2008 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   611
 * Changelog:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   612
 *		08.02.2007 initial Version 1.0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   613
 *		08.01.2008 - fixed font-size calculation for IE
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   614
--------------------------------------------------------------------*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   615
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   616
Number.prototype.pxToEm = String.prototype.pxToEm = function(settings){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   617
	//set defaults
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   618
	settings = jQuery.extend({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   619
		scope: 'body',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   620
		reverse: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   621
	}, settings);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   622
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   623
	var pxVal = (this == '') ? 0 : parseFloat(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   624
	var scopeVal;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   625
	var getWindowWidth = function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   626
		var de = document.documentElement;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   627
		return self.innerWidth || (de && de.clientWidth) || document.body.clientWidth;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   628
	};	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   629
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   630
	/* When a percentage-based font-size is set on the body, IE returns that percent of the window width as the font-size. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   631
		For example, if the body font-size is 62.5% and the window width is 1000px, IE will return 625px as the font-size. 	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   632
		When this happens, we calculate the correct body font-size (%) and multiply it by 16 (the standard browser font size) 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   633
		to get an accurate em value. */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   634
				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   635
	if (settings.scope == 'body' && $.browser.msie && (parseFloat($('body').css('font-size')) / getWindowWidth()).toFixed(1) > 0.0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   636
		var calcFontSize = function(){		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   637
			return (parseFloat($('body').css('font-size'))/getWindowWidth()).toFixed(3) * 16;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   638
		};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   639
		scopeVal = calcFontSize();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   640
	}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   641
	else { scopeVal = parseFloat(jQuery(settings.scope).css("font-size")); };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   642
			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   643
	var result = (settings.reverse == true) ? (pxVal * scopeVal).toFixed(2) + 'px' : (pxVal / scopeVal).toFixed(2) + 'em';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   644
	return result;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   645
};