Index: /CKEditor.NET/trunk/CHANGES.html
===================================================================
--- /CKEditor.NET/trunk/CHANGES.html	(revision 6521)
+++ /CKEditor.NET/trunk/CHANGES.html	(revision 6521)
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Changelog &mdash; CKEditor.NET</title>
+	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+	<style type="text/css">
+html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre {
+	line-height: 1.5em;
+}
+
+body, input, textarea {
+	color: #333333;
+	font-family: Arial, Helvetica, sans-serif;
+}
+
+body {
+	font-size: 75%;
+	padding:10px 30px;
+}
+
+h1 {
+  color:#0782C1;
+  font-size:200%;
+  font-weight:normal;
+  margin: 0;
+  padding: 0;
+}
+
+h2 {
+  color:#000000;
+  font-size:130%;
+  margin: 0;
+  padding: 0;
+}
+
+p, blockquote, address, form, pre, dl, h1, h2, h3, ul {
+	margin-bottom: 15px;
+}
+
+#footer hr {
+	margin: 10px 0 15px 0;
+	height: 1px;
+	border: solid 1px gray;
+	border-bottom: none;
+}
+
+#footer p {
+	margin: 0 10px 10px 10px;
+	float: left;
+}
+
+#footer #copy {
+	float: right;
+}
+
+	</style>
+</head>
+<body>
+	<h1>
+		CKEditor.NET Control Changelog
+	</h1>
+	<h2>
+		CKEditor.NET 3.5.2
+	</h2>
+	<p>
+		The first official release of the CKEditor ASP.NET Control. Changelog starts at this release.
+	</p>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor &mdash; The text editor for the Internet &mdash; <a href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003&ndash;2011, <a href="http://cksource.com/">CKSource</a> &mdash; Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
Index: /CKEditor.NET/trunk/CKEditor.NET.sln
===================================================================
--- /CKEditor.NET/trunk/CKEditor.NET.sln	(revision 6521)
+++ /CKEditor.NET/trunk/CKEditor.NET.sln	(revision 6521)
@@ -0,0 +1,20 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CKEditor.NET", "CKEditor.NET\CKEditor.NET.csproj", "{FC4500A9-8E83-46B0-87FA-86D44AB79AA7}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{FC4500A9-8E83-46B0-87FA-86D44AB79AA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{FC4500A9-8E83-46B0-87FA-86D44AB79AA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FC4500A9-8E83-46B0-87FA-86D44AB79AA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{FC4500A9-8E83-46B0-87FA-86D44AB79AA7}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Index: /CKEditor.NET/trunk/CKEditor.NET/CKEditor.NET.csproj
===================================================================
--- /CKEditor.NET/trunk/CKEditor.NET/CKEditor.NET.csproj	(revision 6521)
+++ /CKEditor.NET/trunk/CKEditor.NET/CKEditor.NET.csproj	(revision 6521)
@@ -0,0 +1,69 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>
+    </ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{FC4500A9-8E83-46B0-87FA-86D44AB79AA7}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>CKEditor.NET</RootNamespace>
+    <AssemblyName>CKEditor.NET</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Nonshipping>true</Nonshipping>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>CKEditorStrongKey.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup>
+    <DelaySign>false</DelaySign>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.configuration" />
+    <Reference Include="System.Design" />
+    <Reference Include="System.XML" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Web" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="CKEditorControl.cs" />
+    <Compile Include="CKEditorConfig.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="CKEditorStrongKey.snk" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /CKEditor.NET/trunk/CKEditor.NET/CKEditorConfig.cs
===================================================================
--- /CKEditor.NET/trunk/CKEditor.NET/CKEditorConfig.cs	(revision 6521)
+++ /CKEditor.NET/trunk/CKEditor.NET/CKEditorConfig.cs	(revision 6521)
@@ -0,0 +1,2033 @@
+﻿/*
+ * Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CKEditor.NET
+{
+	#region Enum
+
+	public enum contentsLangDirections
+	{
+		/// <summary>
+		/// 'ui' - which indicate content direction will be the same with the user interface language direction;
+		/// </summary>
+		Ui,
+		/// <summary>
+		/// 'ltr' - for Left-To-Right language (like English);
+		/// </summary>
+		Ltr,
+		/// <summary>
+		/// 'rtl' - for Right-To-Left languages (like Arabic).
+		/// </summary>
+		Rtl
+	}
+
+	public enum DialogButtonsOrder
+	{
+		/// <summary>
+		/// the buttons will be displayed in the default order of the user's OS
+		/// </summary>
+		OS,
+		/// <summary>
+		/// for Left-To-Right order
+		/// </summary>
+		Ltr,
+		/// <summary>
+		/// for Right-To-Left order
+		/// </summary>
+		Rtl
+	}
+
+	public enum EnterMode
+	{
+		/// <summary>
+		/// new <p> paragraphs are created
+		/// </summary>
+		P = 1,
+		/// <summary>
+		/// lines are broken with <br> elements
+		/// </summary>
+		BR = 2,
+		/// <summary>
+		/// new <div> blocks are created
+		/// </summary>
+		DIV = 3
+	}
+
+	public enum StartupMode
+	{
+		Wysiwyg,
+		Source
+	}
+
+	public enum ResizeDir
+	{
+		Both,
+		Vertical,
+		Horizontal
+	}
+
+	public enum ToolbarLocation
+	{
+		Top,
+		Bottom
+	}
+
+	[Flags]
+	public enum ScaytContextCommands
+	{
+		/// <summary>
+		/// disables all options
+		/// </summary>
+		Off = 0,
+		/// <summary>
+		///  enables all options
+		/// </summary>
+		All = 1,
+		/// <summary>
+		/// enables the "Ignore" option
+		/// </summary>
+		Ignore = 2,
+		/// <summary>
+		/// enables the "Ignore All" option
+		/// </summary>
+		Ignoreall = 4,
+		/// <summary>
+		/// enables the "Add Word" option
+		/// </summary>
+		Add = 8
+	}
+
+	[Flags]
+	public enum ScaytContextMenuItemsOrder
+	{
+		/// <summary>
+		/// main suggestion word list
+		/// </summary>
+		Suggest = 1,
+		/// <summary>
+		/// moresuggest
+		/// </summary>
+		Moresuggest = 2,
+		/// <summary>
+		/// SCAYT commands, such as 'Ignore' and 'Add Word'
+		/// </summary>
+		Control = 4
+	}
+
+	public enum ScaytMoreSuggestions
+	{
+		On,
+		Off
+	}
+
+	#endregion
+
+	#region CKSerializable
+
+	[System.AttributeUsage(System.AttributeTargets.Property)]
+	public class CKSerializable : System.Attribute
+	{
+		public string Name = string.Empty;
+		public bool RemoveEnters = false;
+		public bool ForceAddToJSON = false;
+		public bool IsObject = false;
+	}
+
+	public class JSONSerializer
+	{
+		public static string ToJavaScriptObjectNotation(object obj)
+		{
+			bool hasCommaAtEnd = false;
+			System.Text.StringBuilder sbJSON = new System.Text.StringBuilder("{");
+			Type objType = obj.GetType();
+			System.Text.StringBuilder oc = new StringBuilder();
+			#region Reflect Properties
+			System.Reflection.PropertyInfo[] staticPropertyInfo = CKEditorConfig.GlobalConfig.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+			Dictionary<string, object> staticPropertyInfoDictionary = new Dictionary<string, object>();
+			foreach (System.Reflection.PropertyInfo propertyInfo in staticPropertyInfo)
+				staticPropertyInfoDictionary.Add(propertyInfo.Name, propertyInfo.GetValue(CKEditorConfig.GlobalConfig, new object[0]));
+			foreach (System.Reflection.PropertyInfo propertyInfo in
+				objType.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance))
+			{
+				bool canSerializable = false;
+				string customName = string.Empty;
+				bool removeEnters = false;
+				bool forceAddToJSON = false;
+				bool isObject = false;
+				object[] attrs = propertyInfo.GetCustomAttributes(false);
+				foreach (object attr in attrs)
+					if (attr is CKSerializable)
+					{
+						canSerializable = true;
+						removeEnters = ((CKSerializable)attr).RemoveEnters;
+						forceAddToJSON = ((CKSerializable)attr).ForceAddToJSON;
+						isObject = ((CKSerializable)attr).IsObject;
+						if (!string.IsNullOrEmpty(((CKSerializable)attr).Name))
+							customName = ((CKSerializable)attr).Name;
+						break;
+					}
+				if (!canSerializable)
+					continue;
+				if (!propertyInfo.CanRead)
+					continue;
+				if (customName == "ExtraOptions")
+					foreach (object[] item in (object[])propertyInfo.GetValue(obj, new object[0]))
+						oc.Append(", ").Append("\"" + item[0].ToString() + "\" : ").Append(item[1].ToString());
+				else if (customName == "on" && ((object[])propertyInfo.GetValue(obj, new object[0])).Length > 0)
+				{
+					object[] objArray = (object[])((object[])propertyInfo.GetValue(obj, new object[0]))[0];
+					oc.Append(", \"on\" : {").Append(((object[])objArray)[0]).Append(" : ").Append(((object[])objArray)[1]).Append(" } ");
+				}
+				else
+				{
+					object valueToJSON = propertyInfo.GetValue(obj, new object[0]);
+					object staticValueToCompare = staticPropertyInfoDictionary[propertyInfo.Name];
+					if (!forceAddToJSON && !valueToJSON.GetType().IsArray && !staticValueToCompare.GetType().IsArray && staticValueToCompare.ToString() == valueToJSON.ToString())
+						continue;
+					else if (!forceAddToJSON && valueToJSON.GetType().IsArray && staticValueToCompare.GetType().IsArray)
+					{
+						if (valueToJSON.GetType() == typeof(int[]) && campareArray((int[])valueToJSON, (int[])staticValueToCompare))
+							continue;
+						else if (valueToJSON.GetType() == typeof(string[]) && campareArray((string[])valueToJSON, (string[])staticValueToCompare))
+							continue;
+						else if (valueToJSON.GetType() == typeof(object[][]) && campareArray((object[][])valueToJSON, (object[][])staticValueToCompare))
+							continue;
+						else if (valueToJSON.GetType() == typeof(object[]) && campareArray((object[])valueToJSON, (object[])staticValueToCompare))
+							continue;
+					}
+					sbJSON.Append("\"" + (string.IsNullOrEmpty(customName) ? propertyInfo.Name : customName) + "\" : ");
+					GetFieldOrPropertyValue(ref sbJSON, propertyInfo.GetValue(obj, new object[0]), removeEnters, isObject);
+					sbJSON.Append(", ");
+				}
+				hasCommaAtEnd = true;
+			}
+			#endregion
+
+			if (hasCommaAtEnd)
+				sbJSON.Length -= 2;
+			sbJSON.Append(oc.ToString()).Append("}");
+			return sbJSON.ToString();
+		}
+
+		private static bool campareArray(string[] obj1, string[] obj2)
+		{
+			if (!obj1.GetType().IsArray || !obj2.GetType().IsArray)
+				return false;
+			if (obj1.Length != obj2.Length)
+				return false;
+			for (int i = 0; i < obj1.Length; i++)
+				if (obj1[i].ToString() != obj2[i].ToString())
+					return false;
+			return true;
+		}
+
+		private static bool campareArray(int[] obj1, int[] obj2)
+		{
+			if (!obj1.GetType().IsArray || !obj2.GetType().IsArray)
+				return false;
+			if (obj1.Length != obj2.Length)
+				return false;
+			for (int i = 0; i < obj1.Length; i++)
+				if (obj1[i].ToString() != obj2[i].ToString())
+					return false;
+			return true;
+		}
+
+		private static bool campareArray(object[][] obj1, object[][] obj2)
+		{
+			if (!obj1.GetType().IsArray || !obj2.GetType().IsArray)
+				return false;
+			if (obj1.Length != obj2.Length)
+				return false;
+			for (int i = 0; i < obj1.Length; i++)
+				if (!campareArray(obj1[i], obj2[i]))
+					return false;
+			return true;
+		}
+
+		private static bool campareArray(object[] obj1, object[] obj2)
+		{
+			if (!obj1.GetType().IsArray || !obj2.GetType().IsArray)
+				return false;
+			if (obj1.Length != obj2.Length)
+				return false;
+			for (int i = 0; i < obj1.Length; i++)
+				if ((obj1[i].GetType().IsArray) && !campareArray((object[])obj1[i], (object[])obj1[i]))
+					return false;
+				else if (obj1[i].ToString() != obj2[i].ToString())
+					return false;
+			return true;
+		}
+
+		private static void GetFieldOrPropertyValue(ref System.Text.StringBuilder sbJSON, object value, bool removeEnters, bool isObject)
+		{
+			Type type = value.GetType();
+			if (type == typeof(System.DateTime))
+				sbJSON.Append("new Date(" + ((DateTime)value - DateTime.Parse("1/1/1970")).TotalMilliseconds.ToString() + ")");
+			else if (type == typeof(System.String))
+			{
+				string app = isObject ? string.Empty : "\"";
+				sbJSON.Append(app + EscapeStringForJavaScript((removeEnters ? ((string)value).Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace("\b", "") : (string)value)) + app);
+			}
+			else if (type == typeof(System.Int16) || type == typeof(System.Int32) || type == typeof(System.Int64))
+				sbJSON.Append(value.ToString());
+			else if (type == typeof(System.Decimal) || type == typeof(System.Double) || type == typeof(System.Single))
+				sbJSON.Append(value.ToString().Replace(',', '.'));
+			else if (type.IsArray)
+			{
+				bool hasCommaAtEnd = false;
+				sbJSON.Append("[");
+				foreach (object o in (Array)value)
+				{
+					GetFieldOrPropertyValue(ref sbJSON, o, removeEnters, isObject);
+					sbJSON.Append(", ");
+					hasCommaAtEnd = true;
+				}
+				if (hasCommaAtEnd)
+					sbJSON.Length -= 2;
+				sbJSON.Append("]");
+			}
+			else if (type == typeof(System.Boolean))
+				sbJSON.Append(value.ToString().ToLower());
+			else
+				sbJSON.Append(EscapeStringForJavaScript(value.ToString()));
+		}
+
+		private static string EscapeStringForJavaScript(string input)
+		{
+			input = input.Replace("\\", @"\\");
+			input = input.Replace("\b", @"\u0008");
+			input = input.Replace("\t", @"\u0009");
+			input = input.Replace("\n", @"\u000a");
+			input = input.Replace("\f", @"\u000c");
+			input = input.Replace("\r", @"\u000d");
+			input = input.Replace("\"", @"""");
+			input = input.Replace("\"", "\\\"");
+			return input;
+		}
+	}
+
+	#endregion
+
+	[Serializable]
+	public class CKEditorConfig
+	{
+		#region Consts
+
+		public const int CKEDITOR_CTRL = 1000;
+		public const int CKEDITOR_SHIFT = 2000;
+		public const int CKEDITOR_ALT = 4000;
+
+		#endregion
+
+		#region GlobalConfig
+
+		public static CKEditorConfig GlobalConfig;
+
+		#endregion
+
+		#region CKSerializable Property
+
+		/// <summary>
+		/// The maximum height to which the editor can reach using AutoGrow. Zero means unlimited.
+		/// Default Value: 0
+		/// </summary>
+		[CKSerializable]
+		public int autoGrow_maxHeight { get; set; }
+
+		/// <summary>
+		/// The minimum height to which the editor can reach using AutoGrow.
+		/// Default Value: 200
+		/// </summary>
+		[CKSerializable]
+		public int autoGrow_minHeight { get; set; }
+
+		/// <summary>
+		/// Whether the replaced element (usually a textarea) is to be updated automatically when posting the form containing the editor.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool autoUpdateElement { get; set; }
+
+		/// <summary>
+		/// The base Z-index for floating dialogs and popups.
+		/// Default Value: 2000
+		/// </summary>
+		[CKSerializable]
+		public int baseFloatZIndex { get; set; }
+
+		/// <summary>
+		/// The base href URL used to resolve relative and absolute URLs in the editor content.
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string baseHref { get; set; }
+
+		/// <summary>
+		/// A list of keystrokes to be blocked if not defined in the CKEDITOR.config.keystrokes setting. In this way it is possible 
+		/// to block the default browser behavior for those keystrokes.
+		/// Default Value:
+		/// new int[] 
+		/// { 
+		///		CKEDITOR_CTRL + 66 /*B*/, 
+		///		CKEDITOR_CTRL + 73 /*I*/, 
+		///		CKEDITOR_CTRL + 85 /*U*/
+		/// };
+		/// </summary>
+		[CKSerializable]
+		public int[] blockedKeystrokes { get; set; }
+
+		/// <summary>
+		/// Sets the "class" attribute to be used on the body element of the editing area. This can be useful when reusing the original CSS 
+		/// file you're using on your live website and you want to assing to the editor the same class name you're using for the region 
+		/// that'll hold the contents. In this way, class specific CSS rules will be enabled.
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string bodyClass { get; set; }
+
+		/// <summary>
+		/// Sets the "id" attribute to be used on the body element of the editing area. This can be useful when reusing the original CSS 
+		/// file you're using on your live website and you want to assing to the editor the same id you're using for the region 
+		/// that'll hold the contents. In this way, id specific CSS rules will be enabled.
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string bodyId { get; set; }
+
+		/// <summary>
+		/// Whether to show the browser native context menu when the CTRL or the META (Mac) key is pressed while opening the context menu.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool browserContextMenuOnCtrl { get; set; }
+
+		/// <summary>
+		/// Holds the style definition to be used to apply the text background color.
+		/// Default Value: 
+		/// "{
+		/// 	element : 'span',
+		/// 	styles : { 'background-color' : '#(color)' }
+		/// }"
+		///
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object colorButton_backStyle { get; set; }
+
+		/// <summary>
+		/// Defines the colors to be displayed in the color selectors. It's a string containing the hexadecimal notation for HTML colors, 
+		/// without the "#" prefix. Since 3.3: A name may be optionally defined by prefixing the entries with the name and 
+		/// the slash character. For example, "FontColor1/FF9900" will be displayed as the color #FF9900 in the selector, 
+		/// but will be outputted as "FontColor1".
+		/// Default Value: "000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF"
+		/// </summary>
+		[CKSerializable]
+		public string colorButton_colors { get; set; }
+
+		/// <summary>
+		/// Holds the style definition to be used to apply the text foreground color.
+		/// Default Value: 
+		/// "{
+		/// 	element		: 'span',
+		/// 	styles		: { 'color' : '#(color)' },
+		/// 	overrides	: [ { element : 'font', attributes : { 'color' : null } } ]
+		/// }"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object colorButton_foreStyle { get; set; }
+
+		/// <summary>
+		/// The CSS file(s) to be used to apply style to the contents. It should reflect the CSS used in the final pages where 
+		/// the contents are to be used.
+		/// Default Value: new string[] { "~/contents.css" };
+		/// </summary>
+		[CKSerializable]
+		public string[] contentsCss { get; set; }
+
+		/// <summary>
+		/// The writting direction of the language used to write the editor contents. Allowed values are: 
+		/// public enum contentsLangDirections
+		/// {
+		/// 	Ui - which indicate content direction will be the same with the user interface language direction;
+		/// 	Ltr, - for Left-To-Right language (like English);
+		/// 	Rtl - for Right-To-Left languages (like Arabic).
+		/// }
+		/// Default Value: contentsLangDirections.Ui
+		/// </summary>
+		public contentsLangDirections contentsLangDirection { get; set; }
+
+		[CKSerializable(Name = "contentsLangDirection")]
+		private string contentsLangDirectionSer { get { return contentsLangDirection.ToString().ToLower(); } }
+
+		/// <summary>
+		/// Language code of the writting language which is used to author the editor contents.
+		/// Default Value: Same value with editor's UI language.
+		/// </summary>
+		[CKSerializable]
+		public string contentsLanguage { get; set; }
+
+		/// <summary>
+		/// A comma separated list of plugins that are not related to editor instances. Reserved to plugins that extend the core code only.
+		/// There are no ways to override this setting, except by editing the source code of CKEditor (_source/core/config.js).
+		/// </summary>
+		[CKSerializable]
+		public string corePlugins { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the bold style in the text.
+		/// Default Value: "{ element : 'strong', overrides : 'b' }"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object coreStyles_bold { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the italic style in the text.
+		/// Default Value: { element : 'em', overrides : 'i' }
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object coreStyles_italic { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the strike style in the text.
+		/// Default Value: { element : 'strike' }
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object coreStyles_strike { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the subscript style in the text.
+		/// Default Value: { element : 'sub' }
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object coreStyles_subscript { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the superscript style in the text.
+		/// Default Value: { element : 'sup' }
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object coreStyles_superscript { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the underline style in the text.
+		/// Default Value: { element : 'u' }
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object coreStyles_underline { get; set; }
+
+		/// <summary>
+		/// The URL path for the custom configuration file to be loaded. If not overloaded with inline configurations, it defaults 
+		/// to the "config.js" file present in the root of the CKEditor installation directory.
+		/// CKEditor will recursively load custom configuration files defined inside other custom configuration files.
+		/// Default Value: "config.js"
+		/// </summary>
+		[CKSerializable]
+		public string customConfig { get; set; }
+
+		/// <summary>
+		/// The language to be used if CKEDITOR.config.language is left empty and it's not possible to localize the editor to the user language.
+		/// Default Value: "en"
+		/// </summary>
+		[CKSerializable]
+		public string defaultLanguage { get; set; }
+
+		/// <summary>
+		/// The color of the dialog background cover. It should be a valid CSS color string.
+		/// Default Value: "white"
+		/// </summary>
+		[CKSerializable]
+		public string dialog_backgroundCoverColor { get; set; }
+
+		/// <summary>
+		/// The opacity of the dialog background cover. It should be a number within the range [0.0, 1.0].
+		/// Default Value: 0.5
+		/// </summary>
+		[CKSerializable]
+		public double dialog_backgroundCoverOpacity { get; set; }
+
+		/// <summary>
+		/// The guideline to follow when generating the dialog buttons. There are 3 possible options: 
+		/// public enum DialogButtonsOrder
+		/// {
+		/// 	OS - the buttons will be displayed in the default order of the user's OS
+		/// 	Ltr - for Left-To-Right order
+		/// 	Rtl - for Right-To-Left order
+		/// }
+		/// Default Value: DialogButtonsOrder.OS;
+		/// </summary>
+		public DialogButtonsOrder dialog_buttonsOrder { get; set; }
+		[CKSerializable(Name = "dialog_buttonsOrder")]
+		private string dialog_buttonsOrderSer { get { return dialog_buttonsOrder.ToString().ToLower(); } }
+
+		/// <summary>
+		/// The distance of magnetic borders used in moving and resizing dialogs, measured in pixels.
+		/// Default Value: 20
+		/// </summary>
+		[CKSerializable]
+		public int dialog_magnetDistance { get; set; }
+
+		/// <summary>
+		/// If the dialog has more than one tab, put focus into the first tab as soon as dialog is opened.
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool dialog_startupFocusTab { get; set; }
+
+		/// <summary>
+		/// Disables the built-in spell checker while typing natively available in the browser (currently Firefox and Safari only).
+		/// Even if word suggestions will not appear in the CKEditor context menu, this feature is useful to help quickly identifying misspelled words.
+		/// This setting is currently compatible with Firefox only due to limitations in other browsers.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool disableNativeSpellChecker { get; set; }
+
+		/// <summary>
+		/// Disables the "table tools" offered natively by the browser (currently Firefox only) to make quick table editing operations, 
+		/// like adding or deleting rows and columns.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool disableNativeTableHandles { get; set; }
+
+		/// <summary>
+		/// Disables the ability of resize objects (image and tables) in the editing area.
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool disableObjectResizing { get; set; }
+
+		/// <summary>
+		/// Disables inline styling on read-only elements.
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool disableReadonlyStyling { get; set; }
+
+		/// <summary>
+		/// Sets the doctype to be used when loading the editor content as HTML.
+		/// Default Value: '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
+		/// </summary>
+		[CKSerializable]
+		public string docType { get; set; }
+
+		/// <summary>
+		/// Whether to render or not the editing block area in the editor interface.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool editingBlock { get; set; }
+
+		/// <summary>
+		/// The e-mail address anti-spam protection option. The protection will be applied when creating or modifying e-mail links through the editor interface.
+		/// Two methods of protection can be choosed: 
+		/// The e-mail parts (name, domain and any other query string) are assembled into a function call pattern. Such function must be provided by 
+		/// the developer in the pages that will use the contents. 
+		/// Only the e-mail address is obfuscated into a special string that has no meaning for humans or spam bots, but which is properly rendered and accepted by the browser.
+		/// Both approaches require JavaScript to be enabled.
+		/// Default Value: "" (empty string = disabled)
+		/// </summary>
+		[CKSerializable]
+		public string emailProtection { get; set; }
+
+		/// <summary>
+		/// Allow context-sensitive tab key behaviors, including the following scenarios: 
+		/// When selection is anchored inside table cells:
+		/// If TAB is pressed, select the contents of the "next" cell. If in the last cell in the table, add a new row to it and focus its first cell.
+		/// If SHIFT+TAB is pressed, select the contents of the "previous" cell. Do nothing when it's in the first cell.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool enableTabKeyTools { get; set; }
+
+		/// <summary>
+		/// Sets the behavior for the ENTER key. It also dictates other behaviour rules in the editor, like whether the <br> element is to be used as a paragraph separator when indenting text. 
+		/// The allowed values are the following constants, and their relative behavior: 
+		/// public enum EnterMode
+		/// {
+		/// 	P = 1 - new <p> paragraphs are created
+		/// 	BR = 2 - lines are broken with <br> elements
+		/// 	DIV = 3 - new <div> blocks are created
+		/// }
+		/// Note: It's recommended to use the CKEDITOR.ENTER_P value because of its semantic value and correctness. The editor is optimized for this value.
+		/// Default Value: EnterMode.P;
+		/// </summary>
+		public EnterMode enterMode { get; set; }
+		[CKSerializable(Name = "enterMode", IsObject = true)]
+		private int enterModeSer { get { return (int)this.enterMode; } }
+
+		/// <summary>
+		/// Whether to use HTML entities in the output.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool entities { get; set; }
+
+		/// <summary>
+		/// An additional list of entities to be used. It's a string containing each entry separated by a comma. 
+		/// Entities names or number must be used, exclusing the "&" preffix and the ";" termination.
+		/// Default Value: "#39" // The single quote (') character.
+		/// </summary>
+		[CKSerializable]
+		public string entities_additional { get; set; }
+
+		/// <summary>
+		/// Whether to convert some symbols, mathematical symbols, and Greek letters to HTML entities. This may be more relevant for users typing text written in Greek. 
+		/// The list of entities can be found at the W3C HTML 4.01 Specification, section 24.3.1.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool entities_greek { get; set; }
+
+		/// <summary>
+		/// Whether to convert some Latin characters (Latin alphabet No. 1, ISO 8859-1) to HTML entities. 
+		/// The list of entities can be found at the W3C HTML 4.01 Specification, section 24.2.1.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool entities_latin { get; set; }
+
+		/// <summary>
+		/// List of additional plugins to be loaded. 
+		/// This is a tool setting which makes it easier to add new plugins, whithout having to touch and possibly breaking the CKEDITOR.config.plugins setting.
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string extraPlugins { get; set; }
+
+		/// <summary>
+		/// The location of an external file browser, that should be launched when "Browse Server" button is pressed.
+		/// If configured, the "Browse Server" button will appear in Link, Image and Flash dialogs.
+		/// Default Value: "" (empty string = disabled)
+		/// </summary>
+		[CKSerializable]
+		public string filebrowserBrowseUrl { get; set; }
+
+		/// <summary>
+		/// The location of an external file browser, that should be launched when "Browse Server" button is pressed in the Flash dialog.
+		/// If not set, CKEditor will use CKEDITOR.config.filebrowserBrowseUrl.
+		/// Default Value: "" (empty string = disabled)
+		/// </summary>
+		[CKSerializable]
+		public string filebrowserFlashBrowseUrl { get; set; }
+
+		/// <summary>
+		/// The location of a script that handles file uploads in the Flash dialog. If not set, CKEditor will use CKEDITOR.config.filebrowserUploadUrl.
+		/// Default Value: "" (empty string = disabled)
+		/// </summary>
+		[CKSerializable]
+		public string filebrowserFlashUploadUrl { get; set; }
+
+		/// <summary>
+		/// The location of an external file browser, that should be launched when "Browse Server" button is pressed in the Link tab of Image dialog.
+		/// If not set, CKEditor will use CKEDITOR.config.filebrowserBrowseUrl.
+		/// Default Value: "" (empty string = disabled)
+		/// </summary>
+		[CKSerializable]
+		public string filebrowserImageBrowseLinkUrl { get; set; }
+
+		/// <summary>
+		/// The location of an external file browser, that should be launched when "Browse Server" button is pressed in the Image dialog.
+		/// If not set, CKEditor will use CKEDITOR.config.filebrowserBrowseUrl.
+		/// Default Value: "" (empty string = disabled)
+		/// </summary>
+		[CKSerializable]
+		public string filebrowserImageBrowseUrl { get; set; }
+
+		/// <summary>
+		/// The location of a script that handles file uploads in the Image dialog. If not set, CKEditor will use CKEDITOR.config.filebrowserUploadUrl.
+		/// Default Value: "" (empty string = disabled)
+		/// </summary>
+		[CKSerializable]
+		public string filebrowserImageUploadUrl { get; set; }
+
+		/// <summary>
+		/// The location of a script that handles file uploads. If set, the "Upload" tab will appear in "Link", "Image" and "Flash" dialogs.
+		/// Default Value: "" (empty string = disabled)
+		/// </summary>
+		[CKSerializable]
+		public string filebrowserUploadUrl { get; set; }
+
+		/// <summary>
+		/// The "features" to use in the file browser popup window.
+		/// Default Value: "location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes"
+		/// </summary>
+		[CKSerializable]
+		public string filebrowserWindowFeatures { get; set; }
+
+		/// <summary>
+		/// Whether a filler text (non-breaking space entity -  ) will be inserted into empty block elements in HTML output, 
+		/// this is used to render block elements properly with line-height; When a function is instead specified, 
+		/// it'll be passed a CKEDITOR.htmlParser.element to decide whether adding the filler text by expecting a boolean return value.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool fillEmptyBlocks { get; set; }
+
+		/// <summary>
+		/// Defines the style to be used to highlight results with the find dialog.
+		/// Default Value: "{ element : 'span', styles : { 'background-color' : '#004', 'color' : '#fff' } }"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object find_highlight { get; set; }
+
+		/// <summary>
+		/// The text to be displayed in the Font combo is none of the available values matches the current cursor position or text selection.
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string font_defaultLabel { get; set; }
+
+		/// <summary>
+		/// The list of fonts names to be displayed in the Font combo in the toolbar. Entries are separated by semi-colons (;),
+		/// while it's possible to have more than one font for each entry, in the HTML way (separated by comma).
+		/// A display name may be optionally defined by prefixing the entries with the name and the slash character.
+		/// For example, "Arial/Arial, Helvetica, sans-serif" will be displayed as "Arial" in the list, but will be outputted as "Arial, Helvetica, sans-serif".
+		/// Default Value: 
+		/// "Arial/Arial, Helvetica, sans-serif; Comic Sans MS/Comic Sans MS, cursive; Courier New/Courier New, Courier, monospace;
+		/// Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;
+		/// Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;
+		/// Trebuchet MS/Trebuchet MS, Helvetica, sans-serif; Verdana/Verdana, Geneva, sans-serif"
+		/// </summary>
+		[CKSerializable(RemoveEnters = true)]
+		public string font_names { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the font in the text.
+		/// Default Value:
+		/// "{
+		/// 	element		: 'span',
+		/// 	styles		: { 'font-family' : '#(family)' },
+		/// 	overrides	: [ { element : 'font', attributes : { 'face' : null } } ] 
+		/// }"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object font_style { get; set; }
+
+		/// <summary>
+		/// The text to be displayed in the Font Size combo is none of the available values matches the current cursor position or text selection.
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string fontSize_defaultLabel { get; set; }
+
+		/// <summary>
+		/// The list of fonts size to be displayed in the Font Size combo in the toolbar. Entries are separated by semi-colons (;).
+		/// Any kind of "CSS like" size can be used, like "12px", "2.3em", "130%", "larger" or "x-small".
+		/// A display name may be optionally defined by prefixing the entries with the name and the slash character. 
+		/// For example, "Bigger Font/14px" will be displayed as "Bigger Font" in the list, but will be outputted as "14px".
+		/// Default Value: "8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public string fontSize_sizes { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the font size in the text.
+		/// Default Value: 
+		/// "{
+		/// 	element		: 'span',
+		/// 	styles		: { 'font-size' : '#(size)' },
+		/// 	overrides	: [ { element : 'font', attributes : { 'size' : null } } ]
+		/// }"
+		/// </summary>
+		[CKSerializable]
+		public object fontSize_style { get; set; }
+
+		/// <summary>
+		/// Force the respect of CKEDITOR.config.enterMode as line break regardless of the context, 
+		/// E.g. If CKEDITOR.config.enterMode is set to CKEDITOR.ENTER_P, press enter key inside a 'div' will create a new paragraph with 'p' instead of 'div'.
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool forceEnterMode { get; set; }
+
+		/// <summary>
+		/// Whether to force all pasting operations to insert on plain text into the editor, loosing any formatting information possibly available in the source text.
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool forcePasteAsPlainText { get; set; }
+
+		/// <summary>
+		/// Whether to force using "&" instead of "&amp;" in elements attributes values,
+		/// it's not recommended to change this setting for compliance with the W3C XHTML 1.0 standards (C.12, XHTML 1.0).
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool forceSimpleAmpersand { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the "Address" format.
+		/// Default Value: "{ element : 'address' }"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object format_address { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the "Normal (DIV)" format.
+		/// Default Value: "{ element : 'div' }"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object format_div { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the "Heading 1" format.
+		/// Default Value: "{ element : 'h1' }"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object format_h1 { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the "Heading 2" format.
+		/// Default Value: "{ element : 'h2' }"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object format_h2 { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the "Heading 3" format.
+		/// Default Value: "{ element : 'h3' }"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object format_h3 { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the "Heading 4" format.
+		/// Default Value: "{ element : 'h4' }"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object format_h4 { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the "Heading 5" format.
+		/// Default Value: "{ element : 'h5' }"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object format_h5 { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the "Heading 6" format.
+		/// Default Value: "{ element : 'h6' }"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object format_h6 { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the "Normal" format.
+		/// Default Value: "{ element : 'p' }"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object format_p { get; set; }
+
+		/// <summary>
+		/// The style definition to be used to apply the "Formatted" format.
+		/// Default Value: "{ element : 'pre' }"
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object format_pre { get; set; }
+
+		/// <summary>
+		/// A list of semi colon separated style names (by default tags) representing the style definition for each entry to be displayed
+		/// in the Format combo in the toolbar. Each entry must have its relative definition configuration in a setting named
+		/// "format_(tagName)". For example, the "p" entry has its definition taken from config.format_p.
+		/// Default Value: "p;h1;h2;h3;h4;h5;h6;pre;address;div"
+		/// </summary>
+		[CKSerializable]
+		public string format_tags { get; set; }
+
+		/// <summary>
+		/// Indicates whether the contents to be edited are being inputted as a full HTML page. 
+		/// A full page includes the <html>, <head> and <body> tags. 
+		/// The final output will also reflect this setting, including the <body> contents only if this setting is disabled.
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool fullPage { get; set; }
+
+		/// <summary>
+		/// The height of editing area( content ), in relative or absolute, e.g. 30px, 5em. Note: Percentage unit is not supported yet.e.g. 30%.
+		/// Default Value: "200"
+		/// </summary>
+		[CKSerializable]
+		public string height { get; set; }
+
+		/// <summary>
+		/// Whether escape HTML when editor update original input element.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable(ForceAddToJSON = true)]
+		public bool htmlEncodeOutput { get; set; }
+
+		/// <summary>
+		/// Whether the editor must output an empty value ("") if it's contents is made by an empty paragraph only.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool ignoreEmptyParagraph { get; set; }
+
+		/// <summary>
+		/// Padding text to set off the image in preview area.
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string image_previewText { get; set; }
+
+		/// <summary>
+		/// Whether to remove links when emptying the link URL field in the image dialog.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool image_removeLinkByEmptyURL { get; set; }
+
+		/// <summary>
+		/// List of classes to use for indenting the contents. If it's null, no classes will be used and instead the #indentUnit and #indentOffset properties will be used.
+		/// Default Value: []
+		/// </summary>
+		[CKSerializable]
+		public string[] indentClasses { get; set; }
+
+		/// <summary>
+		/// Size of each indentation step
+		/// Default Value: 40
+		/// </summary>
+		[CKSerializable]
+		public int indentOffset { get; set; }
+
+		/// <summary>
+		/// Unit for the indentation style
+		/// Default Value: "px"
+		/// </summary>
+		[CKSerializable]
+		public string indentUnit { get; set; }
+
+		/// <summary>
+		/// A list associating keystrokes to editor commands. Each element in the list is an array where the first item is the keystroke,
+		/// and the second is the name of the command to be executed.
+		/// Default Value: 
+		/// GlobalConfigObj.keystrokes = new object[] 
+		/// { 
+		/// 	new object[] { CKEDITOR_ALT + 121 /*F10*/, "toolbarFocus" },
+		/// 	new object[] { CKEDITOR_ALT + 122 /*F11*/, "elementsPathFocus" },
+		/// 	new object[] { CKEDITOR_SHIFT + 121 /*F10*/, "contextMenu" },
+		/// 	new object[] { CKEDITOR_CTRL + 90 /*Z*/, "undo" },
+		/// 	new object[] { CKEDITOR_CTRL + 89 /*Y*/, "redo" },
+		/// 	new object[] { CKEDITOR_CTRL + CKEDITOR_SHIFT + 90 /*Z*/, "redo" },
+		/// 	new object[] { CKEDITOR_CTRL + 76 /*L*/, "link" },
+		/// 	new object[] { CKEDITOR_CTRL + 66 /*B*/, "bold" },
+		/// 	new object[] { CKEDITOR_CTRL + 73 /*I*/, "italic" },
+		/// 	new object[] { CKEDITOR_CTRL + 85 /*U*/, "underline" },
+		/// 	new object[] { CKEDITOR_ALT + 109 /*-*/, "toolbarCollapse" }
+		/// };
+		/// </summary>
+		[CKSerializable]
+		public object[] keystrokes { get; set; }
+
+		/// <summary>
+		/// The user interface language localization to use. If empty, the editor automatically localize the editor to the user language,
+		/// if supported, otherwise the CKEDITOR.config.defaultLanguage language is used.
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string language { get; set; }
+
+		/// <summary>
+		/// A comma separated list of items group names to be displayed in the context menu.
+		/// The items order will reflect the order in this list if no priority has been definted in the groups.
+		/// Default Value: "clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea"
+		/// </summary>
+		[CKSerializable]
+		public string menu_groups { get; set; }
+
+		/// <summary>
+		/// The file that provides the MS Word cleanup function for pasting operations.
+		/// Note: This is a global configuration shared by all editor instances present in the page.
+		/// Default Value: "default"
+		/// </summary>
+		[CKSerializable]
+		public string pasteFromWordCleanupFile { get; set; }
+
+		/// <summary>
+		/// Whether to transform MS Word outline numbered headings into lists.
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool pasteFromWordNumberedHeadingToList { get; set; }
+
+		/// <summary>
+		/// Whether to prompt the user about the clean up of content being pasted from MS Word.
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool pasteFromWordPromptCleanup { get; set; }
+
+		/// <summary>
+		/// Whether to ignore all font related formatting styles, including: 
+		/// font size;
+		/// font family;
+		/// font foreground/background color.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool pasteFromWordRemoveFontStyles { get; set; }
+
+		/// <summary>
+		/// Whether to remove element styles that can't be managed with the editor. Note that this doesn't handle the font specific styles,
+		/// which depends on the CKEDITOR.config.pasteFromWordRemoveFontStyles setting instead.
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool pasteFromWordRemoveStyles { get; set; }
+
+		//	todo
+		// /// <summary>
+		// /// Comma separated list of plugins to load and initialize for an editor instance. This should be rarely changed, using instead the CKEDITOR.config.extraPlugins and CKEDITOR.config.removePlugins for customizations.
+		// /// </summary>
+		// [CKSerializable]
+		// public string plugins { get; set; }
+
+		/// <summary>
+		/// List of regular expressions to be executed over the input HTML, indicating HTML source code that matched must not present in WYSIWYG mode for editing.
+		/// Default Value: []
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public object[] protectedSource { get; set; }
+
+		/// <summary>
+		/// The dialog contents to removed. It's a string composed by dialog name and tab name with a colon between them. 
+		/// Separate each pair with semicolon (see example). Note: All names are case-sensitive. 
+		/// Note: Be cautious when specifying dialog tabs that are mandatory, like "info", 
+		/// dialog functionality might be broken because of this!
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string removeDialogTabs { get; set; }
+
+		/// <summary>
+		/// A comma separated list of elements attributes to be removed when executing the "remove format" command.
+		/// Default Value: "class,style,lang,width,height,align,hspace,valign"
+		/// </summary>
+		[CKSerializable]
+		public string removeFormatAttributes { get; set; }
+
+		/// <summary>
+		/// A comma separated list of elements to be removed when executing the "remove " format" command. Note that only inline elements are allowed.
+		/// Default Value: "b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var"
+		/// </summary>
+		[CKSerializable]
+		public string removeFormatTags { get; set; }
+
+		/// <summary>
+		/// List of plugins that must not be loaded. This is a tool setting which makes it easier to avoid loading plugins definied 
+		/// in the CKEDITOR.config.plugins setting, whithout having to touch it and potentially breaking it.
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string removePlugins { get; set; }
+
+		/// <summary>
+		/// The directions to which the editor resizing is enabled. Possible values are:
+		/// public enum ResizeDir
+		/// {
+		/// 	Both,
+		/// 	Vertical,
+		/// 	Horizontal
+		///}
+		/// Default Value: ResizeDir.Both;
+		/// </summary>
+		public ResizeDir resize_dir { get; set; }
+		[CKSerializable(Name = "resize_dir")]
+		private string resize_dirSer { get { return resize_dir.ToString().ToLower(); } }
+
+		/// <summary>
+		/// Whether to enable the resizing feature. If disabled the resize handler will not be visible.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool resize_enabled { get; set; }
+
+		/// <summary>
+		/// The maximum editor height, in pixels, when resizing it with the resize handle.
+		/// Default Value: 3000
+		/// </summary>
+		[CKSerializable]
+		public int resize_maxHeight { get; set; }
+
+		/// <summary>
+		/// The maximum editor width, in pixels, when resizing it with the resize handle.
+		/// Default Value: 3000
+		/// </summary>
+		[CKSerializable]
+		public int resize_maxWidth { get; set; }
+
+		/// <summary>
+		/// The minimum editor height, in pixels, when resizing it with the resize handle. 
+		/// Note: It fallbacks to editor's actual height if that's smaller than the default value.
+		/// Default Value: 250
+		/// </summary>
+		[CKSerializable]
+		public int resize_minHeight { get; set; }
+
+		/// <summary>
+		/// The minimum editor width, in pixels, when resizing it with the resize handle. 
+		/// Note: It fallbacks to editor's actual width if that's smaller than the default value.
+		/// Default Value: 750
+		/// </summary>
+		[CKSerializable]
+		public int resize_minWidth { get; set; }
+
+		/// <summary>
+		/// If enabled (true), turns on SCAYT automatically after loading the editor.
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool scayt_autoStartup { get; set; }
+
+		/// <summary>
+		/// Customizes the display of SCAYT context menu commands ("Add Word", "Ignore" and "Ignore All"). It must be a string with one or more of the following words separated by a pipe ("|"): 
+		/// enum ScaytContextCommands
+		/// {
+		/// 	Off = 0 - disables all options
+		/// 	All = 1 - enables all options
+		/// 	Ignore = 2 - enables the "Ignore" option
+		/// 	Ignoreall = 4 - enables the "Ignore All" option
+		/// 	Add = 8 - enables the "Add Word" option
+		/// }
+		/// Default Value: ScaytContextCommands.All;
+		/// </summary>
+		public ScaytContextCommands scayt_contextCommands { get; set; }
+		[CKSerializable(Name = "scayt_contextCommands")]
+		private string scayt_contextCommandsSer { get { return scayt_contextCommands.ToString().ToLower().Replace(", ", "|").Replace(",", "|"); } }
+
+		/// <summary>
+		/// Define order of placing of SCAYT context menu items by groups. It must be a string with one or more of the following words separated by a pipe ("|"): 
+		///  enum ScaytContextMenuItemsOrder
+		/// {
+		/// 	Suggest = 1 - main suggestion word list
+		/// 	Moresuggest = 2 - moresuggest
+		/// 	Control = 4 - SCAYT commands, such as 'Ignore' and 'Add Word'
+		/// }
+		/// Default Value: ScaytContextMenuItemsOrder.Suggest | ScaytContextMenuItemsOrder.Moresuggest | ScaytContextMenuItemsOrder.Control;
+		/// </summary>
+		public ScaytContextMenuItemsOrder scayt_contextMenuItemsOrder { get; set; }
+		[CKSerializable(Name = "scayt_contextMenuItemsOrder")]
+		private string scayt_contextMenuItemsOrderSer { get { return scayt_contextMenuItemsOrder.ToString().ToLower().Replace(", ", "|").Replace(",", "|"); } }
+
+		/// <summary>
+		/// Links SCAYT to custom dictionaries. It's a string containing dictionary ids separared by commas (","). 
+		/// Available only for licensed version. Further details at http://wiki.spellchecker.net/doku.php?id=custom_dictionary_support .
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string scayt_customDictionaryIds { get; set; }
+
+		/// <summary>
+		/// Sets the customer ID for SCAYT. Required for migration from free version with banner to paid version.
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string scayt_customerid { get; set; }
+
+		/// <summary>
+		/// Defines the number of SCAYT suggestions to show in the main context menu. The possible values are: 
+		/// 0 (zero): All suggestions are displayed in the main context menu.
+		/// Positive number: The maximum number of suggestions to shown in context menu. Other entries will be shown in "More Suggestions" sub-menu.
+		/// Negative number: No suggestions are shown in the main context menu. All entries will be listed in the "Suggestions" sub-menu.
+		/// Default Value: 5
+		/// </summary>
+		[CKSerializable]
+		public int scayt_maxSuggestions { get; set; }
+
+		/// <summary>
+		/// Enables/disables the "More Suggestions" sub-menu in the context menu. The possible values are:
+		/// public enum ScaytMoreSuggestions
+		/// {
+		/// 	On,
+		/// 	Off
+		/// }
+		/// Default Value: ScaytMoreSuggestions.On;
+		/// </summary>
+		public ScaytMoreSuggestions scayt_moreSuggestions { get; set; }
+		[CKSerializable(Name = "scayt_moreSuggestions")]
+		private string scayt_moreSuggestionsSer { get { return scayt_moreSuggestions.ToString().ToLower(); } }
+
+		/// <summary>
+		/// Sets the default spellchecking language for SCAYT.
+		/// Default Value: "en_US"
+		/// </summary>
+		[CKSerializable]
+		public string scayt_sLang { get; set; }
+
+		/// <summary>
+		/// Set the URL to SCAYT core. Required to switch to licensed version of SCAYT application. 
+		/// Further details at http://wiki.spellchecker.net/doku.php?id=3rd:wysiwyg:fckeditor:wscckf3l .
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string scayt_srcUrl { get; set; }
+
+		/// <summary>
+		/// Sets the visibility of the SCAYT tabs in the settings dialog and toolbar button.
+		/// The value must contain a "1" (enabled) or "0" (disabled) number for each of the following entries, in this precise order,
+		/// separated by a comma (","): "Options", "Languages" and "Dictionary".
+		/// Default Value: "1,1,1"
+		/// </summary>
+		[CKSerializable]
+		public string scayt_uiTabs { get; set; }
+
+		/// <summary>
+		/// Makes it possible to activate a custom dictionary on SCAYT. The user dictionary name must be used. 
+		/// Available only for licensed version.
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string scayt_userDictionaryName { get; set; }
+
+		private string _sharedSpacesBottom;
+		public string sharedSpacesBottom
+		{
+			get { return _sharedSpacesBottom; }
+			set
+			{
+				_sharedSpacesBottom = value;
+				if (!string.IsNullOrEmpty(_sharedSpacesBottom) && !removePlugins.Contains("resize"))
+					removePlugins = string.IsNullOrEmpty(removePlugins) ? "resize" : (removePlugins + ",resize");
+			}
+		}
+		private string _sharedSpacesTop;
+		public string sharedSpacesTop
+		{
+			get { return _sharedSpacesTop; }
+			set
+			{
+				_sharedSpacesTop = value;
+				if (!string.IsNullOrEmpty(_sharedSpacesTop) && !removePlugins.Contains("maximize"))
+					removePlugins = string.IsNullOrEmpty(removePlugins) ? "maximize" : (removePlugins + ",maximize");
+			}
+		}
+		[CKSerializable(IsObject = true)]
+		private string sharedSpaces
+		{
+			get
+			{
+				string retVal = string.Empty;
+				if (!string.IsNullOrEmpty(sharedSpacesBottom) || !string.IsNullOrEmpty(sharedSpacesTop))
+				{
+					retVal += "{";
+					if (!string.IsNullOrEmpty(sharedSpacesTop)) retVal += ("top:'" + sharedSpacesTop + "'");
+					if (!string.IsNullOrEmpty(sharedSpacesBottom) && !string.IsNullOrEmpty(sharedSpacesTop)) retVal += ",";
+					if (!string.IsNullOrEmpty(sharedSpacesBottom)) retVal += ("bottom:'" + sharedSpacesBottom + "'");
+					retVal += "}";
+				}
+				return retVal;
+			}
+		}
+
+		/// <summary>
+		/// Just like the CKEDITOR.config.enterMode setting, it defines the behavior for the SHIFT+ENTER key.
+		/// The allowed values are the following constants, and their relative behavior: 
+		/// public enum EnterMode
+		/// {
+		/// 	P = 1 - new <p> paragraphs are created
+		/// 	BR = 2 - lines are broken with <br> elements
+		/// 	DIV = 3 - new <div> blocks are created
+		/// }
+		/// Default Value: EnterMode.P;
+		/// </summary>
+		public EnterMode shiftEnterMode { get; set; }
+		[CKSerializable(Name = "shiftEnterMode")]
+		private int shiftEnterModeSer { get { return (int)shiftEnterMode; } }
+
+		/// <summary>
+		/// The skin to load. It may be the name of the skin folder inside the editor installation path, or the name and the path separated by a comma.
+		/// Default Value: "kama"
+		/// </summary>
+		[CKSerializable]
+		public string skin { get; set; }
+
+		/// <summary>
+		/// The number of columns to be generated by the smilies matrix.
+		/// Default Value: 8
+		/// </summary>
+		[CKSerializable]
+		public int smiley_columns { get; set; }
+
+		/// <summary>
+		/// The description to be used for each of the smileys defined in the CKEDITOR.config.smiley_images setting.
+		/// Each entry in this array list must match its relative pair in the CKEDITOR.config.smiley_images setting.
+		/// Default Value: 
+		/// new string[]
+		/// {
+		/// 	"smiley", "sad", "wink", "laugh", "frown", "cheeky", "blush", "surprise",
+		/// 	"indecision", "angry", "angel", "cool", "devil", "crying", "enlightened", "no",
+		/// 	"yes", "heart", "broken heart", "kiss", "mail"
+		/// };
+		/// </summary>
+		[CKSerializable]
+		public string[] smiley_descriptions { get; set; }
+
+		/// <summary>
+		/// The file names for the smileys to be displayed. These files must be contained inside the URL path defined with the CKEDITOR.config.smiley_path setting.
+		/// Default Value: 
+		/// new string[]
+		/// {
+		/// 	"regular_smile.gif", "sad_smile.gif", "wink_smile.gif", "teeth_smile.gif", "confused_smile.gif", "tounge_smile.gif",
+		/// 	"embaressed_smile.gif", "omg_smile.gif", "whatchutalkingabout_smile.gif", "angry_smile.gif", "angel_smile.gif", "shades_smile.gif",
+		/// 	"devil_smile.gif", "cry_smile.gif", "lightbulb.gif", "thumbs_down.gif", "thumbs_up.gif", "heart.gif",
+		/// 	"broken_heart.gif", "kiss.gif", "envelope.gif"
+		/// }
+		/// </summary>
+		[CKSerializable]
+		public string[] smiley_images { get; set; }
+
+		/// <summary>
+		/// The base path used to build the URL for the smiley images. It must end with a slash.
+		/// Default Value: "<CKEditor folder>/plugins/smiley/images/"
+		/// </summary>
+		[CKSerializable]
+		public string smiley_path { get; set; }
+
+		/// <summary>
+		/// The list of special characters visible in Special Character dialog.
+		/// Default Value: 
+		/// new string[]
+		/// {
+		/// 	"!","\"","#","$","%","&","'","(",")","*","+","-",".","/",
+		/// 	"0","1","2","3","4","5","6","7","8","9",":",";",
+		/// 	"<","=",">","?","@",
+		/// 	"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O",
+		/// 	"P","Q","R","S","T","U","V","W","X","Y","Z",
+		/// 	"[","]","^","_","`",
+		/// 	"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p",
+		/// 	"q","r","s","t","u","v","w","x","y","z",
+		/// 	"{","|","}","~",
+		/// 	"€", "‘", "’", "“", "”", "–", "—", "¡", "¢", "£", "¤", "¥", "¦", "§", "¨", "©", "ª", "«", "¬", "®", "¯", "°", "&", "²", "³", "´", "µ", "¶", "·", "¸", "¹", "º", "&", "¼", "½", "¾", "¿", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ü", "ý", "þ", "ÿ", "Œ", "œ", "Ŵ", "Ŷ", "ŵ", "ŷ", "‚", "‛", "„", "…", "™", "►", "•", "→", "⇒", "⇔", "♦", "≈"
+		/// }
+		/// </summary>
+		[CKSerializable]
+		public string[] specialChars { get; set; }
+
+		/// <summary>
+		/// The mode to load at the editor startup. It depends on the plugins loaded. By default, the "wysiwyg" and "source" modes are available.
+		/// public enum StartupMode
+		/// {
+		/// 	Wysiwyg,
+		/// 	Source
+		/// }
+		/// Default Value: StartupMode.Wysiwyg;
+		/// </summary>
+		public StartupMode startupMode { get; set; }
+		[CKSerializable(Name = "startupMode")]
+		private string startupModeSer { get { return startupMode.ToString().ToLower(); } }
+
+		/// <summary>
+		/// Whether to automaticaly enable the "show block" command when the editor loads. (StartupShowBlocks in FCKeditor)
+		/// Default Value: false
+		/// </summary>
+		[CKSerializable]
+		public bool startupOutlineBlocks { get; set; }
+
+		/// <summary>
+		/// Whether to automatically enable the "show borders" command when the editor loads. (ShowBorders in FCKeditor)
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool startupShowBorders { get; set; }
+
+		/// <summary>
+		/// The "styles definition set" to use in the editor. They will be used in the styles combo and the Style selector of the div container.
+		/// The styles may be defined in the page containing the editor, or can be loaded on demand from an external file. In the second case, 
+		/// if this setting contains only a name, the styles definition file will be loaded from the "styles" folder inside the styles plugin folder.
+		/// Otherwise, this setting has the "name:url" syntax, making it possible to set the URL from which loading the styles file.
+		/// Previously this setting was available as config.stylesCombo_stylesSet
+		/// Default Value: ["'default'"]
+		/// </summary>
+		[CKSerializable(IsObject = true)]
+		public string stylesSet { get; set; }
+
+		/// <summary>
+		/// The editor tabindex value.
+		/// Default Value: 0
+		/// </summary>
+		[CKSerializable]
+		public int tabIndex { get; set; }
+
+		/// <summary>
+		/// Intructs the editor to add a number of spaces (&nbsp;) to the text when hitting the TAB key.
+		/// If set to zero, the TAB key will be used to move the cursor focus to the next element in the page, out of the editor focus.
+		/// Default Value: 0
+		/// </summary>
+		[CKSerializable]
+		public int tabSpaces { get; set; }
+
+		/// <summary>
+		/// The list of templates definition files to load.
+		/// Default Value: new string[] { "~/plugins/templates/templates/default.js" };
+		/// </summary>
+		[CKSerializable]
+		public string[] templates_files { get; set; }
+
+		/// <summary>
+		/// Whether the "Replace actual contents" checkbox is checked by default in the Templates dialog.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool templates_replaceContent { get; set; }
+
+		/// <summary>
+		/// The theme to be used to build the UI.
+		/// Default Value: "default"
+		/// </summary>
+		[CKSerializable]
+		public string theme { get; set; }
+
+		/// <summary>
+		/// The toolbox (alias toolbar) definition. It is a toolbar name or an array of toolbars (strips), each one being also an array, containing a list of UI items.
+		/// Default Value: "Full"
+		/// </summary>
+		[CKSerializable]
+		public object toolbar { get; set; }
+
+		/// <summary>
+		/// The toolbar definition. It is an array of toolbars (strips), each one being also an array, containing a list of UI items.
+		/// Note that this setting is composed by "toolbar_" added by the toolbar name, which in this case is called "Basic".
+		/// This second part of the setting name can be anything. You must use this name in the CKEDITOR.config.toolbar setting,
+		/// so you instruct the editor which toolbar_(name) setting to you.
+		/// Default Value: 
+		/// new object[]
+		/// {
+		/// 	new object[] { "Bold", "Italic", "-", "NumberedList", "BulletedList", "-", "Link", "Unlink", "-", "About" },
+		/// };
+		/// </summary>
+		[CKSerializable]
+		public object[] toolbar_Basic { get; set; }
+
+		/// <summary>
+		/// This is the default toolbar definition used by the editor. It contains all editor features.
+		/// Default Value: 
+		/// new object[]
+		/// {
+		/// 	{'Source','-','Save','NewPage','Preview','-','Templates'},
+		/// 	{'Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'},
+		/// 	{'Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'},
+		/// 	{'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'},
+		/// 	'/',
+		/// 	{'Bold','Italic','Underline','Strike','-','Subscript','Superscript'},
+		/// 	{'NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv'},
+		/// 	{'JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'},
+		/// 	{'BidiLtr', 'BidiRtl' },
+		/// 	{'Link','Unlink','Anchor'},
+		/// 	{'Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak','Iframe'},
+		/// 	'/',
+		/// 	{'Styles','Format','Font','FontSize'},
+		/// 	{'TextColor','BGColor'},
+		/// 	{'Maximize', 'ShowBlocks','-','About'}
+		/// };
+		/// </summary>
+		[CKSerializable]
+		public object[] toolbar_Full { get; set; }
+
+		/// <summary>
+		/// This is the default toolbar definition used by the editor. It contains all editor features.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool toolbarCanCollapse { get; set; }
+
+		/// <summary>
+		/// The "theme space" to which rendering the toolbar. For the default theme, the recommended options are{
+		/// public enum ToolbarLocation
+		/// {
+		/// 	Top,
+		/// 	Bottom
+		/// }
+		/// Default Value: ToolbarLocation.Top
+		/// </summary>
+		public ToolbarLocation toolbarLocation { get; set; }
+		[CKSerializable(Name = "toolbarLocation")]
+		private string toolbarLocationSer { get { return toolbarLocation.ToString().ToLower(); } }
+
+		/// <summary>
+		/// Whether the toolbar must start expanded when the editor is loaded.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool toolbarStartupExpanded { get; set; }
+
+		/// <summary>
+		/// Specifies the color of the user interface. Works only with the Kama skin.
+		/// </summary>
+		[CKSerializable]
+		public string uiColor { get; set; }
+
+		/// <summary>
+		/// Indicates that some of the editor features, like alignment and text direction, should used the "computed value"
+		/// of the featureto indicate it's on/off state, instead of using the "real value".
+		/// If enabled, in a left to right written document, the "Left Justify" alignment button will show as active,
+		/// even if the aligment style is not explicitly applied to the current paragraph in the editor.
+		/// Default Value: true
+		/// </summary>
+		[CKSerializable]
+		public bool useComputedState { get; set; }
+
+		/// <summary>
+		/// The editor width in CSS size format or pixel integer.
+		/// Default Value: ""
+		/// </summary>
+		[CKSerializable]
+		public string width { get; set; }
+
+		/// <summary>
+		/// new object[] { "eventName", "function body" }
+		/// example: 
+		/// CKEditorConfig.CKEditorEventHandler.Add(new object[] { "instanceReady", "function (evt) { alert('Loaded editor: ' + evt.editor.name);}" });
+		/// CKEditorConfig.CKEditorEventHandler.Add(new object[] { "mode", "function (evt) { alert('Loaded editor: ' + evt.editor.name);}" });
+		/// Default Value: []
+		/// </summary>
+		public List<object> CKEditorEventHandler { get; set; }
+		// add becouse static fields aren't serialize
+		private object[] CKEditorEventHandlerSer
+		{
+			get
+			{
+				object[] retVal = new object[0];
+				if (this.CKEditorEventHandler != null)
+				{
+					retVal = this.CKEditorEventHandler.ToArray();
+					foreach (object item in retVal)
+					{
+						object[] stringArray = (object[])item;
+						if (!((string)stringArray[0]).StartsWith("'") && !((string)stringArray[0]).EndsWith("'"))
+							stringArray[0] = "'" + stringArray[0] + "'";
+					}
+				}
+				return retVal;
+			}
+		}
+
+		/// <summary>
+		/// new object[] { "eventName", "function body" }
+		/// example:
+		/// this.CKEditorInstanceEventHandler.Add(new object[] { "instanceReady", "function (evt) { alert('Loaded editor: ' + evt.editor.name);}" });
+		/// this.CKEditorInstanceEventHandler.Add(new object[] { "mode", "function (evt) { alert('Loaded editor: ' + evt.editor.name);}" });
+		/// Default Value: []
+		/// </summary>
+		public List<object> CKEditorInstanceEventHandler { get; set; }
+		[CKSerializable(Name = "on", IsObject = true)]
+		private object[] CKEditorInstanceEventHandlerSer
+		{
+			get
+			{
+				object[] retVal = new object[0];
+				if (this.CKEditorInstanceEventHandler != null)
+				{
+					retVal = this.CKEditorInstanceEventHandler.ToArray();
+					foreach (object item in retVal)
+					{
+						object[] stringArray = (object[])item;
+						if (!((string)stringArray[0]).StartsWith("'") && !((string)stringArray[0]).EndsWith("'"))
+							stringArray[0] = "'" + stringArray[0] + "'";
+					}
+				}
+				return retVal;
+			}
+		}
+
+		public System.Collections.Hashtable ExtraOptions { get; set; }
+		[CKSerializable(Name = "ExtraOptions")]
+		private object[] ExtraOptionsSer
+		{
+			get
+			{
+				object[] retVal = new object[this.ExtraOptions.Keys.Count];
+				int i = 0;
+				foreach (var item in this.ExtraOptions.Keys)
+					retVal[i++] = new object[] { item, this.ExtraOptions[item] };
+				return retVal;
+			}
+		}
+
+		#endregion
+
+		#region Default Constructor
+
+		static CKEditorConfig()
+		{
+			CKEditorConfig GlobalConfigObj = new CKEditorConfig();
+			GlobalConfigObj.autoGrow_maxHeight = 0;
+			GlobalConfigObj.autoGrow_minHeight = 200;
+			GlobalConfigObj.autoUpdateElement = true;
+			GlobalConfigObj.baseFloatZIndex = 10000;
+			GlobalConfigObj.baseHref = string.Empty;
+			GlobalConfigObj.blockedKeystrokes = new int[] { CKEDITOR_CTRL + 66 /*B*/, CKEDITOR_CTRL + 73 /*I*/, CKEDITOR_CTRL + 85 /*U*/};
+			GlobalConfigObj.bodyClass = string.Empty;
+			GlobalConfigObj.bodyId = string.Empty;
+			GlobalConfigObj.browserContextMenuOnCtrl = true;
+			GlobalConfigObj.colorButton_backStyle = @"{ element : 'span', styles : { 'background-color' : '#(color)' } }";
+			GlobalConfigObj.colorButton_colors = "000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF";
+			GlobalConfigObj.colorButton_foreStyle = @"{ element : 'span',
+styles : { 'color' : '#(color)' },
+overrides : [ { element : 'font', attributes : { 'color' : null } } ] }";
+			GlobalConfigObj.contentsCss = new string[] { "~/contents.css" };
+			GlobalConfigObj.contentsLangDirection = contentsLangDirections.Ui;
+			GlobalConfigObj.contentsLanguage = string.Empty;
+			GlobalConfigObj.corePlugins = string.Empty;
+			GlobalConfigObj.coreStyles_bold = @"{ element : 'strong', overrides : 'b' }";
+			GlobalConfigObj.coreStyles_italic = @"{ element : 'em', overrides : 'i' }";
+			GlobalConfigObj.coreStyles_strike = @"{ element : 'strike' }";
+			GlobalConfigObj.coreStyles_subscript = @"{ element : 'sub' }";
+			GlobalConfigObj.coreStyles_superscript = @"{ element : 'sup' }";
+			GlobalConfigObj.coreStyles_underline = @"{ element : 'u' }";
+			GlobalConfigObj.customConfig = "config.js";
+			GlobalConfigObj.defaultLanguage = "en";
+			GlobalConfigObj.dialog_backgroundCoverColor = "white";
+			GlobalConfigObj.dialog_backgroundCoverOpacity = 0.5;
+			GlobalConfigObj.dialog_buttonsOrder = DialogButtonsOrder.OS;
+			GlobalConfigObj.dialog_magnetDistance = 20;
+			GlobalConfigObj.dialog_startupFocusTab = false;
+			GlobalConfigObj.disableNativeSpellChecker = true;
+			GlobalConfigObj.disableNativeTableHandles = true;
+			GlobalConfigObj.disableObjectResizing = false;
+			GlobalConfigObj.disableReadonlyStyling = false;
+			GlobalConfigObj.docType = @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"">";
+			GlobalConfigObj.editingBlock = true;
+			GlobalConfigObj.emailProtection = string.Empty;
+			GlobalConfigObj.enableTabKeyTools = true;
+			GlobalConfigObj.enterMode = EnterMode.P;
+			GlobalConfigObj.entities = true;
+			GlobalConfigObj.entities_additional = "#39";
+			GlobalConfigObj.entities_greek = true;
+			GlobalConfigObj.entities_latin = true;
+			GlobalConfigObj.extraPlugins = string.Empty;
+			GlobalConfigObj.filebrowserBrowseUrl = string.Empty;
+			GlobalConfigObj.filebrowserFlashBrowseUrl = string.Empty;
+			GlobalConfigObj.filebrowserFlashUploadUrl = string.Empty;
+			GlobalConfigObj.filebrowserImageBrowseLinkUrl = string.Empty;
+			GlobalConfigObj.filebrowserImageBrowseUrl = string.Empty;
+			GlobalConfigObj.filebrowserImageUploadUrl = string.Empty;
+			GlobalConfigObj.filebrowserUploadUrl = string.Empty;
+			GlobalConfigObj.filebrowserWindowFeatures = "location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes";
+			GlobalConfigObj.fillEmptyBlocks = true;
+			GlobalConfigObj.find_highlight = @"{ element : 'span', styles : { 'background-color' : '#004', 'color' : '#fff' } }";
+			GlobalConfigObj.font_defaultLabel = string.Empty;
+			GlobalConfigObj.font_names = @"Arial/Arial, Helvetica, sans-serif;
+Comic Sans MS/Comic Sans MS, cursive;
+Courier New/Courier New, Courier, monospace;
+Georgia/Georgia, serif;
+Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;
+Tahoma/Tahoma, Geneva, sans-serif;
+Times New Roman/Times New Roman, Times, serif;
+Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;
+Verdana/Verdana, Geneva, sans-serif";
+			GlobalConfigObj.font_style = @"{ element : 'span',
+styles : { 'font-family' : '#(family)' },
+overrides : [ { element : 'font', attributes : { 'face' : null } } ] }";
+			GlobalConfigObj.fontSize_defaultLabel = string.Empty;
+			GlobalConfigObj.fontSize_sizes = "8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px";
+			GlobalConfigObj.fontSize_style = @"{ element : 'span',
+styles : { 'font-size' : '#(size)' },
+overrides : [ { element : 'font', attributes : { 'size' : null } } ] }";
+			GlobalConfigObj.forceEnterMode = false;
+			GlobalConfigObj.forcePasteAsPlainText = false;
+			GlobalConfigObj.forceSimpleAmpersand = false;
+			GlobalConfigObj.format_address = @"{ element : 'address' }";
+			GlobalConfigObj.format_div = @"{ element : 'div' }";
+			GlobalConfigObj.format_h1 = @"{ element : 'h1' }";
+			GlobalConfigObj.format_h2 = @"{ element : 'h2' }";
+			GlobalConfigObj.format_h3 = @"{ element : 'h3' }";
+			GlobalConfigObj.format_h4 = @"{ element : 'h4' }";
+			GlobalConfigObj.format_h5 = @"{ element : 'h5' }";
+			GlobalConfigObj.format_h6 = @"{ element : 'h6' }";
+			GlobalConfigObj.format_p = @"{ element : 'p' }";
+			GlobalConfigObj.format_pre = @"{ element : 'pre' }";
+			GlobalConfigObj.format_tags = "p;h1;h2;h3;h4;h5;h6;pre;address;div";
+			GlobalConfigObj.fullPage = false;
+			GlobalConfigObj.height = "200";
+			GlobalConfigObj.htmlEncodeOutput = true;
+			GlobalConfigObj.ignoreEmptyParagraph = true;
+			GlobalConfigObj.image_previewText = string.Empty;
+			GlobalConfigObj.image_removeLinkByEmptyURL = true;
+			GlobalConfigObj.indentClasses = new string[0];
+			GlobalConfigObj.indentOffset = 40;
+			GlobalConfigObj.indentUnit = "px";
+			GlobalConfigObj.keystrokes = new object[] 
+			{ 
+				new object[] { CKEDITOR_ALT + 121 /*F10*/, "toolbarFocus" },
+				new object[] { CKEDITOR_ALT + 122 /*F11*/, "elementsPathFocus" },
+				new object[] { CKEDITOR_SHIFT + 121 /*F10*/, "contextMenu" },
+				new object[] { CKEDITOR_CTRL + 90 /*Z*/, "undo" },
+				new object[] { CKEDITOR_CTRL + 89 /*Y*/, "redo" },
+				new object[] { CKEDITOR_CTRL + CKEDITOR_SHIFT + 90 /*Z*/, "redo" },
+				new object[] { CKEDITOR_CTRL + 76 /*L*/, "link" },
+				new object[] { CKEDITOR_CTRL + 66 /*B*/, "bold" },
+				new object[] { CKEDITOR_CTRL + 73 /*I*/, "italic" },
+				new object[] { CKEDITOR_CTRL + 85 /*U*/, "underline" },
+				new object[] { CKEDITOR_ALT + 109 /*-*/, "toolbarCollapse" }
+			};
+			GlobalConfigObj.language = string.Empty;
+			GlobalConfigObj.menu_groups = "clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea";
+			GlobalConfigObj.pasteFromWordCleanupFile = "default";
+			GlobalConfigObj.pasteFromWordNumberedHeadingToList = false;
+			GlobalConfigObj.pasteFromWordPromptCleanup = false;
+			GlobalConfigObj.pasteFromWordRemoveFontStyles = true;
+			GlobalConfigObj.pasteFromWordRemoveStyles = false;
+			//	todo
+			//this.plugins = string.Empty;
+			GlobalConfigObj.protectedSource = new object[0];
+			GlobalConfigObj.removeDialogTabs = string.Empty;
+			GlobalConfigObj.removeFormatAttributes = "class,style,lang,width,height,align,hspace,valign";
+			GlobalConfigObj.removeFormatTags = "b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var";
+			GlobalConfigObj.removePlugins = string.Empty;
+			GlobalConfigObj.resize_dir = ResizeDir.Both;
+			GlobalConfigObj.resize_enabled = true;
+			GlobalConfigObj.resize_maxHeight = 3000;
+			GlobalConfigObj.resize_maxWidth = 3000;
+			GlobalConfigObj.resize_minHeight = 250;
+			GlobalConfigObj.resize_minWidth = 750;
+			GlobalConfigObj.scayt_autoStartup = false;
+			GlobalConfigObj.scayt_contextCommands = ScaytContextCommands.All;
+			GlobalConfigObj.scayt_contextMenuItemsOrder = ScaytContextMenuItemsOrder.Suggest | ScaytContextMenuItemsOrder.Moresuggest | ScaytContextMenuItemsOrder.Control;
+			GlobalConfigObj.scayt_customDictionaryIds = string.Empty;
+			GlobalConfigObj.scayt_customerid = string.Empty;
+			GlobalConfigObj.scayt_maxSuggestions = 5;
+			GlobalConfigObj.scayt_moreSuggestions = ScaytMoreSuggestions.On;
+			GlobalConfigObj.scayt_sLang = "en_US";
+			GlobalConfigObj.scayt_srcUrl = string.Empty;
+			GlobalConfigObj.scayt_uiTabs = "1,1,1";
+			GlobalConfigObj.scayt_userDictionaryName = string.Empty;
+			GlobalConfigObj.sharedSpacesBottom = string.Empty;
+			GlobalConfigObj.sharedSpacesTop = string.Empty;
+			GlobalConfigObj.shiftEnterMode = EnterMode.P;
+			GlobalConfigObj.skin = "kama";
+			GlobalConfigObj.smiley_columns = 8;
+			GlobalConfigObj.smiley_descriptions = new string[]
+			{
+				"smiley", "sad", "wink", "laugh", "frown", "cheeky", "blush", "surprise",
+				"indecision", "angry", "angel", "cool", "devil", "crying", "enlightened", "no",
+				"yes", "heart", "broken heart", "kiss", "mail"
+			};
+			GlobalConfigObj.smiley_images = new string[]
+			{
+				"regular_smile.gif", "sad_smile.gif", "wink_smile.gif", "teeth_smile.gif", "confused_smile.gif", "tounge_smile.gif",
+				"embaressed_smile.gif", "omg_smile.gif", "whatchutalkingabout_smile.gif", "angry_smile.gif", "angel_smile.gif", "shades_smile.gif",
+				"devil_smile.gif", "cry_smile.gif", "lightbulb.gif", "thumbs_down.gif", "thumbs_up.gif", "heart.gif",
+				"broken_heart.gif", "kiss.gif", "envelope.gif"
+			};
+			GlobalConfigObj.smiley_path = string.Empty;
+			GlobalConfigObj.specialChars = new string[]
+			{
+				"!","\"","#","$","%","&","'","(",")","*","+","-",".","/",
+				"0","1","2","3","4","5","6","7","8","9",":",";",
+				"<","=",">","?","@",
+				"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O",
+				"P","Q","R","S","T","U","V","W","X","Y","Z",
+				"[","]","^","_","`",
+				"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p",
+				"q","r","s","t","u","v","w","x","y","z",
+				"{","|","}","~",
+				"€", "‘", "’", "“", "”", "–", "—", "¡", "¢", "£", "¤", "¥", "¦", "§", "¨", "©", "ª", "«", "¬", "®", "¯", "°", "&", "²", "³", "´", "µ", "¶", "·", "¸", "¹", "º", "&", "¼", "½", "¾", "¿", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ü", "ý", "þ", "ÿ", "Œ", "œ", "Ŵ", "Ŷ", "ŵ", "ŷ", "‚", "‛", "„", "…", "™", "►", "•", "→", "⇒", "⇔", "♦", "≈"
+			};
+			GlobalConfigObj.startupMode = StartupMode.Wysiwyg;
+			GlobalConfigObj.startupOutlineBlocks = false;
+			GlobalConfigObj.startupShowBorders = true;
+			GlobalConfigObj.stylesSet = "default";
+			GlobalConfigObj.tabIndex = 0;
+			GlobalConfigObj.tabSpaces = 0;
+			GlobalConfigObj.templates_files = new string[] { "~/plugins/templates/templates/default.js" };
+			GlobalConfigObj.templates_replaceContent = true;
+			GlobalConfigObj.theme = "default";
+			GlobalConfigObj.toolbar = "Full";
+			GlobalConfigObj.toolbar_Basic = new object[]
+			{
+				new object[] { "Bold", "Italic", "-", "NumberedList", "BulletedList", "-", "Link", "Unlink", "-", "About" },
+			};
+			GlobalConfigObj.toolbar_Full = new object[]
+			{
+				new object[] { "Source", "-", "Save", "NewPage", "Preview", "-", "Templates" },
+				new object[] { "Cut", "Copy", "Paste", "PasteText", "PasteFromWord", "-", "Print", "SpellChecker", "Scayt" },
+				new object[] { "Undo", "Redo", "-", "Find", "Replace", "-", "SelectAll", "RemoveFormat" },
+				new object[] { "Form", "Checkbox", "Radio", "TextField", "Textarea", "Select", "Button", "ImageButton", "HiddenField" },
+				"/",
+				new object[] { "Bold", "Italic", "Underline", "Strike", "-", "Subscript", "Superscript" },
+				new object[] { "NumberedList", "BulletedList", "-", "Outdent", "Indent", "Blockquote", "CreateDiv" },
+				new object[] { "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock" },
+				new object[] { "BidiLtr", "BidiRtl" },
+				new object[] { "Link", "Unlink", "Anchor" },
+				new object[] { "Image", "Flash", "Table", "HorizontalRule", "Smiley", "SpecialChar", "PageBreak", "Iframe" },
+				"/",
+				new object[] { "Styles", "Format", "Font", "FontSize" },
+				new object[] { "TextColor", "BGColor" },
+				new object[] { "Maximize", "ShowBlocks", "-", "About" }
+			};
+			GlobalConfigObj.toolbarCanCollapse = true;
+			GlobalConfigObj.toolbarLocation = ToolbarLocation.Top;
+			GlobalConfigObj.toolbarStartupExpanded = true;
+			GlobalConfigObj.uiColor = "#D3D3D3";
+			GlobalConfigObj.useComputedState = true;
+			GlobalConfigObj.width = string.Empty;
+			GlobalConfigObj.CKEditorInstanceEventHandler = null;
+			GlobalConfigObj.CKEditorEventHandler = null;
+			GlobalConfigObj.ExtraOptions = new System.Collections.Hashtable();
+			CKEditorConfig.GlobalConfig = GlobalConfigObj;
+		}
+		private CKEditorConfig() { }
+		public CKEditorConfig(string editorPath)
+		{
+			this.autoGrow_maxHeight = CKEditorConfig.GlobalConfig.autoGrow_maxHeight;
+			this.autoGrow_minHeight = CKEditorConfig.GlobalConfig.autoGrow_minHeight;
+			this.autoUpdateElement = CKEditorConfig.GlobalConfig.autoUpdateElement;
+			this.baseFloatZIndex = CKEditorConfig.GlobalConfig.baseFloatZIndex;
+			this.baseHref = CKEditorConfig.GlobalConfig.baseHref;
+			this.blockedKeystrokes = CKEditorConfig.GlobalConfig.blockedKeystrokes;
+			this.bodyClass = CKEditorConfig.GlobalConfig.bodyClass;
+			this.bodyId = CKEditorConfig.GlobalConfig.bodyId;
+			this.browserContextMenuOnCtrl = CKEditorConfig.GlobalConfig.browserContextMenuOnCtrl;
+			this.colorButton_backStyle = CKEditorConfig.GlobalConfig.colorButton_backStyle;
+			this.colorButton_colors = CKEditorConfig.GlobalConfig.colorButton_colors;
+			this.colorButton_foreStyle = CKEditorConfig.GlobalConfig.colorButton_foreStyle;
+			this.contentsCss = ResoleResolveUrl(CKEditorConfig.GlobalConfig.contentsCss, editorPath);
+			this.contentsLangDirection = CKEditorConfig.GlobalConfig.contentsLangDirection;
+			this.contentsLanguage = CKEditorConfig.GlobalConfig.contentsLanguage;
+			this.corePlugins = CKEditorConfig.GlobalConfig.corePlugins;
+			this.coreStyles_bold = CKEditorConfig.GlobalConfig.coreStyles_bold;
+			this.coreStyles_italic = CKEditorConfig.GlobalConfig.coreStyles_italic;
+			this.coreStyles_strike = CKEditorConfig.GlobalConfig.coreStyles_strike;
+			this.coreStyles_subscript = CKEditorConfig.GlobalConfig.coreStyles_subscript;
+			this.coreStyles_superscript = CKEditorConfig.GlobalConfig.coreStyles_superscript;
+			this.coreStyles_underline = CKEditorConfig.GlobalConfig.coreStyles_underline;
+			this.customConfig = CKEditorConfig.GlobalConfig.customConfig;
+			this.defaultLanguage = CKEditorConfig.GlobalConfig.defaultLanguage;
+			this.dialog_backgroundCoverColor = CKEditorConfig.GlobalConfig.dialog_backgroundCoverColor;
+			this.dialog_backgroundCoverOpacity = CKEditorConfig.GlobalConfig.dialog_backgroundCoverOpacity;
+			this.dialog_buttonsOrder = CKEditorConfig.GlobalConfig.dialog_buttonsOrder;
+			this.dialog_magnetDistance = CKEditorConfig.GlobalConfig.dialog_magnetDistance;
+			this.dialog_startupFocusTab = CKEditorConfig.GlobalConfig.dialog_startupFocusTab;
+			this.disableNativeSpellChecker = CKEditorConfig.GlobalConfig.disableNativeSpellChecker;
+			this.disableNativeTableHandles = CKEditorConfig.GlobalConfig.disableNativeTableHandles;
+			this.disableObjectResizing = CKEditorConfig.GlobalConfig.disableObjectResizing;
+			this.disableReadonlyStyling = CKEditorConfig.GlobalConfig.disableReadonlyStyling;
+			this.docType = CKEditorConfig.GlobalConfig.docType;
+			this.editingBlock = CKEditorConfig.GlobalConfig.editingBlock;
+			this.emailProtection = CKEditorConfig.GlobalConfig.emailProtection;
+			this.enableTabKeyTools = CKEditorConfig.GlobalConfig.enableTabKeyTools;
+			this.enterMode = CKEditorConfig.GlobalConfig.enterMode;
+			this.entities = CKEditorConfig.GlobalConfig.entities;
+			this.entities_additional = CKEditorConfig.GlobalConfig.entities_additional;
+			this.entities_greek = CKEditorConfig.GlobalConfig.entities_greek;
+			this.entities_latin = CKEditorConfig.GlobalConfig.entities_latin;
+			this.extraPlugins = CKEditorConfig.GlobalConfig.extraPlugins;
+			this.filebrowserBrowseUrl = CKEditorConfig.GlobalConfig.filebrowserBrowseUrl;
+			this.filebrowserFlashBrowseUrl = CKEditorConfig.GlobalConfig.filebrowserFlashBrowseUrl;
+			this.filebrowserFlashUploadUrl = CKEditorConfig.GlobalConfig.filebrowserFlashUploadUrl;
+			this.filebrowserImageBrowseLinkUrl = CKEditorConfig.GlobalConfig.filebrowserImageBrowseLinkUrl;
+			this.filebrowserImageBrowseUrl = CKEditorConfig.GlobalConfig.filebrowserImageBrowseUrl;
+			this.filebrowserImageUploadUrl = CKEditorConfig.GlobalConfig.filebrowserImageUploadUrl;
+			this.filebrowserUploadUrl = CKEditorConfig.GlobalConfig.filebrowserUploadUrl;
+			this.filebrowserWindowFeatures = CKEditorConfig.GlobalConfig.filebrowserWindowFeatures;
+			this.fillEmptyBlocks = CKEditorConfig.GlobalConfig.fillEmptyBlocks;
+			this.find_highlight = CKEditorConfig.GlobalConfig.find_highlight;
+			this.font_defaultLabel = CKEditorConfig.GlobalConfig.font_defaultLabel;
+			this.font_names = CKEditorConfig.GlobalConfig.font_names;
+			this.font_style = CKEditorConfig.GlobalConfig.font_style;
+			this.fontSize_defaultLabel = CKEditorConfig.GlobalConfig.fontSize_defaultLabel;
+			this.fontSize_sizes = CKEditorConfig.GlobalConfig.fontSize_sizes;
+			this.fontSize_style = CKEditorConfig.GlobalConfig.fontSize_style;
+			this.forceEnterMode = CKEditorConfig.GlobalConfig.forceEnterMode;
+			this.forcePasteAsPlainText = CKEditorConfig.GlobalConfig.forcePasteAsPlainText;
+			this.forceSimpleAmpersand = CKEditorConfig.GlobalConfig.forceSimpleAmpersand;
+			this.format_address = CKEditorConfig.GlobalConfig.format_address;
+			this.format_div = CKEditorConfig.GlobalConfig.format_div;
+			this.format_h1 = CKEditorConfig.GlobalConfig.format_h1;
+			this.format_h2 = CKEditorConfig.GlobalConfig.format_h2;
+			this.format_h3 = CKEditorConfig.GlobalConfig.format_h3;
+			this.format_h4 = CKEditorConfig.GlobalConfig.format_h4;
+			this.format_h5 = CKEditorConfig.GlobalConfig.format_h5;
+			this.format_h6 = CKEditorConfig.GlobalConfig.format_h6;
+			this.format_p = CKEditorConfig.GlobalConfig.format_p;
+			this.format_pre = CKEditorConfig.GlobalConfig.format_pre;
+			this.format_tags = CKEditorConfig.GlobalConfig.format_tags;
+			this.fullPage = CKEditorConfig.GlobalConfig.fullPage;
+			this.height = CKEditorConfig.GlobalConfig.height;
+			this.htmlEncodeOutput = CKEditorConfig.GlobalConfig.htmlEncodeOutput;
+			this.ignoreEmptyParagraph = CKEditorConfig.GlobalConfig.ignoreEmptyParagraph;
+			this.image_previewText = CKEditorConfig.GlobalConfig.image_previewText;
+			this.image_removeLinkByEmptyURL = CKEditorConfig.GlobalConfig.image_removeLinkByEmptyURL;
+			this.indentClasses = CKEditorConfig.GlobalConfig.indentClasses;
+			this.indentOffset = CKEditorConfig.GlobalConfig.indentOffset;
+			this.indentUnit = CKEditorConfig.GlobalConfig.indentUnit;
+			this.keystrokes = CKEditorConfig.GlobalConfig.keystrokes;
+			this.language = CKEditorConfig.GlobalConfig.language;
+			this.menu_groups = CKEditorConfig.GlobalConfig.menu_groups;
+			this.pasteFromWordCleanupFile = CKEditorConfig.GlobalConfig.pasteFromWordCleanupFile;
+			this.pasteFromWordNumberedHeadingToList = CKEditorConfig.GlobalConfig.pasteFromWordNumberedHeadingToList;
+			this.pasteFromWordPromptCleanup = CKEditorConfig.GlobalConfig.pasteFromWordPromptCleanup;
+			this.pasteFromWordRemoveFontStyles = CKEditorConfig.GlobalConfig.pasteFromWordRemoveFontStyles;
+			this.pasteFromWordRemoveStyles = CKEditorConfig.GlobalConfig.pasteFromWordRemoveStyles;
+			this.protectedSource = CKEditorConfig.GlobalConfig.protectedSource;
+			this.removeDialogTabs = CKEditorConfig.GlobalConfig.removeDialogTabs;
+			this.removeFormatAttributes = CKEditorConfig.GlobalConfig.removeFormatAttributes;
+			this.removeFormatTags = CKEditorConfig.GlobalConfig.removeFormatTags;
+			this.removePlugins = CKEditorConfig.GlobalConfig.removePlugins;
+			this.resize_dir = CKEditorConfig.GlobalConfig.resize_dir;
+			this.resize_enabled = CKEditorConfig.GlobalConfig.resize_enabled;
+			this.resize_maxHeight = CKEditorConfig.GlobalConfig.resize_maxHeight;
+			this.resize_maxWidth = CKEditorConfig.GlobalConfig.resize_maxWidth;
+			this.resize_minHeight = CKEditorConfig.GlobalConfig.resize_minHeight;
+			this.resize_minWidth = CKEditorConfig.GlobalConfig.resize_minWidth;
+			this.scayt_autoStartup = CKEditorConfig.GlobalConfig.scayt_autoStartup;
+			this.scayt_contextCommands = CKEditorConfig.GlobalConfig.scayt_contextCommands;
+			this.scayt_contextMenuItemsOrder = CKEditorConfig.GlobalConfig.scayt_contextMenuItemsOrder;
+			this.scayt_customDictionaryIds = CKEditorConfig.GlobalConfig.scayt_customDictionaryIds;
+			this.scayt_customerid = CKEditorConfig.GlobalConfig.scayt_customerid;
+			this.scayt_maxSuggestions = CKEditorConfig.GlobalConfig.scayt_maxSuggestions;
+			this.scayt_moreSuggestions = CKEditorConfig.GlobalConfig.scayt_moreSuggestions;
+			this.scayt_sLang = CKEditorConfig.GlobalConfig.scayt_sLang;
+			this.scayt_srcUrl = CKEditorConfig.GlobalConfig.scayt_srcUrl;
+			this.scayt_uiTabs = CKEditorConfig.GlobalConfig.scayt_uiTabs;
+			this.scayt_userDictionaryName = CKEditorConfig.GlobalConfig.scayt_userDictionaryName;
+			this.sharedSpacesBottom = CKEditorConfig.GlobalConfig.sharedSpacesBottom;
+			this.sharedSpacesTop = CKEditorConfig.GlobalConfig.sharedSpacesTop;
+			this.shiftEnterMode = CKEditorConfig.GlobalConfig.shiftEnterMode;
+			this.skin = CKEditorConfig.GlobalConfig.skin;
+			this.smiley_columns = CKEditorConfig.GlobalConfig.smiley_columns;
+			this.smiley_descriptions = CKEditorConfig.GlobalConfig.smiley_descriptions;
+			this.smiley_images = CKEditorConfig.GlobalConfig.smiley_images;
+			this.smiley_path = CKEditorConfig.GlobalConfig.smiley_path;
+			this.specialChars = CKEditorConfig.GlobalConfig.specialChars;
+			this.startupMode = CKEditorConfig.GlobalConfig.startupMode;
+			this.startupOutlineBlocks = CKEditorConfig.GlobalConfig.startupOutlineBlocks;
+			this.startupShowBorders = CKEditorConfig.GlobalConfig.startupShowBorders;
+			this.stylesSet = CKEditorConfig.GlobalConfig.stylesSet;
+			this.tabIndex = CKEditorConfig.GlobalConfig.tabIndex;
+			this.tabSpaces = CKEditorConfig.GlobalConfig.tabSpaces;
+			this.templates_files = ResoleResolveUrl(CKEditorConfig.GlobalConfig.templates_files, editorPath);
+			this.templates_replaceContent = CKEditorConfig.GlobalConfig.templates_replaceContent;
+			this.theme = CKEditorConfig.GlobalConfig.theme;
+			this.toolbar = CKEditorConfig.GlobalConfig.toolbar;
+			this.toolbar_Basic = CKEditorConfig.GlobalConfig.toolbar_Basic;
+			this.toolbar_Full = CKEditorConfig.GlobalConfig.toolbar_Full;
+			this.toolbarCanCollapse = CKEditorConfig.GlobalConfig.toolbarCanCollapse;
+			this.toolbarLocation = CKEditorConfig.GlobalConfig.toolbarLocation;
+			this.uiColor = CKEditorConfig.GlobalConfig.uiColor;
+			this.toolbarStartupExpanded = CKEditorConfig.GlobalConfig.toolbarStartupExpanded;
+			this.useComputedState = CKEditorConfig.GlobalConfig.useComputedState;
+			this.width = CKEditorConfig.GlobalConfig.width;
+			this.ExtraOptions = new System.Collections.Hashtable(CKEditorConfig.GlobalConfig.ExtraOptions);
+			this.CKEditorEventHandler = null;
+			if (CKEditorInstanceEventHandler != null)
+				this.CKEditorInstanceEventHandler = new List<object>(CKEditorConfig.GlobalConfig.CKEditorInstanceEventHandler);
+		}
+		private string[] ResoleResolveUrl(string[] value, string resolvedStr)
+		{
+			for (int i = 0; i < value.Length; i++)
+				if (value[i].StartsWith("~") && !value[i].StartsWith(resolvedStr))
+					value[i] = resolvedStr + value[i].Replace("~", "");
+			return value;
+		}
+		#endregion
+	}
+}
Index: /CKEditor.NET/trunk/CKEditor.NET/CKEditorControl.cs
===================================================================
--- /CKEditor.NET/trunk/CKEditor.NET/CKEditorControl.cs	(revision 6521)
+++ /CKEditor.NET/trunk/CKEditor.NET/CKEditorControl.cs	(revision 6521)
@@ -0,0 +1,1067 @@
+﻿/*
+ * Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Text;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+using System.IO;
+using System.Text.RegularExpressions;
+using System.Globalization;
+using System.Runtime.InteropServices;
+using System.Collections.Specialized;
+
+namespace CKEditor.NET
+{
+	[DefaultProperty("Text")]
+	[ToolboxData("<{0}:CKEditorControl runat=server></{0}:CKEditorControl>")]
+	[ParseChildren(false)]
+	[Designer("CKEditor.NET.CKEditorControlDesigner")]
+	public class CKEditorControl : TextBox
+	{
+		#region Changed TextBox Property
+
+		[Bindable(true)]
+		[Category("CKEditor Basic Settings")]
+		[DefaultValue("")]
+		public override string Text
+		{
+			get
+			{
+				if (!string.IsNullOrEmpty(base.Text))
+					base.Text = base.Text.Replace("&lt;", "<").Replace("&gt;", ">").Replace("&amp;", "&");
+				return base.Text;
+			}
+			set
+			{
+				if (!string.IsNullOrEmpty(value))
+					value = value.Replace("&lt;", "<").Replace("&gt;", ">").Replace("&amp;", "&");
+				base.Text = value;
+			}
+		}
+
+		public override TextBoxMode TextMode { get { return base.TextMode; } }
+
+		#endregion
+
+		#region Private Property
+
+		private string CKEditorJSFile
+		{
+			get
+			{
+				return this.BasePath + "/ckeditor.js";
+			}
+		}
+
+		#endregion
+
+		#region CKEditor Other Settings Property
+
+		[Category("CKEditor Basic Settings")]
+		[DefaultValue("~/ckeditor")]
+		public string BasePath
+		{
+			get
+			{
+				object obj = ViewState["BasePath" + this.ClientID];
+				if (obj == null)
+				{
+					obj = System.Configuration.ConfigurationManager.AppSettings["CKeditor:BasePath"];
+					ViewState["BasePath" + this.ClientID] = (obj == null ? "~/ckeditor" : (string)obj);
+				}
+				return (string)ViewState["BasePath" + this.ClientID];
+			}
+			set { ViewState["BasePath" + this.ClientID] = value; }
+		}
+
+		[Browsable(false)]
+		[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+		[EditorBrowsable(EditorBrowsableState.Never)]
+		public CKEditorConfig config
+		{
+			get
+			{
+				if (ViewState["CKEditorConfig" + this.ClientID] == null)
+					ViewState["CKEditorConfig" + this.ClientID] = new CKEditorConfig(this.BasePath);
+				return (CKEditorConfig)ViewState["CKEditorConfig" + this.ClientID];
+			}
+			set { ViewState["CKEditorConfig" + this.ClientID] = value; }
+		}
+
+		[Category("CKEditor Basic Settings")]
+		[Description("The height of editing area( content ), in relative or absolute, e.g. 30px, 5em. Note: Percentage unit is not supported yet.e.g. 30%.")]
+		[DefaultValue("200")]
+		public override Unit Height
+		{
+			get
+			{
+				System.Web.UI.WebControls.Unit result = new Unit(string.Empty);
+				try
+				{
+					result = System.Web.UI.WebControls.Unit.Parse(config.height);
+					base.Height = result;
+				}
+				catch { }
+				return result;
+			}
+			set
+			{
+				System.Web.UI.WebControls.Unit result = new Unit(string.Empty);
+				try
+				{
+					result = value;
+					base.Height = result;
+				}
+				catch { }
+				config.height = value.ToString().Replace("px", string.Empty);
+			}
+		}
+
+		[Category("CKEditor Basic Settings")]
+		[Description("The editor width in CSS size format or pixel integer.")]
+		[DefaultValue("100%")]
+		public override Unit Width
+		{
+			get
+			{
+				System.Web.UI.WebControls.Unit result = new Unit(string.Empty);
+				try
+				{
+					result = System.Web.UI.WebControls.Unit.Parse(config.width);
+					base.Width = result;
+				}
+				catch { }
+				return result;
+			}
+			set
+			{
+				System.Web.UI.WebControls.Unit result = new Unit(string.Empty);
+				try
+				{
+					result = value;
+					base.Width = result;
+				}
+				catch { }
+				config.width = value.ToString().Replace("px", string.Empty);
+			}
+		}
+
+		[Category("CKEditor Other Settings")]
+		[Description("The editor tabindex value.")]
+		[DefaultValue(typeof(short),"0")]
+		public override short TabIndex { get { return (short)config.tabIndex; } set { config.tabIndex = value; } }
+
+		#region Encaspulate config
+
+		[Category("CKEditor Other Settings")]
+		[Description("The maximum height to which the editor can reach using AutoGrow. Zero means unlimited.")]
+		[DefaultValue(0)]
+		public int AutoGrowMaxHeight { get { return config.autoGrow_maxHeight; } set { config.autoGrow_maxHeight = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("The minimum height to which the editor can reach using AutoGrow.")]
+		[DefaultValue(200)]
+		public int AutoGrowMinHeight { get { return config.autoGrow_minHeight; } set { config.autoGrow_minHeight = value; } }
+		
+		[Category("CKEditor Other Settings")]
+		[Description("Whether the replaced element (usually a textarea) is to be updated automatically when posting the form containing the editor.")]
+		[DefaultValue(true)]
+		public bool AutoUpdateElement { get { return config.autoUpdateElement; } set { config.autoUpdateElement = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description("The base href URL used to resolve relative and absolute URLs in the editor content.")]
+		[DefaultValue("")]
+		public string BaseHref { get { return config.baseHref; } set { config.baseHref = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Sets the ""class"" attribute to be used on the body element of the editing area. This can be useful when reusing the original CSS
+file you're using on your live website and you want to assing to the editor the same class name you're using for the region 
+that'll hold the contents. In this way, class specific CSS rules will be enabled.")]
+		[DefaultValue("")]
+		public string BodyClass { get { return config.bodyClass; } set { config.bodyClass = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Sets the ""id"" attribute to be used on the body element of the editing area. This can be useful when reusing the original CSS 
+file you're using on your live website and you want to assing to the editor the same id you're using for the region 
+that'll hold the contents. In this way, id specific CSS rules will be enabled.")]
+		[DefaultValue("")]
+		public string BodyId { get { return config.bodyId; } set { config.bodyId = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Whether to show the browser native context menu when the CTRL or the META (Mac) key is pressed while opening the context menu.")]
+		[DefaultValue(true)]
+		public bool BrowserContextMenuOnCtrl { get { return config.browserContextMenuOnCtrl; } set { config.browserContextMenuOnCtrl = value; } }
+
+		[PersistenceMode(PersistenceMode.Attribute)]
+		[Category("CKEditor Basic Settings")]
+		[Description("The CSS file(s) to be used to apply style to the contents. It should reflect the CSS used in the final pages where the contents are to be used.")]
+		[DefaultValue("~/ckeditor/contents.css")]
+		[Editor(typeof(System.ComponentModel.Design.MultilineStringEditor), typeof(System.Drawing.Design.UITypeEditor))]
+		public string ContentsCss
+		{
+			get
+			{
+				string retVal = string.Empty;
+				foreach (string item in config.contentsCss) retVal += item + ",";
+				if (retVal.EndsWith(",")) retVal = retVal.Remove(retVal.Length - 1);
+				return retVal;
+			}
+			set { config.contentsCss = value.Split(new char[] { ',' }); }
+		}
+
+		[Category("CKEditor Other Settings")][Description(@"The writting direction of the language used to write the editor contents. Allowed values are: 
+'ui' - which indicate content direction will be the same with the user interface language direction;
+'ltr' - for Left-To-Right language (like English);
+'rtl' - for Right-To-Left languages (like Arabic).")]
+		[DefaultValue(typeof(contentsLangDirections), "Ui")]
+		public contentsLangDirections ContentsLangDirection { get { return config.contentsLangDirection; } set { config.contentsLangDirection = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Language code of the writting language which is used to author the editor contents.")]
+		[DefaultValue("")]
+		public string ContentsLanguage { get { return config.contentsLanguage; } set { config.contentsLanguage = value; } }
+
+		[Category("CKEditor Other Settings")][Description(@"A comma separated list of plugins that are not related to editor instances. Reserved to plugins that extend the core code only.
+There are no ways to override this setting, except by editing the source code of CKEditor (_source/core/config.js).")]
+		[DefaultValue("")]
+		public string CorePlugins { get { return config.corePlugins; } set { config.corePlugins = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@"The URL path for the custom configuration file to be loaded. If not overloaded with inline configurations, it defaults 
+to the ""config.js"" file present in the root of the CKEditor installation directory.
+CKEditor will recursively load custom configuration files defined inside other custom configuration files.")]
+		[DefaultValue("config.js")]
+		public string CustomConfig { get { return config.customConfig; } set { config.customConfig = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description("The language to be used if CKEDITOR.config.language is left empty and it's not possible to localize the editor to the user language.")]
+		[DefaultValue("en")]
+		public string DefaultLanguage { get { return config.defaultLanguage; } set { config.defaultLanguage = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"The guideline to follow when generating the dialog buttons. There are 3 possible options:
+'OS' - the buttons will be displayed in the default order of the user's OS;
+'ltr' - for Left-To-Right order;
+'rtl' - for Right-To-Left order.")]
+		[DefaultValue(typeof(DialogButtonsOrder), "OS")]
+		public DialogButtonsOrder DialogButtonsOrder { get { return config.dialog_buttonsOrder; } set { config.dialog_buttonsOrder = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Disables the built-in spell checker while typing natively available in the browser (currently Firefox and Safari only).
+Even if word suggestions will not appear in the CKEditor context menu, this feature is useful to help quickly identifying misspelled words.
+This setting is currently compatible with Firefox only due to limitations in other browsers.")]
+		[DefaultValue(true)]
+		public bool DisableNativeSpellChecker { get { return config.disableNativeSpellChecker; } set { config.disableNativeSpellChecker = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Disables the ""table tools"" offered natively by the browser (currently Firefox only) to make quick table editing operations, 
+like adding or deleting rows and columns.")]
+		[DefaultValue(true)]
+		public bool DisableNativeTableHandles { get { return config.disableNativeTableHandles; } set { config.disableNativeTableHandles = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Disables the ability of resize objects (image and tables) in the editing area.")]
+		[DefaultValue(false)]
+		public bool DisableObjectResizing { get { return config.disableObjectResizing; } set { config.disableObjectResizing = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Disables inline styling on read-only elements.")]
+		[DefaultValue(false)]
+		public bool DisableReadonlyStyling { get { return config.disableReadonlyStyling; } set { config.disableReadonlyStyling = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Sets the doctype to be used when loading the editor content as HTML.")]
+		[DefaultValue(@"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"">")]
+		public string DocType { get { return config.docType; } set { config.docType = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Whether to render or not the editing block area in the editor interface.")]
+		[DefaultValue(true)]
+		public bool EditingBlock { get { return config.editingBlock; } set { config.editingBlock = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"The e-mail address anti-spam protection option. The protection will be applied when creating or modifying e-mail links through the editor interface.
+Two methods of protection can be choosed: 
+The e-mail parts (name, domain and any other query string) are assembled into a function call pattern. Such function must be provided by 
+the developer in the pages that will use the contents. 
+Only the e-mail address is obfuscated into a special string that has no meaning for humans or spam bots, but which is properly rendered and accepted by the browser.
+Both approaches require JavaScript to be enabled.")]
+		[DefaultValue("")]
+		public string EmailProtection { get { return config.emailProtection; } set { config.emailProtection = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Allow context-sensitive tab key behaviors, including the following scenarios: 
+When selection is anchored inside table cells:
+If TAB is pressed, select the contents of the ""next"" cell. If in the last cell in the table, add a new row to it and focus its first cell.
+If SHIFT+TAB is pressed, select the contents of the ""previous"" cell. Do nothing when it's in the first cell.")]
+		[DefaultValue(true)]
+		public bool EnableTabKeyTools { get { return config.enableTabKeyTools; } set { config.enableTabKeyTools = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Sets the behavior for the ENTER key. It also dictates other behaviour rules in the editor, like whether the <br> element is to be used as a paragraph separator when indenting text.
+The allowed values are the following constants, and their relative behavior: 
+CKEDITOR.ENTER_P (1): new <p> paragraphs are created;
+CKEDITOR.ENTER_BR (2): lines are broken with <br> elements;
+CKEDITOR.ENTER_DIV (3): new <div> blocks are created.
+Note: It's recommended to use the CKEDITOR.ENTER_P value because of its semantic value and correctness. The editor is optimized for this value.")]
+		[DefaultValue(typeof(EnterMode), "P")]
+		public EnterMode EnterMode { get { return config.enterMode; } set { config.enterMode = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description("Whether to use HTML entities in the output.")]
+		[DefaultValue(true)]
+		public bool Entities { get { return config.entities; } set { config.entities = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@"An additional list of entities to be used. It's a string containing each entry separated by a comma.
+Entities names or number must be used, exclusing the ""&"" preffix and the "";"" termination.")]
+		[DefaultValue("#39")]
+		public string EntitiesAdditional { get { return config.entities_additional; } set { config.entities_additional = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@"Whether to convert some symbols, mathematical symbols, and Greek letters to HTML entities. This may be more relevant for users typing text written in Greek.
+The list of entities can be found at the W3C HTML 4.01 Specification, section 24.3.1.")]
+		[DefaultValue(true)]
+		public bool EntitiesGreek { get { return config.entities_greek; } set { config.entities_greek = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@"Whether to convert some Latin characters (Latin alphabet No. 1, ISO 8859-1) to HTML entities.
+The list of entities can be found at the W3C HTML 4.01 Specification, section 24.2.1.")]
+		[DefaultValue(true)]
+		public bool EntitiesLatin { get { return config.entities_latin; } set { config.entities_latin = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@"List of additional plugins to be loaded. 
+This is a tool setting which makes it easier to add new plugins, whithout having to touch and possibly breaking the CKEDITOR.config.plugins setting.")]
+		[DefaultValue("")]
+		public string ExtraPlugins { get { return config.extraPlugins; } set { config.extraPlugins = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@"The location of an external file browser, that should be launched when ""Browse Server"" button is pressed.
+If configured, the ""Browse Server"" button will appear in Link, Image and Flash dialogs.")]
+		[DefaultValue("")]
+		public string FilebrowserBrowseUrl { get { return config.filebrowserBrowseUrl; } set { config.filebrowserBrowseUrl = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@"The location of an external file browser, that should be launched when ""Browse Server"" button is pressed in the Flash dialog.
+If not set, CKEditor will use CKEDITOR.config.filebrowserBrowseUrl.")]
+		[DefaultValue("")]
+		public string FilebrowserFlashBrowseUrl { get { return config.filebrowserFlashBrowseUrl; } set { config.filebrowserFlashBrowseUrl = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description("The location of a script that handles file uploads in the Flash dialog. If not set, CKEditor will use CKEDITOR.config.filebrowserUploadUrl.")]
+		[DefaultValue("")]
+		public string FilebrowserFlashUploadUrl { get { return config.filebrowserFlashUploadUrl; } set { config.filebrowserFlashUploadUrl = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@"The location of an external file browser, that should be launched when ""Browse Server"" button is pressed in the Link tab of Image dialog.
+If not set, CKEditor will use CKEDITOR.config.filebrowserBrowseUrl.")]
+		[DefaultValue("")]
+		public string FilebrowserImageBrowseLinkUrl { get { return config.filebrowserImageBrowseLinkUrl; } set { config.filebrowserImageBrowseLinkUrl = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@"The location of an external file browser, that should be launched when ""Browse Server"" button is pressed in the Image dialog.
+If not set, CKEditor will use CKEDITOR.config.filebrowserBrowseUrl.")]
+		[DefaultValue("")]
+		public string FilebrowserImageBrowseUrl { get { return config.filebrowserImageBrowseUrl; } set { config.filebrowserImageBrowseUrl = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description("The location of a script that handles file uploads in the Image dialog. If not set, CKEditor will use CKEDITOR.config.filebrowserUploadUrl.")]
+		[DefaultValue("")]
+		public string FilebrowserImageUploadUrl { get { return config.filebrowserImageUploadUrl; } set { config.filebrowserImageUploadUrl = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@"The location of a script that handles file uploads. If set, the ""Upload"" tab will appear in ""Link"", ""Image"" and ""Flash"" dialogs.")]
+		[DefaultValue("")]
+		public string FilebrowserUploadUrl { get { return config.filebrowserUploadUrl; } set { config.filebrowserUploadUrl = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"The ""features"" to use in the file browser popup window.")]
+		[DefaultValue("location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes")]
+		[Editor(typeof(System.ComponentModel.Design.MultilineStringEditor), typeof(System.Drawing.Design.UITypeEditor))]
+		public string FilebrowserWindowFeatures { get { return config.filebrowserWindowFeatures; } set { config.filebrowserWindowFeatures = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Whether a filler text (non-breaking space entity -  ) will be inserted into empty block elements in HTML output, 
+this is used to render block elements properly with line-height; When a function is instead specified, 
+it'll be passed a CKEDITOR.htmlParser.element to decide whether adding the filler text by expecting a boolean return value.")]
+		[DefaultValue(true)]
+		public bool FillEmptyBlocks { get { return config.fillEmptyBlocks; } set { config.fillEmptyBlocks = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("The text to be displayed in the Font combo is none of the available values matches the current cursor position or text selection.")]
+		[DefaultValue("")]
+		public string FontDefaultLabel { get { return config.font_defaultLabel; } set { config.font_defaultLabel = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@"The list of fonts names to be displayed in the Font combo in the toolbar. Entries are separated by semi-colons (;),
+while it's possible to have more than one font for each entry, in the HTML way (separated by comma).
+A display name may be optionally defined by prefixing the entries with the name and the slash character.")]
+		[DefaultValue(@"Arial/Arial, Helvetica, sans-serif;
+Comic Sans MS/Comic Sans MS, cursive;
+Courier New/Courier New, Courier, monospace;
+Georgia/Georgia, serif;
+Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;
+Tahoma/Tahoma, Geneva, sans-serif;
+Times New Roman/Times New Roman, Times, serif;
+Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;
+Verdana/Verdana, Geneva, sans-serif")]
+		[Editor(typeof(System.ComponentModel.Design.MultilineStringEditor), typeof(System.Drawing.Design.UITypeEditor))]
+		public string FontNames { get { return config.font_names; } set { config.font_names = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("The text to be displayed in the Font Size combo is none of the available values matches the current cursor position or text selection.")]
+		[DefaultValue("")]
+		public string FontSizeDefaultLabel { get { return config.fontSize_defaultLabel; } set { config.fontSize_defaultLabel = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@"The list of fonts size to be displayed in the Font Size combo in the toolbar. Entries are separated by semi-colons (;).
+Any kind of ""CSS like"" size can be used, like ""12px"", ""2.3em"", ""130%"", ""larger"" or ""x-small"".
+A display name may be optionally defined by prefixing the entries with the name and the slash character.")]
+		[DefaultValue("8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px")]
+		[Editor(typeof(System.ComponentModel.Design.MultilineStringEditor), typeof(System.Drawing.Design.UITypeEditor))]
+		public string FontSizeSizes { get { return config.fontSize_sizes; } set { config.fontSize_sizes = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Force the respect of CKEDITOR.config.enterMode as line break regardless of the context, 
+E.g. If CKEDITOR.config.enterMode is set to CKEDITOR.ENTER_P, press enter key inside a 'div' will create a new paragraph with 'p' instead of 'div'.")]
+		[DefaultValue(false)]
+		public bool ForceEnterMode { get { return config.forceEnterMode; } set { config.forceEnterMode = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description("Whether to force all pasting operations to insert on plain text into the editor, loosing any formatting information possibly available in the source text.")]
+		[DefaultValue(false)]
+		public bool ForcePasteAsPlainText { get { return config.forcePasteAsPlainText; } set { config.forcePasteAsPlainText = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@" Whether to force using ""&"" instead of ""&amp;"" in elements attributes values,
+it's not recommended to change this setting for compliance with the W3C XHTML 1.0 standards (C.12, XHTML 1.0).")]
+		[DefaultValue(false)]
+		public bool ForceSimpleAmpersand { get { return config.forceSimpleAmpersand; } set { config.forceSimpleAmpersand = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@" A list of semi colon separated style names (by default tags) representing the style definition for each entry to be displayed
+in the Format combo in the toolbar. Each entry must have its relative definition configuration in a setting named
+""format_(tagName)"". For example, the ""p"" entry has its definition taken from config.format_p.
+")]
+		[DefaultValue("p;h1;h2;h3;h4;h5;h6;pre;address;div")]
+		[Editor(typeof(System.ComponentModel.Design.MultilineStringEditor), typeof(System.Drawing.Design.UITypeEditor))]
+		public string FormatTags { get { return config.format_tags; } set { config.format_tags = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@"Indicates whether the contents to be edited are being inputted as a full HTML page. 
+A full page includes the <html>, <head> and <body> tags. 
+The final output will also reflect this setting, including the <body> contents only if this setting is disabled.")]
+		[DefaultValue(false)]
+		public bool FullPage { get { return config.fullPage; } set { config.fullPage = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Whether escape HTML when editor update original input element.")]
+		[DefaultValue(true)]
+		public bool HtmlEncodeOutput {get { return config.htmlEncodeOutput; } set { config.htmlEncodeOutput = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Whether the editor must output an empty value ("""") if it's contents is made by an empty paragraph only.")]
+		[DefaultValue(true)]
+		public bool IgnoreEmptyParagraph { get { return config.ignoreEmptyParagraph; } set { config.ignoreEmptyParagraph = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Padding text to set off the image in preview area.")]
+		[DefaultValue("")]
+		public string ImagePreviewText { get { return config.image_previewText; } set { config.image_previewText = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Whether to remove links when emptying the link URL field in the image dialog.")]
+		[DefaultValue(true)]
+		public bool ImageRemoveLinkByEmptyURL { get { return config.image_removeLinkByEmptyURL; } set { config.image_removeLinkByEmptyURL = value; } }
+
+		[TypeConverter(typeof(StringArrayConverter))]
+		[PersistenceMode(PersistenceMode.Attribute)]
+		[Category("CKEditor Other Settings")]
+		[Description("List of classes to use for indenting the contents. If it's null, no classes will be used and instead the #indentUnit and #indentOffset properties will be used.")]
+		[DefaultValue("")]
+		public string[] IndentClasses { get { return config.indentClasses; } set { config.indentClasses = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Size of each indentation step")]
+		[DefaultValue(40)]
+		public int IndentOffset { get { return config.indentOffset; } set { config.indentOffset = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Unit for the indentation style")]
+		[DefaultValue("px")]
+		public string IndentUnit { get { return config.indentUnit; } set { config.indentUnit = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description(@"The user interface language localization to use. If empty, the editor automatically localize the editor to the user language,
+if supported, otherwise the CKEDITOR.config.defaultLanguage language is used.")]
+		[DefaultValue("")]
+		public string Language { get { return config.language; } set { config.language = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Whether to transform MS Word outline numbered headings into lists.")]
+		[DefaultValue(false)]
+		public bool PasteFromWordNumberedHeadingToList { get { return config.pasteFromWordNumberedHeadingToList; } set { config.pasteFromWordNumberedHeadingToList = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Whether to prompt the user about the clean up of content being pasted from MS Word.")]
+		[DefaultValue(false)]
+		public bool PasteFromWordPromptCleanup { get { return config.pasteFromWordPromptCleanup; } set { config.pasteFromWordPromptCleanup = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Whether to ignore all font related formatting styles, including: 
+font size;
+font family;
+font foreground/background color.")]
+		[DefaultValue(true)]
+		public bool PasteFromWordRemoveFontStyles { get { return config.pasteFromWordRemoveFontStyles; } set { config.pasteFromWordRemoveFontStyles = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Whether to remove element styles that can't be managed with the editor. Note that this doesn't handle the font specific styles,
+which depends on the CKEDITOR.config.pasteFromWordRemoveFontStyles setting instead.")]
+		[DefaultValue(false)]
+		public bool PasteFromWordRemoveStyles { get { return config.pasteFromWordRemoveStyles; } set { config.pasteFromWordRemoveStyles = value; } }
+
+		[TypeConverter(typeof(StringArrayConverter))]
+		[PersistenceMode(PersistenceMode.Attribute)]
+		[Category("CKEditor Other Settings")]
+		[Description("List of regular expressions to be executed over the input HTML, indicating HTML source code that matched must not present in WYSIWYG mode for editing.")]
+		[DefaultValue("")]
+		public string[] ProtectedSource
+		{
+			get
+			{
+				string[] retVal = new string[config.protectedSource.Length];
+				try { retVal = (string[])config.protectedSource; }
+				catch { }
+				return retVal;
+			}
+			set { config.protectedSource = value; }
+		}
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"The dialog contents to removed. It's a string composed by dialog name and tab name with a colon between them. 
+Separate each pair with semicolon (see example). Note: All names are case-sensitive. 
+Note: Be cautious when specifying dialog tabs that are mandatory, like ""info"", 
+dialog functionality might be broken because of this!")]
+		[DefaultValue("")]
+		public string RemoveDialogTabs { get { return config.removeDialogTabs; } set { config.removeDialogTabs = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"List of plugins that must not be loaded. This is a tool setting which makes it easier to avoid loading plugins definied 
+in the CKEDITOR.config.plugins setting, whithout having to touch it and potentially breaking it.")]
+		[DefaultValue("")]
+		public string RemovePlugins { get { return config.removePlugins; } set { config.removePlugins = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"The directions to which the editor resizing is enabled. Possible values are ""both"", ""vertical"" and ""horizontal"".")]
+		[DefaultValue(typeof(ResizeDir), "Both")]
+		public ResizeDir ResizeDir { get { return config.resize_dir; } set { config.resize_dir = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Whether to enable the resizing feature. If disabled the resize handler will not be visible.")]
+		[DefaultValue(true)]
+		public bool ResizeEnabled { get { return config.resize_enabled; } set { config.resize_enabled = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("The maximum editor height, in pixels, when resizing it with the resize handle.")]
+		[DefaultValue(3000)]
+		public int ResizeMaxHeight { get { return config.resize_maxHeight; } set { config.resize_maxHeight = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("The maximum editor width, in pixels, when resizing it with the resize handle.")]
+		[DefaultValue(3000)]
+		public int ResizeMaxWidth { get { return config.resize_maxWidth; } set { config.resize_maxWidth = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"The minimum editor height, in pixels, when resizing it with the resize handle. 
+Note: It fallbacks to editor's actual height if that's smaller than the default value.")]
+		[DefaultValue(250)]
+		public int ResizeMinHeight { get { return config.resize_minHeight; } set { config.resize_minHeight = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"The minimum editor width, in pixels, when resizing it with the resize handle. 
+Note: It fallbacks to editor's actual width if that's smaller than the default value.")]
+		[DefaultValue(750)]
+		public int ResizeMinWidth { get { return config.resize_minWidth; } set { config.resize_minWidth = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("If enabled (true), turns on SCAYT automatically after loading the editor.")]
+		[DefaultValue(false)]
+		public bool ScaytAutoStartup { get { return config.scayt_autoStartup; } set { config.scayt_autoStartup = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[DefaultValue("ID of bottom cntrol's shared")]
+		public string SharedSpacesBottom { get { return config.sharedSpacesBottom; } set { config.sharedSpacesBottom = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[DefaultValue("ID of top cntrol's shared")]
+		public string SharedSpacesTop { get { return config.sharedSpacesTop; } set { config.sharedSpacesTop = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Just like the CKEDITOR.config.enterMode setting, it defines the behavior for the SHIFT+ENTER key.
+The allowed values are the following constants, and their relative behavior: 
+CKEDITOR.ENTER_P (1): new <p> paragraphs are created;
+CKEDITOR.ENTER_BR (2): lines are broken with <br> elements;
+CKEDITOR.ENTER_DIV (3): new <div> blocks are created.")]
+		[DefaultValue(typeof(EnterMode), "P")]
+		public EnterMode ShiftEnterMode { get { return config.shiftEnterMode; } set { config.shiftEnterMode = value; } }
+
+		[Category("CKEditor Basic Settings")]
+		[Description("The skin to load. It may be the name of the skin folder inside the editor installation path, or the name and the path separated by a comma.")]
+		[DefaultValue("kama")]
+		public string Skin { get { return config.skin; } set { config.skin = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"The mode to load at the editor startup. It depends on the plugins loaded. By default, the ""wysiwyg"" and ""source"" modes are available.")]
+		[DefaultValue(typeof(StartupMode), "Wysiwyg")]
+		public StartupMode StartupMode { get { return config.startupMode; } set { config.startupMode = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Whether to automaticaly enable the ""show block"" command when the editor loads. (StartupShowBlocks in FCKeditor)")]
+		[DefaultValue(false)]
+		public bool StartupOutlineBlocks { get { return config.startupOutlineBlocks; } set { config.startupOutlineBlocks = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Whether to automatically enable the ""show borders"" command when the editor loads. (ShowBorders in FCKeditor)")]
+		[DefaultValue(true)]
+		public bool StartupShowBorders { get { return config.startupShowBorders; } set { config.startupShowBorders = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"The ""styles definition set"" to use in the editor. They will be used in the styles combo and the Style selector of the div container.
+The styles may be defined in the page containing the editor, or can be loaded on demand from an external file. In the second case, 
+if this setting contains only a name, the styles definition file will be loaded from the ""styles"" folder inside the styles plugin folder.
+Otherwise, this setting has the ""name:url"" syntax, making it possible to set the URL from which loading the styles file.
+Previously this setting was available as config.stylesCombo_stylesSet")]
+		[DefaultValue("default")]
+		public string StylesSet { get { return config.stylesSet; } set { config.stylesSet = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Intructs the editor to add a number of spaces (&nbsp;) to the text when hitting the TAB key.
+If set to zero, the TAB key will be used to move the cursor focus to the next element in the page, out of the editor focus.")]
+		[DefaultValue(0)]
+		public int TabSpaces { get { return config.tabSpaces; } set { config.tabSpaces = value; } }
+
+		[PersistenceMode(PersistenceMode.Attribute)]
+		[Category("CKEditor Other Settings")]
+		[Description("The list of templates definition files to load.")]
+		[DefaultValue("~/ckeditor/plugins/templates/templates/default.js")]
+		[Editor(typeof(System.ComponentModel.Design.MultilineStringEditor), typeof(System.Drawing.Design.UITypeEditor))]
+		public string TemplatesFiles
+		{
+			get
+			{
+				string retVal = string.Empty;
+				foreach (string item in config.templates_files) retVal += item + ",";
+				if (retVal.EndsWith(",")) retVal = retVal.Remove(retVal.Length - 1);
+				return retVal;
+			}
+			set { config.templates_files = value.Split(new char[] { ',' }); }
+		}
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Whether the ""Replace actual contents"" checkbox is checked by default in the Templates dialog.")]
+		[DefaultValue(true)]
+		public bool TemplatesReplaceContent { get { return config.templates_replaceContent; } set { config.templates_replaceContent = value; } }
+
+		[PersistenceMode(PersistenceMode.Attribute)]
+		[Category("CKEditor Basic Settings")]
+		[Description("The toolbox (alias toolbar) definition. It is a toolbar name or an array of toolbars (strips), each one being also an array, containing a list of UI items.")]
+		[DefaultValue( "Full")]
+		[Editor(typeof(System.ComponentModel.Design.MultilineStringEditor), typeof(System.Drawing.Design.UITypeEditor))]
+		public string Toolbar
+		{
+			get
+			{
+				if (config.toolbar is string) return (string)config.toolbar;
+				string retVal = string.Empty;
+				try
+				{
+					string[] retValTab = new string[((object[])config.toolbar).Length];
+					object[] ob = (object[])config.toolbar;
+					for (int i = 0; i < ob.Length; i++)
+					{
+						object item = ob[i];
+						if (item is string) retValTab[i] = (string)item;
+						else
+						{
+							object[] itemTab = (object[])item;
+							string concatValue = string.Empty;
+							for (int j = 0; j < itemTab.Length; j++)
+								concatValue += (string)itemTab[j] + "|";
+							if (!string.IsNullOrEmpty(concatValue))
+								concatValue = concatValue.Remove(concatValue.Length - 1);
+							retValTab[i] = concatValue;
+						}
+					}
+					foreach (string item in retValTab) retVal += item + "\r\n";
+					if (retVal.EndsWith("\r\n")) retVal = retVal.Remove(retVal.Length - 2);
+				}
+				catch { }
+				return retVal;
+			}
+			set
+			{
+				string[] valueTab = value.Split(new string[] { "\r\n"}, int.MaxValue, StringSplitOptions.RemoveEmptyEntries);
+				if (valueTab.Length == 1 && (valueTab[0] == "Full" || valueTab[0] == "Basic"))
+				{
+					config.toolbar = valueTab[0];
+					return;
+				}
+				object[] retVal = new object[valueTab.Length];
+				try
+				{
+					for (int i = 0; i < valueTab.Length; i++)
+					{
+						string[] item = valueTab[i].Split(new char[] { '|' });
+						if (item.Length == 1 && item[0] == "/") retVal[i] = item[0];
+						else retVal[i] = item;
+					}
+				}
+				catch { }
+				config.toolbar = retVal;
+			}
+		}
+
+		[PersistenceMode(PersistenceMode.Attribute)]
+		[Category("CKEditor Basic Settings")]
+		[Description(@"The toolbar definition. It is an array of toolbars (strips), each one being also an array, containing a list of UI items.
+Note that this setting is composed by ""toolbar_"" added by the toolbar name, which in this case is called ""Basic"".
+This second part of the setting name can be anything. You must use this name in the CKEDITOR.config.toolbar setting,
+so you instruct the editor which toolbar_(name) setting to you.")]
+		[DefaultValue("Bold|Italic|-|NumberedList|BulletedList|-|Link|Unlink|-|About")]
+		[Editor(typeof(System.ComponentModel.Design.MultilineStringEditor), typeof(System.Drawing.Design.UITypeEditor))]
+		public string ToolbarBasic
+		{
+			get
+			{
+				string retVal = string.Empty;
+				try
+				{
+					string[] retValTab = new string[config.toolbar_Basic.Length];
+					object[] ob = config.toolbar_Basic;
+					for (int i = 0; i < ob.Length; i++)
+					{
+						object item = ob[i];
+						if (item is string) retValTab[i] = (string)item;
+						else
+						{
+							object[] itemTab = (object[])item;
+							string concatValue = string.Empty;
+							for (int j = 0; j < itemTab.Length; j++)
+								concatValue += (string)itemTab[j] + "|";
+							if (!string.IsNullOrEmpty(concatValue))
+								concatValue = concatValue.Remove(concatValue.Length - 1);
+							retValTab[i] = concatValue;
+						}
+					}
+					foreach (string item in retValTab) retVal += item + "\r\n";
+					if (retVal.EndsWith("\r\n")) retVal = retVal.Remove(retVal.Length - 2);
+				}
+				catch { }
+				return retVal;
+			}
+			set
+			{
+				string[] valueTab = value.Split(new string[] { "\r\n" }, int.MaxValue, StringSplitOptions.RemoveEmptyEntries);
+				object[] retVal = new object[valueTab.Length];
+				try
+				{
+					for (int i = 0; i < valueTab.Length; i++)
+					{
+						string[] item = valueTab[i].Split(new char[] { '|' });
+						if (item.Length == 1 && item[0] == "/") retVal[i] = item[0];
+						else retVal[i] = item;
+					}
+				}
+				catch { }
+				config.toolbar_Basic = retVal;
+			}
+		}
+
+		[PersistenceMode(PersistenceMode.Attribute)]
+		[Category("CKEditor Basic Settings")]
+		[Description("This is the default toolbar definition used by the editor. It contains all editor features.")]
+		[DefaultValue(@"Source|-|Save|NewPage|Preview|-|Templates
+Cut|Copy|Paste|PasteText|PasteFromWord|-|Print|SpellChecker|Scayt
+Undo|Redo|-|Find|Replace|-|SelectAll|RemoveFormat
+Form|Checkbox|Radio|TextField|Textarea|Select|Button|ImageButton|HiddenField
+/
+Bold|Italic|Underline|Strike|-|Subscript|Superscript
+NumberedList|BulletedList|-|Outdent|Indent|Blockquote|CreateDiv
+JustifyLeft|JustifyCenter|JustifyRight|JustifyBlock
+BidiLtr|BidiRtl
+Link|Unlink|Anchor
+Image|Flash|Table|HorizontalRule|Smiley|SpecialChar|PageBreak|Iframe
+/
+Styles|Format|Font|FontSize
+TextColor|BGColor
+Maximize|ShowBlocks|-|About")]
+		[Editor(typeof(System.ComponentModel.Design.MultilineStringEditor), typeof(System.Drawing.Design.UITypeEditor))]
+		public string ToolbarFull
+		{
+			get
+			{
+				string retVal = string.Empty;
+				try
+				{
+					string[] retValTab = new string[config.toolbar_Full.Length];
+					object[] ob = config.toolbar_Full;
+					for (int i = 0; i < ob.Length; i++)
+					{
+						object item = ob[i];
+						if (item is string) retValTab[i] = (string)item;
+						else
+						{
+							object[] itemTab = (object[])item;
+							string concatValue = string.Empty;
+							for (int j = 0; j < itemTab.Length; j++)
+								concatValue += (string)itemTab[j] + "|";
+							if (!string.IsNullOrEmpty(concatValue))
+								concatValue = concatValue.Remove(concatValue.Length - 1);
+							retValTab[i] = concatValue;
+						}
+					}
+					foreach (string item in retValTab) retVal += item + "\r\n";
+					if (retVal.EndsWith("\r\n")) retVal = retVal.Remove(retVal.Length - 2);
+				}
+				catch { }
+				return retVal;
+			}
+			set
+			{
+				string[] valueTab = value.Split(new string[] { "\r\n" }, int.MaxValue, StringSplitOptions.RemoveEmptyEntries);
+				object[] retVal = new object[valueTab.Length];
+				try
+				{
+					for (int i = 0; i < valueTab.Length; i++)
+					{
+						string[] item = valueTab[i].Split(new char[] { '|' });
+						if (item.Length == 1 && item[0] == "/") retVal[i] = item[0];
+						else retVal[i] = item;
+					}
+				}
+				catch { }
+				config.toolbar_Full = retVal;
+			}
+		}
+
+		[Category("CKEditor Other Settings")]
+		[Description("This is the default toolbar definition used by the editor. It contains all editor features.")]
+		[DefaultValue(true)]
+		public bool ToolbarCanCollapse { get { return config.toolbarCanCollapse; } set { config.toolbarCanCollapse = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"The ""theme space"" to which rendering the toolbar. For the default theme, the recommended options are ""top"" and ""bottom"".")]
+		[DefaultValue(typeof(ToolbarLocation), "Top")]
+		public ToolbarLocation ToolbarLocation { get { return config.toolbarLocation; } set { config.toolbarLocation = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("Whether the toolbar must start expanded when the editor is loaded.")]
+		[DefaultValue(true)]
+		public bool ToolbarStartupExpanded { get { return config.toolbarStartupExpanded; } set { config.toolbarStartupExpanded = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description(@"Indicates that some of the editor features, like alignment and text direction, should used the ""computed value""
+of the featureto indicate it's on/off state, instead of using the ""real value"".
+If enabled, in a left to right written document, the ""Left Justify"" alignment button will show as active,
+even if the aligment style is not explicitly applied to the current paragraph in the editor.")]
+		[DefaultValue(true)]
+		public bool UseComputedState { get { return config.useComputedState; } set { config.useComputedState = value; } }
+
+		[TypeConverter(typeof(WebColorConverter))]
+		[Category("CKEditor Basic Settings")]
+		[Description("Specifies the color of the user interface. Works only with the Kama skin.")]
+		[DefaultValue(typeof(System.Drawing.Color), "LightGray")]
+		public System.Drawing.Color UIColor
+		{
+			get
+			{
+				if (config.uiColor == "#D3D3D3") return System.Drawing.Color.FromName("LightGray");
+				return System.Drawing.ColorTranslator.FromHtml(config.uiColor);
+			}
+			set { config.uiColor = "#" + value.R.ToString(@"x2") + value.G.ToString(@"x2") + value.B.ToString(@"x2"); }
+		}
+
+		[Category("CKEditor Other Settings")]
+		[Description("To attach a function to CKEditor events.")]
+		[DefaultValue(null)]
+		public List<object> CKEditorEventHandler { get { return config.CKEditorEventHandler; } set { config.CKEditorEventHandler = value; } }
+
+		[Category("CKEditor Other Settings")]
+		[Description("To attach a function to an event in a single editor instance")]
+		[DefaultValue(null)]
+		public List<object> CKEditorInstanceEventHandler { get { return config.CKEditorInstanceEventHandler; } set { config.CKEditorInstanceEventHandler = value; } }
+
+		#endregion
+
+		#endregion
+
+		#region Microsoft Ajax compatibility
+
+		private static bool? _HasMsAjax = null;
+		private static Type typScriptManager;
+		private static Type updatePanel;
+		private static System.Reflection.MethodInfo mtdRegisterClientScriptInclude;
+		private static System.Reflection.MethodInfo mtdRegisterStartupScript;
+		private static System.Reflection.MethodInfo mtdRegisterOnSubmitStatement;
+
+		private void RegisterClientScriptInclude(Type type, string key, string url)
+		{
+			if (HasMsAjax)
+			{
+				if (mtdRegisterClientScriptInclude == null)
+					mtdRegisterClientScriptInclude = typScriptManager.GetMethod("RegisterClientScriptInclude", new Type[4] { typeof(Control), typeof(Type), typeof(string), typeof(string) });
+				mtdRegisterClientScriptInclude.Invoke(null, new object[4] { this, type, key, url });
+			}
+			else
+				Page.ClientScript.RegisterClientScriptInclude(type, key, url);
+		}
+
+		private void RegisterStartupScript(Type type, string key, string script, bool addScriptTags)
+		{
+			if (HasMsAjax)
+			{
+				if (mtdRegisterStartupScript == null)
+					mtdRegisterStartupScript = typScriptManager.GetMethod("RegisterStartupScript", new Type[5] { typeof(Control), typeof(Type), typeof(string), typeof(string), typeof(bool) });
+				mtdRegisterStartupScript.Invoke(null, new object[5] { this, type, key, script, addScriptTags });
+			}
+			else
+				Page.ClientScript.RegisterStartupScript(type, key, script, addScriptTags);
+		}
+
+		private void RegisterOnSubmitStatement(Type type, string key, string script)
+		{
+			if (HasMsAjax)
+			{
+				if (mtdRegisterOnSubmitStatement == null)
+					mtdRegisterOnSubmitStatement = typScriptManager.GetMethod("RegisterOnSubmitStatement", new Type[4] { typeof(Control), typeof(Type), typeof(string), typeof(string) });
+				mtdRegisterOnSubmitStatement.Invoke(null, new object[4] { this, type, key, script });
+			}
+			else
+				Page.ClientScript.RegisterOnSubmitStatement(type, key, script);
+		}
+
+		private bool HasMsAjax
+		{
+			get
+			{
+				if (_HasMsAjax == null)
+				{
+					_HasMsAjax = false;
+					System.Reflection.Assembly[] AppAssemblies = AppDomain.CurrentDomain.GetAssemblies();
+					foreach (System.Reflection.Assembly asm in AppAssemblies)
+					{
+						if (asm.ManifestModule.Name == "System.Web.Extensions.dll")
+						{
+							try
+							{
+								updatePanel = asm.GetType("System.Web.UI.UpdatePanel");
+								typScriptManager = asm.GetType("System.Web.UI.ScriptManager");
+								if (typScriptManager != null) _HasMsAjax = true;
+							}
+							catch { }
+							break;
+						}
+					}
+				}
+
+				return _HasMsAjax ?? false;
+			}
+		}
+
+		#endregion
+
+		#region Default Constructor
+
+		public CKEditorControl()
+		{
+			base.TextMode = TextBoxMode.MultiLine;
+			this.config = new CKEditorConfig(this.BasePath.StartsWith("~") ? this.ResolveUrl(this.BasePath) : this.BasePath);
+		}
+
+		#endregion
+
+		#region Override Method
+		private string timestamp = "?t=B1GG4Z6";
+		protected override void OnPreRender(EventArgs e)
+		{
+			this.RegisterStartupScript(this.GetType(), "CKEDITOR_BASEPATH", string.Format("window.CKEDITOR_BASEPATH = '{0}/';\n", (this.CKEditorJSFile.StartsWith("~") ? this.ResolveUrl(this.BasePath) : this.BasePath)), true);
+			this.RegisterStartupScript(this.GetType(), "ckeditor", "<script src=\"" + (this.CKEditorJSFile.StartsWith("~") ? this.ResolveUrl(this.CKEditorJSFile) : this.CKEditorJSFile) + timestamp + "\" type=\"text/javascript\"></script>", false);
+			if (HasMsAjax)
+			{
+				string scriptInit = string.Empty;
+
+				// Sys.Application.add_load does not work on browsers != IE
+				// http://msdn.microsoft.com/en-us/library/bb386417.aspx
+				// Check _dev/msajax.js for an uncompressed version (available in CKEditor.Net downloaded from SVN).
+				scriptInit += @"var CKEditor_Controls=[];function CKEditor_TextBoxEncode(c,d){if(typeof CKEDITOR=='undefined'||typeof CKEDITOR.instances[c]=='undefined'){var e=document.getElementById(c);e.value=e.value.replace(/</g,'&lt;').replace(/>/g,'&gt;');}else{var f=CKEDITOR.instances[c];if(d)f.destroy();else f.updateElement();}};(function(){var c=function(){var d=CKEditor_Controls,e=window.pageLoad,f=function(){for(i=d.length;i--;){var g=document.getElementById(d[i]);g.value=g.value.replace(/&lt;/g,'<').replace(/&gt;/g,'>');}};window.pageLoad=function(g,h){if(h.get_isPartialLoad())f();if(e&&typeof e=='function')e.call(this,g,h);};f();};if(window.addEventListener)window.addEventListener('load',c,false);else if(window.attachEvent)window.attachEvent('onload',c);})();
+";
+
+				this.RegisterStartupScript(this.GetType(), "CKEditorForNet", scriptInit, true);
+				this.RegisterStartupScript(this.GetType(), this.ClientID + @"_addControl", string.Format(@"CKEditor_Controls.push('{0}');
+", this.ClientID), true);
+			}
+			string script = string.Empty;
+			if (this.config.CKEditorEventHandler != null)
+				foreach (object[] item in this.config.CKEditorEventHandler)
+				{
+					script += string.Format(@"if(typeof CKEDITOR != 'undefined') CKEDITOR.on('{0}',{1});
+", item[0], item[1]);
+				}
+			script += string.Format(@"if(typeof CKEDITOR != 'undefined') CKEDITOR.replace('{0}',{1});
+", this.ClientID, prepareJSON());
+
+			if (HasMsAjax)
+			{
+				bool isInUpdatePanel = false;
+				Control con = this.Parent;
+				if (updatePanel != null)
+					while (con != null)
+					{
+						if (con.GetType() == updatePanel)
+						{
+							isInUpdatePanel = true;
+							break;
+						}
+						con = con.Parent;
+					}
+				this.RegisterOnSubmitStatement(this.GetType(), "aspintegrator_Postback" + this.ClientID, string.Format("CKEditor_TextBoxEncode('{0}', {1}); ", this.ClientID, isInUpdatePanel ? 1 : 0));
+			}
+			this.RegisterStartupScript(this.GetType(), "aspintegratorInitial_" + this.ClientID, script, true);
+		}
+
+		#endregion
+
+		#region Private Method
+
+		private string prepareJSON()
+		{
+			return JSONSerializer.ToJavaScriptObjectNotation(this.config);
+		}
+
+		#endregion
+	}
+
+	public class CKEditorControlDesigner : System.Web.UI.Design.ControlDesigner
+	{
+		public CKEditorControlDesigner()
+		{
+		}
+
+		public override string GetDesignTimeHtml()
+		{
+			CKEditorControl control = (CKEditorControl)Component;
+			return String.Format(CultureInfo.InvariantCulture,
+				"<table width=\"{0}\" height=\"{1}\" bgcolor=\"#f5f5f5\" bordercolor=\"#c7c7c7\" cellpadding=\"0\" cellspacing=\"0\" border=\"1\"><tr><td valign=\"middle\" align=\"center\"><h3>CKEditor ASP.NET Control - <em>'{2}'</em></h3></td></tr></table>",
+				control.Width.Value == 0 ? "100%" : control.Width.ToString(),
+				control.Height,
+				control.ID);
+		}
+	}
+}
Index: /CKEditor.NET/trunk/CKEditor.NET/Properties/AssemblyInfo.cs
===================================================================
--- /CKEditor.NET/trunk/CKEditor.NET/Properties/AssemblyInfo.cs	(revision 6521)
+++ /CKEditor.NET/trunk/CKEditor.NET/Properties/AssemblyInfo.cs	(revision 6521)
@@ -0,0 +1,40 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Web.UI;
+
+[assembly: TagPrefix("CKEditor.NET", "CKEditor")]
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("CKEditor.NET")]
+[assembly: AssemblyDescription("CKEditor ASP.NET Integration")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("CKSource - Frederico Knabben")]
+[assembly: AssemblyProduct("CKEditor.NET")]
+[assembly: AssemblyCopyright("2003-2011, CKSource - Frederico Knabben")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+[assembly: System.CLSCompliant(true)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("458f3655-ff90-4105-9a52-2f1d30e01f69")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.5.2.0")]
+[assembly: AssemblyFileVersion("3.5.2.0")]
Index: /CKEditor.NET/trunk/CKEditor.NETwithSamples.sln
===================================================================
--- /CKEditor.NET/trunk/CKEditor.NETwithSamples.sln	(revision 6521)
+++ /CKEditor.NET/trunk/CKEditor.NETwithSamples.sln	(revision 6521)
@@ -0,0 +1,45 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "_Samples", "_Samples\", "{B22E1937-BC86-4220-9CCB-66B400055690}"
+	ProjectSection(WebsiteProperties) = preProject
+		TargetFrameworkMoniker = ".NETFramework,Version%3Dv2.0"
+		ProjectReferences = "{FC4500A9-8E83-46B0-87FA-86D44AB79AA7}|CKEditor.NET.dll;"
+		Debug.AspNetCompiler.VirtualPath = "/_Samples"
+		Debug.AspNetCompiler.PhysicalPath = "_Samples\"
+		Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\_Samples\"
+		Debug.AspNetCompiler.Updateable = "true"
+		Debug.AspNetCompiler.ForceOverwrite = "true"
+		Debug.AspNetCompiler.FixedNames = "false"
+		Debug.AspNetCompiler.Debug = "True"
+		Release.AspNetCompiler.VirtualPath = "/_Samples"
+		Release.AspNetCompiler.PhysicalPath = "_Samples\"
+		Release.AspNetCompiler.TargetPath = "PrecompiledWeb\_Samples\"
+		Release.AspNetCompiler.Updateable = "true"
+		Release.AspNetCompiler.ForceOverwrite = "true"
+		Release.AspNetCompiler.FixedNames = "false"
+		Release.AspNetCompiler.Debug = "False"
+		VWDPort = "60487"
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CKEditor.NET", "CKEditor.NET\CKEditor.NET.csproj", "{FC4500A9-8E83-46B0-87FA-86D44AB79AA7}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{B22E1937-BC86-4220-9CCB-66B400055690}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B22E1937-BC86-4220-9CCB-66B400055690}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B22E1937-BC86-4220-9CCB-66B400055690}.Release|Any CPU.ActiveCfg = Debug|Any CPU
+		{B22E1937-BC86-4220-9CCB-66B400055690}.Release|Any CPU.Build.0 = Debug|Any CPU
+		{FC4500A9-8E83-46B0-87FA-86D44AB79AA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{FC4500A9-8E83-46B0-87FA-86D44AB79AA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FC4500A9-8E83-46B0-87FA-86D44AB79AA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{FC4500A9-8E83-46B0-87FA-86D44AB79AA7}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Index: /CKEditor.NET/trunk/INSTALL.html
===================================================================
--- /CKEditor.NET/trunk/INSTALL.html	(revision 6521)
+++ /CKEditor.NET/trunk/INSTALL.html	(revision 6521)
@@ -0,0 +1,182 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Installation Guide &mdash; CKEditor.NET</title>
+	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+	<style type="text/css">
+
+html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre {
+	line-height: 1.5em;
+}
+
+body, input, textarea {
+	color: #333333;
+	font-family: Arial, Helvetica, sans-serif;
+}
+
+body {
+	font-size: 75%;
+	padding:10px 30px;
+}
+
+h1 {
+  color:#0782C1;
+  font-size:200%;
+  font-weight:normal;
+  margin: 0;
+  padding: 0;
+}
+
+h2 {
+  color:#000000;
+  font-size:130%;
+  margin: 0;
+  padding: 0;
+}
+
+h3 {
+	border-bottom: 1px solid #AAAAAA;
+}
+
+p, blockquote, address, form, pre, dl, h1, h2, h3, ul {
+	margin-bottom: 15px;
+}
+
+pre,
+code,
+kbd,
+samp,
+tt{
+  font-family: monospace,monospace;
+  font-size: 1em;
+}
+
+pre	{
+	background-color: #F9F9F9;
+	border: 1px dashed #2F6FAB;
+	padding: 1em;
+	line-height: 1.1em;
+}
+
+#footer hr {
+	margin: 10px 0 15px 0;
+	height: 1px;
+	border: solid 1px gray;
+	border-bottom: none;
+}
+
+#footer p {
+	margin: 0 10px 10px 10px;
+	float: left;
+}
+
+#footer #copy {
+	float: right;
+}
+	</style>
+</head>
+<body>
+	<h1>
+		CKEditor.NET Installation Guide</h1>
+	<h3>
+		What Is CKEditor?</h3>
+	<p>
+		CKEditor is an online WYSIWYG rich text editor that can be embedded inside web pages.
+		It is not a replacement for desktop word processors like Microsoft Word or OpenOffice Writer,
+		but a component to be used as a part of web applications and websites. For more information 
+		on CKEditor refer to the <a href="http://ckeditor.com">product website</a>.
+	</p>
+	<h3>
+		Integrating CKEditor.NET with Your Page
+	</h3>
+	<p>
+		If you want to integrate CKEditor with your ASP.NET page, follow the steps outlined below.
+	</p>
+	<ol>
+		<li>
+			Go to the official <a href="http://ckeditor.com/download">CKEditor download site</a>
+		 	and download the latest versions of both <strong>CKEditor 3.x</strong> and the 
+		 	<strong>CKEditor.NET Control</strong>. 
+		</li>
+		<li>
+			Unpack both installation packages to a desired location.
+		</li>
+		<li>
+			Add a reference to the CKEditor.NET Control to your website.<br />
+			In Visual Studio use the <strong>Add Reference</strong> command and browse to
+			the <code>bin\Release\CKEditor.NET.dll</code> file from the unpacked CKEditor.NET
+			installation package. You can also manually copy the DLL file to the <code>bin</code>
+			folder of your application.
+		</li>
+		<li>
+			Copy the unpacked editor files from the CKEditor 3.x installation package and paste
+			them into the application directory of your website.
+		</li>
+		<li>
+			Register the CKEditor.NET Control in your page:
+<pre>&lt;%@ Register Assembly="CKEditor.NET" Namespace="CKEditor.NET" TagPrefix="CKEditor" %&gt;</pre>
+		</li>
+		<li>
+			Insert a CKEditor instance into the page body:
+<pre>&lt;CKEditor:CKEditorControl ID="CKEditor1" runat="server"&gt;&lt;/CKEditor:CKEditorControl&gt;</pre>
+		</li>
+		<li>
+			Run the ASP.NET application and open the page in the browser. A CKEditor instance should
+			be added to the page.
+		</li>
+	</ol>
+	<h3>
+		CKEditor.NET Samples
+	</h3>
+	<p>
+		The CKEditor.NET installation package comes with a few sample pages that can be used to try out
+		the ASP.NET control. In order to view the working samples in your browser, proceed as follows (all
+		instructions refer to Windows 7 and IIS):	 
+	</p>
+	<ol>
+		<li>
+			Unpack the <code>_samples</code> folder of the CKEditor.NET Control installation
+			package to <code>C:\inetpub\wwwroot</code>.<br />
+			If you do not have this folder in your system, you need to install Internet
+			Information Services first.
+		</li>
+		<li>
+			Go to <strong>Control Panel</strong> &ndash;&gt; <strong>System and Security</strong> &ndash;&gt; <strong>
+			Administrative Tools</strong> &ndash;&gt; <strong>Internet Information Services (IIS) Manager</strong>.
+			Find the <code>_samples</code> folder under the <strong>Default Web Site</strong> tree.			
+		</li>
+		<li>
+			Right-click the <code>_samples</code> folder and select <strong>Convert to application</strong>.
+		</li>
+		<li>
+			From the <strong>Browse Application</strong> menu on the right-hand side choose <strong>Browse
+			*:80 (http)</strong>.
+		</li>
+		<li>
+			The application will open in your default Internet browser. You can now browse the samples to see
+			the CKEditor.NET Control at work.
+		</li>
+	</ol>
+	<h3>
+		Documentation
+	</h3>
+	<p>
+		The full CKEditor.NET Control documentation is available online under the following address:<br />
+		<a href="http://docs.cksource.com/CKEditor.NET">http://docs.cksource.com/CKEditor.NET</a>
+	</p>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor &mdash; The text editor for the Internet &mdash; <a href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003&ndash;2011, <a href="http://cksource.com/">CKSource</a> &mdash; Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
Index: /CKEditor.NET/trunk/LICENSE.html
===================================================================
--- /CKEditor.NET/trunk/LICENSE.html	(revision 6521)
+++ /CKEditor.NET/trunk/LICENSE.html	(revision 6521)
@@ -0,0 +1,1379 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+== BEGIN TEXT ONLY VERSION ==
+
+Software License Agreement
+==========================
+
+CKEditor - The text editor for Internet - http://ckeditor.com
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+
+Licensed under the terms of any of the following licenses of your
+choice:
+
+ - GNU General Public License Version 2 or later (the "GPL")
+   http://www.gnu.org/licenses/gpl.html
+   (See Appendix A)
+
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+   http://www.gnu.org/licenses/lgpl.html
+   (See Appendix B)
+
+ - Mozilla Public License Version 1.1 or later (the "MPL")
+   http://www.mozilla.org/MPL/MPL-1.1.html
+   (See Appendix C)
+
+You are not required to, but if you want to explicitly declare the
+license you have chosen to be bound to when using, reproducing,
+modifying, and distributing this software, just include a text file
+titled "legal.txt" in your version of this software, indicating your
+license choice. In any case, your choice will not restrict any
+recipient of your version of this software to use, reproduce, modify,
+and distribute this software under any of the above licenses.
+
+Sources of Intellectual Property Included in CKEditor
+=====================================================
+
+Where not otherwise indicated, all CKEditor content is authored by
+CKSource engineers and consists of CKSource-owned intellectual
+property. In some specific instances, CKEditor will incorporate work
+done by developers outside of CKSource with their express permission.
+
+Trademarks
+==========
+
+CKEditor is a trademark of CKSource - Frederico Knabben. All other brand
+and product names are trademarks, registered trademarks, or service
+marks of their respective holders.
+
+Appendix A: The GPL License
+===========================
+
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software-to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+
+Appendix B: The LGPL License
+============================
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software-to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages-typically libraries-of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+
+Appendix C: The MPL License
+===========================
+
+                          MOZILLA PUBLIC LICENSE
+                                Version 1.1
+
+                              ===============
+
+1. Definitions.
+
+     1.0.1. "Commercial Use" means distribution or otherwise making the
+     Covered Code available to a third party.
+
+     1.1. "Contributor" means each entity that creates or contributes to
+     the creation of Modifications.
+
+     1.2. "Contributor Version" means the combination of the Original
+     Code, prior Modifications used by a Contributor, and the Modifications
+     made by that particular Contributor.
+
+     1.3. "Covered Code" means the Original Code or Modifications or the
+     combination of the Original Code and Modifications, in each case
+     including portions thereof.
+
+     1.4. "Electronic Distribution Mechanism" means a mechanism generally
+     accepted in the software development community for the electronic
+     transfer of data.
+
+     1.5. "Executable" means Covered Code in any form other than Source
+     Code.
+
+     1.6. "Initial Developer" means the individual or entity identified
+     as the Initial Developer in the Source Code notice required by Exhibit
+     A.
+
+     1.7. "Larger Work" means a work which combines Covered Code or
+     portions thereof with code not governed by the terms of this License.
+
+     1.8. "License" means this document.
+
+     1.8.1. "Licensable" means having the right to grant, to the maximum
+     extent possible, whether at the time of the initial grant or
+     subsequently acquired, any and all of the rights conveyed herein.
+
+     1.9. "Modifications" means any addition to or deletion from the
+     substance or structure of either the Original Code or any previous
+     Modifications. When Covered Code is released as a series of files, a
+     Modification is:
+          A. Any addition to or deletion from the contents of a file
+          containing Original Code or previous Modifications.
+
+          B. Any new file that contains any part of the Original Code or
+          previous Modifications.
+
+     1.10. "Original Code" means Source Code of computer software code
+     which is described in the Source Code notice required by Exhibit A as
+     Original Code, and which, at the time of its release under this
+     License is not already Covered Code governed by this License.
+
+     1.10.1. "Patent Claims" means any patent claim(s), now owned or
+     hereafter acquired, including without limitation,  method, process,
+     and apparatus claims, in any patent Licensable by grantor.
+
+     1.11. "Source Code" means the preferred form of the Covered Code for
+     making modifications to it, including all modules it contains, plus
+     any associated interface definition files, scripts used to control
+     compilation and installation of an Executable, or source code
+     differential comparisons against either the Original Code or another
+     well known, available Covered Code of the Contributor's choice. The
+     Source Code can be in a compressed or archival form, provided the
+     appropriate decompression or de-archiving software is widely available
+     for no charge.
+
+     1.12. "You" (or "Your")  means an individual or a legal entity
+     exercising rights under, and complying with all of the terms of, this
+     License or a future version of this License issued under Section 6.1.
+     For legal entities, "You" includes any entity which controls, is
+     controlled by, or is under common control with You. For purposes of
+     this definition, "control" means (a) the power, direct or indirect,
+     to cause the direction or management of such entity, whether by
+     contract or otherwise, or (b) ownership of more than fifty percent
+     (50%) of the outstanding shares or beneficial ownership of such
+     entity.
+
+2. Source Code License.
+
+     2.1. The Initial Developer Grant.
+     The Initial Developer hereby grants You a world-wide, royalty-free,
+     non-exclusive license, subject to third party intellectual property
+     claims:
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Initial Developer to use, reproduce,
+          modify, display, perform, sublicense and distribute the Original
+          Code (or portions thereof) with or without Modifications, and/or
+          as part of a Larger Work; and
+
+          (b) under Patents Claims infringed by the making, using or
+          selling of Original Code, to make, have made, use, practice,
+          sell, and offer for sale, and/or otherwise dispose of the
+          Original Code (or portions thereof).
+
+          (c) the licenses granted in this Section 2.1(a) and (b) are
+          effective on the date Initial Developer first distributes
+          Original Code under the terms of this License.
+
+          (d) Notwithstanding Section 2.1(b) above, no patent license is
+          granted: 1) for code that You delete from the Original Code; 2)
+          separate from the Original Code;  or 3) for infringements caused
+          by: i) the modification of the Original Code or ii) the
+          combination of the Original Code with other software or devices.
+
+     2.2. Contributor Grant.
+     Subject to third party intellectual property claims, each Contributor
+     hereby grants You a world-wide, royalty-free, non-exclusive license
+
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Contributor, to use, reproduce, modify,
+          display, perform, sublicense and distribute the Modifications
+          created by such Contributor (or portions thereof) either on an
+          unmodified basis, with other Modifications, as Covered Code
+          and/or as part of a Larger Work; and
+
+          (b) under Patent Claims infringed by the making, using, or
+          selling of  Modifications made by that Contributor either alone
+          and/or in combination with its Contributor Version (or portions
+          of such combination), to make, use, sell, offer for sale, have
+          made, and/or otherwise dispose of: 1) Modifications made by that
+          Contributor (or portions thereof); and 2) the combination of
+          Modifications made by that Contributor with its Contributor
+          Version (or portions of such combination).
+
+          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+          effective on the date Contributor first makes Commercial Use of
+          the Covered Code.
+
+          (d)    Notwithstanding Section 2.2(b) above, no patent license is
+          granted: 1) for any code that Contributor has deleted from the
+          Contributor Version; 2)  separate from the Contributor Version;
+          3)  for infringements caused by: i) third party modifications of
+          Contributor Version or ii)  the combination of Modifications made
+          by that Contributor with other software  (except as part of the
+          Contributor Version) or other devices; or 4) under Patent Claims
+          infringed by Covered Code in the absence of Modifications made by
+          that Contributor.
+
+3. Distribution Obligations.
+
+     3.1. Application of License.
+     The Modifications which You create or to which You contribute are
+     governed by the terms of this License, including without limitation
+     Section 2.2. The Source Code version of Covered Code may be
+     distributed only under the terms of this License or a future version
+     of this License released under Section 6.1, and You must include a
+     copy of this License with every copy of the Source Code You
+     distribute. You may not offer or impose any terms on any Source Code
+     version that alters or restricts the applicable version of this
+     License or the recipients' rights hereunder. However, You may include
+     an additional document offering the additional rights described in
+     Section 3.5.
+
+     3.2. Availability of Source Code.
+     Any Modification which You create or to which You contribute must be
+     made available in Source Code form under the terms of this License
+     either on the same media as an Executable version or via an accepted
+     Electronic Distribution Mechanism to anyone to whom you made an
+     Executable version available; and if made available via Electronic
+     Distribution Mechanism, must remain available for at least twelve (12)
+     months after the date it initially became available, or at least six
+     (6) months after a subsequent version of that particular Modification
+     has been made available to such recipients. You are responsible for
+     ensuring that the Source Code version remains available even if the
+     Electronic Distribution Mechanism is maintained by a third party.
+
+     3.3. Description of Modifications.
+     You must cause all Covered Code to which You contribute to contain a
+     file documenting the changes You made to create that Covered Code and
+     the date of any change. You must include a prominent statement that
+     the Modification is derived, directly or indirectly, from Original
+     Code provided by the Initial Developer and including the name of the
+     Initial Developer in (a) the Source Code, and (b) in any notice in an
+     Executable version or related documentation in which You describe the
+     origin or ownership of the Covered Code.
+
+     3.4. Intellectual Property Matters
+          (a) Third Party Claims.
+          If Contributor has knowledge that a license under a third party's
+          intellectual property rights is required to exercise the rights
+          granted by such Contributor under Sections 2.1 or 2.2,
+          Contributor must include a text file with the Source Code
+          distribution titled "LEGAL" which describes the claim and the
+          party making the claim in sufficient detail that a recipient will
+          know whom to contact. If Contributor obtains such knowledge after
+          the Modification is made available as described in Section 3.2,
+          Contributor shall promptly modify the LEGAL file in all copies
+          Contributor makes available thereafter and shall take other steps
+          (such as notifying appropriate mailing lists or newsgroups)
+          reasonably calculated to inform those who received the Covered
+          Code that new knowledge has been obtained.
+
+          (b) Contributor APIs.
+          If Contributor's Modifications include an application programming
+          interface and Contributor has knowledge of patent licenses which
+          are reasonably necessary to implement that API, Contributor must
+          also include this information in the LEGAL file.
+
+               (c)    Representations.
+          Contributor represents that, except as disclosed pursuant to
+          Section 3.4(a) above, Contributor believes that Contributor's
+          Modifications are Contributor's original creation(s) and/or
+          Contributor has sufficient rights to grant the rights conveyed by
+          this License.
+
+     3.5. Required Notices.
+     You must duplicate the notice in Exhibit A in each file of the Source
+     Code.  If it is not possible to put such notice in a particular Source
+     Code file due to its structure, then You must include such notice in a
+     location (such as a relevant directory) where a user would be likely
+     to look for such a notice.  If You created one or more Modification(s)
+     You may add your name as a Contributor to the notice described in
+     Exhibit A.  You must also duplicate this License in any documentation
+     for the Source Code where You describe recipients' rights or ownership
+     rights relating to Covered Code.  You may choose to offer, and to
+     charge a fee for, warranty, support, indemnity or liability
+     obligations to one or more recipients of Covered Code. However, You
+     may do so only on Your own behalf, and not on behalf of the Initial
+     Developer or any Contributor. You must make it absolutely clear than
+     any such warranty, support, indemnity or liability obligation is
+     offered by You alone, and You hereby agree to indemnify the Initial
+     Developer and every Contributor for any liability incurred by the
+     Initial Developer or such Contributor as a result of warranty,
+     support, indemnity or liability terms You offer.
+
+     3.6. Distribution of Executable Versions.
+     You may distribute Covered Code in Executable form only if the
+     requirements of Section 3.1-3.5 have been met for that Covered Code,
+     and if You include a notice stating that the Source Code version of
+     the Covered Code is available under the terms of this License,
+     including a description of how and where You have fulfilled the
+     obligations of Section 3.2. The notice must be conspicuously included
+     in any notice in an Executable version, related documentation or
+     collateral in which You describe recipients' rights relating to the
+     Covered Code. You may distribute the Executable version of Covered
+     Code or ownership rights under a license of Your choice, which may
+     contain terms different from this License, provided that You are in
+     compliance with the terms of this License and that the license for the
+     Executable version does not attempt to limit or alter the recipient's
+     rights in the Source Code version from the rights set forth in this
+     License. If You distribute the Executable version under a different
+     license You must make it absolutely clear that any terms which differ
+     from this License are offered by You alone, not by the Initial
+     Developer or any Contributor. You hereby agree to indemnify the
+     Initial Developer and every Contributor for any liability incurred by
+     the Initial Developer or such Contributor as a result of any such
+     terms You offer.
+
+     3.7. Larger Works.
+     You may create a Larger Work by combining Covered Code with other code
+     not governed by the terms of this License and distribute the Larger
+     Work as a single product. In such a case, You must make sure the
+     requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+     If it is impossible for You to comply with any of the terms of this
+     License with respect to some or all of the Covered Code due to
+     statute, judicial order, or regulation then You must: (a) comply with
+     the terms of this License to the maximum extent possible; and (b)
+     describe the limitations and the code they affect. Such description
+     must be included in the LEGAL file described in Section 3.4 and must
+     be included with all distributions of the Source Code. Except to the
+     extent prohibited by statute or regulation, such description must be
+     sufficiently detailed for a recipient of ordinary skill to be able to
+     understand it.
+
+5. Application of this License.
+
+     This License applies to code to which the Initial Developer has
+     attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+     6.1. New Versions.
+     Netscape Communications Corporation ("Netscape") may publish revised
+     and/or new versions of the License from time to time. Each version
+     will be given a distinguishing version number.
+
+     6.2. Effect of New Versions.
+     Once Covered Code has been published under a particular version of the
+     License, You may always continue to use it under the terms of that
+     version. You may also choose to use such Covered Code under the terms
+     of any subsequent version of the License published by Netscape. No one
+     other than Netscape has the right to modify the terms applicable to
+     Covered Code created under this License.
+
+     6.3. Derivative Works.
+     If You create or use a modified version of this License (which you may
+     only do in order to apply it to code which is not already Covered Code
+     governed by this License), You must (a) rename Your license so that
+     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+     "MPL", "NPL" or any confusingly similar phrase do not appear in your
+     license (except to note that your license differs from this License)
+     and (b) otherwise make it clear that Your version of the license
+     contains terms which differ from the Mozilla Public License and
+     Netscape Public License. (Filling in the name of the Initial
+     Developer, Original Code or Contributor in the notice described in
+     Exhibit A shall not of themselves be deemed to be modifications of
+     this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+     8.1.  This License and the rights granted hereunder will terminate
+     automatically if You fail to comply with terms herein and fail to cure
+     such breach within 30 days of becoming aware of the breach. All
+     sublicenses to the Covered Code which are properly granted shall
+     survive any termination of this License. Provisions which, by their
+     nature, must remain in effect beyond the termination of this License
+     shall survive.
+
+     8.2.  If You initiate litigation by asserting a patent infringement
+     claim (excluding declatory judgment actions) against Initial Developer
+     or a Contributor (the Initial Developer or Contributor against whom
+     You file such action is referred to as "Participant")  alleging that:
+
+     (a)  such Participant's Contributor Version directly or indirectly
+     infringes any patent, then any and all rights granted by such
+     Participant to You under Sections 2.1 and/or 2.2 of this License
+     shall, upon 60 days notice from Participant terminate prospectively,
+     unless if within 60 days after receipt of notice You either: (i)
+     agree in writing to pay Participant a mutually agreeable reasonable
+     royalty for Your past and future use of Modifications made by such
+     Participant, or (ii) withdraw Your litigation claim with respect to
+     the Contributor Version against such Participant.  If within 60 days
+     of notice, a reasonable royalty and payment arrangement are not
+     mutually agreed upon in writing by the parties or the litigation claim
+     is not withdrawn, the rights granted by Participant to You under
+     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+     the 60 day notice period specified above.
+
+     (b)  any software, hardware, or device, other than such Participant's
+     Contributor Version, directly or indirectly infringes any patent, then
+     any rights granted to You by such Participant under Sections 2.1(b)
+     and 2.2(b) are revoked effective as of the date You first made, used,
+     sold, distributed, or had made, Modifications made by that
+     Participant.
+
+     8.3.  If You assert a patent infringement claim against Participant
+     alleging that such Participant's Contributor Version directly or
+     indirectly infringes any patent where such claim is resolved (such as
+     by license or settlement) prior to the initiation of patent
+     infringement litigation, then the reasonable value of the licenses
+     granted by such Participant under Sections 2.1 or 2.2 shall be taken
+     into account in determining the amount or value of any payment or
+     license.
+
+     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
+     all end user license agreements (excluding distributors and resellers)
+     which have been validly granted by You or any distributor hereunder
+     prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+     The Covered Code is a "commercial item," as that term is defined in
+     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+     software" and "commercial computer software documentation," as such
+     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+     all U.S. Government End Users acquire Covered Code with only those
+     rights set forth herein.
+
+11. MISCELLANEOUS.
+
+     This License represents the complete agreement concerning subject
+     matter hereof. If any provision of this License is held to be
+     unenforceable, such provision shall be reformed only to the extent
+     necessary to make it enforceable. This License shall be governed by
+     California law provisions (except to the extent applicable law, if
+     any, provides otherwise), excluding its conflict-of-law provisions.
+     With respect to disputes in which at least one party is a citizen of,
+     or an entity chartered or registered to do business in the United
+     States of America, any litigation relating to this License shall be
+     subject to the jurisdiction of the Federal Courts of the Northern
+     District of California, with venue lying in Santa Clara County,
+     California, with the losing party responsible for costs, including
+     without limitation, court costs and reasonable attorneys' fees and
+     expenses. The application of the United Nations Convention on
+     Contracts for the International Sale of Goods is expressly excluded.
+     Any law or regulation which provides that the language of a contract
+     shall be construed against the drafter shall not apply to this
+     License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+     As between Initial Developer and the Contributors, each party is
+     responsible for claims and damages arising, directly or indirectly,
+     out of its utilization of rights under this License and You agree to
+     work with Initial Developer and Contributors to distribute such
+     responsibility on an equitable basis. Nothing herein is intended or
+     shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+     Initial Developer may designate portions of the Covered Code as
+     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
+     Developer permits you to utilize portions of the Covered Code under
+     Your choice of the NPL or the alternative licenses, if any, specified
+     by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+     ``The contents of this file are subject to the Mozilla Public License
+     Version 1.1 (the "License"); you may not use this file except in
+     compliance with the License. You may obtain a copy of the License at
+     http://www.mozilla.org/MPL/
+
+     Software distributed under the License is distributed on an "AS IS"
+     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+     License for the specific language governing rights and limitations
+     under the License.
+
+     The Original Code is ______________________________________.
+
+     The Initial Developer of the Original Code is ________________________.
+     Portions created by ______________________ are Copyright (C) ______
+     _______________________. All Rights Reserved.
+
+     Contributor(s): ______________________________________.
+
+     Alternatively, the contents of this file may be used under the terms
+     of the _____ license (the  "[___] License"), in which case the
+     provisions of [______] License are applicable instead of those
+     above.  If you wish to allow use of your version of this file only
+     under the terms of the [____] License and not to allow others to use
+     your version of this file under the MPL, indicate your decision by
+     deleting  the provisions above and replace  them with the notice and
+     other provisions required by the [___] License.  If you do not delete
+     the provisions above, a recipient may use your version of this file
+     under either the MPL or the [___] License."
+
+     [NOTE: The text of this Exhibit A may differ slightly from the text of
+     the notices in the Source Code files of the Original Code. You should
+     use the text of this Exhibit A rather than the text found in the
+     Original Code Source Code for Your Modifications.]
+
+== END TEXT ONLY VERSION ==
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>License &mdash; CKEditor.NET</title>
+	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+	<style type="text/css">
+html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre {
+	line-height: 1.5em;
+}
+
+body, input, textarea {
+	color: #333333;
+	font-family: Arial, Helvetica, sans-serif;
+}
+
+body {
+	font-size: 75%;
+	padding:10px 30px;
+}
+
+h1 {
+  color:#0782C1;
+  font-size:200%;
+  font-weight:normal;
+  margin: 0;
+  padding: 0;
+}
+
+h2 {
+  color:#000000;
+  font-size:130%;
+  margin: 0;
+  padding: 0;
+}
+
+p, blockquote, address, form, pre, dl, h1, h2, h3, ul {
+	margin-bottom: 15px;
+}
+
+#footer hr {
+	margin: 10px 0 15px 0;
+	height: 1px;
+	border: solid 1px gray;
+	border-bottom: none;
+}
+
+#footer p {
+	margin: 0 10px 10px 10px;
+	float: left;
+}
+
+#footer #copy {
+	float: right;
+}
+	</style>
+</head>
+<body>
+	<h1>
+		Software License Agreement
+	</h1>
+	<p>
+		Licensed under the terms of any of the following licenses of your choice:
+	</p>
+	<ul>
+		<li><a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a> Version
+			2 or later (the "GPL");</li>
+		<li><a href="http://www.gnu.org/licenses/lgpl.html">GNU Lesser General Public License</a>
+			Version 2.1 or later (the "LGPL");</li>
+		<li><a href="http://www.mozilla.org/MPL/MPL-1.1.html">Mozilla Public License</a> Version
+			1.1 or later (the "MPL").</li>
+	</ul>
+	<p>
+		You are not required to, but if you want to explicitly declare the license you have
+		chosen to be bound to when using, reproducing, modifying, and distributing this software,
+		just include a text file titled "LEGAL" in your version of this software, indicating
+		your license choice. In any case, your choice will not restrict any recipient of
+		your version of this software to use, reproduce, modify, and distribute this software
+		under any of the above licenses.
+	</p>
+	<h2>
+		Sources of Intellectual Property Included in CKEditor
+	</h2>
+	<p>
+		Where not otherwise indicated, all CKEditor content is authored by CKSource engineers
+		and consists of CKSource-owned intellectual property. In some specific instances
+		CKEditor will incorporate work done by developers outside of CKSource with their
+		express permission.
+	</p>
+	<h2>
+		Trademarks
+	</h2>
+	<p>
+		CKEditor and CKEditor.NET are trademarks of CKSource - Frederico Knabben. All other brand and product
+		names are trademarks, registered trademarks, or service marks of their respective
+		holders.
+	</p>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor &mdash; The text editor for the Internet &mdash; <a href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003&ndash;2011, <a href="http://cksource.com/">CKSource</a> &mdash; Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
Index: /CKEditor.NET/trunk/_Samples/AttachEvents.aspx
===================================================================
--- /CKEditor.NET/trunk/_Samples/AttachEvents.aspx	(revision 6521)
+++ /CKEditor.NET/trunk/_Samples/AttachEvents.aspx	(revision 6521)
@@ -0,0 +1,64 @@
+﻿<%@ Page Language="C#" AutoEventWireup="true" %>
+
+<script language="C#" runat="server">
+	protected void Page_Load(object sender, EventArgs e)
+	{
+		CKEditor1.CKEditorInstanceEventHandler = new System.Collections.Generic.List<object>();
+		CKEditor1.CKEditorInstanceEventHandler.Add(new object[] { "instanceReady", "function (evt) { alert('Event Handler attached on CKEditorInstanceEventHandler to editor: ' + evt.editor.name);}" });
+	}
+</script>
+<%@ Register Assembly="CKEditor.NET" Namespace="CKEditor.NET" TagPrefix="CKEditor" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head runat="server">
+	<title>Attaching Events &mdash; CKEditor.NET Sample</title>
+	<link href="sample.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+	<form id="form1" runat="server">
+		<h1 class="samples">
+			CKEditor.NET Sample &mdash; Attaching Events
+		</h1>
+		<div class="description">
+		<p>
+			In order to attach a function to an event in a single editor instance, use the following method:
+		</p>
+<pre class="samples">CKEditor1.CKEditorInstanceEventHandler = <span style="color: #0000ff">new</span> System.Collections.Generic.<span style="color: #2b91af">List</span>&lt;<span style="color: #0000ff">object</span>&gt;();
+CKEditor1.CKEditorInstanceEventHandler.Add(<span style="color: #0000ff">new object</span>[] { <span style="color: #a52a2a">&quot;instanceReady&quot;</span>
+	, <span style="color: #a52a2a">&quot;function (evt) { alert(&#39;Event Handler attached on CKEditorInstanceEventHandlerto editor: &#39; + evt.editor.name);}&quot; </span>});
+</pre>
+		<p>
+			Attaching a function to an event in all editor instances (use e.g. in <code>Global.asax</code>)
+			can be achieved in the following way:
+		</p>
+<pre class="samples">CKEditor.NET.<span style="color: #2b91af">CKEditorConfig</span>.GlobalConfig.CKEditorInstanceEventHandler.Add(<span style="color: #0000ff">new object</span>[] 
+	{<span style="color: #a52a2a"> &quot;mode&quot;</span>,<span style="color: #a52a2a"> function (evt) { alert(&#39;Events attached to all instances. (Events: \&quot;mode\&quot;)&#39;);}&quot; </span>});</pre>
+		<p>
+			To attach a function to CKEditor events, use the following code:
+		</p>
+<pre class="samples">CKEditor1.CKEditorEventHandler.Add(<span style="color: #0000ff">new object</span>[] { <span style="color: #a52a2a">&quot;instanceReady&quot;</span>
+	, <span style="color: #a52a2a">&quot;function (evt) { alert(&#39;Events attached to CKEditor. (Events: \&quot;instanceReady\&quot;)&#39;);}&quot; </span>});</pre>
+		<p>
+			The sample editor below uses the first method to attach a function to an event in this instance only.
+		</p>
+		</div>
+		<CKEditor:CKEditorControl ID="CKEditor1" runat="server" Height="200">
+		&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;
+		</CKEditor:CKEditorControl>
+	<div id="footer">
+	<hr />
+	<p>
+		CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
+	</p>
+	<p id="copy">
+		Copyright &copy; 2003-2011, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
+		Knabben. All rights reserved.
+	</p>
+	</div>
+	</form>
+</body>
+</html>
Index: /CKEditor.NET/trunk/_Samples/Default.aspx
===================================================================
--- /CKEditor.NET/trunk/_Samples/Default.aspx	(revision 6521)
+++ /CKEditor.NET/trunk/_Samples/Default.aspx	(revision 6521)
@@ -0,0 +1,68 @@
+﻿<%@ Page Language="C#" AutoEventWireup="true" %>
+
+<%@ Register Assembly="CKEditor.NET" Namespace="CKEditor.NET" TagPrefix="CKEditor" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head runat="server">
+	<title>CKEditor Samples</title>
+	<link href="sample.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+	<form id="form1" runat="server">
+	<div>
+		<h1 class="samples">
+			CKEditor.NET Samples Site
+		</h1>
+		<h2 class="samples">
+			Basic Samples
+		</h2>
+		<ul class="samples">
+			<li>
+				<asp:LinkButton ID="LinkButton1" CssClass="samples" runat="server" PostBackUrl="~/FirstUse.aspx">First use</asp:LinkButton><br />
+				Using CKEditor ASP.NET Control on your website.
+			</li>
+			<li>
+				<asp:LinkButton ID="LinkButton2" CssClass="samples" runat="server" PostBackUrl="~/ToolbarDefine.aspx">Defining custom toolbar</asp:LinkButton><br />
+				Configuring CKEditor toolbar to suit your needs.
+			</li>
+			<li>
+				<asp:LinkButton ID="LinkButton3" CssClass="samples" runat="server" PostBackUrl="~/AttachEvents.aspx">Attaching events</asp:LinkButton><br />
+				Attaching functions to CKEditor events.
+			</li>
+			<li>
+				<asp:LinkButton ID="LinkButton4" CssClass="samples" runat="server" PostBackUrl="~/SampleConfig.aspx">Sample configuration</asp:LinkButton><br />
+				Configuring CKEditor on your website.
+			</li>
+		</ul>
+		<h2 class="samples">
+			Advanced Samples
+		</h2>
+		<ul class="samples">
+			<li>
+			<asp:LinkButton ID="LinkButton5" CssClass="samples" runat="server" PostBackUrl="~/SharedSpaces.aspx">Shared toolbars</asp:LinkButton><br />
+				Displaying multiple editor instances that share the toolbar and/or the elements path. 
+			</li>
+			<li>
+			<asp:LinkButton ID="LinkButton6" CssClass="samples" runat="server" PostBackUrl="~/SubmitData.aspx">Data submission</asp:LinkButton><br />
+				Sending CKEditor data to the server.
+			</li>
+		</ul>
+	</div>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor &mdash; The text editor for the Internet &mdash; <a class="samples" href="http://ckeditor.com/">
+				http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003&ndash;2011, <a class="samples" href="http://cksource.com/">CKSource</a>
+			&mdash; Frederico Knabben. All rights reserved.
+		</p>
+	</div>
+	</form>
+</body>
+</html>
Index: /CKEditor.NET/trunk/_Samples/FirstUse.aspx
===================================================================
--- /CKEditor.NET/trunk/_Samples/FirstUse.aspx	(revision 6521)
+++ /CKEditor.NET/trunk/_Samples/FirstUse.aspx	(revision 6521)
@@ -0,0 +1,56 @@
+﻿<%@ Page Language="C#" AutoEventWireup="true" %>
+
+<%@ Register Assembly="CKEditor.NET" Namespace="CKEditor.NET" TagPrefix="CKEditor" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head runat="server">
+	<title>First Use &mdash; CKEditor.NET Sample</title>
+	<link href="sample.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+	<form id="form1" runat="server">
+	<h1 class="samples">
+		CKEditor.NET Sample &mdash; Adding CKEditor ASP.NET Control to a Page
+	</h1>
+	<div class="description">
+	<p>
+		If you want use the CKEditor ASP.NET Control, you must add references to the project and
+		register the control.<br />
+		If you only intend to use the control on a single page, you can add a <code>Register</code>
+		section to its source code:
+	</p>
+	<pre class="samples"><span style="background-color: #ffff00">&lt;<font>%</font></span><span style="color: #0000ff">@</span><span style="color: #a52a2a">Register </span><span style="color: #ff0000">Assembly</span><span style="color: #0000ff">=&quot;CKEditor.NET&quot; </span><span style="color: #ff0000">Namespace</span><span style="color: #0000ff">=&quot;CKEditor.NET&quot; </span><span style="color: #ff0000">TagPrefix</span><span style="color: #0000ff">=&quot;CKEditor&quot;</span><span style="background-color: #ffff00">%&gt;</span></pre>
+	<p>
+		If you intend to use the control on multiple pages, you can add the <code>Register</code>
+		section in <code>web.config</code>. Insert the following code into the <code><span style="color: #0000ff">&lt;</span><span style="color: #a52a2a">system.web</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #a52a2a">pages</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #a52a2a">controls</span><span style="color: #0000ff">&gt;</span></code> section:
+	</p>
+	<pre class="samples"><span style="color: #0000ff">&lt;</span><span style="color: #a52a2a">add </span><span style="color: #ff0000">tagPrefix</span><span style="color: #0000ff">=&quot;CKEditor&quot;</span><span style="color: #ff0000"> assembly</span><span style="color: #0000ff">=&quot;CKEditor.NET&quot;</span><span style="color: #ff0000"> namespace</span><span style="color: #0000ff">=&quot;CKEditor.NET&quot;/&gt;</span></pre>
+	<p>
+		To insert the CKEditor ASP.NET Control into a web page, use the following code:
+	</p>
+	<pre class="samples"><span style="color: #0000ff">&lt;</span><span style="color: #a52a2a">CKEditor</span><span style="color: #0000ff">:</span><span style="color: #a52a2a">CKEditorControl </span><span style="color: #ff0000">ID</span><span style="color: #0000ff">=&quot;CKEditor1&quot; </span><span style="color: #ff0000">runat</span><span style="color: #0000ff">=&quot;server&quot;&gt;&lt;/</span><span style="color: #a52a2a">CKEditor</span><span style="color: #0000ff">:</span><span style="color: #a52a2a">CKEditorControl</span><span style="color: #0000ff">&gt;</span></pre>
+	<p>The CKEditor instance below was inserted using the second method.</p>
+	</div>
+	<div>
+		<CKEditor:CKEditorControl ID="CKEditor1" runat="server" Height="200">
+		&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;
+		</CKEditor:CKEditorControl>
+	</div>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor &mdash; The text editor for the Internet &mdash; <a class="samples" href="http://ckeditor.com/">
+				http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003&ndash;2011, <a class="samples" href="http://cksource.com/">CKSource</a>
+			&mdash; Frederico Knabben. All rights reserved.
+		</p>
+	</div>
+	</form>
+</body>
+</html>
Index: /CKEditor.NET/trunk/_Samples/SampleConfig.aspx
===================================================================
--- /CKEditor.NET/trunk/_Samples/SampleConfig.aspx	(revision 6521)
+++ /CKEditor.NET/trunk/_Samples/SampleConfig.aspx	(revision 6521)
@@ -0,0 +1,58 @@
+﻿<%@ Page Language="C#" AutoEventWireup="true"%>
+<script language="C#" runat="server">
+	protected void Page_Load(object sender, EventArgs e)
+	{
+		//	Remember: the configuration set in the code file is more important, than set in tags on the aspx page.
+		CKEditor1.config.uiColor = "#BFEE62";
+		CKEditor1.config.language = "de";
+		CKEditor1.config.enterMode = EnterMode.BR;
+	}
+</script>
+<%@ Register Assembly="CKEditor.NET" Namespace="CKEditor.NET" TagPrefix="CKEditor" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head runat="server">
+	<title>CKEditor Configuration &mdash; CKEditor.NET Sample</title>
+	<link href="sample.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+	<form id="form1" runat="server">
+		<h1 class="samples">
+			CKEditor.NET Sample &mdash; Configuration
+		</h1>
+		<div class="description">
+		<p>
+			CKEditor is a highly customizable solution. Editor settings can be configured on
+			<code>.aspx</code> page in the following way:
+		</p>
+<pre class="samples"><span style="color: #0000ff">&lt;</span><span style="color: #a52a2a">CKEditor</span><span style="color: #0000ff">:<span style="color: #a52a2a">CKEditorControl </span></span><span style="color: #ff0000">ID</span><span style="color: #0000ff">=&quot;CKEditor1&quot; </span><span style="color: #ff0000">runat</span><span style="color: #0000ff">=&quot;server&quot; </span><span style="color: #ff0000">UIColor</span><span style="color: #0000ff">=&quot;#BFEE62&quot; </span><span style="color: #ff0000">Language</span><span style="color: #0000ff">=&quot;de&quot; </span><span style="color: #ff0000">EnterMode</span><span style="color: #0000ff">=&quot;BR&quot;&gt;</span>
+<span style="color: #0000ff">&lt;<span>/</span><span style="color: #a52a2a">CKEditor</span>:<span style="color: #a52a2a">CKEditorControl</span>&gt;</span></pre>
+		<p><br />
+			The configuration can also be placed in the source file:
+		</p>
+<pre class="samples"><span style="color: #006400">//Please note that the configuration set in the source file is more important than the one set in tags on the .aspx page.</span>
+CKEditor1.config.uiColor = <span style="color: #a52a2a">&quot;#BFEE62&quot;</span>;
+CKEditor1.config.language = <span style="color: #a52a2a">&quot;de&quot;</span>;
+CKEditor1.config.enterMode = <span style="color: #2b91af">EnterMode</span>.BR;
+</pre>
+	</div>
+	<CKEditor:CKEditorControl ID="CKEditor1" runat="server" UIColor="#BFEE62" Language="de" EnterMode="BR">
+	</CKEditor:CKEditorControl>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor &mdash; The text editor for the Internet &mdash; <a class="samples" href="http://ckeditor.com/">
+				http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003&ndash;2011, <a class="samples" href="http://cksource.com/">CKSource</a>
+			&mdash; Frederico Knabben. All rights reserved.
+		</p>
+	</div>
+	</form>
+</body>
+</html>
Index: /CKEditor.NET/trunk/_Samples/SharedSpaces.aspx
===================================================================
--- /CKEditor.NET/trunk/_Samples/SharedSpaces.aspx	(revision 6521)
+++ /CKEditor.NET/trunk/_Samples/SharedSpaces.aspx	(revision 6521)
@@ -0,0 +1,72 @@
+﻿<%@ Page Language="C#" AutoEventWireup="true" %>
+
+<%@ Register Assembly="CKEditor.NET" Namespace="CKEditor.NET" TagPrefix="CKEditor" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head runat="server">
+	<title>Shared Toolbars &mdash; CKEditor.NET Sample</title>
+	<link href="sample.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<form id="form1" style="height:600px;" runat="server">
+	<h1 class="samples">
+		CKEditor.NET Sample &mdash; Shared Toolbars 
+	</h1>
+	<div class="description">
+	<p>
+		This sample shows how to configure multiple CKEditor.NET instances to share some parts of the interface. You can choose to share the toolbar, the elements path, or both.
+	</p>
+<pre class="samples"><span style="color: #0000ff">&lt;</span><span style="color: #a52a2a">CKEditor</span><span style="color: #0000ff">:</span><span style="color: #a52a2a">CKEditorControl </span><span style="color: #ff0000">ID</span><span style="color: #0000ff">=&quot;CKEditor1&quot; </span><span style="color: #ff0000">SharedSpacesTop</span><span style="color: #0000ff">=&quot;divTopShared&quot; </span><span style="color: #ff0000">SharedSpacesBottom</span><span style="color: #0000ff">=&quot;divBottomShared&quot; </span><span style="color: #ff0000">runat</span><span style="color: #0000ff">=&quot;server&quot;&gt;&lt;/</span><span style="color: #a52a2a">CKEditor</span><span style="color: #0000ff">:</span><span style="color: #a52a2a">CKEditorControl</span><span style="color: #0000ff">&gt;</span>
+	
+<span style="color: #0000ff">&lt;</span><span style="color: #a52a2a">CKEditor</span><span style="color: #0000ff">:</span><span style="color: #a52a2a">CKEditorControl </span><span style="color: #ff0000">ID</span><span style="color: #0000ff">=&quot;CKEditor2&quot; </span><span style="color: #ff0000">SharedSpacesTop</span><span style="color: #0000ff">=&quot;divTopShared&quot; </span><span style="color: #ff0000">SharedSpacesBottom</span><span style="color: #0000ff">=&quot;divBottomShared&quot; </span><span style="color: #ff0000">runat</span><span style="color: #0000ff">=&quot;server&quot;&gt;&lt;/</span><span style="color: #a52a2a">CKEditor</span><span style="color: #0000ff">:</span><span style="color: #a52a2a">CKEditorControl</span><span style="color: #0000ff">&gt;</span>
+
+<span style="color: #0000ff">&lt;</span><span style="color: #a52a2a">CKEditor</span><span style="color: #0000ff">:</span><span style="color: #a52a2a">CKEditorControl </span><span style="color: #ff0000">ID</span><span style="color: #0000ff">=&quot;CKEditor3&quot; </span><span style="color: #ff0000">SharedSpacesTop</span><span style="color: #0000ff">=&quot;divTopShared&quot; </span><span style="color: #ff0000">runat</span><span style="color: #0000ff">=&quot;server&quot;&gt;&lt;/</span><span style="color: #a52a2a">CKEditor</span><span style="color: #0000ff">:</span><span style="color: #a52a2a">CKEditorControl</span><span style="color: #0000ff">&gt;</span>
+
+<span style="color: #0000ff">&lt;</span><span style="color: #a52a2a">CKEditor</span><span style="color: #0000ff">:</span><span style="color: #a52a2a">CKEditorControl </span><span style="color: #ff0000">ID</span><span style="color: #0000ff">=&quot;CKEditor4&quot; </span><span style="color: #ff0000">runat</span><span style="color: #0000ff">=&quot;server&quot;&gt;&lt;/</span><span style="color: #a52a2a">CKEditor</span><span style="color: #0000ff">:</span><span style="color: #a52a2a">CKEditorControl</span><span style="color: #0000ff">&gt;</span>
+</pre>
+	</div>
+	<div id="divTopShared" style="margin:20 0 0 20;">
+	</div>
+	<br />
+	<div style="height:500px; overflow: scroll; margin:20 0 0 20; border: thin solid black; padding:15px 10px 15px 10px;">
+	Editor 1 (uses shared toolbar and elements path):
+	<CKEditor:CKEditorControl ID="CKEditor1" SharedSpacesTop="divTopShared" SharedSpacesBottom="divBottomShared" runat="server" Height="200">
+		&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;
+	</CKEditor:CKEditorControl>
+	<br />
+	Editor 2 (uses shared toolbar and elements path):
+	<CKEditor:CKEditorControl ID="CKEditor2" SharedSpacesTop="divTopShared" SharedSpacesBottom="divBottomShared" runat="server" Height="200">
+		&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;
+	</CKEditor:CKEditorControl>
+	<br />
+	Editor 3 (uses shared toolbar only):
+	<CKEditor:CKEditorControl ID="CKEditor3" SharedSpacesTop="divTopShared" runat="server" Height="200">
+		&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;
+	</CKEditor:CKEditorControl>
+	<br />
+	Editor 4 (no shared spaces):
+	<CKEditor:CKEditorControl ID="CKEditor4" runat="server" Height="200">
+		&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;
+	</CKEditor:CKEditorControl>
+	</div>
+	<br />
+	<div id="divBottomShared">
+	</div>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor &mdash; The text editor for the Internet &mdash; <a class="samples" href="http://ckeditor.com/">
+				http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003&ndash;2011, <a class="samples" href="http://cksource.com/">CKSource</a>
+			&mdash; Frederico Knabben. All rights reserved.
+		</p>
+	</div>
+</form>
+</body>
+</html>
Index: /CKEditor.NET/trunk/_Samples/SubmitData.aspx
===================================================================
--- /CKEditor.NET/trunk/_Samples/SubmitData.aspx	(revision 6521)
+++ /CKEditor.NET/trunk/_Samples/SubmitData.aspx	(revision 6521)
@@ -0,0 +1,57 @@
+﻿<%@ Page Language="C#" AutoEventWireup="true" %>
+<script language="C#" runat="server">
+protected void Page_Load(object sender, EventArgs e)
+{
+	//Add CKEditor ouput HTML to the <pre> tag.
+	preCKEditorData.InnerText = CKEditor1.Text; 
+}
+</script>
+<%@ Register Assembly="CKEditor.NET" Namespace="CKEditor.NET" TagPrefix="CKEditor" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head runat="server">
+	<title>Data Submission &mdash; CKEditor.NET Sample</title>
+	<link href="sample.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+	<form id="form1" runat="server">
+	<h1 class="samples">
+		CKEditor.NET Sample &mdash; Data Submission
+	</h1>
+	<div class="description">
+	<p>
+		If you want see the HTML output from CKEditor, use the <code>Text</code> property:
+	</p>
+	<pre class="samples"><span style="color: #0000ff">protected void</span> Page_Load(<span style="color: #0000ff">object</span> sender, <span style="color: #2b91af">EventArgs</span> e)
+{
+    <span style="color: #008000">//Add CKEditor ouput HTML to the &lt;pre&gt; tag.</span>
+    preCKEditorData.InnerText = CKEditor1.Text; 
+}</pre>
+	</div>
+	<div>
+		<CKEditor:CKEditorControl ID="CKEditor1" runat="server" Height="200">
+&lt;p&gt;
+	This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</CKEditor:CKEditorControl>
+	</div>
+	<input type="submit" value="Submit" />
+	<div>
+		<pre runat="server" id="preCKEditorData" class="samples"></pre>
+	</div>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor &mdash; The text editor for the Internet &mdash; <a class="samples" href="http://ckeditor.com/">
+				http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003&ndash;2011, <a class="samples" href="http://cksource.com/">CKSource</a>
+			&mdash; Frederico Knabben. All rights reserved.
+		</p>
+	</div>
+	</form>
+</body>
+</html>
Index: /CKEditor.NET/trunk/_Samples/ToolbarDefine.aspx
===================================================================
--- /CKEditor.NET/trunk/_Samples/ToolbarDefine.aspx	(revision 6521)
+++ /CKEditor.NET/trunk/_Samples/ToolbarDefine.aspx	(revision 6521)
@@ -0,0 +1,114 @@
+﻿<%@ Page Language="C#" AutoEventWireup="true" %>
+<script language="C#" runat="server">
+	protected void Page_Load(object sender, EventArgs e)
+	{
+		CKEditor1.config.toolbar = new object[]
+			{
+				new object[] { "Source", "-", "Save", "NewPage", "Preview", "-", "Templates" },
+				new object[] { "Cut", "Copy", "Paste", "PasteText", "PasteFromWord", "-", "Print", "SpellChecker", "Scayt" },
+				new object[] { "Undo", "Redo", "-", "Find", "Replace", "-", "SelectAll", "RemoveFormat" },
+				new object[] { "Form", "Checkbox", "Radio", "TextField", "Textarea", "Select", "Button", "ImageButton", "HiddenField" },
+				"/",
+				new object[] { "Bold", "Italic", "Underline", "Strike", "-", "Subscript", "Superscript" },
+				new object[] { "NumberedList", "BulletedList", "-", "Outdent", "Indent", "Blockquote", "CreateDiv" },
+				new object[] { "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock" },
+				new object[] { "BidiLtr", "BidiRtl" },
+				new object[] { "Link", "Unlink", "Anchor" },
+				new object[] { "Image", "Flash", "Table", "HorizontalRule", "Smiley", "SpecialChar", "PageBreak", "Iframe" },
+				"/",
+				new object[] { "Styles", "Format", "Font", "FontSize" },
+				new object[] { "TextColor", "BGColor" },
+				new object[] { "Maximize", "ShowBlocks", "-", "About" }
+			};
+		CKEditor2.config.toolbar = new object[]
+			{
+				new object[] { "Bold", "Italic", "-", "NumberedList", "BulletedList", "-", "Link", "Unlink", "-", "About" },
+				new object[] { "Cut", "Copy", "Paste", "PasteText", "PasteFromWord", "-", "Print", "SpellChecker", "Scayt" },
+			};
+		CKEditor3.config.toolbar = "Basic";
+	}
+</script>
+<%@ Register Assembly="CKEditor.NET" Namespace="CKEditor.NET" TagPrefix="CKEditor" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head runat="server">
+	<title>Custom Toolbar Definition &mdash; CKEditor.NET Sample</title>
+	<link href="sample.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+	<form id="form1" runat="server">
+	<h1 class="samples">
+		CKEditor.NET Sample &mdash; Defining a Custom CKEditor Toolbar
+	</h1>
+	<div class="description">
+	<p>
+		CKEditor toolbar can be adjusted to your needs. You can define a toolbar that contains
+		all the buttons available in the <strong>Full</strong> toolbar definition using the
+		following code:
+	</p>
+<pre class="samples">CKEditor1.config.toolbar = <span style="color: #0000ff">new object[]</span>
+{
+    <span style="color: #0000ff">new object</span>[] { <span style="color: #a52a2a">&quot;Source&quot;, &quot;-&quot;, &quot;Save&quot;, &quot;NewPage&quot;, &quot;Preview&quot;, &quot;-&quot;, &quot;Templates&quot;</span> },
+    <span style="color: #0000ff">new object</span>[] { <span style="color: #a52a2a">&quot;Cut&quot;, &quot;Copy&quot;, &quot;Paste&quot;, &quot;PasteText&quot;, &quot;PasteFromWord&quot;, &quot;-&quot;, &quot;Print&quot;, &quot;SpellChecker&quot;, &quot;Scayt&quot;</span> },
+    <span style="color: #0000ff">new object</span>[] {<span style="color: #a52a2a"> &quot;Undo&quot;, &quot;Redo&quot;, &quot;-&quot;, &quot;Find&quot;, &quot;Replace&quot;, &quot;-&quot;, &quot;SelectAll&quot;, &quot;RemoveFormat&quot;</span> },
+    <span style="color: #0000ff">new object</span>[] {<span style="color: #a52a2a"> &quot;Form&quot;, &quot;Checkbox&quot;, &quot;Radio&quot;, &quot;TextField&quot;, &quot;Textarea&quot;, &quot;Select&quot;, &quot;Button&quot;, &quot;ImageButton&quot;, &quot;HiddenField&quot;</span> },
+    <span style="color: #a52a2a">&quot;/&quot;</span>,
+    <span style="color: #0000ff">new object</span>[] { <span style="color: #a52a2a">&quot;Bold&quot;, &quot;Italic&quot;, &quot;Underline&quot;, &quot;Strike&quot;, &quot;-&quot;, &quot;Subscript&quot;, &quot;Superscript&quot;</span> },
+    <span style="color: #0000ff">new object</span>[] {<span style="color: #a52a2a"> &quot;NumberedList&quot;, &quot;BulletedList&quot;, &quot;-&quot;, &quot;Outdent&quot;, &quot;Indent&quot;, &quot;Blockquote&quot;, &quot;CreateDiv&quot;</span> },
+    <span style="color: #0000ff">new object</span>[] { <span style="color: #a52a2a">&quot;JustifyLeft&quot;, &quot;JustifyCenter&quot;, &quot;JustifyRight&quot;, &quot;JustifyBlock&quot;</span> },
+    <span style="color: #0000ff">new object</span>[] {<span style="color: #a52a2a"> &quot;BidiLtr&quot;, &quot;BidiRtl&quot;</span> },
+    <span style="color: #0000ff">new object</span>[] { <span style="color: #a52a2a">&quot;Link&quot;, &quot;Unlink&quot;, &quot;Anchor&quot;</span> },
+    <span style="color: #0000ff">new object</span>[] { <span style="color: #a52a2a">&quot;Image&quot;, &quot;Flash&quot;, &quot;Table&quot;, &quot;HorizontalRule&quot;, &quot;Smiley&quot;, &quot;SpecialChar&quot;, &quot;PageBreak&quot;, &quot;Iframe&quot;</span> },
+    <span style="color: #a52a2a">&quot;/&quot;</span>,
+    <span style="color: #0000ff">new object</span>[] { <span style="color: #a52a2a">&quot;Styles&quot;, &quot;Format&quot;, &quot;Font&quot;, &quot;FontSize&quot;</span> },
+    <span style="color: #0000ff">new object</span>[] {<span style="color: #a52a2a"> &quot;TextColor&quot;, &quot;BGColor&quot; </span>},
+    <span style="color: #0000ff">new object</span>[] {<span style="color: #a52a2a"> &quot;Maximize&quot;, &quot;ShowBlocks&quot;, &quot;-&quot;, &quot;About&quot;</span> }
+};</pre>
+	</div>
+	<CKEditor:CKEditorControl ID="CKEditor1" runat="server" Height="200">
+	&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;
+	</CKEditor:CKEditorControl>
+	<br />
+	<div class="description">
+	<p>
+		If you want to strip CKEditor toolbar to a bare minimum that suits your needs,
+		limit your definition to what is needed only.
+	</p>
+	<pre class="samples">CKEditor2.config.toolbar = <span style="color: #0000ff">new object</span>[]
+{
+    <span style="color: #0000ff">new object</span>[] { <span style="color: #a52a2a">&quot;Bold&quot;, &quot;Italic&quot;, &quot;-&quot;, &quot;NumberedList&quot;, &quot;BulletedList&quot;, &quot;-&quot;, &quot;Link&quot;, &quot;Unlink&quot;, &quot;-&quot;, &quot;About&quot; </span>},
+    <span style="color: #0000ff">new object</span>[] {<span style="color: #a52a2a"> &quot;Cut&quot;, &quot;Copy&quot;, &quot;Paste&quot;, &quot;PasteText&quot;, &quot;PasteFromWord&quot;, &quot;-&quot;, &quot;Print&quot;, &quot;SpellChecker&quot;, &quot;Scayt&quot;</span> },
+};</pre>
+	</div>
+	<CKEditor:CKEditorControl ID="CKEditor2" runat="server" Height="200">
+	&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;
+	</CKEditor:CKEditorControl>
+	<br />
+	<div class="description">
+	<p>
+		You can also use one of the pre-defined CKEditor toolbar configurations (<strong>Full</strong> or
+		<strong>Basic</strong>) by setting the <code>config.toolbar</code> property.
+	</p>
+<pre class="samples">CKEditor3.config.toolbar =<span style="color: #a52a2a"> &quot;Basic&quot;</span>;</pre>
+	<CKEditor:CKEditorControl ID="CKEditor3" runat="server">
+	&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;
+	</CKEditor:CKEditorControl>
+	</div>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor &mdash; The text editor for the Internet &mdash; <a class="samples" href="http://ckeditor.com/">
+				http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003&ndash;2011, <a class="samples" href="http://cksource.com/">CKSource</a>
+			&mdash; Frederico Knabben. All rights reserved.
+		</p>
+	</div>
+	</form>
+</body>
+</html>
Index: /CKEditor.NET/trunk/_Samples/sample.css
===================================================================
--- /CKEditor.NET/trunk/_Samples/sample.css	(revision 6521)
+++ /CKEditor.NET/trunk/_Samples/sample.css	(revision 6521)
@@ -0,0 +1,163 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre {
+	line-height: 1.5em;
+}
+
+body {
+	padding:10px 30px;
+}
+
+input, textarea, select, option, optgroup, button, td, th {
+	font-size: 100%;
+}
+
+pre,
+code,
+kbd,
+samp,
+tt{
+  font-family: monospace,monospace;
+  font-size: 1em;
+}
+
+h1.samples {
+  color:#0782C1;
+  font-size:200%;
+  font-weight:normal;
+  margin: 0;
+  padding: 0;
+}
+
+h2.samples {
+  color:#000000;
+  font-size:130%;
+  margin: 0;
+  padding: 0;
+}
+
+p, blockquote, address, form, pre, dl, h1.samples, h2.samples {
+	margin-bottom:15px;
+}
+
+ul.samples {
+	margin-bottom:15px;
+}
+
+.clear {
+	clear:both;
+}
+
+fieldset
+{
+	margin: 0;
+	padding: 10px;
+}
+
+body, input, textarea {
+	color: #333333;
+	font-family: Arial, Helvetica, sans-serif;
+}
+
+body {
+	font-size: 75%;
+}
+
+a.samples {
+	color:#189DE1;
+	text-decoration:none;
+}
+
+a.samples:hover {
+  text-decoration:underline;
+}
+
+form
+{
+	margin: 0;
+	padding: 0;
+}
+
+pre.samples
+{
+	background-color: #F7F7F7;
+	border: 1px solid #D7D7D7;
+	overflow: auto;
+	padding: 0.25em;
+}
+
+#alerts
+{
+	color: Red;
+}
+
+#footer hr
+{
+	margin: 10px 0 15px 0;
+	height: 1px;
+	border: solid 1px gray;
+	border-bottom: none;
+}
+
+#footer p
+{
+	margin: 0 10px 10px 10px;
+	float: left;
+}
+
+#footer #copy
+{
+	float: right;
+}
+
+#outputSample
+{
+	width: 100%;
+	table-layout: fixed;
+}
+
+#outputSample thead th
+{
+	color: #dddddd;
+	background-color: #999999;
+	padding: 4px;
+	white-space: nowrap;
+}
+
+#outputSample tbody th
+{
+	vertical-align: top;
+	text-align: left;
+}
+
+#outputSample pre
+{
+	margin: 0;
+	padding: 0;
+	white-space: pre; /* CSS2 */
+	white-space: -moz-pre-wrap; /* Mozilla*/
+	white-space: -o-pre-wrap; /* Opera 7 */
+	white-space: pre-wrap; /* CSS 2.1 */
+	white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */
+	word-wrap: break-word; /* IE */
+}
+
+.description {
+	border: 1px dotted #B7B7B7;
+	margin-bottom: 10px;
+	padding: 10px 10px 0;
+}
+
+label {
+	display: block;
+	margin-bottom:6px;
+}
+
+.cke_dialog label
+{
+	display: inline;
+	margin-bottom: auto;
+}
Index: /CKEditor.NET/trunk/_Samples/web.config
===================================================================
--- /CKEditor.NET/trunk/_Samples/web.config	(revision 6521)
+++ /CKEditor.NET/trunk/_Samples/web.config	(revision 6521)
@@ -0,0 +1,12 @@
+﻿<?xml version="1.0"?>
+<configuration>
+	<appSettings/>
+	<connectionStrings/>
+	<system.web>
+		<pages>
+			<controls>
+				<add tagPrefix="CKEditor" assembly="CKEditor.NET" namespace="CKEditor.NET"/>
+			</controls>
+		</pages>
+		<compilation debug="true"/></system.web>
+</configuration>
Index: /CKEditor.NET/trunk/_dev/build.bat
===================================================================
--- /CKEditor.NET/trunk/_dev/build.bat	(revision 6521)
+++ /CKEditor.NET/trunk/_dev/build.bat	(revision 6521)
@@ -0,0 +1,31 @@
+::
+:: Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+:: For licensing, see LICENSE.html or http://ckeditor.com/license
+::
+
+set version=3.5.2
+
+:: Remove old release folder and file
+rmdir /S /Q release
+del /S /Q "ckeditor_net_%version%.zip"
+
+:: Load the latest version of ASP.NET control
+svn export http://sharepoint.svn.ckeditor.com/CKEditor.NET release
+
+:: Remove some files to reduce the size of the package
+rmdir /S /Q release\_Samples\ckeditor\_source
+rmdir /S /Q release\_Samples\ckeditor\_samples
+rmdir /S /Q release\_dev
+del /S /Q release\_Samples\ckeditor\*.php
+del /S /Q release\_Samples\ckeditor\*.asp
+del /S /Q release\_Samples\ckeditor\*_source*.js
+del /S /Q release\_Samples\ckeditor\*.pack
+
+:: Copy DLL files
+mkdir release\bin
+xcopy /S ..\CKEditor.Net\bin release\bin
+
+:: Zip files
+cd release
+zip -r "../ckeditor_net_%version%.zip" *
+cd ..
Index: /CKEditor.NET/trunk/_dev/msajax.js
===================================================================
--- /CKEditor.NET/trunk/_dev/msajax.js	(revision 6521)
+++ /CKEditor.NET/trunk/_dev/msajax.js	(revision 6521)
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+// The following script is used in CKEditorControl:OnPreRender
+var CKEditor_Controls = [];
+
+function CKEditor_TextBoxEncode(cID, inUpdatePanel) {
+	if (typeof CKEDITOR == 'undefined' || typeof CKEDITOR.instances[cID] == 'undefined') {
+		var control = document.getElementById(cID);
+		control.value = control.value.replace(/</g, '&lt;').replace(/>/g, '&gt;');
+	} 
+	else {
+		var e = CKEDITOR.instances[cID];
+		if (inUpdatePanel) 
+			e.destroy();
+		else
+			e.updateElement();
+	}
+};
+
+(function()
+{
+	var onload = function()
+	{
+		var ids = CKEditor_Controls,
+			oldPageLoad = window.pageLoad;
+
+		var fixValues = function () {
+			for (i = ids.length; i--;) {
+				var e = document.getElementById(ids[i]);
+				e.value = e.value.replace(/&lt;/g, '<').replace(/&gt;/g, '>');
+			}
+		};
+
+		window.pageLoad = function(sender, args) {
+			if (args.get_isPartialLoad()) {
+				fixValues();
+			}
+			if (oldPageLoad && typeof oldPageLoad == 'function')
+			oldPageLoad.call(this, sender, args);
+		};
+
+		fixValues();
+	};
+
+	if ( window.addEventListener )
+		window.addEventListener( 'load', onload, false );
+	else if ( window.attachEvent )
+		window.attachEvent( 'onload', onload );
+})();
