function _fnBrowserDetect( settings )
		{
			// We don't need to do this every time DataTables is constructed, the values
			// calculated are specific to the browser and OS configuration which we
			// don't expect to change between initialisations
			if ( ! DataTable.__browser ) {
				var browser = {};
				DataTable.__browser = browser;
		
				// Scrolling feature / quirks detection
				var n = $('<div/>')
					.css( {
						position: 'fixed',
						top: 0,
						left: $(window).scrollLeft()*-1, // allow for scrolling
						height: 1,
						width: 1,
						overflow: 'hidden'
					} )
					.append(
						$('<div/>')
							.css( {
								position: 'absolute',
								top: 1,
								left: 1,
								width: 100,
								overflow: 'scroll'
							} )
							.append(
								$('<div/>')
									.css( {
										width: '100%',
										height: 10
									} )
							)
					)
					.appendTo( 'body' );
		
				var outer = n.children();
				var inner = outer.children();
		
				// Numbers below, in order, are:
				// inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth
				//
				// IE6 XP:                           100 100 100  83
				// IE7 Vista:                        100 100 100  83
				// IE 8+ Windows:                     83  83 100  83
				// Evergreen Windows:                 83  83 100  83
				// Evergreen Mac with scrollbars:     85  85 100  85
				// Evergreen Mac without scrollbars: 100 100 100 100
		
				// Get scrollbar width
				browser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;
		
				// IE6/7 will oversize a width 100% element inside a scrolling element, to
				// include the width of the scrollbar, while other browsers ensure the inner
				// element is contained without forcing scrolling
				browser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;
		
				// In rtl text layout, some browsers (most, but not all) will place the
				// scrollbar on the left, rather than the right.
				browser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;
		
				// IE8- don't provide height and width for getBoundingClientRect
				browser.bBounding = n[0].getBoundingClientRect().width ? true : false;
		
				n.remove();
			}
		
			$.extend( settings.oBrowser, DataTable.__browser );
			settings.oScroll.iBarWidth = DataTable.__browser.barWidth;
		}
/**
		 * Browser feature detection for capabilities, quirks
		 *  @param {object} settings dataTables settings object
		 *  @memberof DataTable#oApi
		 */
Browser feature detection for capabilities, quirks
@param {object} settings dataTables settings object
@memberof DataTable#oApi
Browser feature detection for capabilities quirks @param { object } settings dataTables settings object @memberof DataTable#oApi
function _fnBrowserDetect( settings )
		{
			if ( ! DataTable.__browser ) {
				var browser = {};
				DataTable.__browser = browser;
				var n = $('<div/>')
					.css( {
						position: 'fixed',
						top: 0,
						left: $(window).scrollLeft()*-1, 
						height: 1,
						width: 1,
						overflow: 'hidden'
					} )
					.append(
						$('<div/>')
							.css( {
								position: 'absolute',
								top: 1,
								left: 1,
								width: 100,
								overflow: 'scroll'
							} )
							.append(
								$('<div/>')
									.css( {
										width: '100%',
										height: 10
									} )
							)
					)
					.appendTo( 'body' );
				var outer = n.children();
				var inner = outer.children();
				 IE6 XP:                           100 100 100  83
				 IE7 Vista:                        100 100 100  83
				 IE 8+ Windows:                     83  83 100  83
				 Evergreen Windows:                 83  83 100  83
				 Evergreen Mac with scrollbars:     85  85 100  85
				 Evergreen Mac without scrollbars: 100 100 100 100
				 Get scrollbar width
				browser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;
				 IE6/7 will oversize a width 100% element inside a scrolling element, to
				 include the width of the scrollbar, while other browsers ensure the inner
				 element is contained without forcing scrolling
				browser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;
				 In rtl text layout, some browsers (most, but not all) will place the
				 scrollbar on the left, rather than the right.
				browser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;
				 IE8- don't provide height and width for getBoundingClientRect
				browser.bBounding = n[0].getBoundingClientRect().width ? true : false;
				n.remove();
			}
			$.extend( settings.oBrowser, DataTable.__browser );
			settings.oScroll.iBarWidth = DataTable.__browser.barWidth;
		}
function _fnBrowserDetect ( settings ) { if ( ! DataTable . __browser ) { var browser = { } ; DataTable . __browser = browser ; var n = $ ( '<div/>' ) . css ( { position : 'fixed' , top : 0 , left : $ ( window ) . scrollLeft ( ) * - 1 , height : 1 , width : 1 , overflow : 'hidden' } ) . append ( $ ( '<div/>' ) . css ( { position : 'absolute' , top : 1 , left : 1 , width : 100 , overflow : 'scroll' } ) . append ( $ ( '<div/>' ) . css ( { width : '100%' , height : 10 } ) ) ) . appendTo ( 'body' ) ; var outer = n . children ( ) ; var inner = outer . children ( ) ; browser . barWidth = outer [ 0 ] . offsetWidth - outer [ 0 ] . clientWidth ; browser . bScrollOversize = inner [ 0 ] . offsetWidth === 100 && outer [ 0 ] . clientWidth !== 100 ; browser . bScrollbarLeft = Math . round ( inner . offset ( ) . left ) !== 1 ; browser . bBounding = n [ 0 ] . getBoundingClientRect ( ) . width ? true : false ; n . remove ( ) ; } $ . extend ( settings . oBrowser , DataTable . __browser ) ; settings . oScroll . iBarWidth = DataTable . __browser . barWidth ; }
Browser feature detection for capabilities, quirks
  @param {object} settings dataTables settings object
  @memberof DataTable#oApi
Browser feature detection for capabilities quirks @param { object } settings dataTables settings object @memberof DataTable#oApi
// We don't need to do this every time DataTables is constructed, the values // calculated are specific to the browser and OS configuration which we // don't expect to change between initialisations // Scrolling feature / quirks detection // allow for scrolling // Numbers below, in order, are: // inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth // // IE6 XP:                           100 100 100  83 // IE7 Vista:                        100 100 100  83 // IE 8+ Windows:                     83  83 100  83 // Evergreen Windows:                 83  83 100  83 // Evergreen Mac with scrollbars:     85  85 100  85 // Evergreen Mac without scrollbars: 100 100 100 100 // Get scrollbar width // IE6/7 will oversize a width 100% element inside a scrolling element, to // include the width of the scrollbar, while other browsers ensure the inner // element is contained without forcing scrolling // In rtl text layout, some browsers (most, but not all) will place the // scrollbar on the left, rather than the right. // IE8- don't provide height and width for getBoundingClientRect