/*

Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.

For licensing, see LICENSE.html or http://ckeditor.com/license

*/



/**

 * @fileOverview Defines the {@link CKEDITOR.env} object, which constains

 *		environment and browser information.

 */



if ( !CKEDITOR.env )

{

	/**

	 * @namespace Environment and browser information.

	 */

	CKEDITOR.env = (function()

	{

		var agent = navigator.userAgent.toLowerCase();

		var opera = window.opera;



		var env =

		/** @lends CKEDITOR.env */

		{

			/**

			 * Indicates that CKEditor is running on Internet Explorer.

			 * @type Boolean

			 * @example

			 * if ( CKEDITOR.env.ie )

			 *     alert( "I'm on IE!" );

			 */

			ie		: /*@cc_on!@*/false,



			/**

			 * Indicates that CKEditor is running on Opera.

			 * @type Boolean

			 * @example

			 * if ( CKEDITOR.env.opera )

			 *     alert( "I'm on Opera!" );

			 */

			opera	: ( !!opera && opera.version ),



			/**

			 * Indicates that CKEditor is running on a WebKit based browser, like

			 * Safari.

			 * @type Boolean

			 * @example

			 * if ( CKEDITOR.env.webkit )

			 *     alert( "I'm on WebKit!" );

			 */

			webkit	: ( agent.indexOf( ' applewebkit/' ) > -1 ),



			/**

			 * Indicates that CKEditor is running on Adobe AIR.

			 * @type Boolean

			 * @example

			 * if ( CKEDITOR.env.air )

			 *     alert( "I'm on AIR!" );

			 */

			air		: ( agent.indexOf( ' adobeair/' ) > -1 ),



			/**

			 * Indicates that CKEditor is running on Macintosh.

			 * @type Boolean

			 * @example

			 * if ( CKEDITOR.env.mac )

			 *     alert( "I love apples!" );

			 */

			mac	: ( agent.indexOf( 'macintosh' ) > -1 ),



			/**

			 * Indicates that CKEditor is running on a quirks mode environemnt.

			 * @type Boolean

			 * @example

			 * if ( CKEDITOR.env.quirks )

			 *     alert( "Nooooo!" );

			 */

			quirks : ( document.compatMode == 'BackCompat' ),



			/**

			 * Indicates that CKEditor is running on a mobile like environemnt.

			 * @type Boolean

			 * @example

			 * if ( CKEDITOR.env.mobile )

			 *     alert( "I'm running with CKEditor today!" );

			 */

			mobile : ( agent.indexOf( 'mobile' ) > -1 ),



			/**

			 * Indicates that CKEditor is running on Apple iPhone/iPad/iPod devices.

			 * @type Boolean

			 * @example

			 * if ( CKEDITOR.env.iOS )

			 *     alert( "I like little apples!" );

			 */

			iOS : /(ipad|iphone|ipod)/.test(agent),



			/**

			 * Indicates that the browser has a custom domain enabled. This has

			 * been set with "document.domain".

			 * @returns {Boolean} "true" if a custom domain is enabled.

			 * @example

			 * if ( CKEDITOR.env.isCustomDomain() )

			 *     alert( "I'm in a custom domain!" );

			 */

			isCustomDomain : function()

			{

				if ( !this.ie )

					return false;



				var domain = document.domain,

					hostname = window.location.hostname;



				return domain != hostname &&

					domain != ( '[' + hostname + ']' );	// IPv6 IP support (#5434)

			},



			/**

			 * Indicates that page is running under an encrypted connection.

			 * @returns {Boolean} "true" if the page has an encrypted connection.

			 * @example

			 * if ( CKEDITOR.env.secure )

			 *     alert( "I'm in SSL!" );

			 */

			secure : location.protocol == 'https:'

		};



		/**

		 * Indicates that CKEditor is running on a Gecko based browser, like

		 * Firefox.

		 * @name CKEDITOR.env.gecko

		 * @type Boolean

		 * @example

		 * if ( CKEDITOR.env.gecko )

		 *     alert( "I'm riding a gecko!" );

		 */

		env.gecko = ( navigator.product == 'Gecko' && !env.webkit && !env.opera );



		var version = 0;



		// Internet Explorer 6.0+

		if ( env.ie )

		{

			version = parseFloat( agent.match( /msie (\d+)/ )[1] );



			/**

			 * Indicates that CKEditor is running on Internet Explorer 8.

			 * @name CKEDITOR.env.ie8

			 * @type Boolean

			 * @example

			 * if ( CKEDITOR.env.ie8 )

			 *     alert( "I'm on IE8!" );

			 */

			env.ie8 = !!document.documentMode;



			/**

			 * Indicates that CKEditor is running on Internet Explorer 8 on

			 * standards mode.

			 * @name CKEDITOR.env.ie8Compat

			 * @type Boolean

			 * @example

			 * if ( CKEDITOR.env.ie8Compat )

			 *     alert( "Now I'm on IE8, for real!" );

			 */

			env.ie8Compat = document.documentMode == 8;



			/**

			 * Indicates that CKEditor is running on Internet Explorer 9's standards mode.

			 * @name CKEDITOR.env.ie9Compat

			 * @type Boolean

			 * @example

			 * if ( CKEDITOR.env.ie9Compat )

			 *     alert( "IE9, the beauty of the web!" );

			 */

			env.ie9Compat = document.documentMode == 9;



			/**

			 * Indicates that CKEditor is running on an IE7-like environment, which

			 * includes IE7 itself and IE8's IE7 document mode.

			 * @name CKEDITOR.env.ie7Compat

			 * @type Boolean

			 * @example

			 * if ( CKEDITOR.env.ie8Compat )

			 *     alert( "I'm on IE7 or on an IE7 like IE8!" );

			 */

			env.ie7Compat = ( ( version == 7 && !document.documentMode )

					|| document.documentMode == 7 );



			/**

			 * Indicates that CKEditor is running on an IE6-like environment, which

			 * includes IE6 itself and IE7 and IE8 quirks mode.

			 * @name CKEDITOR.env.ie6Compat

			 * @type Boolean

			 * @example

			 * if ( CKEDITOR.env.ie6Compat )

			 *     alert( "I'm on IE6 or quirks mode!" );

			 */

			env.ie6Compat = ( version < 7 || env.quirks );

		}



		// Gecko.

		if ( env.gecko )

		{

			var geckoRelease = agent.match( /rv:([\d\.]+)/ );

			if ( geckoRelease )

			{

				geckoRelease = geckoRelease[1].split( '.' );

				version = geckoRelease[0] * 10000 + ( geckoRelease[1] || 0 ) * 100 + ( geckoRelease[2] || 0 ) * 1;

			}

		}



		// Opera 9.50+

		if ( env.opera )

			version = parseFloat( opera.version() );



		// Adobe AIR 1.0+

		// Checked before Safari because AIR have the WebKit rich text editor

		// features from Safari 3.0.4, but the version reported is 420.

		if ( env.air )

			version = parseFloat( agent.match( / adobeair\/(\d+)/ )[1] );



		// WebKit 522+ (Safari 3+)

		if ( env.webkit )

			version = parseFloat( agent.match( / applewebkit\/(\d+)/ )[1] );



		/**

		 * Contains the browser version.<br />

		 * <br />

		 * For gecko based browsers (like Firefox) it contains the revision

		 * number with first three parts concatenated with a padding zero

		 * (e.g. for revision 1.9.0.2 we have 10900).<br />

		 * <br />

		 * For webkit based browser (like Safari and Chrome) it contains the

		 * WebKit build version (e.g. 522).

		 * @name CKEDITOR.env.version

		 * @type Boolean

		 * @example

		 * if ( CKEDITOR.env.ie && <b>CKEDITOR.env.version</b> <= 6 )

		 *     alert( "Ouch!" );

		 */

		env.version = version;



		/**

		 * Indicates that CKEditor is running on a compatible browser.

		 * @name CKEDITOR.env.isCompatible

		 * @type Boolean

		 * @example

		 * if ( CKEDITOR.env.isCompatible )

		 *     alert( "Your browser is pretty cool!" );

		 */

		env.isCompatible =



			// White list of mobile devices that supports.

			env.iOS && version >= 534 ||



			!env.mobile && (



			( env.ie && version >= 6 ) ||

			( env.gecko && version >= 10801 ) ||

			( env.opera && version >= 9.5 ) ||

			( env.air && version >= 1 ) ||

			( env.webkit && version >= 522 ) ||

			false );



		/**

		 * The CSS class to be appended on the main UI containers, making it

		 * easy to apply browser specific styles to it.

		 * @name CKEDITOR.env.cssClass

		 * @type String

		 * @example

		 * myDiv.className = CKEDITOR.env.cssClass;

		 */

		env.cssClass =

			'cke_browser_' + (

				env.ie ? 'ie' :

				env.gecko ? 'gecko' :

				env.opera ? 'opera' :

				env.webkit ? 'webkit' :

				'unknown' );



		if ( env.quirks )

			env.cssClass += ' cke_browser_quirks';



		if ( env.ie )

		{

			env.cssClass += ' cke_browser_ie' + (

				env.version < 7 ? '6' :

				env.version >= 8 ? document.documentMode:

				'7' );



			if ( env.quirks )

				env.cssClass += ' cke_browser_iequirks';

		}



		if ( env.gecko && version < 10900 )

			env.cssClass += ' cke_browser_gecko18';



		if ( env.air )

			env.cssClass += ' cke_browser_air';



		return env;

	})();

}



// PACKAGER_RENAME( CKEDITOR.env )

// PACKAGER_RENAME( CKEDITOR.env.ie )

