PHP Classes
elePHPant
Icontem

File: examples/js/example.js

Recommend this page to a friend!
  Classes of Christian Vigh  >  PHP Minify JS, CSS, PHP and HTML  >  examples/js/example.js  >  Download  
File: examples/js/example.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: PHP Minify JS, CSS, PHP and HTML
Reduce the size of source files in PHP, CSS or JS
Author: By
Last change:
Date: 3 years ago
Size: 27,141 bytes
 

 

Contents

Class file image Download
/**************************************************************************************************************

    NAME
        thrak.browser-1.0.0.js

    DESCRIPTION
        A jQuery plugin that tries to unify the navigator properties among various browsers.

    PROPERTIES
	The following properties are available through $.browser :

	agent -
		User agent string.

	applicationVersion -
		A structure describing the browser application version and containing the following properties :
		. codeName	:  Application code name.
		. name		:  Application name.
		. major		:  Application major version number.
		. minor		:  Application minor version number. 
		Casting this structure to a string will result in "major.minor".
		
	chrome, safari, firefox, opera, ie, webkit, unknown -
		A boolean value which is true when the associated browser has been identified.
		Note that I don't know so far what to do ith the 'ebkit' property.
		If the browser could not be identified, the 'unknown' property will be set to true.	

	cookiesEnabled -
		True if cookies are enabled in the browser.

	displayName -
		User-friendly browser display name.

	doNotTrack -
		True if "do no track" settings are enabled on this browser.

	language -
		A structure containing the following properties that specifies the browser's language :
		. code		: language code, such as "fr", "en", etc.
		. variant	: Country variant. For the "en" language, for example, it could be "US",
				  "CA", etc. This field may be undefined.
		This structure can be casted to a string, to obtain something like, for example, "fr-FR".

	name -
		Browser name, as supplied from the user agent string.

	online -
		A boolean indicating whether browing is online or not.

	platform -
		A structure describing the browser's platform :
		. os		:  Os version.
		. cpu		:  CPU type.
		Note that these information are rarely specified by browsers.
		This structure can be casted to a string, which will result in : "os / version".

	product -
		A structure describing the product :
		. name		:  Product name.
		. build		:  Product build.
		. buildId	:  Product build id.
		This structure can be casted to a string which will result in the product name.

	vendor -
		A structure describing vendor information :
		. name		:  Vendor name.
		. build		:  Vendor's application build number. May be largely undefined in IE.
		This structure can be casted to a string, which will result in : "name / build".

	version -
		A structure containing the following properties, identifying the browser's version :
		. major
		. minor
		. revision
		. build
		Note that the 'revision' and 'build' properties may not be specified by all browsers.
		This structure can be casted to a version string, for example :

			alert ( "Version : " + $. browser. version ) ;

    METHODS -
	$.browser.prop ( name )  or  $.browser. val ( name ) -
		Retrieves a browser's property, whose name is given as a string. 
		A browser property is nothing more that a property that needs to execute some code for
		computing to retrieve the actual value.
		The following properties can be retrieved :

		. javaEnabled -
			True if the Java runtime is enabled on this browser.

		. scrollbarWidth -
			Width, in pixels, of a vertical scrollbar.

		. scrollbarHeight -
			Height, in pixels, of a horizontal scrollbar.

		. taintEnabled -
			To be documented.

    AUTHOR
        Christian Vigh, 11/2013.

    HISTORY
    [Version : 1.0]		[Date : 2013/11/27]     [Author : CV]
        Initial version.

    [Version : 1.0.1]		[Date : 2013/12/06]     [Author : CV]
        Added the prop() and val() functions to $.browser, along with the 'scrollbarWidth' and 'scrollbarHeight'
	properties.

    [Version : 1.0.1.1]		[Date : 2015/12/18]     [Author : CV]
        . Moved the javaEnabled() and taintEnabled() functions to properties accessible with the prop() function.
	. Renamed the 'language' member of the 'language' object to 'code'.

 **************************************************************************************************************/

 ( function ( $ )
   {
	$. browser	=  
	   {
		prop	:  function  ( propname )
		   {
			return ( getProperty ( propname )  ) ;
		    },
		val	: function  ( propname )
		   {
			return ( getProperty ( propname )  ) ;
		    }
	    } ;

	getBrowserCharacteristics ( ) ;


	// getBrowserCharacteristics -
	//	Tries to provide a unified way to access browser characteristics.
	function  getBrowserCharacteristics ( )
	   {
		// Determine browser name
		var	agent	=  navigator. userAgent ;
		var	match ;
		var	version ;

		// Initialize browser name variables
		$. browser. agent	=  agent ;
		$. browser. chrome	=  false ;
		$. browser. safari	=  false ;
		$. browser. firefox	=  false ;
		$. browser. opera	=  false ;
		$. browser. ie		=  false ;
		$. browser. webkit	=  false ;
		$. browser. unknown	=  false ;

		
		// Try Chrome first
		if  ( ( match = /chrome[ \/]([\w.]+)/i. exec ( agent ) )  !==  null )
		   {
			$. browser. name	=  "chrome" ;
			$. browser. displayName	=  "Chrome" ;
			version			=  match [1] ;
			$. browser. chrome	=  true ;
		    }
		// Opera
		else if  ( ( match = /(opera|OPR)[ \/]([\w.]+)/i. exec ( agent ) )  !==  null )
		   {
			$. browser. name	=  "opera" ;
			$. browser. displayName	=  "Opera" ;
			version			=  match [1] ;
			$. browser. opera	=  true ;
		    }
		// Firefox
		else if  ( ( match = /(firefox)[ \/]([\w.]+)/i. exec ( agent ) )  !==  null )
		   {
			$. browser. name	=  "firefox" ;
			$. browser. displayName	=  "Mozilla Firefox" ;
			version			=  match [1] ;
			$. browser. firefox	=  true ;
		    }
		// Safari
		else if  ( ( match = /(version)[ \/]([\w.]+)\s+Safari/i. exec ( agent ) )  !==  null )
		   {
			$. browser. name	=  "safari" ;
			$. browser. displayName	=  "Safari" ;
			version			=  match [1] ;
			$. browser. safari	=  true ;
		    }
		// Webkit
		else if  ( ( match = /(webkit)[ \/]([\w.]+)/i. exec ( agent ) )  !==  null )
		   {
			$. browser. name	=  "webkit" ;
			$. browser. displayName	=  "Webkit" ;
			version			=  match [1] ;
			$. browser. webkit	=  true ;
		    }
		// MSIE from 6 to 10
		else if  ( ( match = /MSIE ([\w.]+)/i. exec ( agent ) )  !==  null )
		   {
			$. browser. name	=  "ie" ;
			$. browser. displayName	=  "Microsoft Internet Explorer" ;
			version			=  match [1] ;

			// IE9 and IE10 have the same userAgent string, except that IE10 has also Trident/7.0 instead of Trident/5.0
			if  ( version [0]  ==  '9' )
			   {
				if  ( /Trident[\/:]7/i. exec ( agent )  !==  null )
					version	=  "10.0" ;
			    }

			$. browser. ie		=  true ;
		    }
		// MSIE 11 : the "MSIE" string is replaced with "rv:"
		else if  ( ( match = /rv:([\w.]+)/i. exec ( agent ) )  !==  null )
		   {
			$. browser. name	=  "ie" ;
			$. browser. displayName	=  "Microsoft Internet Explorer" ;
			version			=  match [1] ;
			$. browser. ie		=  true ;
		    }
		// Other cases : we made our best possible....
		else
		   {
			$. browser. name	=  "unknown" ;

			if  ( navigator. appName )
				$. browser. displayName	=  navigator. appName ;
			else if  ( navigator. appCodeName )
				$. browser. displayName =  navigator. appCodeName ;
			else
				$. browser. displayName =  "unknown" ;
				
			version			=  "unknown" ;
			$. browser. unknown	=  true ;
		    }

		// Build the version object
		var	version_items	=  version. split( /[.]/ ) ;

		for  ( var  i = version_items. length ; i < 4 ; i ++ )
			version_items [i] = undefined ;

		var	version_structure	=
		   {
			major		:  version_items [0],
			minor		:  version_items [1],
			revision	:  version_items [2],
			build		:  version_items [3],
			toString	:  function ( )
			   {
				var		version		=  this. major ;

				if  ( this. minor  !==  undefined )
				   {
					version		+=  '.' + this. minor ;

					if  ( this. revision  !==  undefined )
					   {
						version  +=  '.' + this. revision ;

						if  ( this. build  !==  undefined )
							version  +=  '.' + this. build ;
					    }
				    }

				return ( version ) ;
			    }
		    }

		$. browser. version	=  version_structure ;

		// Online property
		$. browser. online	=  navigator. onLine ;
		
		// Browser language : determine which property can be obtained from the navigator object
		var	language	=  undefined ;
		
		if  ( $. browser. chrome  ===  true )
		   {
			language	=  navigator. language ;					// No country variant
		    }
		else if  ( $. browser. ie  ===  true )
		   {
			switch  ( $. browser. version. major )
			   {
				case	11 :  language	=  navigator. language ;	break ;		// Includes country variant 
				case	10 :  language  =  navigator. userLanguage ;	break ;		// Includes country variant
				case	 9 :  language	=  navigator. userLanguage ;	break ;		// Includes country variant (to be checked)
				case	 8 :  language  =  navigator. userLanguage ;	break ;		// No country variant
				case	 7 :  language  =  navigator. userLanguage ;	break ;		// No country variant
				case	 6 :  language  =  navigator. userLanguage ;	break ;		// No country variant
				default    :
					if  ( navigator. userLanguage )
						language	=  navigator. userLanguage ;
			    }
		    }
		else if  ( $. browser. firefox  ===  true )
		   {
			language	=  navigator. language ;					// No country variant
		    }
		else if  ( $. browser. safari  ===  true )
		   {
			language	=  navigator. language ;					// Includes country variant
		    }
		else if  ( $. browser. opera  ===  true )
		   {
			language	=  navigator. language ;					// No country variant
		    }
		
		// Structure to be included into $.browser
		var	language_elements	=
		   {
			code			:  undefined,
			variant			:  undefined,
			toString		:  function ( )
			   {
				if  ( this. language  ===  undefined )
					return ( "" ) ;
					
				return ( this. language + "-" + this. variant ) ;
			    }
		    } ;
		
		// If some language string could be obtained from the navigator object...
		if  ( language  !==  undefined )
		   {
			// ... then tries to identify if it includes a country variant
			var	items		=  language. split ( /-/ ) ;
			var	item1		=  undefined, 
				item2		=  undefined ;
			
			switch  ( items. length )
			   {
				// No country variant : try to deduce a default one
				case	1 :
					item1	=  items [0]. toLowerCase ( ) ;
					
					switch  ( item1 )
					   {
						case	"en"	:  item2	=  "US" ; break ;
						default		:  item2	=  item1. toUpperCase ( ) ;
					    }
					break ;
					
				// Easier job : a country variant is specified
				case	2 :
					item1	=  items [0]. toLowerCase ( ) ;
					item2	=  items [1]. toUpperCase ( ) ;
			    }
			
			// Save the results 
			language_elements. code		=  item1 ;
			language_elements. variant	=  item2 ;
			
			$. browser. language	=  language_elements ;
		    }
		    
		// Application version information. Since none of the browsers implement an appMajorVersion, we will take it
		// from the user agent string which usually starts with : "Mozilla/5.0"
		var	application_version	=
		    {
			codeName		:  navigator. appCodeName,
			name			:  navigator. appName,
			major			:  undefined,
			minor			:  undefined,
			toString		:  function  ( )
			   {
				if  ( this. major  !==  undefined )
					return  ( this. major + "." + this. minor ) ;
				else
					return  ( undefined ) ;
			    }
		     }
		     
		// Get the application version
		var	match	=  $. browser. agent. match ( /^\w+\/([\w.]+)/ ) ;
		
		// If a match has been found in the user agent string, then try to extract the version number right after the "Mozilla/" string
		if  ( match  !==  null )
		   {
			var	items	=  match [1]. split ( /[.]/ ) ;
			var	item1	=  undefined,
				item2	=  undefined ;
				
			switch  ( items. length )
			   {
				// Parano?a : maybe there will be no minor version number ?
				case	1 : 
					item1	=  items [0] ;
					item2	=  "0" ;
					break ;
					
				// Default case : there are both a major and minor version number
				case	2 :
					item1	=  items [0] ;
					item2	=  items [1] ;
					break ;
			    }
			    
			// Save the data
			application_version. major	=  item1 ;
			application_version. minor	=  item2 ;
			
			$. browser. applicationVersion	=  application_version ;
		    }
		    
		// Platform
		var	platform	=
		   {
			os		:  undefined,
			cpu		:  undefined,
			toString	:  function ( )
			   {
				return ( '' + this. os + '/' + this. cpu ) ;
			    }
		    } ;
		    
		if  ( $. browser. ie )
		   {
			platform. os	=  navigator. platform ;
			platform. cpu	=  navigator. cpuClass ;
		    }
		else if  ( $. browser. firefox )
		   {
			platform. os	=  navigator. platform ;
			platform. cpu	=  navigator. oscpu ;
		    }
		else
		   {
			platform. os	=  navigator. platform ;
		    }
		    
		$. browser. platform	=  platform ;
		
		// Vendor information
		var	vendor		=
		   {
			name		:  undefined,
			build		:  undefined,
			toString	:  function ( )
			   {
				return ( '' + this. name + '/' + this. build ) ;
			    }
		    } ;
		
		if  ( $. browser. ie )
		   {
			vendor. name	=  navigator. vendor ||  "Microsoft Corporation" ;
		    }
		else
		   {
			vendor. name	=  navigator. name ;
			vendor. build	=  navigator. vendorSub ;
		    }
		    
		$. browser. vendor	=  vendor ;
		
		// Product information
		var	product		=
		   {
			name		:  navigator. product,
			build		:  navigator. productSub,
			buildId		:  navigator. buildId,
			toString	:  function ( ) 
			   {
				return ( this. name ) ;
			    }
		    } ;
		    
		$. browser. product	=  product ;
	    
		// Cookies enabled flag
		if  ( navigator. cookieEnabled )
			$. browser. cookiesEnabled	=  navigator. cookieEnabled ;
		else	// Assume false by default
			$. browser. cookiesEnabled	=  false ;
		
		// "Do not track" flag
		var	doNotTrack		=  undefined ;
		
		if  ( navigator. msDoNotTrack  !==  undefined )
			doNotTrack	=  ( navigator. msDoNotTrack ) ?  true : false ;
		else if  ( navigator. doNotTrack  !==  undefined  &&  
			   navigator. doNotTrack  !==  null       &&		// Chrome and Opera
			   navigator. doNotTrack  !==  'unspecified' )		// Firefox
			doNotTrack	=  ( navigator. doNotTrack ) ?  true : false ;
		else
			doNotTrack	=  ( navigator. doNotTrack  !==  0 ) ?  true : false ;
		    
		$. browser. doNotTrack		=  doNotTrack ;

		// showBrowserInformation -
		//	Displays information about the current browser.
		$. browser. showBrowserInformation	=  function ( callback )
		   {
			if  ( $('#browser-information') [0]  ===  undefined )
			   {
				var	browser_dialog	=  "<div id='browser-information'>" +
							   "	<table cellpadding='0' cellspacing='0' border='0' id='browser-information-table'>" +
							   "    <thead>" +
							   "		<tr>" +
							   "			<th title='Sort by element name'>Element</th>" +
							   "			<th title='Sort by variable name'>Variable</th>" +
							   "			<th title='Sort by value'>Value</th>" +
							   "		</tr>" +
							   "    </thead>" +
							   "    <tbody>" +
							   "		<tr class='browser-information' title='The agent property returns the value " +
							   "			of the user-agent header sent by the browser to the server." +
							   "			The value returned contains information about the name, version and " +
							   "			platform of the browser.'>" +
							   "			<td>" +
							   "				Agent String" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.agent" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. agent +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title='Returns the code name of the browser.'>" +
							   "			<td>" +
							   "				Application code name" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.applicationVersion.codeName" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. applicationVersion. codeName +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title='Returns the name of the browser.'>" +
							   "			<td>" +
							   "				Application name" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.applicationVersion. name" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. applicationVersion. name +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title='Returns the version of the browser. " +
													"Note that the $. browser. applicationVersion object also includes a \"major\" and " +
													"\"minor\" properties.'>" +
							   "			<td>" +
							   "				Application version" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.applicationVersion" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. applicationVersion +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title=\"The browser 'displayName' property returns the browser's full name" +
														", such as 'Chrome' or 'Microsoft Internet Explorer'.\">" +
							   "			<td>" +
							   "				Browser" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.displayName" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. displayName +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title=\"Short browser code, such as 'chrome', 'opera', 'ie', etc. " +
														"Note that a boolean of the same name is defined in $.browser for each possible supported browser.\">" +
							   "			<td>" +
							   "				Browser code" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.name" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. name +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title=\"Indicates whether cookies are enabled by the browser or not.\">" +
							   "			<td>" +
							   "				Cookies enabled" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.cookiesEnabled" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. cookiesEnabled +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title=\"Indicates whether java is enabled.\">" +
							   "			<td>" +
							   "				Java enabled" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.javaEnabled()" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. javaEnabled ( ) +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title=\"Browser language (client-side). " +
														"Note that the $.browser.language structure also defines the 'language' and 'countryVariant' members.\">" +
							   "			<td>" +
							   "				Language" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.language" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. language +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title='True if the browser is connected online, false if it remains local.'>" +
							   "			<td>" +
							   "				Online" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.online" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. online +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title='Client platform information. May be highly inaccurate. Note that the $. browser. platform " +
														"object also contains the os and cpu members.'>" +
							   "			<td>" +
							   "				Platform" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.platform" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. platform +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title='Product information. Note that the $. browser. platform " +
														"object also contains the name, build and buildId members.'>" +
							   "			<td>" +
							   "				Product information" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.product" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. product +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title=\"Indicates whether data tainting is enabled in the browser.\">" +
							   "			<td>" +
							   "				Taint enabled" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.taintEnabled()" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. taintEnabled ( ) +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title='Returns the user do-not-track setting. This is \"true\" if the user " +
														"has requested not to be tracked by web sites, content, or advertising...'>" +
							   "			<td>" +
							   "				Tracking option" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.doNotTrack" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. doNotTrack +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title='Vendor information. May be highly inaccurate. Note that the $. browser. platform " +
														"object also contains the name and build members.'>" +
							   "			<td>" +
							   "				Vendor information" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.vendor" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. vendor +
							   "			</td>" +
							   "		</tr>" +
							   "		<tr class='browser-information' title='Browser version. Always include a major and minor " +
														"version number, but not necessarily a revision and build number. " +
														"The $.browser.version object also contains the major, minor, revision and build numbers.'>" +
							   "			<td>" +
							   "				Version" + 
							   "			</td>" +
							   "			<td>" +
							   "				$.browser.version" + 
							   "			</td>" +
							   "			<td>" +
											$. browser. version +
							   "			</td>" +
							   "		</tr>" +
							   "	   </tbody>" +
							   "	</table>" ;

				// Append this dialog to the DOM if not already done
				if  ( $('#browser-information') [0]  ===  undefined )
					$('body'). append ( browser_dialog ) ; 

				// Every field is sortable
				$('#browser-information-table'). tablesorter ( ) ;

				// Tooltips
				$('#browser-information'). tooltip ({ html: true }) ;
				$('#browser-information'). tooltip ( 'option', 'tooltipClass',  'tooltip' ) ;
		
				// pen the browser properties dialog
				$('#browser-information'). dialog
				   ({
					autoOpen	:  false,
					width		:  "auto",
					height		:  "auto",
					resizable	:  false,
					title		:  "Your browser properties",
					open		:  function ( )
					   {
					    },
					close		:  function ( )
					   {
						callback  &&  callback ( ) ;
					    },
					buttons		:  
					   [
						{
							text		:  "Ok",
							"default"	:  true,
							click		:  function  ( )
							   {
								$(this). dialog ( 'close' ) ;
							    }
						 }
					    ]
				     }). dialog ( 'open' ) ;
			    }
		    }


		return ( this ) ;
	    }


	// cancelEvent -
	//	Cancels an event.
	$. browser. cancelEvent		=  function ( e )
	   {
		e	=  e  ||  event ;

		if  ( e )
		   {
			e. cancelBubble		=  true ;
			e. preventDefault   &&  e. preventDefault ( ) ;
			e. stopPropagation  &&  e. stopPropagation ( ) ;
		    }
	    }


	// getProperty -
	//	Returns the value of a property.
	function	getProperty ( propname )
	   {

		if  ( propname   !==  undefined )
			return ( properties [ propname ]  &&  properties [ propname ] ( ) ) ;
		else
			throw ( "Invalid argument type for the $.browser.prop() function." ) ;
	    }


	// Browser object properties - contains properties that need some function calls to compute
	// their current value
	var	properties	=
	   {
		// javaEnabled
		javaEnabled	:  function ( )
		   {
			if  ( navigator. javaEnabled  ===  undefined )
				return ( false ) ;
			else 
				return ( ( navigator. javaEnabled ( ) ) ?  true : false ) ;
		    },
		
		// taintEnabled
		taintEnabled	:  function ( )
		   {
			if  ( navigator. taintEnabled  ===  undefined )
				return ( false ) ;
			else 
				return ( ( navigator. taintEnabled ( ) ) ?  true : false ) ;
		    },

		// Browser scrollbar width
		scrollbarWidth		:  function ( )
		   {
			var	outer	=  document. createElement ( 'div' ) ;
			var	inner	=  document. createElement ( 'p' ) ;

			inner. style. width		=  "100%" ;
			inner. style. height		=  "200px" ;
			
			outer. style. position		=  "absolute" ;
			outer. style. top		=  "0px" ;
			outer. style. left		=  "0px" ;
			outer. style. visibility	=  "hidden" ;
			outer. style. width		=  "200px" ;
			outer. style. height		=  "150px" ;
			outer. style. overflow		=  "hidden" ;

			outer. appendChild ( inner ) ;

			document. body. appendChild ( outer ) ;

			var	width_before		=  inner. offsetWidth, 
				width_after ;

			outer. style. overflow		=  'scroll' ;
			width_after			=  inner. offsetWidth ;

			if   ( width_before  ===  width_after )
				width_after	=  outer. clientWidth ;
				
			document. body. removeChild ( outer ) ;
			return ( width_before - width_after ) ;
		    },

		// Browser scrollbar height
		scrollbarHeight		:  function ( )
		   {
			var	outer	=  document. createElement ( 'div' ) ;
			var	inner	=  document. createElement ( 'p' ) ;

			inner. style. height		=  "200px" ;
			
			outer. style. position		=  "absolute" ;
			outer. style. top		=  "0px" ;
			outer. style. left		=  "0px" ;
			outer. style. visibility	=  "hidden" ;
			outer. style. width		=  "200px" ;
			outer. style. height		=  "200px" ;
			outer. style. overflow		=  "hidden" ;

			outer. appendChild ( inner ) ;

			document. body. appendChild ( outer ) ;

			var	height_before		=  inner. offsetHeight, 
				height_after ;

			outer. style. overflow		=  'scroll' ;
			height_after			=  inner. offsetHeight ;

			if   ( height_before  ===  height_after )
				height_after	=  outer. clientHeight ;
				
			document. body. removeChild ( outer ) ;
			return ( height_before - height_after ) ;
		    }

	    }
  
    } ( jQuery ) ) ;