text: ﻿/*
  Copyright (c) 2003-2012, 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 )
  