text: ﻿/*
   * FCKeditor - The text editor for Internet - http://www.fckeditor.net Copyright
   * (C) 2003-2008 Frederico Caldeira Knabben == BEGIN LICENSE ==
   * 
   * Licensed under the terms of any of the following licenses at your choice: -
   * GNU General Public License Version 2 or later (the "GPL")
   * http://www.gnu.org/licenses/gpl.html - GNU Lesser General Public License
   * Version 2.1 or later (the "LGPL") http://www.gnu.org/licenses/lgpl.html -
   * Mozilla Public License Version 1.1 or later (the "MPL")
   * http://www.mozilla.org/MPL/MPL-1.1.html == END LICENSE ==
   * 
   * This is a utility object which can be used to load specific components of
   * FCKeditor, including all dependencies.
   */
  
  var FCK_GENERIC = 1;
  var FCK_GENERIC_SPECIFIC = 2;
  var FCK_SPECIFIC = 3;
  
  var FCKScriptLoader = new Object();
  FCKScriptLoader.FCKeditorPath = '/fckeditor/';
  
  FCKScriptLoader._Scripts = new Object();
  FCKScriptLoader._LoadedScripts = new Object();
  
  FCKScriptLoader._IsIE = (/msie/).test(navigator.userAgent.toLowerCase());
  
  FCKScriptLoader.Load = function(scriptName) {
  	// Check if the script has already been loaded.
  	if (scriptName in FCKScriptLoader._LoadedScripts)
  		return;
  
  	FCKScriptLoader._LoadedScripts[scriptName] = true;
  
  	var oScriptInfo = this._Scripts[scriptName];
  
  	if (!oScriptInfo) {
  		alert('FCKScriptLoader: The script "' + scriptName
  				+ '" could not be loaded');
  		return;
  	}
  
  	for (var i = 0; i < oScriptInfo.Dependency.length; i++) {
  		this.Load(oScriptInfo.Dependency[i]);
  	}
  
  	var sBaseScriptName = oScriptInfo.BasePath + scriptName.toLowerCase();
  
  	if (oScriptInfo.Compatibility == FCK_GENERIC
  			|| oScriptInfo.Compatibility == FCK_GENERIC_SPECIFIC)
  		this._LoadScript(sBaseScriptName + '.js');
  
  	if (oScriptInfo.Compatibility == FCK_SPECIFIC
  			|| oScriptInfo.Compatibility == FCK_GENERIC_SPECIFIC) {
  		if (this._IsIE)
  			this._LoadScript(sBaseScriptName + '_ie.js');
  		else
  			this._LoadScript(sBaseScriptName + '_gecko.js');
  	}
  }
  
  FCKScriptLoader._LoadScript = function(scriptPathFromSource) {
  	document.write('<script type="text/javascript" src="' + this.FCKeditorPath
  			+ 'editor/_source/' + scriptPathFromSource + '"><\/script>');
  }
  
  FCKScriptLoader.AddScript = function(scriptName, scriptBasePath, dependency,
  		compatibility) {
  	this._Scripts[scriptName] = {
  		BasePath : scriptBasePath || '',
  		Dependency : dependency || [],
  		Compatibility : compatibility || FCK_GENERIC
  	};
  }
  
  /*
   * #################################### ### Scripts Definition List
   */
  
  FCKScriptLoader.AddScript('FCKConstants');
  FCKScriptLoader.AddScript('FCKJSCoreExtensions');
  
  FCKScriptLoader.AddScript('FCK_Xhtml10Transitional', '../dtd/');
  
  FCKScriptLoader.AddScript('FCKDataProcessor', 'classes/', ['FCKConfig',
  				'FCKBrowserInfo', 'FCKRegexLib', 'FCKXHtml']);
  FCKScriptLoader.AddScript('FCKDocumentFragment', 'classes/', ['FCKDomTools'],
  		FCK_SPECIFIC);
  FCKScriptLoader.AddScript('FCKDomRange', 'classes/', ['FCKBrowserInfo',
  				'FCKJSCoreExtensions', 'FCKW3CRange', 'FCKElementPath',
  				'FCKDomTools', 'FCKTools', 'FCKDocumentFragment'],
  		FCK_GENERIC_SPECIFIC);
  FCKScriptLoader.AddScript('FCKDomRangeIterator', 'classes/', ['FCKDomRange',
  				'FCKListsLib'], FCK_GENERIC);
  FCKScriptLoader.AddScript('FCKElementPath', 'classes/', ['FCKListsLib'],
  		FCK_GENERIC);
  FCKScriptLoader.AddScript('FCKEnterKey', 'classes/', ['FCKDomRange',
  				'FCKDomTools', 'FCKTools', 'FCKKeystrokeHandler',
  				'FCKListHandler'], FCK_GENERIC);
  FCKScriptLoader.AddScript('FCKPanel', 'classes/', ['FCKBrowserInfo',
  				'FCKConfig', 'FCKTools'], FCK_GENERIC);
  FCKScriptLoader.AddScript('FCKImagePreloader', 'classes/');
  FCKScriptLoader.AddScript('FCKKeystrokeHandler', 'classes/', ['FCKConstants',
  				'FCKBrowserInfo', 'FCKTools'], FCK_GENERIC);
  FCKScriptLoader.AddScript('FCKStyle', 'classes/', ['FCKConstants',
  				'FCKDomRange', 'FCKDomRangeIterator', 'FCKDomTools',
  				'FCKListsLib', 'FCK_Xhtml10Transitional'], FCK_GENERIC);
  FCKScriptLoader.AddScript('FCKW3CRange', 'classes/', ['FCKDomTools',
  				'FCKTools', 'FCKDocumentFragment'], FCK_GENERIC);
  
  FCKScriptLoader.AddScript('FCKBrowserInfo', 'internals/',
  		['FCKJSCoreExtensions']);
  FCKScriptLoader.AddScript('FCKCodeFormatter', 'internals/');
  FCKScriptLoader.AddScript('FCKConfig', 'internals/', ['FCKBrowserInfo',
  				'FCKConstants']);
  FCKScriptLoader.AddScript('FCKDebug', 'internals/', ['FCKConfig']);
  FCKScriptLoader.AddScript('FCKDomTools', 'internals/', ['FCKJSCoreExtensions',
  				'FCKBrowserInfo', 'FCKTools', 'FCKDomRange'], FCK_GENERIC);
  FCKScriptLoader.AddScript('FCKListsLib', 'internals/');
  FCKScriptLoader.AddScript('FCKListHandler', 'internals/', ['FCKConfig',
  				'FCKDocumentFragment', 'FCKJSCoreExtensions', 'FCKDomTools'],
  		FCK_GENERIC);
  FCKScriptLoader.AddScript('FCKRegexLib', 'internals/');
  FCKScriptLoader.AddScript('FCKStyles', 'internals/', ['FCKConfig',
  				'FCKDocumentFragment', 'FCKDomRange', 'FCKDomTools',
  				'FCKElementPath', 'FCKTools'], FCK_GENERIC);
  FCKScriptLoader.AddScript('FCKTools', 'internals/', ['FCKJSCoreExtensions',
  				'FCKBrowserInfo'], FCK_GENERIC_SPECIFIC);
  FCKScriptLoader.AddScript('FCKXHtml', 'internals/', ['FCKBrowserInfo',
  				'FCKCodeFormatter', 'FCKConfig', 'FCKDomTools', 'FCKListsLib',
  				'FCKRegexLib', 'FCKTools', 'FCKXHtmlEntities'],
  		FCK_GENERIC_SPECIFIC);
  FCKScriptLoader.AddScript('FCKXHtmlEntities', 'internals/', ['FCKConfig']);
  
  // ####################################
  