Updated Exceptron driver to 0.1.0.30 to add support for severity.

pull/6/head
kay.one 13 years ago
parent 7d5c0fed14
commit aa2a3d997a

@ -125,8 +125,8 @@
<virtualDirectory path="/" physicalPath="%NZBDRONE_PATH%\NZBDrone.Web" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:8989:localhost" />
<binding protocol="http" bindingInformation="*:8989:" />
<binding protocol="http" bindingInformation="*:8980:localhost" />
<binding protocol="http" bindingInformation="*:8980:" />
</bindings>
</site>
<applicationDefaults applicationPool="IISExpressAppPool" />
@ -698,8 +698,8 @@
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="true" />
<windowsAuthentication enabled="false" />
<anonymousAuthentication enabled="false" />
<windowsAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>

@ -38,8 +38,9 @@
<Reference Include="Exceptioneer.WindowsFormsClient">
<HintPath>..\Libraries\Exceptioneer.WindowsFormsClient.dll</HintPath>
</Reference>
<Reference Include="Exceptron.Driver, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Exceptron.Driver.0.1.0.17\lib\net20\Exceptron.Driver.dll</HintPath>
<Reference Include="Exceptron.Driver, Version=0.1.0.30, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Exceptron.Driver.0.1.0.30\lib\net20\Exceptron.Driver.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.4.5.4\lib\net40\Newtonsoft.Json.dll</HintPath>

@ -69,7 +69,24 @@ namespace NzbDrone.Common
exceptionData.Message = logEvent.FormattedMessage;
exceptionData.UserId = EnvironmentProvider.UGuid.ToString().Replace("-", string.Empty);
return ExceptronDriver.SubmitException(exceptionData);
if (logEvent.Level <= LogLevel.Info)
{
exceptionData.Severity = ExceptionSeverity.None;
}
else if (logEvent.Level <= LogLevel.Warn)
{
exceptionData.Severity = ExceptionSeverity.Warning;
}
else if (logEvent.Level <= LogLevel.Error)
{
exceptionData.Severity = ExceptionSeverity.Error;
}
else if (logEvent.Level <= LogLevel.Fatal)
{
exceptionData.Severity = ExceptionSeverity.Fatal;
}
return ExceptronDriver.SubmitException(exceptionData).RefId;
}
catch (Exception e)
{

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Exceptron.Driver" version="0.1.0.17" />
<package id="Exceptron.Driver" version="0.1.0.30" />
<package id="Newtonsoft.Json" version="4.5.4" />
<package id="NLog" version="2.0.0.2000" />
</packages>

@ -1,17 +0,0 @@
using DataTables.Mvc.Core.Helpers;
using DataTables.Mvc.Core.Models;
using System.Web.Mvc;
[assembly: WebActivator.PreApplicationStartMethod(typeof($rootnamespace$.App_Start.DataTablesModelBinderActivator), "Start")]
namespace $rootnamespace$.App_Start
{
public static class DataTablesModelBinderActivator
{
public static void Start()
{
if (!ModelBinders.Binders.ContainsKey(typeof(DataTablesParams)))
ModelBinders.Binders.Add(typeof(DataTablesParams), new DataTablesModelBinder());
}
}
}

@ -1,5 +0,0 @@
param($installPath, $toolsPath, $package, $project)
$path = [System.IO.Path]
$appstart = $path::Combine($path::GetDirectoryName($project.FileName), "App_Start\DataTablesMvc.cs")
$DTE.ItemOperations.OpenFile($appstart)

@ -1,17 +0,0 @@
using DataTables.Mvc.Core.Helpers;
using DataTables.Mvc.Core.Models;
using System.Web.Mvc;
[assembly: WebActivator.PreApplicationStartMethod(typeof($rootnamespace$.App_Start.DataTablesModelBinderActivator), "Start")]
namespace $rootnamespace$.App_Start
{
public static class DataTablesModelBinderActivator
{
public static void Start()
{
if (!ModelBinders.Binders.ContainsKey(typeof(DataTablesParams)))
ModelBinders.Binders.Add(typeof(DataTablesParams), new DataTablesModelBinder());
}
}
}

@ -1,5 +0,0 @@
param($installPath, $toolsPath, $package, $project)
$path = [System.IO.Path]
$appstart = $path::Combine($path::GetDirectoryName($project.FileName), "App_Start\DataTablesMvc.cs")
$DTE.ItemOperations.OpenFile($appstart)

@ -1,17 +0,0 @@
using DataTables.Mvc.Core.Helpers;
using DataTables.Mvc.Core.Models;
using System.Web.Mvc;
[assembly: WebActivator.PreApplicationStartMethod(typeof($rootnamespace$.App_Start.DataTablesModelBinderActivator), "Start")]
namespace $rootnamespace$.App_Start
{
public static class DataTablesModelBinderActivator
{
public static void Start()
{
if (!ModelBinders.Binders.ContainsKey(typeof(DataTablesParams)))
ModelBinders.Binders.Add(typeof(DataTablesParams), new DataTablesModelBinder());
}
}
}

@ -1,5 +0,0 @@
param($installPath, $toolsPath, $package, $project)
$path = [System.IO.Path]
$appstart = $path::Combine($path::GetDirectoryName($project.FileName), "App_Start\DataTablesMvc.cs")
$DTE.ItemOperations.OpenFile($appstart)

@ -1,125 +0,0 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Threading;
using Exceptron.Driver.Message;
using Exceptron.Driver.fastJSON;
namespace Exceptron.Driver
{
public class ExceptionClient
{
public readonly string DriverVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
public readonly string DriverName = "Official .NET";
private readonly string _appId;
public bool ThrowsExceptions { get; set; }
public string Enviroment { get; set; }
public string ApplicationVersion { get; set; }
internal RestClient RestClient { get; set; }
internal string ServerUrl { get; set; }
public ExceptionClient(string appId)
{
_appId = appId;
ServerUrl = "http://api.exceptron.com/v1a/";
RestClient = new RestClient();
}
internal static List<Frame> ConvertToFrames(Exception exception)
{
if (exception == null) return null;
var stackTrace = new StackTrace(exception, true);
var frames = stackTrace.GetFrames();
if (frames == null) return null;
var result = new List<Frame>();
for (int index = 0; index < frames.Length; index++)
{
var frame = frames[index];
var method = frame.GetMethod();
var declaringType = method.DeclaringType;
var currentFrame = new Frame
{
i = index,
fn = frame.GetFileName(),
ln = frame.GetFileLineNumber(),
m = method.ToString(),
};
currentFrame.m = currentFrame.m.Substring(currentFrame.m.IndexOf(' ')).Trim();
if (declaringType != null)
{
currentFrame.c = declaringType.FullName;
}
result.Add(currentFrame);
}
return result;
}
public string SubmitException(ExceptionData exceptionData)
{
try
{
VerifyErrorData(exceptionData);
var report = new ExceptionReport();
report.ap = _appId;
report.dn = DriverName;
report.dv = DriverVersion;
report.aver = ApplicationVersion;
report.ext = exceptionData.Exception.GetType().FullName;
report.exm = exceptionData.Exception.Message;
report.stk = ConvertToFrames(exceptionData.Exception);
report.cmp = exceptionData.Component;
report.uid = exceptionData.UserId;
report.env = Enviroment;
report.msg = exceptionData.Message;
report.cul = Thread.CurrentThread.CurrentCulture.Name;
report.os = Environment.OSVersion.VersionString;
var messageString = JSON.Instance.ToJSON(report);
var response = RestClient.Put(ServerUrl, messageString);
return response;
}
catch (Exception e)
{
Trace.WriteLine("Unable to submit exception to exceptron. ", e.ToString());
if (ThrowsExceptions) throw;
return null;
}
}
private void VerifyErrorData(ExceptionData exceptionData)
{
if (exceptionData == null)
throw new ArgumentNullException("exceptionData");
if (exceptionData.Exception == null)
throw new ArgumentException("ExceptionData.Exception Cannot be null.", "exceptionData");
}
}
}

@ -1,12 +0,0 @@
using System;
namespace Exceptron.Driver
{
public class ExceptionData
{
public Exception Exception { get; set; }
public string Component { get; set; }
public string UserId { get; set; }
public string Message { get; set; }
}
}

@ -1,76 +0,0 @@
using System.Collections.Generic;
using System.ComponentModel;
namespace Exceptron.Driver.Message
{
[EditorBrowsable(EditorBrowsableState.Never)]
internal class ExceptionReport
{
/// <summary>
/// API key
/// </summary>
public string ap { get; set; }
/// <summary>
/// Application Version
/// </summary>
public string aver { get; set; }
/// <summary>
/// User or Instance ID
/// </summary>
public string uid { get; set; }
/// <summary>
/// Type of exception
/// </summary>
public string ext { get; set; }
/// <summary>
/// Exception message
/// </summary>
public string exm { get; set; }
/// <summary>
/// List of frames that make up the StackTrace of the exception
/// </summary>
public List<Frame> stk { get; set; }
/// <summary>
/// Component that experienced this exception
/// </summary>
public string cmp { get; set; }
/// <summary>
/// Environment that this exception occurred in.
/// </summary>
/// <example>Dev, Stage, Production</example>
public string env { get; set; }
/// <summary>
/// Message that was logged along with the exception.
/// </summary>
public string msg { get; set; }
/// <summary>
/// User's culture in
/// </summary>
/// <remarks>http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.name.aspx</remarks>
public string cul { get; set; }
/// <summary>
/// OS Version
/// </summary>
public string os { get; set; }
/// <summary>
/// Name of the driver that generated and is sending this message
/// </summary>
public string dn { get; set; }
/// <summary>
/// Version of the driver that generated and is sending this message
/// </summary>
public string dv { get; set; }
}
}

@ -1,33 +0,0 @@
using System.ComponentModel;
namespace Exceptron.Driver.Message
{
[EditorBrowsable(EditorBrowsableState.Never)]
internal class Frame
{
/// <summary>
/// Order of current frame
/// </summary>
public int i { get; set; }
/// <summary>
/// Line number of the current frame
/// </summary>
public int ln { get; set; }
/// <summary>
/// File name of the current frame
/// </summary>
public string fn { get; set; }
/// <summary>
/// Method name for current frame
/// </summary>
public string m { get; set; }
/// <summary>
/// Class name for current frame
/// </summary>
public string c { get; set; }
}
}

@ -1,38 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 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("Exceptron.Driver")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Exceptron.Driver")]
[assembly: AssemblyCopyright("Copyright © 2012")]
[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)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("a463887e-594f-4733-b227-a79f4ffb2158")]
// 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("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: InternalsVisibleTo("Exceptron.Driver.Tests")]
[assembly: InternalsVisibleTo("Exceptron.Api.v1a.Tests")]

@ -1,41 +0,0 @@
using System;
using System.IO;
using System.Net;
using System.Text;
namespace Exceptron.Driver
{
internal class RestClient
{
internal virtual string Put(string url, string content)
{
byte[] bytes = Encoding.UTF8.GetBytes(content);
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "PUT";
request.ContentType = "application/json";
request.ContentLength = bytes.Length;
request.Accept = "application/json";
var dataStream = request.GetRequestStream();
dataStream.Write(bytes, 0, bytes.Length);
dataStream.Close();
WebResponse webResponse;
try
{
webResponse = request.GetResponse();
}
catch (WebException ex)
{
webResponse = ex.Response;
}
var responseStream = new StreamReader(webResponse.GetResponseStream(), Encoding.GetEncoding(1252));
var responseString = responseStream.ReadToEnd();
return responseString;
}
}
}

@ -1,21 +0,0 @@
//http://fastjson.codeplex.com/
using System;
using System.Collections.Generic;
using Exceptron.Driver.fastJSON;
namespace Exceptron.Driver.fastJSON
{
internal class Getters
{
public string Name;
public JSON.GenericGetter Getter;
public Type propertyType;
}
internal class DatasetSchema
{
public List<string> Info { get; set; }
public string Name { get; set; }
}
}

@ -1,910 +0,0 @@
//http://fastjson.codeplex.com/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Reflection.Emit;
using Exceptron.Driver.fastJSON;
namespace Exceptron.Driver.fastJSON
{
internal delegate string Serialize(object data);
internal delegate object Deserialize(string data);
internal class JSON
{
public readonly static JSON Instance = new JSON();
private JSON()
{
UseSerializerExtension = false;
SerializeNullValues = false;
UseOptimizedDatasetSchema = false;
UsingGlobalTypes = false;
}
public bool UseOptimizedDatasetSchema = true;
public bool UseFastGuid = true;
public bool UseSerializerExtension = true;
public bool IndentOutput = false;
public bool SerializeNullValues = true;
public bool UseUTCDateTime = false;
public bool ShowReadOnlyProperties = false;
public bool UsingGlobalTypes = true;
public string ToJSON(object obj)
{
return ToJSON(obj, UseSerializerExtension, UseFastGuid, UseOptimizedDatasetSchema, SerializeNullValues);
}
public string ToJSON(object obj,
bool enableSerializerExtensions)
{
return ToJSON(obj, enableSerializerExtensions, UseFastGuid, UseOptimizedDatasetSchema, SerializeNullValues);
}
public string ToJSON(object obj,
bool enableSerializerExtensions,
bool enableFastGuid)
{
return ToJSON(obj, enableSerializerExtensions, enableFastGuid, UseOptimizedDatasetSchema, SerializeNullValues);
}
public string ToJSON(object obj,
bool enableSerializerExtensions,
bool enableFastGuid,
bool enableOptimizedDatasetSchema,
bool serializeNullValues)
{
return new JSONSerializer(enableOptimizedDatasetSchema, enableFastGuid, enableSerializerExtensions, serializeNullValues, IndentOutput).ConvertToJSON(obj);
}
public object Parse(string json)
{
return new JsonParser(json).Decode();
}
public T ToObject<T>(string json)
{
return (T)ToObject(json, typeof(T));
}
public object ToObject(string json)
{
return ToObject(json, null);
}
public object ToObject(string json, Type type)
{
Dictionary<string, object> ht = new JsonParser(json).Decode() as Dictionary<string, object>;
if (ht == null) return null;
return ParseDictionary(ht, null, type);
}
#if CUSTOMTYPE
internal SafeDictionary<Type, Serialize> _customSerializer = new SafeDictionary<Type, Serialize>();
internal SafeDictionary<Type, Deserialize> _customDeserializer = new SafeDictionary<Type, Deserialize>();
public void RegisterCustomType(Type type, Serialize serializer, Deserialize deserializer)
{
if (type != null && serializer != null && deserializer != null)
{
_customSerializer.Add(type, serializer);
_customDeserializer.Add(type, deserializer);
// reset property cache
_propertycache = new SafeDictionary<string, SafeDictionary<string, myPropInfo>>();
}
}
internal bool IsTypeRegistered(Type t)
{
Serialize s;
return _customSerializer.TryGetValue(t, out s);
}
#endif
#region [ PROPERTY GET SET CACHE ]
SafeDictionary<Type, string> _tyname = new SafeDictionary<Type, string>();
internal string GetTypeAssemblyName(Type t)
{
string val = "";
if (_tyname.TryGetValue(t, out val))
return val;
else
{
string s = t.AssemblyQualifiedName;
_tyname.Add(t, s);
return s;
}
}
SafeDictionary<string, Type> _typecache = new SafeDictionary<string, Type>();
private Type GetTypeFromCache(string typename)
{
Type val = null;
if (_typecache.TryGetValue(typename, out val))
return val;
else
{
Type t = Type.GetType(typename);
_typecache.Add(typename, t);
return t;
}
}
SafeDictionary<Type, CreateObject> _constrcache = new SafeDictionary<Type, CreateObject>();
private delegate object CreateObject();
private object FastCreateInstance(Type objtype)
{
try
{
CreateObject c = null;
if (_constrcache.TryGetValue(objtype, out c))
{
return c();
}
else
{
DynamicMethod dynMethod = new DynamicMethod("_", objtype, null, true);
ILGenerator ilGen = dynMethod.GetILGenerator();
ilGen.Emit(OpCodes.Newobj, objtype.GetConstructor(Type.EmptyTypes));
ilGen.Emit(OpCodes.Ret);
c = (CreateObject)dynMethod.CreateDelegate(typeof(CreateObject));
_constrcache.Add(objtype, c);
return c();
}
}
catch (Exception exc)
{
throw new Exception(string.Format("Failed to fast create instance for type '{0}' from assemebly '{1}'",
objtype.FullName, objtype.AssemblyQualifiedName), exc);
}
}
private struct myPropInfo
{
public bool filled;
public Type pt;
public Type bt;
public Type changeType;
public bool isDictionary;
public bool isValueType;
public bool isGenericType;
public bool isArray;
public bool isByteArray;
public bool isGuid;
#if !SILVERLIGHT
public bool isDataSet;
public bool isDataTable;
public bool isHashtable;
#endif
public GenericSetter setter;
public bool isEnum;
public bool isDateTime;
public Type[] GenericTypes;
public bool isInt;
public bool isLong;
public bool isString;
public bool isBool;
public bool isClass;
public GenericGetter getter;
public bool isStringDictionary;
public string Name;
#if CUSTOMTYPE
public bool isCustomType;
#endif
public bool CanWrite;
}
SafeDictionary<string, SafeDictionary<string, myPropInfo>> _propertycache = new SafeDictionary<string, SafeDictionary<string, myPropInfo>>();
private SafeDictionary<string, myPropInfo> Getproperties(Type type, string typename)
{
SafeDictionary<string, myPropInfo> sd = null;
if (_propertycache.TryGetValue(typename, out sd))
{
return sd;
}
else
{
sd = new SafeDictionary<string, myPropInfo>();
PropertyInfo[] pr = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo p in pr)
{
myPropInfo d = CreateMyProp(p.PropertyType, p.Name);
d.CanWrite = p.CanWrite;
d.setter = CreateSetMethod(p);
d.getter = CreateGetMethod(p);
sd.Add(p.Name, d);
}
FieldInfo[] fi = type.GetFields(BindingFlags.Public | BindingFlags.Instance);
foreach (FieldInfo f in fi)
{
myPropInfo d = CreateMyProp(f.FieldType, f.Name);
d.setter = CreateSetField(type, f);
d.getter = CreateGetField(type, f);
sd.Add(f.Name, d);
}
_propertycache.Add(typename, sd);
return sd;
}
}
private myPropInfo CreateMyProp(Type t, string name)
{
myPropInfo d = new myPropInfo();
d.filled = true;
d.CanWrite = true;
d.pt = t;
d.Name = name;
d.isDictionary = t.Name.Contains("Dictionary");
if (d.isDictionary)
d.GenericTypes = t.GetGenericArguments();
d.isValueType = t.IsValueType;
d.isGenericType = t.IsGenericType;
d.isArray = t.IsArray;
if (d.isArray)
d.bt = t.GetElementType();
if (d.isGenericType)
d.bt = t.GetGenericArguments()[0];
d.isByteArray = t == typeof(byte[]);
d.isGuid = (t == typeof(Guid) || t == typeof(Guid?));
#if !SILVERLIGHT
d.isHashtable = t == typeof(Hashtable);
d.isDataSet = t == typeof(DataSet);
d.isDataTable = t == typeof(DataTable);
#endif
d.changeType = GetChangeType(t);
d.isEnum = t.IsEnum;
d.isDateTime = t == typeof(DateTime) || t == typeof(DateTime?);
d.isInt = t == typeof(int) || t == typeof(int?);
d.isLong = t == typeof(long) || t == typeof(long?);
d.isString = t == typeof(string);
d.isBool = t == typeof(bool) || t == typeof(bool?);
d.isClass = t.IsClass;
if (d.isDictionary && d.GenericTypes.Length > 0 && d.GenericTypes[0] == typeof(string))
d.isStringDictionary = true;
#if CUSTOMTYPE
if (IsTypeRegistered(t))
d.isCustomType = true;
#endif
return d;
}
private delegate void GenericSetter(object target, object value);
private static GenericSetter CreateSetMethod(PropertyInfo propertyInfo)
{
MethodInfo setMethod = propertyInfo.GetSetMethod();
if (setMethod == null)
return null;
Type[] arguments = new Type[2];
arguments[0] = arguments[1] = typeof(object);
DynamicMethod setter = new DynamicMethod("_", typeof(void), arguments, true);
ILGenerator il = setter.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Castclass, propertyInfo.DeclaringType);
il.Emit(OpCodes.Ldarg_1);
if (propertyInfo.PropertyType.IsClass)
il.Emit(OpCodes.Castclass, propertyInfo.PropertyType);
else
il.Emit(OpCodes.Unbox_Any, propertyInfo.PropertyType);
il.EmitCall(OpCodes.Callvirt, setMethod, null);
il.Emit(OpCodes.Ret);
return (GenericSetter)setter.CreateDelegate(typeof(GenericSetter));
}
internal delegate object GenericGetter(object obj);
private static GenericGetter CreateGetField(Type type, FieldInfo fieldInfo)
{
DynamicMethod dynamicGet = new DynamicMethod("_", typeof(object), new Type[] { typeof(object) }, type, true);
ILGenerator il = dynamicGet.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldfld, fieldInfo);
if (fieldInfo.FieldType.IsValueType)
il.Emit(OpCodes.Box, fieldInfo.FieldType);
il.Emit(OpCodes.Ret);
return (GenericGetter)dynamicGet.CreateDelegate(typeof(GenericGetter));
}
private static GenericSetter CreateSetField(Type type, FieldInfo fieldInfo)
{
Type[] arguments = new Type[2];
arguments[0] = arguments[1] = typeof(object);
DynamicMethod dynamicSet = new DynamicMethod("_", typeof(void), arguments, type, true);
ILGenerator il = dynamicSet.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldarg_1);
if (fieldInfo.FieldType.IsValueType)
il.Emit(OpCodes.Unbox_Any, fieldInfo.FieldType);
il.Emit(OpCodes.Stfld, fieldInfo);
il.Emit(OpCodes.Ret);
return (GenericSetter)dynamicSet.CreateDelegate(typeof(GenericSetter));
}
private GenericGetter CreateGetMethod(PropertyInfo propertyInfo)
{
MethodInfo getMethod = propertyInfo.GetGetMethod();
if (getMethod == null)
return null;
Type[] arguments = new Type[1];
arguments[0] = typeof(object);
DynamicMethod getter = new DynamicMethod("_", typeof(object), arguments, true);
ILGenerator il = getter.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Castclass, propertyInfo.DeclaringType);
il.EmitCall(OpCodes.Callvirt, getMethod, null);
if (!propertyInfo.PropertyType.IsClass)
il.Emit(OpCodes.Box, propertyInfo.PropertyType);
il.Emit(OpCodes.Ret);
return (GenericGetter)getter.CreateDelegate(typeof(GenericGetter));
}
readonly SafeDictionary<Type, List<Getters>> _getterscache = new SafeDictionary<Type, List<Getters>>();
internal List<Getters> GetGetters(Type type)
{
List<Getters> val = null;
if (_getterscache.TryGetValue(type, out val))
return val;
PropertyInfo[] props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
List<Getters> getters = new List<Getters>();
foreach (PropertyInfo p in props)
{
if (!p.CanWrite && ShowReadOnlyProperties == false) continue;
object[] att = p.GetCustomAttributes(typeof(System.Xml.Serialization.XmlIgnoreAttribute), false);
if (att != null && att.Length > 0)
continue;
JSON.GenericGetter g = CreateGetMethod(p);
if (g != null)
{
Getters gg = new Getters();
gg.Name = p.Name;
gg.Getter = g;
gg.propertyType = p.PropertyType;
getters.Add(gg);
}
}
FieldInfo[] fi = type.GetFields(BindingFlags.Instance | BindingFlags.Public);
foreach (var f in fi)
{
object[] att = f.GetCustomAttributes(typeof(System.Xml.Serialization.XmlIgnoreAttribute), false);
if (att != null && att.Length > 0)
continue;
JSON.GenericGetter g = CreateGetField(type, f);
if (g != null)
{
Getters gg = new Getters();
gg.Name = f.Name;
gg.Getter = g;
gg.propertyType = f.FieldType;
getters.Add(gg);
}
}
_getterscache.Add(type, getters);
return getters;
}
private object ChangeType(object value, Type conversionType)
{
if (conversionType == typeof(int))
return (int)CreateLong((string)value);
else if (conversionType == typeof(long))
return CreateLong((string)value);
else if (conversionType == typeof(string))
return (string)value;
else if (conversionType == typeof(Guid))
return CreateGuid((string)value);
else if (conversionType.IsEnum)
return CreateEnum(conversionType, (string)value);
return Convert.ChangeType(value, conversionType, CultureInfo.InvariantCulture);
}
#endregion
private object ParseDictionary(Dictionary<string, object> d, Dictionary<string, object> globaltypes, Type type)
{
object tn = "";
if (d.TryGetValue("$types", out tn))
{
UsingGlobalTypes = true;
globaltypes = new Dictionary<string, object>();
foreach (var kv in (Dictionary<string, object>)tn)
{
globaltypes.Add((string)kv.Value, kv.Key);
}
}
bool found = d.TryGetValue("$type", out tn);
#if !SILVERLIGHT
if (found == false && type == typeof(System.Object))
{
return CreateDataset(d, globaltypes);
}
#endif
if (found)
{
if (UsingGlobalTypes)
{
object tname = "";
if (globaltypes.TryGetValue((string)tn, out tname))
tn = tname;
}
type = GetTypeFromCache((string)tn);
}
if (type == null)
throw new Exception("Cannot determine type");
string typename = type.FullName;
object o = FastCreateInstance(type);
SafeDictionary<string, myPropInfo> props = Getproperties(type, typename);
foreach (string name in d.Keys)
{
if (name == "$map")
{
ProcessMap(o, props, (Dictionary<string, object>)d[name]);
continue;
}
myPropInfo pi;
if (props.TryGetValue(name, out pi) == false)
continue;
if (pi.filled == true)
{
object v = d[name];
if (v != null)
{
object oset = null;
if (pi.isInt)
oset = (int)CreateLong((string)v);
#if CUSTOMTYPE
else if (pi.isCustomType)
oset = CreateCustom((string)v, pi.pt);
#endif
else if (pi.isLong)
oset = CreateLong((string)v);
else if (pi.isString)
oset = (string)v;
else if (pi.isBool)
oset = (bool)v;
else if (pi.isGenericType && pi.isValueType == false && pi.isDictionary == false)
#if SILVERLIGHT
oset = CreateGenericList((List<object>)v, pi.pt, pi.bt, globaltypes);
#else
oset = CreateGenericList((ArrayList)v, pi.pt, pi.bt, globaltypes);
#endif
else if (pi.isByteArray)
oset = Convert.FromBase64String((string)v);
else if (pi.isArray && pi.isValueType == false)
#if SILVERLIGHT
oset = CreateArray((List<object>)v, pi.pt, pi.bt, globaltypes);
#else
oset = CreateArray((ArrayList)v, pi.pt, pi.bt, globaltypes);
#endif
else if (pi.isGuid)
oset = CreateGuid((string)v);
#if !SILVERLIGHT
else if (pi.isDataSet)
oset = CreateDataset((Dictionary<string, object>)v, globaltypes);
else if (pi.isDataTable)
oset = this.CreateDataTable((Dictionary<string, object>)v, globaltypes);
#endif
else if (pi.isStringDictionary)
oset = CreateStringKeyDictionary((Dictionary<string, object>)v, pi.pt, pi.GenericTypes, globaltypes);
#if !SILVERLIGHT
else if (pi.isDictionary || pi.isHashtable)
oset = CreateDictionary((ArrayList)v, pi.pt, pi.GenericTypes, globaltypes);
#else
else if (pi.isDictionary)
oset = CreateDictionary((List<object>)v, pi.pt, pi.GenericTypes, globaltypes);
#endif
else if (pi.isEnum)
oset = CreateEnum(pi.pt, (string)v);
else if (pi.isDateTime)
oset = CreateDateTime((string)v);
else if (pi.isClass && v is Dictionary<string, object>)
oset = ParseDictionary((Dictionary<string, object>)v, globaltypes, pi.pt);
else if (pi.isValueType)
oset = ChangeType(v, pi.changeType);
#if SILVERLIGHT
else if (v is List<object>)
oset = CreateArray((List<object>)v, pi.pt, typeof(object), globaltypes);
#else
else if (v is ArrayList)
oset = CreateArray((ArrayList)v, pi.pt, typeof(object), globaltypes);
#endif
else
oset = v;
if (pi.CanWrite)
pi.setter(o, oset);
}
}
}
return o;
}
#if CUSTOMTYPE
private object CreateCustom(string v, Type type)
{
Deserialize d;
_customDeserializer.TryGetValue(type, out d);
return d(v);
}
#endif
private void ProcessMap(object obj, SafeDictionary<string, JSON.myPropInfo> props, Dictionary<string, object> dic)
{
foreach (KeyValuePair<string, object> kv in dic)
{
myPropInfo p = props[kv.Key];
object o = p.getter(obj);
Type t = Type.GetType((string)kv.Value);
if (t == typeof(Guid))
p.setter(obj, CreateGuid((string)o));
}
}
private long CreateLong(string s)
{
long num = 0;
bool neg = false;
foreach (char cc in s)
{
if (cc == '-')
neg = true;
else if (cc == '+')
neg = false;
else
{
num *= 10;
num += (int)(cc - '0');
}
}
return neg ? -num : num;
}
private object CreateEnum(Type pt, string v)
{
// TODO : optimize create enum
#if !SILVERLIGHT
return Enum.Parse(pt, v);
#else
return Enum.Parse(pt, v, true);
#endif
}
private Guid CreateGuid(string s)
{
if (s.Length > 30)
return new Guid(s);
else
return new Guid(Convert.FromBase64String(s));
}
private DateTime CreateDateTime(string value)
{
bool utc = false;
// 0123456789012345678
// datetime format = yyyy-MM-dd HH:mm:ss
int year = (int)CreateLong(value.Substring(0, 4));
int month = (int)CreateLong(value.Substring(5, 2));
int day = (int)CreateLong(value.Substring(8, 2));
int hour = (int)CreateLong(value.Substring(11, 2));
int min = (int)CreateLong(value.Substring(14, 2));
int sec = (int)CreateLong(value.Substring(17, 2));
if (value.EndsWith("Z"))
utc = true;
if (UseUTCDateTime == false && utc == false)
return new DateTime(year, month, day, hour, min, sec);
else
return new DateTime(year, month, day, hour, min, sec, DateTimeKind.Utc).ToLocalTime();
}
#if SILVERLIGHT
private object CreateArray(List<object> data, Type pt, Type bt, Dictionary<string, object> globalTypes)
{
Array col = Array.CreateInstance(bt, data.Count);
// create an array of objects
for (int i = 0; i < data.Count; i++)// each (object ob in data)
{
object ob = data[i];
if (ob is IDictionary)
col.SetValue(ParseDictionary((Dictionary<string, object>)ob, globalTypes, bt), i);
else
col.SetValue(ChangeType(ob, bt), i);
}
return col;
}
#else
private object CreateArray(ArrayList data, Type pt, Type bt, Dictionary<string, object> globalTypes)
{
ArrayList col = new ArrayList();
// create an array of objects
foreach (object ob in data)
{
if (ob is IDictionary)
col.Add(ParseDictionary((Dictionary<string, object>)ob, globalTypes, bt));
else
col.Add(ChangeType(ob, bt));
}
return col.ToArray(bt);
}
#endif
#if SILVERLIGHT
private object CreateGenericList(List<object> data, Type pt, Type bt, Dictionary<string, object> globalTypes)
#else
private object CreateGenericList(ArrayList data, Type pt, Type bt, Dictionary<string, object> globalTypes)
#endif
{
IList col = (IList)FastCreateInstance(pt);
// create an array of objects
foreach (object ob in data)
{
if (ob is IDictionary)
col.Add(ParseDictionary((Dictionary<string, object>)ob, globalTypes, bt));
#if SILVERLIGHT
else if (ob is List<object>)
col.Add(((List<object>)ob).ToArray());
#else
else if (ob is ArrayList)
col.Add(((ArrayList)ob).ToArray());
#endif
else
col.Add(ChangeType(ob, bt));
}
return col;
}
private object CreateStringKeyDictionary(Dictionary<string, object> reader, Type pt, Type[] types, Dictionary<string, object> globalTypes)
{
var col = (IDictionary)FastCreateInstance(pt);
Type t1 = null;
Type t2 = null;
if (types != null)
{
t1 = types[0];
t2 = types[1];
}
foreach (KeyValuePair<string, object> values in reader)
{
var key = values.Key;//ChangeType(values.Key, t1);
object val = null;
if (values.Value is Dictionary<string, object>)
val = ParseDictionary((Dictionary<string, object>)values.Value, globalTypes, t2);
else
val = ChangeType(values.Value, t2);
col.Add(key, val);
}
return col;
}
#if SILVERLIGHT
private object CreateDictionary(List<object> reader, Type pt, Type[] types, Dictionary<string, object> globalTypes)
#else
private object CreateDictionary(ArrayList reader, Type pt, Type[] types, Dictionary<string, object> globalTypes)
#endif
{
IDictionary col = (IDictionary)FastCreateInstance(pt);
Type t1 = null;
Type t2 = null;
if (types != null)
{
t1 = types[0];
t2 = types[1];
}
foreach (Dictionary<string, object> values in reader)
{
object key = values["k"];
object val = values["v"];
if (key is Dictionary<string, object>)
key = ParseDictionary((Dictionary<string, object>)key, globalTypes, t1);
else
key = ChangeType(key, t1);
if (val is Dictionary<string, object>)
val = ParseDictionary((Dictionary<string, object>)val, globalTypes, t2);
else
val = ChangeType(val, t2);
col.Add(key, val);
}
return col;
}
private Type GetChangeType(Type conversionType)
{
if (conversionType.IsGenericType && conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
return conversionType.GetGenericArguments()[0];
return conversionType;
}
#if !SILVERLIGHT
private DataSet CreateDataset(Dictionary<string, object> reader, Dictionary<string, object> globalTypes)
{
DataSet ds = new DataSet();
ds.EnforceConstraints = false;
ds.BeginInit();
// read dataset schema here
ReadSchema(reader, ds, globalTypes);
foreach (KeyValuePair<string, object> pair in reader)
{
if (pair.Key == "$type" || pair.Key == "$schema") continue;
ArrayList rows = (ArrayList)pair.Value;
if (rows == null) continue;
DataTable dt = ds.Tables[pair.Key];
ReadDataTable(rows, dt);
}
ds.EndInit();
return ds;
}
private void ReadSchema(Dictionary<string, object> reader, DataSet ds, Dictionary<string, object> globalTypes)
{
var schema = reader["$schema"];
if (schema is string)
{
TextReader tr = new StringReader((string)schema);
ds.ReadXmlSchema(tr);
}
else
{
DatasetSchema ms = (DatasetSchema)ParseDictionary((Dictionary<string, object>)schema, globalTypes, typeof(DatasetSchema));
ds.DataSetName = ms.Name;
for (int i = 0; i < ms.Info.Count; i += 3)
{
if (ds.Tables.Contains(ms.Info[i]) == false)
ds.Tables.Add(ms.Info[i]);
ds.Tables[ms.Info[i]].Columns.Add(ms.Info[i + 1], Type.GetType(ms.Info[i + 2]));
}
}
}
private void ReadDataTable(ArrayList rows, DataTable dt)
{
dt.BeginInit();
dt.BeginLoadData();
List<int> guidcols = new List<int>();
List<int> datecol = new List<int>();
foreach (DataColumn c in dt.Columns)
{
if (c.DataType == typeof(Guid) || c.DataType == typeof(Guid?))
guidcols.Add(c.Ordinal);
if (UseUTCDateTime && (c.DataType == typeof(DateTime) || c.DataType == typeof(DateTime?)))
datecol.Add(c.Ordinal);
}
foreach (ArrayList row in rows)
{
object[] v = new object[row.Count];
row.CopyTo(v, 0);
foreach (int i in guidcols)
{
string s = (string)v[i];
if (s != null && s.Length < 36)
v[i] = new Guid(Convert.FromBase64String(s));
}
if (UseUTCDateTime)
{
foreach (int i in datecol)
{
string s = (string)v[i];
if (s != null)
v[i] = CreateDateTime(s);
}
}
dt.Rows.Add(v);
}
dt.EndLoadData();
dt.EndInit();
}
DataTable CreateDataTable(Dictionary<string, object> reader, Dictionary<string, object> globalTypes)
{
var dt = new DataTable();
// read dataset schema here
var schema = reader["$schema"];
if (schema is string)
{
TextReader tr = new StringReader((string)schema);
dt.ReadXmlSchema(tr);
}
else
{
var ms = (DatasetSchema)this.ParseDictionary((Dictionary<string, object>)schema, globalTypes, typeof(DatasetSchema));
dt.TableName = ms.Info[0];
for (int i = 0; i < ms.Info.Count; i += 3)
{
dt.Columns.Add(ms.Info[i + 1], Type.GetType(ms.Info[i + 2]));
}
}
foreach (var pair in reader)
{
if (pair.Key == "$type" || pair.Key == "$schema")
continue;
var rows = (ArrayList)pair.Value;
if (rows == null)
continue;
if (!dt.TableName.Equals(pair.Key, StringComparison.InvariantCultureIgnoreCase))
continue;
ReadDataTable(rows, dt);
}
return dt;
}
#endif
}
}

@ -1,408 +0,0 @@
//http://fastjson.codeplex.com/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace Exceptron.Driver.fastJSON
{
/// <summary>
/// This class encodes and decodes JSON strings.
/// Spec. details, see http://www.json.org/
///
/// JSON uses Arrays and Objects. These correspond here to the datatypes ArrayList and Hashtable.
/// All numbers are parsed to doubles.
/// </summary>
internal class JsonParser
{
enum Token
{
None = -1, // Used to denote no Lookahead available
Curly_Open,
Curly_Close,
Squared_Open,
Squared_Close,
Colon,
Comma,
String,
Number,
True,
False,
Null
}
readonly char[] json;
readonly StringBuilder s = new StringBuilder();
Token lookAheadToken = Token.None;
int index;
internal JsonParser(string json)
{
this.json = json.ToCharArray();
}
public object Decode()
{
return ParseValue();
}
private Dictionary<string, object> ParseObject()
{
Dictionary<string, object> table = new Dictionary<string, object>();
ConsumeToken(); // {
while (true)
{
switch (LookAhead())
{
case Token.Comma:
ConsumeToken();
break;
case Token.Curly_Close:
ConsumeToken();
return table;
default:
{
// name
string name = ParseString();
// :
if (NextToken() != Token.Colon)
{
throw new Exception("Expected colon at index " + index);
}
// value
object value = ParseValue();
table[name] = value;
}
break;
}
}
}
#if SILVERLIGHT
private List<object> ParseArray()
{
List<object> array = new List<object>();
#else
private ArrayList ParseArray()
{
ArrayList array = new ArrayList();
#endif
ConsumeToken(); // [
while (true)
{
switch (LookAhead())
{
case Token.Comma:
ConsumeToken();
break;
case Token.Squared_Close:
ConsumeToken();
return array;
default:
{
array.Add(ParseValue());
}
break;
}
}
}
private object ParseValue()
{
switch (LookAhead())
{
case Token.Number:
return ParseNumber();
case Token.String:
return ParseString();
case Token.Curly_Open:
return ParseObject();
case Token.Squared_Open:
return ParseArray();
case Token.True:
ConsumeToken();
return true;
case Token.False:
ConsumeToken();
return false;
case Token.Null:
ConsumeToken();
return null;
}
throw new Exception("Unrecognized token at index" + index);
}
private string ParseString()
{
ConsumeToken(); // "
s.Length = 0;
int runIndex = -1;
while (index < json.Length)
{
var c = json[index++];
if (c == '"')
{
if (runIndex != -1)
{
if (s.Length == 0)
return new string(json, runIndex, index - runIndex - 1);
s.Append(json, runIndex, index - runIndex - 1);
}
return s.ToString();
}
if (c != '\\')
{
if (runIndex == -1)
runIndex = index - 1;
continue;
}
if (index == json.Length) break;
if (runIndex != -1)
{
s.Append(json, runIndex, index - runIndex - 1);
runIndex = -1;
}
switch (json[index++])
{
case '"':
s.Append('"');
break;
case '\\':
s.Append('\\');
break;
case '/':
s.Append('/');
break;
case 'b':
s.Append('\b');
break;
case 'f':
s.Append('\f');
break;
case 'n':
s.Append('\n');
break;
case 'r':
s.Append('\r');
break;
case 't':
s.Append('\t');
break;
case 'u':
{
int remainingLength = json.Length - index;
if (remainingLength < 4) break;
// parse the 32 bit hex into an integer codepoint
uint codePoint = ParseUnicode(json[index], json[index + 1], json[index + 2], json[index + 3]);
s.Append((char)codePoint);
// skip 4 chars
index += 4;
}
break;
}
}
throw new Exception("Unexpectedly reached end of string");
}
private uint ParseSingleChar(char c1, uint multipliyer)
{
uint p1 = 0;
if (c1 >= '0' && c1 <= '9')
p1 = (uint)(c1 - '0') * multipliyer;
else if (c1 >= 'A' && c1 <= 'F')
p1 = (uint)((c1 - 'A') + 10) * multipliyer;
else if (c1 >= 'a' && c1 <= 'f')
p1 = (uint)((c1 - 'a') + 10) * multipliyer;
return p1;
}
private uint ParseUnicode(char c1, char c2, char c3, char c4)
{
uint p1 = ParseSingleChar(c1, 0x1000);
uint p2 = ParseSingleChar(c2, 0x100);
uint p3 = ParseSingleChar(c3, 0x10);
uint p4 = ParseSingleChar(c4, 1);
return p1 + p2 + p3 + p4;
}
private string ParseNumber()
{
ConsumeToken();
// Need to start back one place because the first digit is also a token and would have been consumed
var startIndex = index - 1;
do
{
var c = json[index];
if ((c >= '0' && c <= '9') || c == '.' || c == '-' || c == '+' || c == 'e' || c == 'E')
{
if (++index == json.Length) throw new Exception("Unexpected end of string whilst parsing number");
continue;
}
break;
} while (true);
return new string(json, startIndex, index - startIndex);
}
private Token LookAhead()
{
if (lookAheadToken != Token.None) return lookAheadToken;
return lookAheadToken = NextTokenCore();
}
private void ConsumeToken()
{
lookAheadToken = Token.None;
}
private Token NextToken()
{
var result = lookAheadToken != Token.None ? lookAheadToken : NextTokenCore();
lookAheadToken = Token.None;
return result;
}
private Token NextTokenCore()
{
char c;
// Skip past whitespace
do
{
c = json[index];
if (c > ' ') break;
if (c != ' ' && c != '\t' && c != '\n' && c != '\r') break;
} while (++index < json.Length);
if (index == json.Length)
{
throw new Exception("Reached end of string unexpectedly");
}
c = json[index];
index++;
//if (c >= '0' && c <= '9')
// return Token.Number;
switch (c)
{
case '{':
return Token.Curly_Open;
case '}':
return Token.Curly_Close;
case '[':
return Token.Squared_Open;
case ']':
return Token.Squared_Close;
case ',':
return Token.Comma;
case '"':
return Token.String;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
case '-': case '+': case '.':
return Token.Number;
case ':':
return Token.Colon;
case 'f':
if (json.Length - index >= 4 &&
json[index + 0] == 'a' &&
json[index + 1] == 'l' &&
json[index + 2] == 's' &&
json[index + 3] == 'e')
{
index += 4;
return Token.False;
}
break;
case 't':
if (json.Length - index >= 3 &&
json[index + 0] == 'r' &&
json[index + 1] == 'u' &&
json[index + 2] == 'e')
{
index += 3;
return Token.True;
}
break;
case 'n':
if (json.Length - index >= 3 &&
json[index + 0] == 'u' &&
json[index + 1] == 'l' &&
json[index + 2] == 'l')
{
index += 3;
return Token.Null;
}
break;
}
throw new Exception("Could not find token at index " + --index);
}
}
}

@ -1,518 +0,0 @@
//http://fastjson.codeplex.com/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.IO;
using System.Text;
namespace Exceptron.Driver.fastJSON
{
internal class JSONSerializer
{
private readonly StringBuilder _output = new StringBuilder();
readonly bool useMinimalDataSetSchema;
readonly bool fastguid = true;
readonly bool useExtension = true;
readonly bool serializeNulls = true;
readonly int _MAX_DEPTH = 10;
bool _Indent = false;
bool _useGlobalTypes = true;
int _current_depth = 0;
private Dictionary<string, int> _globalTypes = new Dictionary<string, int>();
internal JSONSerializer(bool UseMinimalDataSetSchema, bool UseFastGuid, bool UseExtensions, bool SerializeNulls, bool IndentOutput)
{
this.useMinimalDataSetSchema = UseMinimalDataSetSchema;
this.fastguid = UseFastGuid;
this.useExtension = UseExtensions;
_Indent = IndentOutput;
this.serializeNulls = SerializeNulls;
if (useExtension == false)
_useGlobalTypes = false;
}
internal string ConvertToJSON(object obj)
{
WriteValue(obj);
string str = "";
if (_useGlobalTypes)
{
StringBuilder sb = new StringBuilder();
sb.Append("{\"$types\":{");
bool pendingSeparator = false;
foreach (var kv in _globalTypes)
{
if (pendingSeparator) sb.Append(',');
pendingSeparator = true;
sb.Append("\"");
sb.Append(kv.Key);
sb.Append("\":\"");
sb.Append(kv.Value);
sb.Append("\"");
}
sb.Append("},");
str = sb.ToString() + _output.ToString();
}
else
str = _output.ToString();
return str;
}
private void WriteValue(object obj)
{
if (obj == null || obj is DBNull)
_output.Append("null");
else if (obj is string || obj is char)
WriteString((string)obj);
else if (obj is Guid)
WriteGuid((Guid)obj);
else if (obj is bool)
_output.Append(((bool)obj) ? "true" : "false"); // conform to standard
else if (
obj is int || obj is long || obj is double ||
obj is decimal || obj is float ||
obj is byte || obj is short ||
obj is sbyte || obj is ushort ||
obj is uint || obj is ulong
)
_output.Append(((IConvertible)obj).ToString(NumberFormatInfo.InvariantInfo));
else if (obj is DateTime)
WriteDateTime((DateTime)obj);
else if (obj is IDictionary && obj.GetType().IsGenericType && obj.GetType().GetGenericArguments()[0] == typeof(string))
WriteStringDictionary((IDictionary)obj);
else if (obj is IDictionary)
WriteDictionary((IDictionary)obj);
#if !SILVERLIGHT
else if (obj is DataSet)
WriteDataset((DataSet)obj);
else if (obj is DataTable)
this.WriteDataTable((DataTable)obj);
#endif
else if (obj is byte[])
WriteBytes((byte[])obj);
else if (obj is Array || obj is IList || obj is ICollection)
WriteArray((IEnumerable)obj);
else if (obj is Enum)
WriteEnum((Enum)obj);
#if CUSTOMTYPE
else if (JSON.Instance.IsTypeRegistered(obj.GetType()))
WriteCustom(obj);
#endif
else
WriteObject(obj);
}
#if CUSTOMTYPE
private void WriteCustom(object obj)
{
Serialize s;
JSON.Instance._customSerializer.TryGetValue(obj.GetType(), out s);
WriteStringFast(s(obj));
}
#endif
private void WriteEnum(Enum e)
{
// TODO : optimize enum write
WriteStringFast(e.ToString());
}
private void WriteGuid(Guid g)
{
if (fastguid == false)
WriteStringFast(g.ToString());
else
WriteBytes(g.ToByteArray());
}
private void WriteBytes(byte[] bytes)
{
#if !SILVERLIGHT
WriteStringFast(Convert.ToBase64String(bytes, 0, bytes.Length, Base64FormattingOptions.None));
#else
WriteStringFast(Convert.ToBase64String(bytes, 0, bytes.Length));
#endif
}
private void WriteDateTime(DateTime dateTime)
{
// datetime format standard : yyyy-MM-dd HH:mm:ss
DateTime dt = dateTime;
if (JSON.Instance.UseUTCDateTime)
dt = dateTime.ToUniversalTime();
_output.Append("\"");
_output.Append(dt.Year.ToString("0000", NumberFormatInfo.InvariantInfo));
_output.Append("-");
_output.Append(dt.Month.ToString("00", NumberFormatInfo.InvariantInfo));
_output.Append("-");
_output.Append(dt.Day.ToString("00", NumberFormatInfo.InvariantInfo));
_output.Append(" ");
_output.Append(dt.Hour.ToString("00", NumberFormatInfo.InvariantInfo));
_output.Append(":");
_output.Append(dt.Minute.ToString("00", NumberFormatInfo.InvariantInfo));
_output.Append(":");
_output.Append(dt.Second.ToString("00", NumberFormatInfo.InvariantInfo));
if (JSON.Instance.UseUTCDateTime)
_output.Append("Z");
_output.Append("\"");
}
#if !SILVERLIGHT
private DatasetSchema GetSchema(DataTable ds)
{
if (ds == null) return null;
DatasetSchema m = new DatasetSchema();
m.Info = new List<string>();
m.Name = ds.TableName;
foreach (DataColumn c in ds.Columns)
{
m.Info.Add(ds.TableName);
m.Info.Add(c.ColumnName);
m.Info.Add(c.DataType.ToString());
}
// TODO : serialize relations and constraints here
return m;
}
private DatasetSchema GetSchema(DataSet ds)
{
if (ds == null) return null;
DatasetSchema m = new DatasetSchema();
m.Info = new List<string>();
m.Name = ds.DataSetName;
foreach (DataTable t in ds.Tables)
{
foreach (DataColumn c in t.Columns)
{
m.Info.Add(t.TableName);
m.Info.Add(c.ColumnName);
m.Info.Add(c.DataType.ToString());
}
}
// TODO : serialize relations and constraints here
return m;
}
private string GetXmlSchema(DataTable dt)
{
using (var writer = new StringWriter())
{
dt.WriteXmlSchema(writer);
return dt.ToString();
}
}
private void WriteDataset(DataSet ds)
{
_output.Append('{');
if (useExtension)
{
WritePair("$schema", useMinimalDataSetSchema ? (object)GetSchema(ds) : ds.GetXmlSchema());
_output.Append(',');
}
bool tablesep = false;
foreach (DataTable table in ds.Tables)
{
if (tablesep) _output.Append(",");
tablesep = true;
WriteDataTableData(table);
}
// end dataset
_output.Append('}');
}
private void WriteDataTableData(DataTable table)
{
_output.Append('\"');
_output.Append(table.TableName);
_output.Append("\":[");
DataColumnCollection cols = table.Columns;
bool rowseparator = false;
foreach (DataRow row in table.Rows)
{
if (rowseparator) _output.Append(",");
rowseparator = true;
_output.Append('[');
bool pendingSeperator = false;
foreach (DataColumn column in cols)
{
if (pendingSeperator) _output.Append(',');
WriteValue(row[column]);
pendingSeperator = true;
}
_output.Append(']');
}
_output.Append(']');
}
void WriteDataTable(DataTable dt)
{
this._output.Append('{');
if (this.useExtension)
{
this.WritePair("$schema", this.useMinimalDataSetSchema ? (object)this.GetSchema(dt) : this.GetXmlSchema(dt));
this._output.Append(',');
}
WriteDataTableData(dt);
// end datatable
this._output.Append('}');
}
#endif
bool _firstWritten = false;
private void WriteObject(object obj)
{
Indent();
if (_useGlobalTypes == false)
_output.Append('{');
else
{
if (_firstWritten)
_output.Append("{");
}
_firstWritten = true;
_current_depth++;
if (_current_depth > _MAX_DEPTH)
throw new Exception("Serializer encountered maximum depth of " + _MAX_DEPTH);
Dictionary<string, string> map = new Dictionary<string, string>();
Type t = obj.GetType();
bool append = false;
if (useExtension)
{
if (_useGlobalTypes == false)
WritePairFast("$type", JSON.Instance.GetTypeAssemblyName(t));
else
{
int dt = 0;
string ct = JSON.Instance.GetTypeAssemblyName(t);
if (_globalTypes.TryGetValue(ct, out dt) == false)
{
dt = _globalTypes.Count + 1;
_globalTypes.Add(ct, dt);
}
WritePairFast("$type", dt.ToString());
}
append = true;
}
List<Getters> g = JSON.Instance.GetGetters(t);
foreach (var p in g)
{
if (append)
_output.Append(',');
object o = p.Getter(obj);
if ((o == null || o is DBNull) && serializeNulls == false)
append = false;
else
{
WritePair(p.Name, o);
if (o != null && useExtension)
{
Type tt = o.GetType();
if (tt == typeof(System.Object))
map.Add(p.Name, tt.ToString());
}
append = true;
}
}
if (map.Count > 0 && useExtension)
{
_output.Append(",\"$map\":");
WriteStringDictionary(map);
}
_current_depth--;
Indent();
_output.Append('}');
_current_depth--;
}
private void Indent()
{
Indent(false);
}
private void Indent(bool dec)
{
if (_Indent)
{
_output.Append("\r\n");
for (int i = 0; i < _current_depth - (dec ? 1 : 0); i++)
_output.Append("\t");
}
}
private void WritePairFast(string name, string value)
{
if ((value == null) && serializeNulls == false)
return;
Indent();
WriteStringFast(name);
_output.Append(':');
WriteStringFast(value);
}
private void WritePair(string name, object value)
{
if ((value == null || value is DBNull) && serializeNulls == false)
return;
Indent();
WriteStringFast(name);
_output.Append(':');
WriteValue(value);
}
private void WriteArray(IEnumerable array)
{
Indent();
_output.Append('[');
bool pendingSeperator = false;
foreach (object obj in array)
{
Indent();
if (pendingSeperator) _output.Append(',');
WriteValue(obj);
pendingSeperator = true;
}
Indent();
_output.Append(']');
}
private void WriteStringDictionary(IDictionary dic)
{
Indent();
_output.Append('{');
bool pendingSeparator = false;
foreach (DictionaryEntry entry in dic)
{
if (pendingSeparator) _output.Append(',');
WritePair((string)entry.Key, entry.Value);
pendingSeparator = true;
}
Indent();
_output.Append('}');
}
private void WriteDictionary(IDictionary dic)
{
Indent();
_output.Append('[');
bool pendingSeparator = false;
foreach (DictionaryEntry entry in dic)
{
if (pendingSeparator) _output.Append(',');
Indent();
_output.Append('{');
WritePair("k", entry.Key);
_output.Append(",");
WritePair("v", entry.Value);
Indent();
_output.Append('}');
pendingSeparator = true;
}
Indent();
_output.Append(']');
}
private void WriteStringFast(string s)
{
//Indent();
_output.Append('\"');
_output.Append(s);
_output.Append('\"');
}
private void WriteString(string s)
{
//Indent();
_output.Append('\"');
int runIndex = -1;
for (var index = 0; index < s.Length; ++index)
{
var c = s[index];
if (c >= ' ' && c < 128 && c != '\"' && c != '\\')
{
if (runIndex == -1)
{
runIndex = index;
}
continue;
}
if (runIndex != -1)
{
_output.Append(s, runIndex, index - runIndex);
runIndex = -1;
}
switch (c)
{
case '\t': _output.Append("\\t"); break;
case '\r': _output.Append("\\r"); break;
case '\n': _output.Append("\\n"); break;
case '"':
case '\\': _output.Append('\\'); _output.Append(c); break;
default:
_output.Append("\\u");
_output.Append(((int)c).ToString("X4", NumberFormatInfo.InvariantInfo));
break;
}
}
if (runIndex != -1)
{
_output.Append(s, runIndex, s.Length - runIndex);
}
_output.Append('\"');
}
}
}

@ -1,39 +0,0 @@
//http://fastjson.codeplex.com/
using System.Collections.Generic;
namespace Exceptron.Driver.fastJSON
{
internal class SafeDictionary<TKey, TValue>
{
private readonly object _Padlock = new object();
private readonly Dictionary<TKey, TValue> _Dictionary = new Dictionary<TKey, TValue>();
public bool TryGetValue(TKey key, out TValue value)
{
return _Dictionary.TryGetValue(key, out value);
}
public TValue this[TKey key]
{
get
{
return _Dictionary[key];
}
}
public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
{
return ((ICollection<KeyValuePair<TKey, TValue>>)_Dictionary).GetEnumerator();
}
public void Add(TKey key, TValue value)
{
lock (_Padlock)
{
if (_Dictionary.ContainsKey(key) == false)
_Dictionary.Add(key, value);
}
}
}
}

@ -1,137 +0,0 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Reflection;
using System.Text;
using Exceptron.Driver.fastJSON;
namespace Exceptron.Driver
{
public class ExceptionClient
{
private const string DriverName = "Official .NET";
private static readonly string DriverVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
private readonly string _serverUrl;
private readonly string _appId;
private readonly string _appVersion;
public bool ThrowsExceptions { get; set; }
public string Enviroment { get; set; }
public ExceptionClient(string appId, string appVersion, Uri serverUrl)
{
_appId = appId;
_appVersion = appVersion;
_serverUrl = serverUrl.ToString();
}
internal static List<Frame> ConvertToFrames(Exception exception)
{
if (exception == null) return null;
var stackTrace = new StackTrace(exception, true);
var frames = stackTrace.GetFrames();
if (frames == null) return null;
var result = new List<Frame>();
foreach (var frame in frames)
{
var method = frame.GetMethod();
var declaringType = method.DeclaringType;
var currentFrame = new Frame
{
FileName = frame.GetFileName(),
LineNumber = frame.GetFileLineNumber(),
};
currentFrame.Method = method.ToString();
currentFrame.Method = currentFrame.Method.Substring(currentFrame.Method.IndexOf(' ')).Trim();
if (declaringType != null)
{
currentFrame.Class = declaringType.FullName;
}
result.Add(currentFrame);
}
return result;
}
public string SubmitException(ExceptionData exceptionData)
{
try
{
VerifyErrorData(exceptionData);
var report = new ExceptionReport();
report.AppId = _appId;
report.DriverName = DriverName;
report.DriverVersion = DriverVersion;
report.AppVersion = _appVersion;
report.ExceptionType = exceptionData.Exception.GetType().FullName;
report.ExceptionMessage = exceptionData.Exception.Message;
report.StackTrace = ConvertToFrames(exceptionData.Exception);
report.Location = exceptionData.Location;
report.Uid = exceptionData.UserId;
report.Enviroment = Enviroment;
report.Message = exceptionData.Message;
var response = PutObject(report);
return response;
}
catch (Exception)
{
if (ThrowsExceptions) throw;
return null;
}
}
private void VerifyErrorData(ExceptionData exceptionData)
{
if (exceptionData == null)
throw new ArgumentNullException("exceptionData");
if (exceptionData.Exception == null)
throw new ArgumentException("ExceptionData.Exception Cannot be null.", "exceptionData");
}
private string PutObject(ExceptionReport exceptionReport)
{
string exceptionData = JSON.Instance.ToJSON(exceptionReport);
byte[] bytes = Encoding.UTF8.GetBytes(exceptionData);
var request = (HttpWebRequest)WebRequest.Create(_serverUrl);
request.Method = "PUT";
request.ContentType = "application/json";
request.ContentLength = bytes.Length;
request.Accept = "application/json";
var dataStream = request.GetRequestStream();
dataStream.Write(bytes, 0, bytes.Length);
dataStream.Close();
var responseStream = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.GetEncoding(1252));
string response = responseStream.ReadToEnd();
return response;
}
}
}

@ -1,12 +0,0 @@
using System;
namespace Exceptron.Driver
{
public class ExceptionData
{
public Exception Exception { get; set; }
public string Location { get; set; }
public string UserId { get; set; }
public string Message { get; set; }
}
}

@ -1,22 +0,0 @@
using System.Collections.Generic;
using System.ComponentModel;
namespace Exceptron.Driver
{
[EditorBrowsable(EditorBrowsableState.Never)]
public class ExceptionReport
{
public string AppId { get; set; }
public string AppVersion { get; set; }
public string Uid { get; set; }
public string ExceptionType { get; set; }
public string ExceptionMessage { get; set; }
public List<Frame> StackTrace { get; set; }
public string Location { get; set; }
public string Enviroment { get; set; }
public string Message { get; set; }
public string DriverName { get; set; }
public string DriverVersion { get; set; }
}
}

@ -1,10 +0,0 @@
namespace Exceptron.Driver
{
public class Frame
{
public int LineNumber { get; set; }
public string FileName { get; set; }
public string Method { get; set; }
public string Class { get; set; }
}
}

@ -1,37 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 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("Exceptron.Driver")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Exceptron.Driver")]
[assembly: AssemblyCopyright("Copyright © 2012")]
[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)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("a463887e-594f-4733-b227-a79f4ffb2158")]
// 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("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: InternalsVisibleTo("Exceptron.Driver.Tests")]

@ -1,21 +0,0 @@
//http://fastjson.codeplex.com/
using System;
using System.Collections.Generic;
using Exceptron.Driver.fastJSON;
namespace Exceptron.Driver.fastJSON
{
internal class Getters
{
public string Name;
public JSON.GenericGetter Getter;
public Type propertyType;
}
internal class DatasetSchema
{
public List<string> Info { get; set; }
public string Name { get; set; }
}
}

@ -1,906 +0,0 @@
//http://fastjson.codeplex.com/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Reflection.Emit;
using Exceptron.Driver.fastJSON;
namespace Exceptron.Driver.fastJSON
{
internal delegate string Serialize(object data);
internal delegate object Deserialize(string data);
internal class JSON
{
public readonly static JSON Instance = new JSON();
private JSON()
{
}
public bool UseOptimizedDatasetSchema = true;
public bool UseFastGuid = true;
public bool UseSerializerExtension = true;
public bool IndentOutput = false;
public bool SerializeNullValues = true;
public bool UseUTCDateTime = false;
public bool ShowReadOnlyProperties = false;
public bool UsingGlobalTypes = true;
public string ToJSON(object obj)
{
return ToJSON(obj, UseSerializerExtension, UseFastGuid, UseOptimizedDatasetSchema, SerializeNullValues);
}
public string ToJSON(object obj,
bool enableSerializerExtensions)
{
return ToJSON(obj, enableSerializerExtensions, UseFastGuid, UseOptimizedDatasetSchema, SerializeNullValues);
}
public string ToJSON(object obj,
bool enableSerializerExtensions,
bool enableFastGuid)
{
return ToJSON(obj, enableSerializerExtensions, enableFastGuid, UseOptimizedDatasetSchema, SerializeNullValues);
}
public string ToJSON(object obj,
bool enableSerializerExtensions,
bool enableFastGuid,
bool enableOptimizedDatasetSchema,
bool serializeNullValues)
{
return new JSONSerializer(enableOptimizedDatasetSchema, enableFastGuid, enableSerializerExtensions, serializeNullValues, IndentOutput).ConvertToJSON(obj);
}
public object Parse(string json)
{
return new JsonParser(json).Decode();
}
public T ToObject<T>(string json)
{
return (T)ToObject(json, typeof(T));
}
public object ToObject(string json)
{
return ToObject(json, null);
}
public object ToObject(string json, Type type)
{
Dictionary<string, object> ht = new JsonParser(json).Decode() as Dictionary<string, object>;
if (ht == null) return null;
return ParseDictionary(ht, null, type);
}
#if CUSTOMTYPE
internal SafeDictionary<Type, Serialize> _customSerializer = new SafeDictionary<Type, Serialize>();
internal SafeDictionary<Type, Deserialize> _customDeserializer = new SafeDictionary<Type, Deserialize>();
public void RegisterCustomType(Type type, Serialize serializer, Deserialize deserializer)
{
if (type != null && serializer != null && deserializer != null)
{
_customSerializer.Add(type, serializer);
_customDeserializer.Add(type, deserializer);
// reset property cache
_propertycache = new SafeDictionary<string, SafeDictionary<string, myPropInfo>>();
}
}
internal bool IsTypeRegistered(Type t)
{
Serialize s;
return _customSerializer.TryGetValue(t, out s);
}
#endif
#region [ PROPERTY GET SET CACHE ]
SafeDictionary<Type, string> _tyname = new SafeDictionary<Type, string>();
internal string GetTypeAssemblyName(Type t)
{
string val = "";
if (_tyname.TryGetValue(t, out val))
return val;
else
{
string s = t.AssemblyQualifiedName;
_tyname.Add(t, s);
return s;
}
}
SafeDictionary<string, Type> _typecache = new SafeDictionary<string, Type>();
private Type GetTypeFromCache(string typename)
{
Type val = null;
if (_typecache.TryGetValue(typename, out val))
return val;
else
{
Type t = Type.GetType(typename);
_typecache.Add(typename, t);
return t;
}
}
SafeDictionary<Type, CreateObject> _constrcache = new SafeDictionary<Type, CreateObject>();
private delegate object CreateObject();
private object FastCreateInstance(Type objtype)
{
try
{
CreateObject c = null;
if (_constrcache.TryGetValue(objtype, out c))
{
return c();
}
else
{
DynamicMethod dynMethod = new DynamicMethod("_", objtype, null);
ILGenerator ilGen = dynMethod.GetILGenerator();
ilGen.Emit(OpCodes.Newobj, objtype.GetConstructor(Type.EmptyTypes));
ilGen.Emit(OpCodes.Ret);
c = (CreateObject)dynMethod.CreateDelegate(typeof(CreateObject));
_constrcache.Add(objtype, c);
return c();
}
}
catch (Exception exc)
{
throw new Exception(string.Format("Failed to fast create instance for type '{0}' from assemebly '{1}'",
objtype.FullName, objtype.AssemblyQualifiedName), exc);
}
}
private struct myPropInfo
{
public bool filled;
public Type pt;
public Type bt;
public Type changeType;
public bool isDictionary;
public bool isValueType;
public bool isGenericType;
public bool isArray;
public bool isByteArray;
public bool isGuid;
#if !SILVERLIGHT
public bool isDataSet;
public bool isDataTable;
public bool isHashtable;
#endif
public GenericSetter setter;
public bool isEnum;
public bool isDateTime;
public Type[] GenericTypes;
public bool isInt;
public bool isLong;
public bool isString;
public bool isBool;
public bool isClass;
public GenericGetter getter;
public bool isStringDictionary;
public string Name;
#if CUSTOMTYPE
public bool isCustomType;
#endif
public bool CanWrite;
}
SafeDictionary<string, SafeDictionary<string, myPropInfo>> _propertycache = new SafeDictionary<string, SafeDictionary<string, myPropInfo>>();
private SafeDictionary<string, myPropInfo> Getproperties(Type type, string typename)
{
SafeDictionary<string, myPropInfo> sd = null;
if (_propertycache.TryGetValue(typename, out sd))
{
return sd;
}
else
{
sd = new SafeDictionary<string, myPropInfo>();
PropertyInfo[] pr = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo p in pr)
{
myPropInfo d = CreateMyProp(p.PropertyType, p.Name);
d.CanWrite = p.CanWrite;
d.setter = CreateSetMethod(p);
d.getter = CreateGetMethod(p);
sd.Add(p.Name, d);
}
FieldInfo[] fi = type.GetFields(BindingFlags.Public | BindingFlags.Instance);
foreach (FieldInfo f in fi)
{
myPropInfo d = CreateMyProp(f.FieldType, f.Name);
d.setter = CreateSetField(type, f);
d.getter = CreateGetField(type, f);
sd.Add(f.Name, d);
}
_propertycache.Add(typename, sd);
return sd;
}
}
private myPropInfo CreateMyProp(Type t, string name)
{
myPropInfo d = new myPropInfo();
d.filled = true;
d.CanWrite = true;
d.pt = t;
d.Name = name;
d.isDictionary = t.Name.Contains("Dictionary");
if (d.isDictionary)
d.GenericTypes = t.GetGenericArguments();
d.isValueType = t.IsValueType;
d.isGenericType = t.IsGenericType;
d.isArray = t.IsArray;
if (d.isArray)
d.bt = t.GetElementType();
if (d.isGenericType)
d.bt = t.GetGenericArguments()[0];
d.isByteArray = t == typeof(byte[]);
d.isGuid = (t == typeof(Guid) || t == typeof(Guid?));
#if !SILVERLIGHT
d.isHashtable = t == typeof(Hashtable);
d.isDataSet = t == typeof(DataSet);
d.isDataTable = t == typeof(DataTable);
#endif
d.changeType = GetChangeType(t);
d.isEnum = t.IsEnum;
d.isDateTime = t == typeof(DateTime) || t == typeof(DateTime?);
d.isInt = t == typeof(int) || t == typeof(int?);
d.isLong = t == typeof(long) || t == typeof(long?);
d.isString = t == typeof(string);
d.isBool = t == typeof(bool) || t == typeof(bool?);
d.isClass = t.IsClass;
if (d.isDictionary && d.GenericTypes.Length>0 && d.GenericTypes[0] == typeof(string))
d.isStringDictionary = true;
#if CUSTOMTYPE
if (IsTypeRegistered(t))
d.isCustomType = true;
#endif
return d;
}
private delegate void GenericSetter(object target, object value);
private static GenericSetter CreateSetMethod(PropertyInfo propertyInfo)
{
MethodInfo setMethod = propertyInfo.GetSetMethod();
if (setMethod == null)
return null;
Type[] arguments = new Type[2];
arguments[0] = arguments[1] = typeof(object);
DynamicMethod setter = new DynamicMethod("_", typeof(void), arguments);
ILGenerator il = setter.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Castclass, propertyInfo.DeclaringType);
il.Emit(OpCodes.Ldarg_1);
if (propertyInfo.PropertyType.IsClass)
il.Emit(OpCodes.Castclass, propertyInfo.PropertyType);
else
il.Emit(OpCodes.Unbox_Any, propertyInfo.PropertyType);
il.EmitCall(OpCodes.Callvirt, setMethod, null);
il.Emit(OpCodes.Ret);
return (GenericSetter)setter.CreateDelegate(typeof(GenericSetter));
}
internal delegate object GenericGetter(object obj);
private static GenericGetter CreateGetField(Type type, FieldInfo fieldInfo)
{
DynamicMethod dynamicGet = new DynamicMethod("_", typeof(object), new Type[] { typeof(object) }, type, true);
ILGenerator il = dynamicGet.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldfld, fieldInfo);
if (fieldInfo.FieldType.IsValueType)
il.Emit(OpCodes.Box, fieldInfo.FieldType);
il.Emit(OpCodes.Ret);
return (GenericGetter)dynamicGet.CreateDelegate(typeof(GenericGetter));
}
private static GenericSetter CreateSetField(Type type, FieldInfo fieldInfo)
{
Type[] arguments = new Type[2];
arguments[0] = arguments[1] = typeof(object);
DynamicMethod dynamicSet = new DynamicMethod("_", typeof(void), arguments, type, true);
ILGenerator il = dynamicSet.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldarg_1);
if (fieldInfo.FieldType.IsValueType)
il.Emit(OpCodes.Unbox_Any, fieldInfo.FieldType);
il.Emit(OpCodes.Stfld, fieldInfo);
il.Emit(OpCodes.Ret);
return (GenericSetter)dynamicSet.CreateDelegate(typeof(GenericSetter));
}
private GenericGetter CreateGetMethod(PropertyInfo propertyInfo)
{
MethodInfo getMethod = propertyInfo.GetGetMethod();
if (getMethod == null)
return null;
Type[] arguments = new Type[1];
arguments[0] = typeof(object);
DynamicMethod getter = new DynamicMethod("_", typeof(object), arguments);
ILGenerator il = getter.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Castclass, propertyInfo.DeclaringType);
il.EmitCall(OpCodes.Callvirt, getMethod, null);
if (!propertyInfo.PropertyType.IsClass)
il.Emit(OpCodes.Box, propertyInfo.PropertyType);
il.Emit(OpCodes.Ret);
return (GenericGetter)getter.CreateDelegate(typeof(GenericGetter));
}
readonly SafeDictionary<Type, List<Getters>> _getterscache = new SafeDictionary<Type, List<Getters>>();
internal List<Getters> GetGetters(Type type)
{
List<Getters> val = null;
if (_getterscache.TryGetValue(type, out val))
return val;
PropertyInfo[] props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
List<Getters> getters = new List<Getters>();
foreach (PropertyInfo p in props)
{
if (!p.CanWrite && ShowReadOnlyProperties == false) continue;
object[] att = p.GetCustomAttributes(typeof(System.Xml.Serialization.XmlIgnoreAttribute), false);
if (att != null && att.Length > 0)
continue;
JSON.GenericGetter g = CreateGetMethod(p);
if (g != null)
{
Getters gg = new Getters();
gg.Name = p.Name;
gg.Getter = g;
gg.propertyType = p.PropertyType;
getters.Add(gg);
}
}
FieldInfo[] fi = type.GetFields(BindingFlags.Instance | BindingFlags.Public);
foreach (var f in fi)
{
object[] att = f.GetCustomAttributes(typeof(System.Xml.Serialization.XmlIgnoreAttribute), false);
if (att != null && att.Length > 0)
continue;
JSON.GenericGetter g = CreateGetField(type, f);
if (g != null)
{
Getters gg = new Getters();
gg.Name = f.Name;
gg.Getter = g;
gg.propertyType = f.FieldType;
getters.Add(gg);
}
}
_getterscache.Add(type, getters);
return getters;
}
private object ChangeType(object value, Type conversionType)
{
if (conversionType == typeof(int))
return (int)CreateLong((string)value);
else if (conversionType == typeof(long))
return CreateLong((string)value);
else if (conversionType == typeof(string))
return (string)value;
else if (conversionType == typeof(Guid))
return CreateGuid((string)value);
else if (conversionType.IsEnum)
return CreateEnum(conversionType, (string)value);
return Convert.ChangeType(value, conversionType, CultureInfo.InvariantCulture);
}
#endregion
private object ParseDictionary(Dictionary<string, object> d, Dictionary<string, object> globaltypes, Type type)
{
object tn = "";
if (d.TryGetValue("$types", out tn))
{
UsingGlobalTypes = true;
globaltypes = new Dictionary<string, object>();
foreach (var kv in (Dictionary<string, object>)tn)
{
globaltypes.Add((string)kv.Value, kv.Key);
}
}
bool found = d.TryGetValue("$type", out tn);
#if !SILVERLIGHT
if (found == false && type == typeof(System.Object))
{
return CreateDataset(d, globaltypes);
}
#endif
if (found)
{
if (UsingGlobalTypes)
{
object tname = "";
if (globaltypes.TryGetValue((string)tn, out tname))
tn = tname;
}
type = GetTypeFromCache((string)tn);
}
if (type == null)
throw new Exception("Cannot determine type");
string typename = type.FullName;
object o = FastCreateInstance(type);
SafeDictionary<string, myPropInfo> props = Getproperties(type, typename);
foreach (string name in d.Keys)
{
if (name == "$map")
{
ProcessMap(o, props, (Dictionary<string, object>)d[name]);
continue;
}
myPropInfo pi;
if (props.TryGetValue(name, out pi) == false)
continue;
if (pi.filled == true)
{
object v = d[name];
if (v != null)
{
object oset = null;
if (pi.isInt)
oset = (int)CreateLong((string)v);
#if CUSTOMTYPE
else if (pi.isCustomType)
oset = CreateCustom((string)v, pi.pt);
#endif
else if (pi.isLong)
oset = CreateLong((string)v);
else if (pi.isString)
oset = (string)v;
else if (pi.isBool)
oset = (bool)v;
else if (pi.isGenericType && pi.isValueType == false && pi.isDictionary == false)
#if SILVERLIGHT
oset = CreateGenericList((List<object>)v, pi.pt, pi.bt, globaltypes);
#else
oset = CreateGenericList((ArrayList)v, pi.pt, pi.bt, globaltypes);
#endif
else if (pi.isByteArray)
oset = Convert.FromBase64String((string)v);
else if (pi.isArray && pi.isValueType == false)
#if SILVERLIGHT
oset = CreateArray((List<object>)v, pi.pt, pi.bt, globaltypes);
#else
oset = CreateArray((ArrayList)v, pi.pt, pi.bt, globaltypes);
#endif
else if (pi.isGuid)
oset = CreateGuid((string)v);
#if !SILVERLIGHT
else if (pi.isDataSet)
oset = CreateDataset((Dictionary<string, object>)v, globaltypes);
else if (pi.isDataTable)
oset = this.CreateDataTable((Dictionary<string, object>)v, globaltypes);
#endif
else if (pi.isStringDictionary)
oset = CreateStringKeyDictionary((Dictionary<string, object>)v, pi.pt, pi.GenericTypes, globaltypes);
#if !SILVERLIGHT
else if (pi.isDictionary || pi.isHashtable)
oset = CreateDictionary((ArrayList)v, pi.pt, pi.GenericTypes, globaltypes);
#else
else if (pi.isDictionary)
oset = CreateDictionary((List<object>)v, pi.pt, pi.GenericTypes, globaltypes);
#endif
else if (pi.isEnum)
oset = CreateEnum(pi.pt, (string)v);
else if (pi.isDateTime)
oset = CreateDateTime((string)v);
else if (pi.isClass && v is Dictionary<string, object>)
oset = ParseDictionary((Dictionary<string, object>)v, globaltypes, pi.pt);
else if (pi.isValueType)
oset = ChangeType(v, pi.changeType);
#if SILVERLIGHT
else if (v is List<object>)
oset = CreateArray((List<object>)v, pi.pt, typeof(object), globaltypes);
#else
else if (v is ArrayList)
oset = CreateArray((ArrayList)v, pi.pt, typeof(object), globaltypes);
#endif
else
oset = v;
if (pi.CanWrite)
pi.setter(o, oset);
}
}
}
return o;
}
#if CUSTOMTYPE
private object CreateCustom(string v, Type type)
{
Deserialize d;
_customDeserializer.TryGetValue(type, out d);
return d(v);
}
#endif
private void ProcessMap(object obj, SafeDictionary<string, JSON.myPropInfo> props, Dictionary<string, object> dic)
{
foreach (KeyValuePair<string, object> kv in dic)
{
myPropInfo p = props[kv.Key];
object o = p.getter(obj);
Type t = Type.GetType((string)kv.Value);
if (t == typeof(Guid))
p.setter(obj, CreateGuid((string)o));
}
}
private long CreateLong(string s)
{
long num = 0;
bool neg = false;
foreach (char cc in s)
{
if (cc == '-')
neg = true;
else if (cc == '+')
neg = false;
else
{
num *= 10;
num += (int)(cc - '0');
}
}
return neg ? -num : num;
}
private object CreateEnum(Type pt, string v)
{
// TODO : optimize create enum
#if !SILVERLIGHT
return Enum.Parse(pt, v);
#else
return Enum.Parse(pt, v, true);
#endif
}
private Guid CreateGuid(string s)
{
if (s.Length > 30)
return new Guid(s);
else
return new Guid(Convert.FromBase64String(s));
}
private DateTime CreateDateTime(string value)
{
bool utc = false;
// 0123456789012345678
// datetime format = yyyy-MM-dd HH:mm:ss
int year = (int)CreateLong(value.Substring(0, 4));
int month = (int)CreateLong(value.Substring(5, 2));
int day = (int)CreateLong(value.Substring(8, 2));
int hour = (int)CreateLong(value.Substring(11, 2));
int min = (int)CreateLong(value.Substring(14, 2));
int sec = (int)CreateLong(value.Substring(17, 2));
if (value.EndsWith("Z"))
utc = true;
if (UseUTCDateTime == false && utc == false)
return new DateTime(year, month, day, hour, min, sec);
else
return new DateTime(year, month, day, hour, min, sec, DateTimeKind.Utc).ToLocalTime();
}
#if SILVERLIGHT
private object CreateArray(List<object> data, Type pt, Type bt, Dictionary<string, object> globalTypes)
{
Array col = Array.CreateInstance(bt, data.Count);
// create an array of objects
for (int i = 0; i < data.Count; i++)// each (object ob in data)
{
object ob = data[i];
if (ob is IDictionary)
col.SetValue(ParseDictionary((Dictionary<string, object>)ob, globalTypes, bt), i);
else
col.SetValue(ChangeType(ob, bt), i);
}
return col;
}
#else
private object CreateArray(ArrayList data, Type pt, Type bt, Dictionary<string, object> globalTypes)
{
ArrayList col = new ArrayList();
// create an array of objects
foreach (object ob in data)
{
if (ob is IDictionary)
col.Add(ParseDictionary((Dictionary<string, object>)ob, globalTypes, bt));
else
col.Add(ChangeType(ob, bt));
}
return col.ToArray(bt);
}
#endif
#if SILVERLIGHT
private object CreateGenericList(List<object> data, Type pt, Type bt, Dictionary<string, object> globalTypes)
#else
private object CreateGenericList(ArrayList data, Type pt, Type bt, Dictionary<string, object> globalTypes)
#endif
{
IList col = (IList)FastCreateInstance(pt);
// create an array of objects
foreach (object ob in data)
{
if (ob is IDictionary)
col.Add(ParseDictionary((Dictionary<string, object>)ob, globalTypes, bt));
#if SILVERLIGHT
else if (ob is List<object>)
col.Add(((List<object>)ob).ToArray());
#else
else if (ob is ArrayList)
col.Add(((ArrayList)ob).ToArray());
#endif
else
col.Add(ChangeType(ob, bt));
}
return col;
}
private object CreateStringKeyDictionary(Dictionary<string, object> reader, Type pt, Type[] types, Dictionary<string,object> globalTypes)
{
var col = (IDictionary)FastCreateInstance(pt);
Type t1 = null;
Type t2 = null;
if (types != null)
{
t1 = types[0];
t2 = types[1];
}
foreach (KeyValuePair<string, object> values in reader)
{
var key = values.Key;//ChangeType(values.Key, t1);
object val = null;
if (values.Value is Dictionary<string, object>)
val = ParseDictionary((Dictionary<string, object>)values.Value, globalTypes, t2);
else
val = ChangeType(values.Value, t2);
col.Add(key, val);
}
return col;
}
#if SILVERLIGHT
private object CreateDictionary(List<object> reader, Type pt, Type[] types, Dictionary<string, object> globalTypes)
#else
private object CreateDictionary(ArrayList reader, Type pt, Type[] types, Dictionary<string, object> globalTypes)
#endif
{
IDictionary col = (IDictionary)FastCreateInstance(pt);
Type t1 = null;
Type t2 = null;
if (types != null)
{
t1 = types[0];
t2 = types[1];
}
foreach (Dictionary<string, object> values in reader)
{
object key = values["k"];
object val = values["v"];
if (key is Dictionary<string, object>)
key = ParseDictionary((Dictionary<string, object>)key, globalTypes, t1);
else
key = ChangeType(key, t1);
if (val is Dictionary<string, object>)
val = ParseDictionary((Dictionary<string, object>)val, globalTypes, t2);
else
val = ChangeType(val, t2);
col.Add(key, val);
}
return col;
}
private Type GetChangeType(Type conversionType)
{
if (conversionType.IsGenericType && conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
return conversionType.GetGenericArguments()[0];
return conversionType;
}
#if !SILVERLIGHT
private DataSet CreateDataset(Dictionary<string, object> reader, Dictionary<string, object> globalTypes)
{
DataSet ds = new DataSet();
ds.EnforceConstraints = false;
ds.BeginInit();
// read dataset schema here
ReadSchema(reader, ds, globalTypes);
foreach (KeyValuePair<string, object> pair in reader)
{
if (pair.Key == "$type" || pair.Key == "$schema") continue;
ArrayList rows = (ArrayList)pair.Value;
if (rows == null) continue;
DataTable dt = ds.Tables[pair.Key];
ReadDataTable(rows, dt);
}
ds.EndInit();
return ds;
}
private void ReadSchema(Dictionary<string, object> reader, DataSet ds, Dictionary<string, object> globalTypes)
{
var schema = reader["$schema"];
if (schema is string)
{
TextReader tr = new StringReader((string)schema);
ds.ReadXmlSchema(tr);
}
else
{
DatasetSchema ms = (DatasetSchema)ParseDictionary((Dictionary<string, object>)schema, globalTypes, typeof(DatasetSchema));
ds.DataSetName = ms.Name;
for (int i = 0; i < ms.Info.Count; i += 3)
{
if (ds.Tables.Contains(ms.Info[i]) == false)
ds.Tables.Add(ms.Info[i]);
ds.Tables[ms.Info[i]].Columns.Add(ms.Info[i + 1], Type.GetType(ms.Info[i + 2]));
}
}
}
private void ReadDataTable(ArrayList rows, DataTable dt)
{
dt.BeginInit();
dt.BeginLoadData();
List<int> guidcols = new List<int>();
List<int> datecol = new List<int>();
foreach (DataColumn c in dt.Columns)
{
if (c.DataType == typeof(Guid) || c.DataType == typeof(Guid?))
guidcols.Add(c.Ordinal);
if (UseUTCDateTime && (c.DataType == typeof(DateTime) || c.DataType == typeof(DateTime?)))
datecol.Add(c.Ordinal);
}
foreach (ArrayList row in rows)
{
object[] v = new object[row.Count];
row.CopyTo(v, 0);
foreach (int i in guidcols)
{
string s = (string)v[i];
if (s != null && s.Length < 36)
v[i] = new Guid(Convert.FromBase64String(s));
}
if (UseUTCDateTime)
{
foreach (int i in datecol)
{
string s = (string)v[i];
if (s != null)
v[i] = CreateDateTime(s);
}
}
dt.Rows.Add(v);
}
dt.EndLoadData();
dt.EndInit();
}
DataTable CreateDataTable(Dictionary<string, object> reader, Dictionary<string, object> globalTypes)
{
var dt = new DataTable();
// read dataset schema here
var schema = reader["$schema"];
if (schema is string)
{
TextReader tr = new StringReader((string)schema);
dt.ReadXmlSchema(tr);
}
else
{
var ms = (DatasetSchema)this.ParseDictionary((Dictionary<string, object>)schema, globalTypes, typeof(DatasetSchema));
dt.TableName = ms.Info[0];
for (int i = 0; i < ms.Info.Count; i += 3)
{
dt.Columns.Add(ms.Info[i + 1], Type.GetType(ms.Info[i + 2]));
}
}
foreach (var pair in reader)
{
if (pair.Key == "$type" || pair.Key == "$schema")
continue;
var rows = (ArrayList)pair.Value;
if (rows == null)
continue;
if (!dt.TableName.Equals(pair.Key, StringComparison.InvariantCultureIgnoreCase))
continue;
ReadDataTable(rows, dt);
}
return dt;
}
#endif
}
}

@ -1,408 +0,0 @@
//http://fastjson.codeplex.com/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace Exceptron.Driver.fastJSON
{
/// <summary>
/// This class encodes and decodes JSON strings.
/// Spec. details, see http://www.json.org/
///
/// JSON uses Arrays and Objects. These correspond here to the datatypes ArrayList and Hashtable.
/// All numbers are parsed to doubles.
/// </summary>
internal class JsonParser
{
enum Token
{
None = -1, // Used to denote no Lookahead available
Curly_Open,
Curly_Close,
Squared_Open,
Squared_Close,
Colon,
Comma,
String,
Number,
True,
False,
Null
}
readonly char[] json;
readonly StringBuilder s = new StringBuilder();
Token lookAheadToken = Token.None;
int index;
internal JsonParser(string json)
{
this.json = json.ToCharArray();
}
public object Decode()
{
return ParseValue();
}
private Dictionary<string, object> ParseObject()
{
Dictionary<string, object> table = new Dictionary<string, object>();
ConsumeToken(); // {
while (true)
{
switch (LookAhead())
{
case Token.Comma:
ConsumeToken();
break;
case Token.Curly_Close:
ConsumeToken();
return table;
default:
{
// name
string name = ParseString();
// :
if (NextToken() != Token.Colon)
{
throw new Exception("Expected colon at index " + index);
}
// value
object value = ParseValue();
table[name] = value;
}
break;
}
}
}
#if SILVERLIGHT
private List<object> ParseArray()
{
List<object> array = new List<object>();
#else
private ArrayList ParseArray()
{
ArrayList array = new ArrayList();
#endif
ConsumeToken(); // [
while (true)
{
switch (LookAhead())
{
case Token.Comma:
ConsumeToken();
break;
case Token.Squared_Close:
ConsumeToken();
return array;
default:
{
array.Add(ParseValue());
}
break;
}
}
}
private object ParseValue()
{
switch (LookAhead())
{
case Token.Number:
return ParseNumber();
case Token.String:
return ParseString();
case Token.Curly_Open:
return ParseObject();
case Token.Squared_Open:
return ParseArray();
case Token.True:
ConsumeToken();
return true;
case Token.False:
ConsumeToken();
return false;
case Token.Null:
ConsumeToken();
return null;
}
throw new Exception("Unrecognized token at index" + index);
}
private string ParseString()
{
ConsumeToken(); // "
s.Length = 0;
int runIndex = -1;
while (index < json.Length)
{
var c = json[index++];
if (c == '"')
{
if (runIndex != -1)
{
if (s.Length == 0)
return new string(json, runIndex, index - runIndex - 1);
s.Append(json, runIndex, index - runIndex - 1);
}
return s.ToString();
}
if (c != '\\')
{
if (runIndex == -1)
runIndex = index - 1;
continue;
}
if (index == json.Length) break;
if (runIndex != -1)
{
s.Append(json, runIndex, index - runIndex - 1);
runIndex = -1;
}
switch (json[index++])
{
case '"':
s.Append('"');
break;
case '\\':
s.Append('\\');
break;
case '/':
s.Append('/');
break;
case 'b':
s.Append('\b');
break;
case 'f':
s.Append('\f');
break;
case 'n':
s.Append('\n');
break;
case 'r':
s.Append('\r');
break;
case 't':
s.Append('\t');
break;
case 'u':
{
int remainingLength = json.Length - index;
if (remainingLength < 4) break;
// parse the 32 bit hex into an integer codepoint
uint codePoint = ParseUnicode(json[index], json[index + 1], json[index + 2], json[index + 3]);
s.Append((char)codePoint);
// skip 4 chars
index += 4;
}
break;
}
}
throw new Exception("Unexpectedly reached end of string");
}
private uint ParseSingleChar(char c1, uint multipliyer)
{
uint p1 = 0;
if (c1 >= '0' && c1 <= '9')
p1 = (uint)(c1 - '0') * multipliyer;
else if (c1 >= 'A' && c1 <= 'F')
p1 = (uint)((c1 - 'A') + 10) * multipliyer;
else if (c1 >= 'a' && c1 <= 'f')
p1 = (uint)((c1 - 'a') + 10) * multipliyer;
return p1;
}
private uint ParseUnicode(char c1, char c2, char c3, char c4)
{
uint p1 = ParseSingleChar(c1, 0x1000);
uint p2 = ParseSingleChar(c2, 0x100);
uint p3 = ParseSingleChar(c3, 0x10);
uint p4 = ParseSingleChar(c4, 1);
return p1 + p2 + p3 + p4;
}
private string ParseNumber()
{
ConsumeToken();
// Need to start back one place because the first digit is also a token and would have been consumed
var startIndex = index - 1;
do
{
var c = json[index];
if ((c >= '0' && c <= '9') || c == '.' || c == '-' || c == '+' || c == 'e' || c == 'E')
{
if (++index == json.Length) throw new Exception("Unexpected end of string whilst parsing number");
continue;
}
break;
} while (true);
return new string(json, startIndex, index - startIndex);
}
private Token LookAhead()
{
if (lookAheadToken != Token.None) return lookAheadToken;
return lookAheadToken = NextTokenCore();
}
private void ConsumeToken()
{
lookAheadToken = Token.None;
}
private Token NextToken()
{
var result = lookAheadToken != Token.None ? lookAheadToken : NextTokenCore();
lookAheadToken = Token.None;
return result;
}
private Token NextTokenCore()
{
char c;
// Skip past whitespace
do
{
c = json[index];
if (c > ' ') break;
if (c != ' ' && c != '\t' && c != '\n' && c != '\r') break;
} while (++index < json.Length);
if (index == json.Length)
{
throw new Exception("Reached end of string unexpectedly");
}
c = json[index];
index++;
//if (c >= '0' && c <= '9')
// return Token.Number;
switch (c)
{
case '{':
return Token.Curly_Open;
case '}':
return Token.Curly_Close;
case '[':
return Token.Squared_Open;
case ']':
return Token.Squared_Close;
case ',':
return Token.Comma;
case '"':
return Token.String;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
case '-': case '+': case '.':
return Token.Number;
case ':':
return Token.Colon;
case 'f':
if (json.Length - index >= 4 &&
json[index + 0] == 'a' &&
json[index + 1] == 'l' &&
json[index + 2] == 's' &&
json[index + 3] == 'e')
{
index += 4;
return Token.False;
}
break;
case 't':
if (json.Length - index >= 3 &&
json[index + 0] == 'r' &&
json[index + 1] == 'u' &&
json[index + 2] == 'e')
{
index += 3;
return Token.True;
}
break;
case 'n':
if (json.Length - index >= 3 &&
json[index + 0] == 'u' &&
json[index + 1] == 'l' &&
json[index + 2] == 'l')
{
index += 3;
return Token.Null;
}
break;
}
throw new Exception("Could not find token at index " + --index);
}
}
}

@ -1,518 +0,0 @@
//http://fastjson.codeplex.com/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.IO;
using System.Text;
namespace Exceptron.Driver.fastJSON
{
internal class JSONSerializer
{
private readonly StringBuilder _output = new StringBuilder();
readonly bool useMinimalDataSetSchema;
readonly bool fastguid = true;
readonly bool useExtension = true;
readonly bool serializeNulls = true;
readonly int _MAX_DEPTH = 10;
bool _Indent = false;
bool _useGlobalTypes = true;
int _current_depth = 0;
private Dictionary<string, int> _globalTypes = new Dictionary<string, int>();
internal JSONSerializer(bool UseMinimalDataSetSchema, bool UseFastGuid, bool UseExtensions, bool SerializeNulls, bool IndentOutput)
{
this.useMinimalDataSetSchema = UseMinimalDataSetSchema;
this.fastguid = UseFastGuid;
this.useExtension = UseExtensions;
_Indent = IndentOutput;
this.serializeNulls = SerializeNulls;
if (useExtension == false)
_useGlobalTypes = false;
}
internal string ConvertToJSON(object obj)
{
WriteValue(obj);
string str = "";
if (_useGlobalTypes)
{
StringBuilder sb = new StringBuilder();
sb.Append("{\"$types\":{");
bool pendingSeparator = false;
foreach (var kv in _globalTypes)
{
if (pendingSeparator) sb.Append(',');
pendingSeparator = true;
sb.Append("\"");
sb.Append(kv.Key);
sb.Append("\":\"");
sb.Append(kv.Value);
sb.Append("\"");
}
sb.Append("},");
str = sb.ToString() + _output.ToString();
}
else
str = _output.ToString();
return str;
}
private void WriteValue(object obj)
{
if (obj == null || obj is DBNull)
_output.Append("null");
else if (obj is string || obj is char)
WriteString((string)obj);
else if (obj is Guid)
WriteGuid((Guid)obj);
else if (obj is bool)
_output.Append(((bool)obj) ? "true" : "false"); // conform to standard
else if (
obj is int || obj is long || obj is double ||
obj is decimal || obj is float ||
obj is byte || obj is short ||
obj is sbyte || obj is ushort ||
obj is uint || obj is ulong
)
_output.Append(((IConvertible)obj).ToString(NumberFormatInfo.InvariantInfo));
else if (obj is DateTime)
WriteDateTime((DateTime)obj);
else if (obj is IDictionary && obj.GetType().IsGenericType && obj.GetType().GetGenericArguments()[0] == typeof(string))
WriteStringDictionary((IDictionary)obj);
else if (obj is IDictionary)
WriteDictionary((IDictionary)obj);
#if !SILVERLIGHT
else if (obj is DataSet)
WriteDataset((DataSet)obj);
else if (obj is DataTable)
this.WriteDataTable((DataTable)obj);
#endif
else if (obj is byte[])
WriteBytes((byte[])obj);
else if (obj is Array || obj is IList || obj is ICollection)
WriteArray((IEnumerable)obj);
else if (obj is Enum)
WriteEnum((Enum)obj);
#if CUSTOMTYPE
else if (JSON.Instance.IsTypeRegistered(obj.GetType()))
WriteCustom(obj);
#endif
else
WriteObject(obj);
}
#if CUSTOMTYPE
private void WriteCustom(object obj)
{
Serialize s;
JSON.Instance._customSerializer.TryGetValue(obj.GetType(), out s);
WriteStringFast(s(obj));
}
#endif
private void WriteEnum(Enum e)
{
// TODO : optimize enum write
WriteStringFast(e.ToString());
}
private void WriteGuid(Guid g)
{
if (fastguid == false)
WriteStringFast(g.ToString());
else
WriteBytes(g.ToByteArray());
}
private void WriteBytes(byte[] bytes)
{
#if !SILVERLIGHT
WriteStringFast(Convert.ToBase64String(bytes, 0, bytes.Length, Base64FormattingOptions.None));
#else
WriteStringFast(Convert.ToBase64String(bytes, 0, bytes.Length));
#endif
}
private void WriteDateTime(DateTime dateTime)
{
// datetime format standard : yyyy-MM-dd HH:mm:ss
DateTime dt = dateTime;
if (JSON.Instance.UseUTCDateTime)
dt = dateTime.ToUniversalTime();
_output.Append("\"");
_output.Append(dt.Year.ToString("0000", NumberFormatInfo.InvariantInfo));
_output.Append("-");
_output.Append(dt.Month.ToString("00", NumberFormatInfo.InvariantInfo));
_output.Append("-");
_output.Append(dt.Day.ToString("00", NumberFormatInfo.InvariantInfo));
_output.Append(" ");
_output.Append(dt.Hour.ToString("00", NumberFormatInfo.InvariantInfo));
_output.Append(":");
_output.Append(dt.Minute.ToString("00", NumberFormatInfo.InvariantInfo));
_output.Append(":");
_output.Append(dt.Second.ToString("00", NumberFormatInfo.InvariantInfo));
if (JSON.Instance.UseUTCDateTime)
_output.Append("Z");
_output.Append("\"");
}
#if !SILVERLIGHT
private DatasetSchema GetSchema(DataTable ds)
{
if (ds == null) return null;
DatasetSchema m = new DatasetSchema();
m.Info = new List<string>();
m.Name = ds.TableName;
foreach (DataColumn c in ds.Columns)
{
m.Info.Add(ds.TableName);
m.Info.Add(c.ColumnName);
m.Info.Add(c.DataType.ToString());
}
// TODO : serialize relations and constraints here
return m;
}
private DatasetSchema GetSchema(DataSet ds)
{
if (ds == null) return null;
DatasetSchema m = new DatasetSchema();
m.Info = new List<string>();
m.Name = ds.DataSetName;
foreach (DataTable t in ds.Tables)
{
foreach (DataColumn c in t.Columns)
{
m.Info.Add(t.TableName);
m.Info.Add(c.ColumnName);
m.Info.Add(c.DataType.ToString());
}
}
// TODO : serialize relations and constraints here
return m;
}
private string GetXmlSchema(DataTable dt)
{
using (var writer = new StringWriter())
{
dt.WriteXmlSchema(writer);
return dt.ToString();
}
}
private void WriteDataset(DataSet ds)
{
_output.Append('{');
if (useExtension)
{
WritePair("$schema", useMinimalDataSetSchema ? (object)GetSchema(ds) : ds.GetXmlSchema());
_output.Append(',');
}
bool tablesep = false;
foreach (DataTable table in ds.Tables)
{
if (tablesep) _output.Append(",");
tablesep = true;
WriteDataTableData(table);
}
// end dataset
_output.Append('}');
}
private void WriteDataTableData(DataTable table)
{
_output.Append('\"');
_output.Append(table.TableName);
_output.Append("\":[");
DataColumnCollection cols = table.Columns;
bool rowseparator = false;
foreach (DataRow row in table.Rows)
{
if (rowseparator) _output.Append(",");
rowseparator = true;
_output.Append('[');
bool pendingSeperator = false;
foreach (DataColumn column in cols)
{
if (pendingSeperator) _output.Append(',');
WriteValue(row[column]);
pendingSeperator = true;
}
_output.Append(']');
}
_output.Append(']');
}
void WriteDataTable(DataTable dt)
{
this._output.Append('{');
if (this.useExtension)
{
this.WritePair("$schema", this.useMinimalDataSetSchema ? (object)this.GetSchema(dt) : this.GetXmlSchema(dt));
this._output.Append(',');
}
WriteDataTableData(dt);
// end datatable
this._output.Append('}');
}
#endif
bool _firstWritten = false;
private void WriteObject(object obj)
{
Indent();
if (_useGlobalTypes == false)
_output.Append('{');
else
{
if (_firstWritten)
_output.Append("{");
}
_firstWritten = true;
_current_depth++;
if (_current_depth > _MAX_DEPTH)
throw new Exception("Serializer encountered maximum depth of " + _MAX_DEPTH);
Dictionary<string, string> map = new Dictionary<string, string>();
Type t = obj.GetType();
bool append = false;
if (useExtension)
{
if (_useGlobalTypes == false)
WritePairFast("$type", JSON.Instance.GetTypeAssemblyName(t));
else
{
int dt = 0;
string ct = JSON.Instance.GetTypeAssemblyName(t);
if (_globalTypes.TryGetValue(ct, out dt) == false)
{
dt = _globalTypes.Count + 1;
_globalTypes.Add(ct, dt);
}
WritePairFast("$type", dt.ToString());
}
append = true;
}
List<Getters> g = JSON.Instance.GetGetters(t);
foreach (var p in g)
{
if (append)
_output.Append(',');
object o = p.Getter(obj);
if ((o == null || o is DBNull) && serializeNulls == false)
append = false;
else
{
WritePair(p.Name, o);
if (o != null && useExtension)
{
Type tt = o.GetType();
if (tt == typeof(System.Object))
map.Add(p.Name, tt.ToString());
}
append = true;
}
}
if (map.Count > 0 && useExtension)
{
_output.Append(",\"$map\":");
WriteStringDictionary(map);
}
_current_depth--;
Indent();
_output.Append('}');
_current_depth--;
}
private void Indent()
{
Indent(false);
}
private void Indent(bool dec)
{
if (_Indent)
{
_output.Append("\r\n");
for (int i = 0; i < _current_depth - (dec ? 1 : 0); i++)
_output.Append("\t");
}
}
private void WritePairFast(string name, string value)
{
if ((value == null) && serializeNulls == false)
return;
Indent();
WriteStringFast(name);
_output.Append(':');
WriteStringFast(value);
}
private void WritePair(string name, object value)
{
if ((value == null || value is DBNull) && serializeNulls == false)
return;
Indent();
WriteStringFast(name);
_output.Append(':');
WriteValue(value);
}
private void WriteArray(IEnumerable array)
{
Indent();
_output.Append('[');
bool pendingSeperator = false;
foreach (object obj in array)
{
Indent();
if (pendingSeperator) _output.Append(',');
WriteValue(obj);
pendingSeperator = true;
}
Indent();
_output.Append(']');
}
private void WriteStringDictionary(IDictionary dic)
{
Indent();
_output.Append('{');
bool pendingSeparator = false;
foreach (DictionaryEntry entry in dic)
{
if (pendingSeparator) _output.Append(',');
WritePair((string)entry.Key, entry.Value);
pendingSeparator = true;
}
Indent();
_output.Append('}');
}
private void WriteDictionary(IDictionary dic)
{
Indent();
_output.Append('[');
bool pendingSeparator = false;
foreach (DictionaryEntry entry in dic)
{
if (pendingSeparator) _output.Append(',');
Indent();
_output.Append('{');
WritePair("k", entry.Key);
_output.Append(",");
WritePair("v", entry.Value);
Indent();
_output.Append('}');
pendingSeparator = true;
}
Indent();
_output.Append(']');
}
private void WriteStringFast(string s)
{
//Indent();
_output.Append('\"');
_output.Append(s);
_output.Append('\"');
}
private void WriteString(string s)
{
//Indent();
_output.Append('\"');
int runIndex = -1;
for (var index = 0; index < s.Length; ++index)
{
var c = s[index];
if (c >= ' ' && c < 128 && c != '\"' && c != '\\')
{
if (runIndex == -1)
{
runIndex = index;
}
continue;
}
if (runIndex != -1)
{
_output.Append(s, runIndex, index - runIndex);
runIndex = -1;
}
switch (c)
{
case '\t': _output.Append("\\t"); break;
case '\r': _output.Append("\\r"); break;
case '\n': _output.Append("\\n"); break;
case '"':
case '\\': _output.Append('\\'); _output.Append(c); break;
default:
_output.Append("\\u");
_output.Append(((int)c).ToString("X4", NumberFormatInfo.InvariantInfo));
break;
}
}
if (runIndex != -1)
{
_output.Append(s, runIndex, s.Length - runIndex);
}
_output.Append('\"');
}
}
}

@ -1,39 +0,0 @@
//http://fastjson.codeplex.com/
using System.Collections.Generic;
namespace Exceptron.Driver.fastJSON
{
internal class SafeDictionary<TKey, TValue>
{
private readonly object _Padlock = new object();
private readonly Dictionary<TKey, TValue> _Dictionary = new Dictionary<TKey, TValue>();
public bool TryGetValue(TKey key, out TValue value)
{
return _Dictionary.TryGetValue(key, out value);
}
public TValue this[TKey key]
{
get
{
return _Dictionary[key];
}
}
public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
{
return ((ICollection<KeyValuePair<TKey, TValue>>)_Dictionary).GetEnumerator();
}
public void Add(TKey key, TValue value)
{
lock (_Padlock)
{
if (_Dictionary.ContainsKey(key) == false)
_Dictionary.Add(key, value);
}
}
}
}

@ -1,74 +0,0 @@
/* Black theme*/.t-widget,.t-input{border-color:#080808;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#4f4f4f}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#080808;background:#050505 url('Black/sprite.png') repeat-x 0 -752px}
.t-icon{background-image:url('Black/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Black/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('Black/loading.gif') no-repeat 0 0}
.t-widget,.t-link,.t-popup,.t-input{color:#fff}
.t-other-month .t-link{color:#6f6f6f}
.t-group,.t-content,.t-editable-area{border-color:#080808;background-color:#4f4f4f}
.t-colorpicker .t-arrow-down{border-color:#080808}
.t-separator{border-color:#323232;background-color:#080808}
.t-alt{background-color:#494949}
.t-state-default{border-color:#080808}
.t-active-filter{background-color:#363636}
.t-state-hover,.t-state-hover .t-link{color:#9eda29}
.t-state-hover,.t-state-hover:hover{background-color:#2c2c2c;border-color:#080808}
.t-state-active{background-color:#4f4f4f;border-color:#080808}
.t-state-selected{background:#1c1c1c;border-color:#000}
.t-state-focused{background-color:#2c2c2c}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#f00;background-color:#ffc0cb}
.t-button{border-color:#080808;color:#fff}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:#050505 url('Black/sprite.png') repeat-x 0 -560px}
.t-button:hover{background-position:0 -624px;background-color:#131313;color:#9eda29}
.t-state-disabled,.t-state-disabled:hover,.t-state-disabled .t-link,.t-state-disabled .t-button{color:#787878}
.t-header .t-state-disabled{border-color:#4f4f4f}
.t-popup,.t-menu .t-group{-moz-box-shadow:2px 2px 2px #222;-webkit-box-shadow:2px 2px 2px #222;box-shadow:2px 2px 2px #222}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#080808;background-color:#2c2c2c}
.t-grid-header-wrap,.t-grid-footer-wrap{border-color:#080808}
.t-grid td{border-color:#454545}
.t-grouping-row td{background:#4f4f4f url('Black/sprite.png') repeat-x 0 -48px}
.t-footer-template td{background-color:#2e2e2e;border-color:#080808 #2e2e2e}
.t-group-footer td{background-color:#2e2e2e;border-color:#080808}
.t-grid-footer,.t-grid-footer-wrap table{background-color:#2e2e2e;border-color:#080808}
.t-grouping-header .t-group-indicator{color:#333;border-color:#666}
.t-grouping-dropclue{background:url('Black/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#4f4f4f}
.t-drag-clue{color:#fff}
.t-treeview .t-drop-clue{background-image:url('Black/sprite.png');background-position:0 -358px}
.t-panelbar .t-link,.t-panelbar .t-group,.t-panelbar .t-content{border-color:#000}
.t-calendar th{background-color:#383838;border-color:#202020}
.t-treeview-lines .t-top,.t-treeview-lines .t-mid,.t-treeview-lines .t-bot{background-image:url('Black/treeview-nodes.png')}
.t-rtl .t-treeview-lines .t-top,.t-rtl .t-treeview-lines .t-mid,.t-rtl .t-treeview-lines .t-bot{background-image:url('Black/treeview-nodes-rtl.png')}
.t-treeview-lines .t-item{background-image:url('Black/treeview-line.png')}
.t-treeview-lines .t-last{background-image:none}
div.t-window{-moz-box-shadow:0 0 5px 2px #222;-webkit-box-shadow:0 0 5px 2px #222;box-shadow:0 0 5px 2px #222}
.t-editor-button .t-state-hover{border-color:#565656 #111 #111 #565656;background-color:#232323}
.t-editor-button .t-state-active{border-color:#030303 #1f1f1f #1f1f1f #030303;background-color:#050505}
/*Slider*/.t-slider .t-draghandle{background-image:url('Black/sprite.png');color:#080808}
.t-slider-track{border-color:#4a4a4a}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Black/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Black/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Black/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Black/slider-v.gif')}
.t-state-disabled .t-slider-wrap .t-slider-items{color:#ccc}
/*Tooltip*/.t-tooltip{background:#050505 0 -560px repeat-x url('Black/sprite.png')}
.t-callout{background-image:url('Black/sprite.png')}
/* Splitter */.t-splitbar-vertical,.t-splitbar-horizontal{background-color:#262628}
.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Black/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Black/sprite-vertical.png')}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#080808}
.t-dropzone-hovered,.t-upload-files{background-color:#2c2c2c}
.t-dropzone em{color:#848484}
.t-progress,.t-progress-status{background-image:url('Black/sprite.png')}
.t-progress{background-position:0 -465px;border-color:#4a4a4a #474747}
.t-progress-status{background-position:0 -472px;border-color:#9eda29 transparent #456408}
/* ImageBrowser */.t-imagebrowser .t-content{background:#3d3d3d}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label,.t-tiles-arrange{color:#a1a1a1}
.t-toolbar .t-upload .t-button,.t-tiles-arrange a{color:#fff}
.t-tiles{border-color:#222;background:#4f4f4f}
.t-tile{border-color:#4f4f4f;background:0 100px repeat-x url('Black/imagebrowser.png')}
.t-tiles li.t-state-hover{border-color:#080808;background-position:0 0}
.t-tiles li.t-state-selected{border-color:#080808;background-position:0 -100px}
.t-tile .t-folder{background-image:url('Black/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize,.t-tile-empty strong{color:#7d7d7d}

@ -1,660 +0,0 @@
/* base stylesheet */.t-reset{margin:0;padding:0;border:0;outline:0;text-decoration:none;font-size:100%;list-style:none}
.t-floatwrap:after{content:"";display:block;clear:both;visibility:hidden;height:0;overflow:hidden}
.t-floatwrap{display:inline-block}
.t-floatwrap{display:block}
.t-widget,.t-widget .t-input,.t-widget .text-box,.t-button{font-size:100%}
.t-widget,.t-input[type="text"]{border-width:1px;border-style:solid}
.t-widget,* html .t-input{border-width:1px;border-style:solid}
* html .t-checkbox .t-input{border-width:0}
.t-link{cursor:pointer;outline:0}
.t-grid-header span.t-link{cursor:default}
html body .t-button{text-decoration:none;/*Site.css*/}
.t-button{display:inline-block;margin:0;padding:2px 6px;border-width:1px;border-style:solid;font-family:inherit;font-size:100%;line-height:1.435;text-align:center;cursor:pointer;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}
*+html .t-button{display:inline;zoom:1}
* html .t-button{display:inline;zoom:1}
*+html .t-button{overflow:visible;margin-right:4px}
* html .t-button{overflow:visible;margin-right:4px}
*+html a.t-button{line-height:1.6;padding-left:7px;padding-right:7px;/*+1*/}
* html a.t-button{line-height:1.6;padding-left:7px;padding-right:7px;/*+1*/}
.t-button-icontext{line-height:1.453}
button.t-button::-moz-focus-inner{padding:0;border:0}
input.t-button::-moz-focus-inner{padding:1px 0;border:0}
.t-button-expand{margin-left:0!important;margin-right:0!important}
a.t-button-expand{display:block}
button.t-button-expand{width:100%}
body .t-button-icon{padding-left:4px;padding-right:4px}
*+html a.t-button-icon{padding-left:5px;padding-right:5px}
* html a.t-button-icon{padding-left:5px;padding-right:5px}
.t-button-icontext{padding-right:8px;overflow:visible;/*IE9*/}
.t-button-icontext .t-icon{margin:0 3px 0 -3px;vertical-align:top}
*+html .t-button-icontext .t-icon{margin-right:4px}
* html .t-button-icontext .t-icon{margin-right:4px}
html body .t-button-bare{background:none!important;/*spares long selectors*/border-width:0}
.t-icon,.t-editor-button .t-tool-icon{background-color:transparent;background-repeat:no-repeat}
.t-header .t-link{text-decoration:none}
.t-state-disabled,.t-state-disabled .t-link{cursor:default;outline:0}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-style:ridge}
.t-icon,.t-sprite,.t-editor-button .t-tool-icon{display:inline-block;width:16px;height:16px;overflow:hidden;font-size:0;line-height:0;text-indent:-3333px;text-align:center;vertical-align:middle}
* html .t-icon,* html .t-sprite,* html .t-editor-button .t-tool-icon{display:inline;zoom:1}
* html .t-icon,.t-sprite{text-indent:0}
*+html .t-icon,.t-sprite{text-indent:0}
.t-image{border:0}
.t-state-empty{font-style:italic}
.t-popup,.t-menu .t-group{-moz-box-shadow:2px 2px 2px #aaa;-webkit-box-shadow:2px 2px 2px #aaa;box-shadow:2px 2px 2px #aaa}
.t-treeview,.t-grid,.t-splitter,.t-slider,.t-window{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}
/* Icons */.t-expand{background-position:0 -160px}
.t-collapse{background-position:0 -176px}
.t-rtl .t-expand{background-position:-64px -160px}
.t-plus,.t-plus-disabled{background-position:0 -256px}
.t-minus,.t-minus-disabled{background-position:-16px -256px}
.t-rtl .t-plus,.t-rtl .t-plus-disabled{background-position:0 -272px}
.t-rtl .t-minus,.t-rtl .t-minus-disabled{background-position:-16px -272px}
.t-arrow-up{background-position:-16px -160px}
.t-arrow-down{background-position:-16px -176px}
.t-state-disabled .t-arrow-up{background-position:-32px -160px}
.t-state-disabled .t-arrow-down{background-position:-32px -176px}
.t-state-hover .t-arrow-up{background-position:-48px -160px}
.t-state-hover .t-arrow-down{background-position:-48px -176px}
.t-numerictextbox .t-arrow-up{background-position:-16px -162px}
.t-numerictextbox .t-arrow-down{background-position:-16px -178px}
.t-arrow-up-small{background-position:0 -304px}
.t-arrow-down-small{background-position:-16px -304px}
.t-arrow-first{background-position:0 -192px}
.t-arrow-prev{background-position:-16px -192px}
.t-arrow-next{background-position:-32px -192px}
.t-arrow-last{background-position:-48px -192px}
.t-state-disabled .t-arrow-first{background-position:0 -208px}
.t-state-disabled .t-arrow-prev{background-position:-16px -208px}
.t-state-disabled .t-arrow-next{background-position:-32px -208px}
.t-state-disabled .t-arrow-last{background-position:-48px -208px}
.t-state-hover .t-arrow-first{background-position:0 -224px}
.t-state-hover .t-arrow-prev{background-position:-16px -224px}
.t-state-hover .t-arrow-next{background-position:-32px -224px}
.t-state-hover .t-arrow-last{background-position:-48px -224px}
.t-filter{background-position:0 -240px}
.t-clear-filter{background-position:-16px -240px}
.t-refresh{background-position:-32px -240px}
.t-icon-calendar{background-position:-48px -240px}
.t-icon-clock{background-position:-64px -336px}
.t-edit{background-position:0 -336px}
.t-delete{background-position:-16px -336px}
.t-insert,.t-update{background-position:-32px -336px}
.t-cancel{background-position:-48px -336px}
.t-group-delete{background-position:0 -288px}
.t-maximize{background-position:-16px -288px}
.t-restore{background-position:-32px -288px}
.t-close{background-position:-64px -288px}
.t-insert-top{background-position:0 -320px}
.t-insert-middle{background-position:-16px -320px}
.t-insert-bottom{background-position:-32px -320px}
.t-add{background-position:-48px -320px}
.t-denied{background-position:-64px -320px}
.t-resize-se{background-position:-64px -272px}
/* Inputs */.t-autocomplete,.t-input[type="text"]{padding:2px 1px 3px}
* html .t-input{padding:2px 1px 3px}
/* Window */div.t-window{display:inline-block;*display:inline;zoom:1;z-index:10001;position:absolute;border-width:2px;/*ie8*/-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:0 0 5px 2px #aaa;-webkit-box-shadow:0 0 5px 2px #aaa;box-shadow:0 0 5px 2px #aaa}
div.t-window,:root .t-window{border-width:0}
* html div.t-window{border-width:2px}
*+html div.t-window{border-width:2px}
.t-window-titlebar{padding:.4em 0;font-size:1.2em;line-height:1.2em;white-space:nowrap;border-bottom-width:1px;border-bottom-style:solid;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px}
.t-window-title{cursor:default;position:absolute;text-overflow:ellipsis;overflow:hidden;left:.5em;right:.5em}
.t-window-title .t-image{margin:0 5px 0 0;vertical-align:middle}
div.t-window-content{padding:.4em .5em;/*padding:0\9;margin:.4em .5em\9;border-width:0\9;*//*removed due to ImageBrowser issues,no side effects found*/overflow:auto;position:relative;-moz-border-radius-bottomleft:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-left-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-bottom-right-radius:4px}
.t-window-titlebar .t-window-actions{position:absolute;right:.5em;top:0;padding-top:.3em;white-space:nowrap}
.t-window-titlebar .t-link{width:16px;height:16px;padding:2px;text-decoration:none;vertical-align:middle;display:inline-block;*display:inline;zoom:1;opacity:.7;filter:alpha(opacity=70)}
.t-window-titlebar .t-state-hover{border-width:1px;border-style:solid;padding:1px;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;opacity:1;filter:alpha(opacity=100)}
.t-window-actions .t-icon{margin:0;vertical-align:top}
.t-window .t-resize-handle{position:absolute;z-index:1;background-color:#fff;opacity:0;filter:alpha(opacity=0);zoom:1;line-height:6px;font-size:0}
.t-resize-n{top:-3px;left:0;width:100%;height:6px;cursor:n-resize}
.t-resize-e{top:0;right:-3px;width:6px;height:100%;cursor:e-resize}
.t-resize-s{bottom:-3px;left:0;width:100%;height:6px;cursor:s-resize}
.t-resize-w{top:0;left:-3px;width:6px;height:100%;cursor:w-resize}
.t-resize-se{bottom:-3px;right:-3px;width:16px;height:16px;cursor:se-resize}
.t-resize-sw{bottom:-3px;left:-3px;width:6px;height:6px;cursor:sw-resize}
.t-resize-ne{top:-3px;right:-3px;width:6px;height:6px;cursor:ne-resize}
.t-resize-nw{top:-3px;left:-3px;width:6px;height:6px;cursor:nw-resize}
.t-window .t-resize-se{opacity:1;filter:alpha(opacity=100);background-color:transparent}
.t-overlay{width:100%;height:100%;position:fixed;top:0;left:0;background-color:#000;filter:alpha(opacity=50);opacity:.5;z-index:10001}
.t-window .t-overlay{background-color:#fff;opacity:0;filter:alpha(opacity=0);position:absolute;width:100%;height:100%}
.t-window .t-widget{z-index:10002}
/* TabStrip */.t-tabstrip{margin:0;padding:0;zoom:1}
.t-tabstrip .t-tabstrip-items{padding:0 .3em}
.t-tabstrip-items .t-item,.t-panelbar .t-tabstrip-items .t-item{list-style-type:none;vertical-align:top;display:inline-block;*display:inline;zoom:1;border-width:1px 1px 0;border-style:solid;margin:.1em .3em 0 0;padding:0;position:relative;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;border-top-left-radius:5px;border-top-right-radius:5px}
.t-tabstrip-items .t-state-active,.t-panelbar .t-tabstrip-items .t-state-active{padding-bottom:1px;margin-bottom:-1px}
.t-tabstrip-items .t-link,.t-panelbar .t-tabstrip-items .t-link{padding:.3em .9em;display:inline-block;*display:inline;zoom:1;border-bottom-width:0;outline:0}
.t-tabstrip-items .t-icon,.t-panelbar .t-tabstrip-items .t-icon{margin:-1px 4px 0 -3px;vertical-align:top}
.t-tabstrip-items .t-item .t-image,.t-tabstrip-items .t-item .t-sprite,.t-panelbar .t-tabstrip-items .t-item .t-image,.t-panelbar .t-tabstrip-items .t-item .t-sprite{vertical-align:middle;margin:-3px 3px 0 -6px}
* html .t-tabstrip-items .t-item .t-image,* html .t-tabstrip-items .t-item .t-sprite{vertical-align:top;margin-top:-1px}
*+html .t-tabstrip-items .t-item .t-image,*+html .t-tabstrip-items .t-item .t-sprite{vertical-align:top;margin-top:-1px}
.t-tabstrip .t-content,.t-panelbar .t-tabstrip .t-content{border-width:1px;border-style:solid;margin:0 .3em .3em;padding:.3em 1em;position:static;zoom:1}
.t-tabstrip>.t-content,.t-panelbar .t-tabstrip>.t-content{display:none}
* html .t-tabstrip .t-content,* html .t-panelbar .t-tabstrip .t-content{display:none}
* html .t-tabstrip .t-content .t-content,* html .t-panelbar .t-tabstrip .t-content .t-content{display:block}
/* PanelBar */.t-panelbar{zoom:1}
.t-panelbar .t-item{list-style-type:none;display:block;zoom:1;margin:0;top:0;border-width:0;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}
.t-panelbar .t-image,.t-panelbar .t-sprite{vertical-align:middle;margin-right:5px;margin-top:4px;float:left}
.t-panelbar .t-group .t-image,.t-panelbar .t-group .t-sprite{margin-top:1px}
.t-panelbar .t-link{line-height:2.05em;padding:0 1em;border-bottom:1px solid;display:block;position:relative;text-decoration:none;zoom:1}
.t-panelbar .t-state-hover{background-image:none}
.t-panelbar-expand,.t-panelbar-collapse{position:absolute;top:5px;right:2px}
.t-panelbar .t-group,.t-panelbar .t-content{position:relative;zoom:1;padding:0;margin:0;border-bottom-width:1px;border-bottom-style:solid}
.t-panelbar .t-group .t-link{line-height:1.7em;border-bottom:0;font-size:.95em}
.t-panelbar .t-group .t-arrow-up,.t-panelbar .t-group .t-arrow-down{top:2px}
.t-panelbar .t-group .t-group .t-link{padding-left:2em}
.t-panelbar .t-last .t-link{border-bottom:0}
.t-panelbar .t-group .t-group{border-bottom:0}
/* Menu */.t-menu{cursor:default}
.t-menu,.t-menu .t-group{list-style:none;padding:0;margin:0;zoom:1}
.t-menu .t-group .t-link{padding-right:2em}
.t-menu .t-item{position:relative;display:inline-block;*display:inline;zoom:1;border-width:0 1px 0 0;border-style:solid;vertical-align:top}
.t-menu-vertical .t-item{display:block;border-width:0}
.t-menu .t-image,.t-menu .t-sprite{margin:0 4px 0 -4px;vertical-align:top}
.t-menu .t-link{text-decoration:none;padding:.25em .97em;display:block}
.t-menu .t-group{display:none;white-space:nowrap;border-style:solid;border-width:1px;overflow:visible}
.t-menu .t-group .t-item{display:block;border-width:0}
.t-menu .t-group .t-link{zoom:1}
.t-menu .t-arrow-down{margin-left:2px;margin-right:-10px;vertical-align:top}
.t-menu .t-arrow-next{position:absolute;right:0;top:3px}
.t-menu .t-animation-container,.t-menu .t-group,.t-menu-context{left:-1px;position:absolute}
.t-menu-context .t-group{position:static;display:block}
.t-menu-context{z-index:11000}
.t-menu .t-animation-container .t-animation-container,.t-menu .t-group .t-group{left:100%;top:-1px}
.t-menu-vertical .t-animation-container,.t-menu-vertical .t-group{left:100%;top:-1px}
.t-menu .t-animation-container .t-group{left:auto;top:auto}
/* Grid */.t-grid{position:relative;zoom:1}
.t-grid table{width:100%;border-collapse:separate;empty-cells:show;border:0}
.t-grid-header .t-header{text-align:left}
.t-grid-header .t-header{padding:.3em .6em;border-width:0 0 1px 1px;border-style:solid;font-weight:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.t-grid-header .t-header .t-link{line-height:18px;/* due to sorting icons*/height:18px;display:block;margin:-.3em -.6em;padding:.3em 2.4em .3em .6em;border:0}
.t-grid-header .t-header .t-icon{position:static}
.t-grid .t-state-hover{cursor:pointer}
.t-grid td{padding:.25em .6em;border-style:solid;border-width:0;border-left-width:1px;vertical-align:middle;line-height:1.6em;overflow:hidden;text-overflow:ellipsis}
.t-grid .t-grouping-row td,.t-grid .t-hierarchy-cell{overflow:visible}
.t-grid-edit-row td{text-overflow:clip}
.t-grid-header-wrap,.t-grid-footer-wrap{position:relative;overflow:hidden;width:100%;zoom:1;border-style:solid;border-width:0 1px 0 0}
div.t-grid-header,div.t-grid-footer{padding-right:17px;/* width of scrollbar. may vary across operating systems. can be calculated. */zoom:1;border-bottom-width:1px;border-bottom-style:solid}
div.t-grid-header .t-header{border-bottom-width:0}
.t-grid-content{position:relative;overflow:auto;overflow-x:auto;overflow-y:scroll;width:100%;zoom:1}
.t-grid-header table,.t-grid-content table,.t-grid-footer table{table-layout:fixed}
* html .t-grid-header table,* html .t-grid-content table{width:auto}
*+html .t-grid-header table,*+html .t-grid-content table{width:auto}
.t-grid-toolbar{border-width:1px 0 0;border-style:solid}
.t-grid-header .t-header:first-child,.t-grid tbody td:first-child,.t-grid tfoot td:first-child{border-left-width:0}
/* Grid ::paging */.t-grid-pager{padding:.2em .6em;line-height:1.8em;overflow:auto;border-width:1px 0 0;border-style:solid}
.t-grid-pager:first-child,.t-grouping-header+.t-grid-pager,.t-grid-toolbar:first-child,.t-grouping-header+.t-grid-toolbar{border-width:0 0 1px}
* html .t-grid-pager input{vertical-align:middle}
*+html .t-grid-pager input{vertical-align:middle}
.t-grid .t-pager,.t-grid .t-status,.t-grid .t-status-text,.t-pager .t-numeric,.t-pager .t-page-i-of-n,.t-pager .t-link,.t-pager span,.t-pager input,.t-pager .t-page-size,.t-grouping-row p{display:inline-block;*display:inline;zoom:1;vertical-align:middle}
.t-pager .t-page-size{line-height:1.2em}
.t-footer-template td{border-width:1px 0 0 1px;border-style:solid}
.t-group-footer td{border-width:1px 0;border-style:solid}
.t-grid-footer{border-style:solid;border-width:1px 0 0}
.t-grid-footer td{border-top-width:0}
.t-grid .t-status{float:left;margin:-.2em .6em -.2em -.6em;padding:.2em .6em;height:1.85em;border-right-width:1px;border-right-style:solid}
.t-grid .t-pager{float:left;cursor:default}
.t-grid .t-status-text{float:right;margin-right:.2em}
.t-pager .t-link{text-decoration:none;padding:1px;margin-top:.2em;border-width:0;line-height:16px}
.t-pager .t-state-active,.t-pager .t-state-hover{padding:0;border-width:1px;border-style:solid;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}
.t-pager span,.t-pager .t-link{vertical-align:top}
.t-pager .t-numeric,.t-pager .t-page-i-of-n{margin:0 7px;vertical-align:top}
.t-numeric .t-link,.t-numeric .t-state-active{margin-top:0;padding:0 5px;line-height:22px;vertical-align:top}
.t-numeric .t-state-active,.t-numeric .t-state-hover{padding:0 4px;line-height:20px}
.t-page-i-of-n input{width:2em;vertical-align:baseline;font-size:1em}
.t-grid-pager .t-status .t-icon{vertical-align:top;margin-top:3px}
/* Grid ::filtering */.t-grid-filter{float:right;height:18px;padding:.3em .2em;position:relative;display:inline-block;*display:inline;zoom:1;margin:-1.8em -.6em -.3em 3px}
.t-grid-filter .t-icon{vertical-align:top}
.t-grid .t-animation-container{position:absolute}
.t-grid .t-filter-options{position:absolute;border-width:1px;border-style:solid;padding:3px;width:148px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}
.t-filter-options .t-filter-help-text,.t-filter-options select,.t-filter-options input,.t-filter-options .t-button,.t-filter-options .t-datepicker{display:block;margin-bottom:4px}
.t-filter-options select{width:148px}
.t-filter-options input{width:142px}
.t-filter-options .t-datepicker{width:100%}
.t-filter-options .t-filter-button{margin-bottom:0}
/* Grid ::grouping */.t-grouping-row .t-icon{margin:0 4px}
.t-grouping-row p{padding:0 .6em;margin-left:-.6em}
.t-grid .t-group-cell+td,.t-grid .t-hierarchy-cell+td{border-left-width:0}
.t-grid .t-group-col,.t-grid .t-hierarchy-col{width:30px}
.t-grouping-header{border-bottom-width:1px;border-bottom-style:solid}
.t-grouping-header,.t-grouping-dropclue{height:24px;line-height:24px}
.t-grouping-dropclue{position:absolute;width:6px}
.t-grouping-header .t-group-indicator{display:inline-block;*display:inline;zoom:1;border-width:1px;border-style:solid;line-height:1.5em;padding:.15em .15em .15em .4em;margin:0 3px;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}
.t-grouping-header .t-link{text-decoration:none;display:inline-block;*display:inline;zoom:1;line-height:normal;padding:0;border-style:none}
.t-grouping-header .t-button{padding:0;border:0;background:transparent;line-height:1}
.t-grouping-header .t-link .t-icon{margin:0 0 0 -3px}
.t-grouping-header .t-button .t-icon{margin:0 0 0 3px}
.t-grouping-header a,.t-grouping-header .t-button{display:inline-block;*display:inline;zoom:1;vertical-align:middle}
/* Grid ::editing */.t-dirty{width:0;height:0;vertical-align:top;position:absolute;padding:0;margin:-0.45em 0 0 -0.6em;overflow:hidden;border-width:3px;border-style:solid;border-color:#f00 transparent transparent #f00}
* html .t-dirty{border-color:#f00 pink pink #f00;filter:chroma(color=pink)}
.t-grouping-header,.t-grid-toolbar{cursor:default;margin:0;padding:.25em}
.t-grid .t-edit-container{padding:0}
.t-edit-form{padding:0;margin:0}
.t-grid-edit-row .t-edit-form td{border-bottom-width:0}
.t-grid-edit-row .text-box,.t-grid-edit-row .t-numerictextbox,.t-grid-edit-row .t-datepicker{vertical-align:middle;width:5em;max-width:90%;min-width:90%;/* IE8 calculates width:90% wrong,so we have to trick it */margin:-.4em -.3em -.15em}
.t-grid-edit-row .t-dropdown,.t-grid-edit-row .t-combobox{width:5em;max-width:90%;min-width:90%;/* IE8 calculates width:90% wrong,so we have to trick it */line-height:normal;margin:-.1em -.3em -.45em}
* html .t-grid .text-box{width:90%}
.t-edit-form-container{position:relative}
.t-grid .field-validation-error{display:block}
.t-grid .input-validation-error{border-style:ridge;border-color:#f00;background-color:#ffc0cb}
.t-grid-toolbar .t-button{vertical-align:middle}
.t-grid-actions{display:inline-block}
* html .t-grid-actions{display:inline;zoom:1;vertical-align:bottom}
*+html .t-grid-actions{display:inline;zoom:1;vertical-align:bottom}
.t-grid .t-button,.t-edit-form .t-button{margin:0 .2em}
.t-grid tbody .t-button{min-width:64px;/*main setting*/}
.t-grid tbody button.t-button,#ie8#skips{min-width:78px;/*+14 for buttons,except IE8*/}
*+html .t-grid tbody a.t-button{min-width:62px;/*-2 for links for IE7*/}
html body div.t-grid tbody .t-button-icon{min-width:0;width:auto}
.t-detail-row{position:relative}
.t-grid .t-detail-cell{overflow:visible}
/* Grid ::resizing */.t-grid-resize-indicator{position:absolute;width:2px;background-color:#aaa}
.t-grid .t-resize-handle{cursor:col-resize;position:absolute;height:25px}
/* ComboBox & Drop-down*/.t-combobox,.t-dropdown,.t-selectbox{display:inline-block;*display:inline;zoom:1;position:relative;overflow:hidden;white-space:nowrap;width:150px;border-width:0}
*+html .t-combobox{overflow:visible}
/*positions icon properly*/* html .t-combobox{overflow:visible}
.t-dropdown-wrap,.t-picker-wrap{position:relative;display:block;cursor:default}
.t-picker-wrap{padding:0 25px 0 0}
.t-dropdown-wrap{padding-right:16px;/* icon width*/border-width:1px;border-style:solid}
.t-combobox>.t-dropdown-wrap{padding-right:22px;/* icon width+input paddings,except IE6 */}
* html .t-combobox .t-dropdown-wrap{height:20px}
* html .t-picker-wrap{height:20px;padding-right:20px}
.t-picker-wrap .t-input,.t-combobox .t-input{vertical-align:top;width:100%}
.t-dropdown .t-input,.t-combobox .t-input,.t-selectbox .t-input{outline:0;border-width:0}
.t-dropdown .t-input,.t-selectbox .t-input{background:transparent}
/*removes excessive spacing in IE6-7*/*+html .t-combobox .t-input{margin:-1px 0}
* html .t-combobox .t-input{margin:-1px 0}
* html{position:absolute;top:0}
.t-picker-wrap .t-select,.t-dropdown-wrap .t-select{text-decoration:none;vertical-align:top;display:inline-block;*display:inline;zoom:1;cursor:default;position:absolute;/* icon positioning */top:0;right:0}
* html .t-picker-wrap .t-select,* html .t-dropdown-wrap .t-select{top:1px;right:1px}
.t-combobox .t-select{border-width:0 0 0 1px;border-style:solid;border-color:inherit;/* will be skin-related,inherit does not work in ie7- */}
.t-combobox .t-icon{margin-top:1px}
.t-dropdown .t-select,.t-selectbox .t-select{border:0;text-decoration:none;font:inherit;color:inherit;overflow:hidden;cursor:default}
.t-dropdown .t-input,.t-selectbox .t-input{overflow:hidden;display:block;text-overflow:ellipsis;padding:.2em 0 .2em 3px}
.t-picker-wrap .t-select,.t-dropdown-wrap .t-select{position:absolute;right:0;top:0}
.t-picker-wrap .t-icon{vertical-align:top;margin-top:3px}
.t-dropdown-wrap .t-icon{vertical-align:top;margin-top:2px}
.t-combobox .t-input{height:18px;line-height:18px;padding:1px 3px;border:0;margin:0}
.t-picker-wrap .t-select,.t-dropdown-wrap .t-select{height:20px;line-height:20px}
.t-popup{border-width:1px;border-style:solid}
.t-popup .t-item{padding:1px 5px 1px 3px;cursor:default}
/* Calendar */.t-calendar{display:inline-block;*display:inline;zoom:1;width:203px;position:relative;overflow:hidden}
.t-calendar .t-link{text-decoration:none}
.t-calendar .t-action-link{text-decoration:underline}
.t-calendar .t-header{padding:.4em 0;text-align:center;position:relative;zoom:1}
.t-calendar .t-nav-prev,.t-calendar .t-nav-next{position:absolute;top:.3em}
.t-calendar .t-nav-prev{left:1%}
.t-calendar .t-nav-next{right:1%}
.t-calendar .t-content{text-align:right;width:100%;height:169px;table-layout:fixed;border-style:none;margin:0;padding:0}
.t-calendar .t-animation-container .t-content{height:100%}
.t-calendar .t-nav-fast{display:inline-block;*display:inline;zoom:1;width:75%}
.t-calendar .t-nav-fast .t-icon{vertical-align:top}
.t-calendar th{border-bottom-style:solid;border-bottom-width:1px;font-weight:normal;cursor:default}
.t-calendar td{cursor:pointer;padding:1px}
.t-calendar .t-state-focus{border-width:1px;border-style:dotted;padding:0}
.t-calendar .t-content .t-link{display:block;overflow:hidden;position:relative}
.t-calendar th,.t-calendar .t-content .t-link{padding:.25em .45em .3em .1em}
.t-calendar .t-meta-view .t-link{padding:.25em 0 .3em;text-align:center}
/* Date/Time Pickers */.t-timepicker,.t-datetimepicker,.t-datepicker{border:0;white-space:nowrap;width:8.5em}
.t-datetimepicker{width:13em}
div.t-timepicker,div.t-datetimepicker,div.t-datepicker{background:none transparent;/* don't allow t-widget to add background-color */
}
.t-datetimepicker .t-picker-wrap
{
padding-right: 44px;
}
* html .t-datetimepicker .t-picker-wrap { padding-right: 40px; }
.t-datetimepicker .t-icon-calendar
{
margin-right: 3px;
}
.t-picker-wrap .t-icon
{
cursor: pointer;
}
.t-state-disabled .t-picker-wrap .t-icon
{
cursor: default;
}
.t-timepicker,
.t-datepicker,
.t-datetimepicker
{
display: inline-block;
*display: inline;
zoom: 1;
vertical-align: top;
}
.t-picker-wrap .t-input
{
margin: 0;
}
.t-iframe-overlay
{
position: absolute;
width: 100%;
border: 0;
top: 0;
left: 0;
filter: alpha(opacity=0);
}
.t-time-popup .t-item
{
padding: 1px 3px;
}
/* TreeView */
div.t-treeview
{
/* don't allow t-widget to add border or background */border-width:0;background:0;white-space:nowrap;overflow:auto}
.t-treeview .t-item{padding:0 0 0 16px;margin:0;border-width:0;position:static;top:auto;display:block}
.t-treeview .t-group,.t-treeview .t-content{list-style-type:none;background:0;margin:0;padding:0}
.t-treeview .t-animation-container{height:auto!important}
.t-treeview .t-icon,.t-treeview .t-image,.t-treeview .t-sprite,.t-treeview .t-in{display:inline-block;*display:inline;zoom:1;vertical-align:top}
.t-treeview .t-plus,.t-treeview .t-minus,.t-treeview .t-plus-disabled,.t-treeview .t-minus-disabled{margin-left:-16px;margin-top:2px;float:left;/* required for Opera */*float:none;/* IE6 does not like it as node text wraps */cursor:pointer}
.t-treeview .t-plus-disabled,.t-treeview .t-minus-disabled{cursor:default}
.t-treeview .t-sprite,.t-treeview .t-image{margin-right:3px}
.t-treeview .t-in{margin:1px 0;padding:2px 4px 2px 3px;text-decoration:none;line-height:16px;margin-left:2px}
.t-treeview span.t-in{cursor:default}
.t-treeview .t-state-hover,.t-treeview .t-state-selected{padding:1px 3px 1px 2px;border-width:1px;border-style:solid;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}
.t-treeview .t-drop-clue{width:80px;visibility:hidden;height:5px;position:absolute;margin-top:-3px;z-index:10000;background-color:transparent;background-repeat:no-repeat}
/* TreeView ::node lines */.t-treeview-lines .t-top,.t-treeview-lines .t-mid,.t-treeview-lines .t-bot{background-repeat:no-repeat;margin-left:-16px;padding-left:16px}
.t-treeview-lines .t-top{background-position:-91px 0}
.t-treeview-lines .t-bot{background-position:-69px -22px}
.t-treeview-lines .t-mid{background-position:-47px -44px}
.t-treeview-lines .t-last .t-top{background-position:-25px -66px}
.t-treeview-lines .t-group .t-last .t-bot{background-position:-69px -22px}
.t-treeview-lines .t-item{background-repeat:no-repeat}
.t-treeview-lines .t-first{background-repeat:no-repeat;background-position:0 16px}
/* NumericTextBox */div.t-numerictextbox{display:inline-block;*display:inline;zoom:1;position:relative;vertical-align:middle;white-space:nowrap;border:0;background:transparent}
.t-numerictextbox .t-input /*alignment of arrows in WebKit*/{margin:0}
.t-formatted-value{position:absolute;padding:3px 4px 2px 3px}
.t-numerictextbox .t-icon{margin-left:-16px}
.t-numerictextbox .t-link{border-style:none;display:inline-block;*display:inline;zoom:1}
.t-numerictextbox .t-arrow-up{vertical-align:top;margin-top:1px;height:10px}
.t-numerictextbox .t-arrow-down{vertical-align:bottom;margin-bottom:1px;height:11px}
/* ColorPicker */.t-colorpicker{display:inline-block;*display:inline;zoom:1;vertical-align:middle}
.t-colorpicker .t-tool-icon{display:inline-block;*display:inline;zoom:1;vertical-align:top;padding:2px 3px;font-size:0;line-height:0}
.t-colorpicker .t-selected-color{display:block;height:16px;width:16px;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}
.t-colorpicker .t-icon{vertical-align:middle;margin-top:2px}
.t-colorpicker-popup{line-height:0;width:156px}
.t-colorpicker-popup .t-reset{padding:.25em;margin:0;display:inline-block;*display:inline;zoom:1}
.t-colorpicker-popup .t-item{float:left;display:block;overflow:hidden;width:12px;height:12px;font-size:0;padding:0;margin:1px 2px 2px 1px}
.t-colorpicker-popup .t-item div{width:100%;height:100%;margin:1px}
.t-colorpicker-popup .t-state-selected{margin:0 1px 1px 0;border:1px solid #000}
/* Editor */.t-editor{border-width:1px;border-style:solid;border-collapse:separate;height:250px;font-size:100%;table-layout:fixed;vertical-align:top;width:100%}
.t-editor .t-editor-toolbar-wrap{border:0;padding:0}
.t-editor-toolbar{margin:0;padding:.1em 0;list-style-type:none;cursor:default;line-height:1.3em}
.t-editor-toolbar li{display:inline;/* would have been inline-block,if not for IE */vertical-align:middle}
.t-editor-toolbar .t-editor-dropdown,.t-editor-toolbar .t-editor-combobox,.t-editor-toolbar .t-editor-selectbox,.t-editor-toolbar .t-editor-colorpicker{margin-right:2px}
.t-editor-toolbar .t-separator{border-width:0 1px 0 0;border-style:solid;padding:0 0 0 1px;font-size:1.3em;margin:0 .15em;position:relative;top:1px}
.t-editor-toolbar .t-break{display:block;height:1px;line-height:0;font-size:0}
.t-editor-toolbar .t-dropdown,.t-editor-toolbar .t-combobox,.t-editor-toolbar .t-selectbox,.t-editor-toolbar .t-colorpicker{vertical-align:middle}
.t-editor-button .t-tool-icon{vertical-align:middle;width:22px;height:22px;margin:1px}
.t-editor-colorpicker .t-tool-icon{padding:17px 3px 2px}
.t-editor-colorpicker .t-icon{border-style:solid;border-color:#ccc;border-width:0 0 0 1px}
.t-editor-colorpicker .t-selected-color{height:3px}
.t-editor-combobox .t-input{height:20px;line-height:20px}
.t-editor-combobox .t-select{height:22px;line-height:22px}
.t-bold{background-position:-22px 0}
.t-italic{background-position:-44px 0}
.t-underline{background-position:-66px 0}
.t-strikethrough{background-position:-88px 0}
.t-justifyLeft{background-position:-110px 0}
.t-justifyCenter{background-position:-132px 0}
.t-justifyRight{background-position:-154px 0}
.t-justifyFull{background-position:-176px 0}
.t-insertOrderedList{background-position:-198px 0}
.t-insertUnorderedList{background-position:-220px 0}
.t-createLink{background-position:-242px 0}
.t-unlink{background-position:-264px 0}
.t-insertImage{background-position:-286px 0}
.t-foreColor .t-tool-icon{background-position:-308px -2px}
.t-backColor .t-tool-icon{background-position:-330px -2px}
.t-indent{background-position:-352px 0}
.t-outdent{background-position:-374px 0}
/* default tool widths */.t-fontName{width:110px}
.t-fontSize{width:124px}
.t-formatBlock{width:147px}
.t-editor-button .t-state-hover,.t-editor-button .t-state-active{vertical-align:middle;border-width:1px;border-style:solid;margin:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}
.t-editor-button .t-state-disabled{opacity:.3;filter:alpha(opacity=30)}
.t-editor .t-editable-area{outline:0;height:100%;width:100%;border-width:1px;border-style:solid}
.t-editor .t-content{height:100%;width:100%;display:block;padding:0;margin:0;border:0}
.t-editor iframe.t-content{display:inline;vertical-align:top;/*fixes missing top border caused by the inline display*/}
.t-editor .t-raw-content{border:0;margin:0;padding:0;font-size:inherit;font-family:Consolas,"Courier New",monospace}
.t-editor-dialog{padding:1em}
.t-editor-dialog ol{margin:0;padding:0;list-style:none}
.t-form-text-row,.t-form-checkbox-row{padding-bottom:1em}
.t-form-text-row label{display:inline-block;*display:inline;zoom:1;width:7em;text-align:right;padding-right:.5em}
.t-form-checkbox-row input{margin-left:7em;font-size:inherit;padding:0}
.t-form-checkbox-row label{padding-left:.3em}
.t-form-checkbox-row input,.t-form-checkbox-row label,.t-form-text-row label .t-form-text-row input,.t-form-text-row select{vertical-align:middle}
.t-form-text-row input,.t-form-text-row select{width:20em}
.t-editor-dialog .t-button-wrapper{padding-top:.5em;text-align:right}
.t-editor-dialog .t-button{display:inline-block;*display:inline;zoom:1}
/* drag&drop module */.t-drag-clue{border-width:1px;border-style:solid;font-size:.9em;padding:.05em .15em;position:absolute;z-index:10003;white-space:nowrap;cursor:default;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}
.t-drag-status{margin-right:4px;vertical-align:top;margin-top:-1px}
.t-reorder-cue{position:absolute;width:1px;overflow:visible}
.t-reorder-cue .t-icon{width:8px;height:4px;position:absolute;left:-4px}
.t-reorder-cue .t-arrow-down{top:-4px;background-position:-20px -182px}
.t-reorder-cue .t-arrow-up{bottom:-4px;background-position:-20px -166px}
/* Slider */div.t-slider{position:relative;border-width:0;background-color:transparent;-khtml-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}
.t-slider-vertical{width:22px;height:200px;/* default height */}
.t-slider-horizontal{display:inline-block;height:22px;width:200px;/* default width */}
*+html .t-slider-horizontal{display:inline;zoom:1}
* html .t-slider-horizontal{display:inline;zoom:1}
.t-slider-wrap{width:100%;height:100%}
.t-slider .t-button,.t-grid .t-slider .t-button{position:absolute;top:0;min-width:0;width:20px;height:20px;margin:0;padding:0;outline:0}
.t-slider .t-button .t-icon{vertical-align:top;margin-top:2px}
.t-state-disabled .t-slider-wrap{opacity:.6;filter:alpha(opacity=60)}
.t-state-disabled .t-slider-wrap .t-slider-items{color:#333}
.t-slider .t-button-decrease{left:0}
.t-slider-vertical .t-button-decrease,.t-grid .t-slider-vertical .t-button-decrease{top:auto;bottom:0}
.t-slider .t-button-increase{right:0}
.t-slider .t-icon{cursor:pointer}
.t-state-disabled .t-button,.t-state-disabled .t-draghandle,.t-state-disabled .t-slider-wrap .t-icon,.t-state-disabled .t-slider .t-icon{cursor:default}
*+html .t-slider .t-icon{margin-top:2px}
* html .t-slider .t-icon{margin-top:2px}
.t-slider-track,.t-slider-selection{position:absolute;margin:0;padding:0}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{height:6px;top:50%;left:0;margin-top:-3px;background-repeat:repeat-x}
.t-slider-horizontal .t-slider-track{border-width:0 1px;border-style:solid;background-position:0 -464px}
.t-slider-horizontal .t-slider-selection{background-position:0 -470px}
.t-slider-horizontal .t-slider-buttons .t-slider-track{left:27px}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{width:6px;left:50%;bottom:0;margin-left:-3px;background-repeat:repeat-y}
.t-slider-vertical .t-slider-track{border-width:1px 0;border-style:solid;background-position:0 0}
.t-slider-vertical .t-slider-selection{background-position:-6px 0}
.t-slider-vertical .t-slider-buttons .t-slider-track{bottom:27px}
.t-draghandle{position:absolute;background-repeat:no-repeat;background-color:transparent;text-indent:-3333px;text-decoration:none;text-align:center;overflow:hidden;cursor:pointer}
.t-slider-horizontal .t-draghandle{top:-7px;width:11px;height:20px}
.t-slider-vertical .t-draghandle{left:-7px;width:20px;height:11px}
.t-slider-horizontal .t-draghandle,.t-state-disabled.t-slider-horizontal a.t-draghandle,.t-state-disabled .t-slider-horizontal a.t-draghandle{background-position:0 -368px}
.t-slider-horizontal .t-draghandle:hover,.t-slider-horizontal .t-draghandle:focus{background-position:0 -400px}
.t-slider-horizontal a.t-draghandle.t-state-active{background-position:0 -432px}
.t-slider-vertical .t-draghandle,.t-state-disabled.t-slider-vertical a.t-draghandle,.t-state-disabled .t-slider-vertical a.t-draghandle{background-position:-32px -368px}
.t-slider-vertical .t-draghandle:hover,.t-slider-vertical .t-draghandle:focus{background-position:-32px -400px}
.t-slider-vertical a.t-draghandle.t-state-active{background-position:-32px -432px}
/* float clearing start */.t-slider-items{display:inline-block}
.t-slider-items{display:block}
.t-slider-items:after{content:"";display:block;clear:both;height:0;visibility:hidden}
/* float clearing end */.t-slider-buttons .t-slider-items{margin-left:27px}
.t-slider-horizontal .t-slider-items{height:100%}
.t-slider-vertical .t-slider-items{padding-top:1px}
.t-slider-vertical .t-slider-buttons .t-slider-items{padding-top:0}
.t-slider-vertical .t-slider-buttons .t-slider-items{margin:0;padding-top:28px}
.t-slider .t-tick{position:relative;margin:0;padding:0;background-color:transparent;background-repeat:no-repeat;background-position:center center;cursor:default}
.t-slider-horizontal .t-tick{float:left;text-align:center;height:100%}
/* fixes ticks position and removes spacing between them in IE6-7 */*+html .t-slider-vertical .t-tick{float:left;clear:left;width:100%}
* html .t-slider-vertical .t-tick{float:left;clear:left;width:100%}
/*ticks backgrounds*/.t-slider-horizontal .t-tick{background-position:center -94px}
.t-slider-horizontal .t-slider-topleft .t-tick{background-position:center -124px}
.t-slider-horizontal .t-slider-bottomright .t-tick{background-position:center -154px}
.t-slider-horizontal .t-tick-large{background-position:center -4px}
.t-slider-horizontal .t-slider-topleft .t-tick-large{background-position:center -34px}
.t-slider-horizontal .t-slider-bottomright .t-tick-large{background-position:center -64px}
.t-slider-vertical .t-tick{background-position:-94px center}
.t-slider-vertical .t-slider-topleft .t-tick{background-position:-124px center}
.t-slider-vertical .t-slider-bottomright .t-tick{background-position:-154px center}
.t-slider-vertical .t-tick-large{background-position:-4px center}
.t-slider-vertical .t-slider-topleft .t-tick-large{background-position:-34px center}
.t-slider-vertical .t-slider-bottomright .t-tick-large{background-position:-64px center}
.t-slider-horizontal .t-first{background-position:0 -4px}
.t-slider-horizontal .t-slider-topleft .t-first{background-position:0 -34px}
.t-slider-horizontal .t-slider-bottomright .t-first{background-position:0 -64px}
.t-slider-horizontal .t-last{background-position:100% -4px}
.t-slider-horizontal .t-slider-topleft .t-last{background-position:100% -34px}
.t-slider-horizontal .t-slider-bottomright .t-last{background-position:100% -64px}
.t-slider-vertical .t-first{background-position:-4px 100%}
.t-slider-vertical .t-slider-topleft .t-first{background-position:-34px 100%}
.t-slider-vertical .t-slider-bottomright .t-first{background-position:-64px 100%}
.t-slider-vertical .t-last{background-position:-4px 0}
.t-slider-vertical .t-slider-topleft .t-last{background-position:-34px 0}
.t-slider-vertical .t-slider-bottomright .t-last{background-position:-64px 0}
.t-slider-vertical .t-tick{text-align:right}
.t-slider-vertical .t-slider-topleft .t-tick{text-align:left}
.t-slider .t-label{position:absolute;white-space:nowrap}
.t-slider-horizontal .t-label{left:0;width:100%}
.t-slider-horizontal .t-first .t-label{left:-50%}
.t-slider-horizontal .t-last .t-label{left:auto;right:-50%}
.t-slider-horizontal .t-label{bottom:-1.2em}
.t-slider-horizontal .t-slider-topleft .t-label{top:-1.2em}
.t-slider-vertical .t-label{left:120%;display:block;text-align:left}
.t-slider-vertical .t-last .t-label{top:-0.5em}
.t-slider-vertical .t-first .t-label{bottom:-0.5em}
.t-slider-vertical .t-slider-topleft .t-label{left:auto;right:120%}
/* Tooltip */.t-tooltip{position:absolute;border-width:1px;border-style:solid;padding:4px 5px;background-repeat:repeat-x;z-index:10002;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;min-width:10px;/*slider tooltip only*/text-align:center;/*slider tooltip only*/}
.t-callout{position:absolute}
.t-callout-n,.t-callout-s{width:9px;height:6px}
.t-callout-w,.t-callout-e{width:6px;height:9px}
.t-callout-n{top:-6px;left:50%;margin-left:-4px;background-position:-64px -368px}
.t-callout-w{left:-6px;top:50%;margin-top:-4px;background-position:-64px -384px}
.t-callout-s{top:100%;left:50%;margin-left:-4px;background-position:-64px -400px}
.t-callout-e{left:100%;top:50%;margin-top:-4px;background-position:-64px -416px}
/* Splitter */.t-splitter{position:relative;height:300px}
.t-splitter .t-pane{overflow:hidden}
.t-splitter .t-scrollable{overflow:auto}
.t-splitter .t-pane-loading{position:absolute;left:50%;top:50%;margin:-8px 0 0 -8px}
.t-ghost-splitbar,.t-splitbar{position:absolute;border-style:solid;font-size:0}
.t-splitter .t-ghost-splitbar-horizontal,.t-splitter .t-splitbar-horizontal{top:0;width:5px;border-width:0 1px;background-repeat:repeat-y}
.t-ghost-splitbar-vertical,.t-splitbar-vertical{left:0;height:5px;border-width:1px 0;background-repeat:repeat-x}
.t-splitbar-draggable-horizontal{cursor:w-resize}
.t-splitbar-draggable-vertical{cursor:n-resize}
.t-splitbar .t-resize-handle{display:none}
.t-restricted-size-horizontal,.t-restricted-size-vertical{background-color:#f00}
.t-splitbar-horizontal .t-icon{width:5px;height:21px;position:absolute;top:50%;margin-top:-10px}
.t-collapse-prev,.t-collapse-next,.t-expand-prev,.t-expand-next{cursor:pointer}
.t-splitbar-horizontal .t-collapse-prev{margin-top:-31px}
.t-splitbar-horizontal .t-collapse-next{margin-top:11px}
.t-splitbar-vertical .t-icon{height:5px;width:21px;position:absolute;left:50%;margin-left:-10px}
.t-splitbar-vertical .t-collapse-prev{margin-left:-31px}
.t-splitbar-vertical .t-collapse-next{margin-left:11px}
.t-splitbar-draggable-vertical .t-resize-handle,.t-splitbar-draggable-horizontal .t-resize-handle{display:inline-block;*display:inline;zoom:1}
.t-splitbar-horizontal{background-position:5px 0}
.t-splitbar-horizontal-hover{background-position:-12px 0}
.t-splitbar-horizontal-active,.t-ghost-splitbar-horizontal{background-position:-17px 0}
.t-restricted-size-horizontal{background-position:-22px 0}
.t-splitbar-horizontal .t-resize-handle{background-position:-10px -496px}
.t-splitbar-horizontal-hover .t-resize-handle{background-position:-10px -517px}
.t-splitbar-horizontal .t-collapse-prev,.t-splitbar-horizontal .t-expand-next{background-position:0 -496px}
.t-splitbar-horizontal-hover .t-collapse-prev,.t-splitbar-horizontal-hover .t-expand-next{background-position:0 -517px}
.t-splitbar-horizontal .t-collapse-next,.t-splitbar-horizontal .t-expand-prev{background-position:-5px -496px}
.t-splitbar-horizontal-hover .t-collapse-next,.t-splitbar-horizontal-hover .t-expand-prev{background-position:-5px -517px}
.t-splitbar-vertical{background-position:0 5px}
.t-splitbar-vertical-hover{background-position:0 -476px}
.t-splitbar-vertical-active,.t-ghost-splitbar-vertical{background-position:0 -481px}
.t-restricted-size-vertical{background-position:0 -486px}
.t-splitbar-vertical .t-resize-handle{background-position:-16px -496px}
.t-splitbar-vertical-hover .t-resize-handle{background-position:-16px -501px}
.t-splitbar-vertical .t-collapse-prev,.t-splitbar-vertical .t-expand-next{background-position:-16px -506px}
.t-splitbar-vertical-hover .t-collapse-prev,.t-splitbar-vertical-hover .t-expand-next{background-position:-16px -517px}
.t-splitbar-vertical .t-collapse-next,.t-splitbar-vertical .t-expand-prev{background-position:-16px -511px}
.t-splitbar-vertical-hover .t-collapse-next,.t-splitbar-vertical-hover .t-expand-prev{background-position:-16px -522px}
/* Upload */html .t-upload{position:relative;/*possibly unneeded as the style is applied to an inner element as well*/border-width:0;background:0}
.t-dropzone,.t-upload-files{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}
.t-dropzone em,.t-upload-button{vertical-align:middle}
*+html .t-dropzone em,*+html .t-upload-button{vertical-align:baseline}
* html .t-dropzone em,* html .t-upload-button{vertical-align:baseline}
.t-dropzone{border-style:solid;border-width:0;padding:4px;background-color:transparent}
.t-dropzone em{margin-left:.6em;visibility:hidden}
.t-dropzone-active{border-width:1px;padding:3px}
.t-dropzone-active em{visibility:visible}
.t-upload-button{width:86px;position:relative;direction:ltr;overflow:hidden!important;/* important required by IE7 */}
.t-upload-button input{font:200px monospace!important;/* The input font size and family are critical for the operation of the Upload */opacity:0;filter:alpha(opacity=0);position:absolute;padding:0;margin:0;cursor:pointer;right:0;top:0;z-index:1}
.t-state-disabled .t-upload-button input{cursor:default}
.t-upload-files{border-style:solid;border-width:1px;margin:.2em 0 0;padding:.3em .7em .5em;line-height:1.9em}
.t-upload-files .t-button{position:relative;top:1px;margin-left:8px;padding-top:0;padding-bottom:0;font-size:84%}
*+html .t-upload-files .t-button{line-height:1}
/*IE7*/* html .t-upload-files .t-button{line-height:1}
/*IE6*/.t-upload .t-delete,.t-upload .t-cancel,.t-upload .t-retry{height:8px;vertical-align:baseline}
.t-upload .t-delete,.t-upload .t-cancel{width:7px;background-position:-5px -292px}
.t-retry{background-position:-66px -228px;width:11px}
.t-success{background-position:-64px -240px}
.t-fail{background-position:-64px -256px}
.t-filename{position:relative;display:inline-block;min-width:120px;max-width:200px;vertical-align:middle;zoom:1;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;white-space:nowrap}
* html .t-filename{width:200px;display:inline}
*+html .t-filename{display:inline}
.t-progress,.t-progress-status{position:absolute;bottom:-2px;left:0;width:118px;height:2px;border-style:solid;border-width:1px;background-repeat:repeat-x;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}
.t-progress-status{left:-1px;bottom:-1px;width:50%}
.t-upload-selected{min-width:86px;box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;margin:3px 0 0}
*+html .t-upload-selected{min-width:100px}
/* ImageBrowser */.t-toolbar-wrap .t-dropzone em,.t-toolbar-wrap .t-upload-files{display:none}
.t-toolbar-wrap .t-dropzone{border:0;padding:0;background-color:transparent}
.t-search-wrap{float:right;width:auto;position:relative;padding:0}
.t-search-wrap label{position:absolute;top:0;left:4px;line-height:20px;font-style:italic}
.t-search-wrap input.t-input{width:158px;padding-left:0;padding-right:0}
.t-search{background-position:-64px -176px}
.t-search-wrap .t-search{position:absolute;top:1px;right:2px}
.t-breadcrumbs{float:left;position:relative;width:560px}
.t-breadcrumbs-wrap{position:absolute;z-index:1;top:0;left:0;padding-left:5px;line-height:18px}
html input.t-breadcrumbs-input{width:100%;padding-left:2px;font-family:inherit}
.t-breadcrumbs .t-link,.t-breadcrumbs-wrap .t-icon{text-decoration:none;vertical-align:middle;margin-top:0}
.t-breadcrumbs .t-link:hover{text-decoration:underline}
.t-imagebrowser .t-breadcrumbs .t-first{text-decoration:none;cursor:default}
.t-imagebrowser .t-toolbar{clear:both;border-style:solid;border-width:1px;margin:8px 0 0;padding:2px 0 3px;background-repeat:repeat-x;line-height:23px;white-space:nowrap;/*required by WebKit*/}
.t-imagebrowser .t-upload{float:left}
.t-imagebrowser .t-upload-button{width:auto;vertical-align:top}
.t-imagebrowser .t-upload .t-icon{vertical-align:bottom}
*+html .t-imagebrowser .t-upload-button,*+html .t-imagebrowser .t-upload .t-icon{vertical-align:baseline;position:relative;top:1px}
* html .t-imagebrowser .t-upload-button,* html .t-imagebrowser .t-upload .t-icon{vertical-align:baseline;position:relative;top:1px}
*+html .t-imagebrowser .t-upload .t-icon{top:2px}
* html .t-imagebrowser .t-upload .t-icon{top:2px}
*+html .t-imagebrowser .t-toolbar .t-button-icon{vertical-align:middle}
* html .t-imagebrowser .t-toolbar .t-button-icon{vertical-align:middle}
.t-addfolder{background-position:-64px -192px}
.t-goup{background-position:-64px -208px}
.t-toolbar .t-state-disabled{opacity:.5;filter:alpha(opacity=50)}
.t-toolbar-wrap{float:left}
.t-tiles-arrange{float:right}
* html .t-tiles-arrange{margin:3px 0 0}
.t-tiles-arrange .t-arrow-down{margin:0 2px 0 3px}
.t-tiles-arrange a{text-decoration:none}
.t-tiles{clear:both;height:390px;border-style:solid;border-width:1px;border-top-width:0;margin:0 0 1.4em;padding:9px;overflow:auto;line-height:1.2}
.t-tile{width:223px;height:88px;overflow:hidden;float:left;border-width:1px;border-style:solid;margin:1px;padding:0 0 4px;cursor:pointer;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}
.t-imagebrowser .t-thumb{float:left;display:inline;width:86px;height:86px;margin:4px 10px 0 4px;-khtml-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}
.t-imagebrowser .t-image{margin:2px 0 0 2px;-moz-box-shadow:1px 1px 3px #aaa;-webkit-box-shadow:1px 1px 3px #aaa;box-shadow:1px 1px 3px #aaa}
.t-imagebrowser .t-folder{width:80px;height:80px;background-position:0 -200px;background-repeat:no-repeat}
.t-goback{background-position:-64px -224px}
.t-imagebrowser .t-loading{margin:35px 0 0 33px}
.t-tile strong,.t-tile input{margin:10px 0 4px;font-weight:normal}
.t-tile strong{float:left;width:120px;overflow:hidden;text-overflow:ellipsis}
.t-tile input{width:100px}
.t-tile em,.t-tile .t-filesize{clear:left;font-weight:normal;font-style:normal}
.t-tile strong,.t-tile input,.t-tile em,.t-tile .t-filesize{display:block}
.t-imagebrowser .t-form-text-row input{width:628px}
/* * html .t-imagebrowser .t-form-text-row input{width:610px}
*+html .t-imagebrowser .t-form-text-row input{width:610px}
*/.t-tile-empty{margin:160px 0 0}
.t-tile-empty .t-dialog-upload{font-weight:bold;font-size:120%}
.t-tile-empty strong{display:block;margin:0 0 .2em;font-size:3em;font-weight:normal}
.t-tile-empty,.t-tile-empty .t-button-wrapper{text-align:center}
.t-touch-scrollbar{position:absolute;display:none;z-index:200000;height:8px;width:8px;border:1px solid #8a8a8a;background-color:#858585;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}
@media only screen and (-webkit-min-device-pixel-ratio:2){.t-touch-scrollbar{height:12px;width:12px;-webkit-border-radius:7px}
}
/* Chart */div.t-chart{border:0;background-color:transparent}

@ -1,68 +0,0 @@
/* Default theme*/.t-widget,.t-input{border-color:#989898;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#fff}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#989898;background:#adadad url('Default/sprite.png') repeat-x 0 -752px}
.t-icon{background-image:url('Default/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Default/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('Default/loading.gif') no-repeat 0 0}
.t-widget,.t-link:link,.t-link:active,.t-link:visited,.t-popup{color:#000}
.t-group,.t-content,.t-editable-area{border-color:#828282;background-color:#fff}
.t-colorpicker .t-arrow-down{border-color:#989898}
.t-separator{border-color:#d8d8d8;background-color:#999}
.t-alt{background-color:#f7f7f7}
.t-state-default{border-color:#828282}
.t-active-filter{background-color:#cdcdcd}
.t-state-hover,.t-state-hover:hover{background-color:#e9e9e9;border-color:#828282}
.t-header .t-state-hover{background-color:#dcdada}
.t-state-active,.t-header .t-state-active{background-color:#fff;border-color:#828282}
.t-state-selected{background-color:#ddd}
.t-state-focused{background-color:#c2c2c2}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#f00;background-color:#ffc0cb}
.t-button{border-color:#828282;color:#333}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:#adadad url('Default/sprite.png') repeat-x 0 -560px}
.t-button:hover{background-position:0 -624px;background-color:#c9c9c9}
.t-state-disabled,.t-state-disabled .t-link,.t-state-disabled .t-button{color:#888}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#aaa;background-color:#eee}
.t-grid-header-wrap,.t-grid-footer-wrap{border-color:#989898}
.t-grid td{border-color:#ddd}
.t-grouping-row td{background:#fff url('Default/sprite.png') repeat-x 0 -48px}
.t-footer-template td{background-color:#eee;border-color:#828282 #eee #fff}
.t-group-footer td,.t-grid-footer{background-color:#eee;border-color:#828282}
.t-grouping-header .t-group-indicator{color:#333;border-color:#ccc}
.t-grouping-dropclue{background:url('Default/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#fff}
.t-treeview .t-drop-clue{background-image:url('Default/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#838383}
.t-panelbar .t-link,.t-panelbar .t-group,.t-panelbar .t-content{border-color:#aaa}
.t-calendar th{border-color:#c5c5c5}
.t-other-month .t-link{color:#898989}
.t-treeview-lines .t-top,.t-treeview-lines .t-mid,.t-treeview-lines .t-bot{background-image:url('Default/treeview-nodes.png')}
.t-rtl .t-treeview-lines .t-top,.t-rtl .t-treeview-lines .t-mid,.t-rtl .t-treeview-lines .t-bot{background-image:url('Default/treeview-nodes-rtl.png')}
.t-treeview-lines .t-item{background-image:url('Default/treeview-line.png')}
.t-treeview-lines .t-last{background-image:none}
.t-editor-button .t-state-hover{border-color:#e2e2e2 #878787 #878787 #e2e2e2;background-color:#c6c6c6}
.t-editor-button .t-state-active{border-color:#767676 #d0d0d0 #d0d0d0 #767676;background-color:#9e9e9e}
/* Slider */.t-slider .t-draghandle{background-image:url('Default/sprite.png');color:#333}
.t-slider-track{border-color:#a5a5a5}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Default/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Default/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Default/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Default/slider-v.gif')}
/* Tooltip */.t-tooltip{background:#adadad 0 -624px repeat-x url('Default/sprite.png')}
.t-callout{background-image:url('Default/sprite.png')}
/* Splitter */.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Default/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Default/sprite-vertical.png')}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#828282}
.t-dropzone-hovered,.t-upload-files{background-color:#e2e2e2}
.t-dropzone em{color:#828282}
.t-progress,.t-progress-status{background-image:url('Default/sprite.png')}
.t-progress{background-position:0 -465px;border-color:#a1a1a1 #b3b3b3 #c8c8c8}
.t-progress-status{background-position:0 -472px;border-color:#989898 transparent #6b6b6b}
/* ImageBrowser */.t-imagebrowser .t-content{background:#f1f1f1}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label{color:#9f9f9f}
.t-tiles{border-color:#e2e3ea;background:#fff}
.t-tile{border-color:#fff;background:0 100px repeat-x url('Default/imagebrowser.png')}
.t-tiles li.t-state-hover{border-color:#989898;background-position:0 0}
.t-tiles li.t-state-selected{border-color:#989898;background-position:0 -100px}
.t-tile .t-folder{background-image:url('Default/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#666}
.t-tile-empty strong{color:#aaa}

@ -1,78 +0,0 @@
/* Forest theme*/.t-widget,.t-input{border-color:#486b23;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#d1deb6}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#486b23;color:#fff;background:#4c7822 url('Forest/sprite.png') repeat-x 0 -752px}
.t-icon{background-image:url('Forest/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Forest/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('Forest/loading.gif') no-repeat 0 0}
.t-widget,.t-link,.t-popup{color:#2b2c20}
.t-header,.t-header .t-link,.t-state-active .t-header .t-state-default .t-link /*nested tabstrips*/{color:#fff}
.t-content,.t-content .t-link,.t-group .t-link{color:#2b2c20}
.t-group,.t-content,.t-editable-area{border-color:#486b23;background-color:#d1deb6}
.t-colorpicker .t-arrow-down{border-color:#486b23}
.t-separator{border-color:#719652;background-color:#4c6d3b}
.t-alt{background-color:#c7d6a7}
.t-state-default{border-color:#486b23}
.t-active-filter{background-color:#60963e}
.t-state-hover,.t-state-hover .t-link,.t-state-selected,.t-state-selected .t-link{color:#fff}
.t-state-hover,.t-state-hover:hover{background-color:#6c9f4f;border-color:#486b23}
.t-state-selected,.t-state-selected .t-state-hover{background-color:#3a5621;border-color:#486b23}
.t-state-focused{background-color:#a7bc75}
.t-state-active{background-color:#d1deb6;border-color:#486b23}
.t-tabstrip .t-state-active .t-link,.t-state-active .t-tabstrip .t-state-active .t-link /*nested tabstrips*/{color:#2b2c20}
.t-group .t-state-hover,.t-group .t-state-selected{color:#fff;background-image:none}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#f00;background-color:#ffc0cb}
.t-button{border-color:#486b23;color:#fff}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:#486c24 url('Forest/sprite.png') repeat-x 0 -560px}
.t-button:hover{background-position:0 -624px;background-color:#4d7924}
.t-state-disabled,.t-state-disabled .t-link,.t-state-disabled .t-button{color:#2a4b17;border-color:#486b23}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#486b23;background-color:#a7bc75}
.t-editor-button .t-state-active{background-color:#527c30}
.t-grid-header-wrap,.t-grid-footer-wrap{border-color:#486b23}
.t-grid td{border-color:#bdcb9e}
.t-grouping-row td{background:#d1deb6 url('Forest/sprite.png') repeat-x 0 -48px}
.t-footer-template td{background-color:#b1c67f;border-color:#3c6716 #b1c67f #b1c67f}
.t-group-footer td{background-color:#b1c67f;border-color:#3c6716}
.t-grid-footer,.t-grid-footer-wrap table{background-color:#b1c67f;border-color:#3c6716}
.t-grouping-header .t-group-indicator{color:#333;border-color:#486B23}
.t-grouping-dropclue{background:url('Forest/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#d1deb6}
.t-treeview .t-drop-clue{background-image:url('Forest/sprite.png');background-position:0 -358px}
.t-panelbar .t-link,.t-panelbar .t-group,.t-panelbar .t-content{border-color:#486b23}
.t-calendar th{background-color:#a6bb74;border-color:#9cb16a}
.t-other-month .t-link{color:#88914b}
.t-state-hover .t-link{color:#fff}
.t-treeview-lines .t-top,.t-treeview-lines .t-mid,.t-treeview-lines .t-bot{background-image:url('Forest/treeview-nodes.png')}
.t-rtl .t-treeview-lines .t-top,.t-rtl .t-treeview-lines .t-mid,.t-rtl .t-treeview-lines .t-bot{background-image:url('Forest/treeview-nodes-rtl.png')}
.t-treeview-lines .t-item{background-image:url('Forest/treeview-line.png')}
.t-treeview-lines .t-last{background-image:none}
.t-window{-moz-box-shadow:0 0 5px 2px #6f855a;-webkit-box-shadow:0 0 5px 2px #6f855a;box-shadow:0 0 5px 2px #6f855a}
.t-editor-button .t-state-hover{border-color:#88ab72 #416926 #416926 #88ab72;background-color:#548231}
.t-editor-button .t-state-active{border-color:#2a4b17 #7f9c6d #7f9c6d #2a4b17;background-color:#446e29}
/*Slider*/.t-slider .t-draghandle{background-image:url('Forest/sprite.png');color:#486b23}
.t-slider-track{border-color:#658843}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Forest/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Forest/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Forest/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Forest/slider-v.gif')}
/*Tooltip*/.t-tooltip{background:#486c24 0 -625px repeat-x url('Forest/sprite.png');color:#fff}
.t-callout{background-image:url('Forest/sprite.png')}
/* Splitter */.t-splitbar-vertical,.t-splitbar-horizontal{background-color:#527f2c}
.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Forest/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Forest/sprite-vertical.png')}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#8aaf64}
.t-dropzone-hovered,.t-upload-files{background-color:#d1deb6}
.t-dropzone em{color:#6b715f}
.t-progress,.t-progress-status{background-image:url('Forest/sprite.png')}
.t-progress{background-position:0 -466px;border-color:#52752e #6c8c49 #83a564}
.t-progress-status{background-position:0 -472px;border-color:#4f722b transparent #193809}
/* ImageBrowser */.t-imagebrowser .t-content{background:#d3e0c2}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label{color:#6b715f}
.t-toolbar .t-upload .t-button{color:#2b2c20}
.t-tiles-arrange{color:#6b715f}
.t-tiles{border-color:#8aaf64;background:#fff}
.t-tile{border-color:#fff;background:0 100px repeat-x url('Forest/imagebrowser.png')}
.t-tiles li.t-state-hover{border-color:#76ad3b;background-position:0 0;color:#2b2c20}
.t-tiles li.t-state-selected{border-color:#8aaf64;background-position:0 -100px;color:#2b2c20}
.t-tile .t-folder{background-image:url('Forest/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#6b715f}
.t-tile-empty strong{color:#8d947f}

@ -1,81 +0,0 @@
/* Hay theme*/.t-widget,.t-input{border-color:#7d7c6f;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#ececd8}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#378909;background:#4eb106 url('Hay/sprite.png') repeat-x 0 -752px}
.t-icon{background-image:url('Hay/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Hay/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('Hay/loading.gif') no-repeat 0 0}
.t-widget,.t-link,.t-popup{color:#333}
.t-header,.t-header .t-link,.t-state-active .t-header .t-state-default .t-link /*nested tabstrips*/{color:#fff}
.t-header .t-group,.t-group .t-link{color:#333}
.t-group,.t-content,.t-editable-area{border-color:#bbb99d;background-color:#ececd8}
.t-colorpicker .t-arrow-down{border-color:#378909}
.t-separator{border-color:#73c335;background-color:#378909}
.t-alt{background-color:#fff}
.t-state-default{border-color:#378909}
.t-active-filter{background-color:#51b200}
.t-state-hover,.t-state-hover .t-link,.t-group .t-state-hover{color:#fff}
.t-state-hover,.t-state-hover:hover{background-color:#6cc41a;border-color:#378909}
.t-state-active{background-color:#ececd8;border-color:#378909}
.t-state-active,.t-state-active .t-link,.t-state-active .t-tabstrip .t-state-active .t-link /*nested tabstrips*/{color:#333}
.t-state-active .t-header,.t-state-active .t-state-hover{color:#fff}
.t-state-selected{background:#4e8e13}
.t-state-focused{background-color:#d2d0b6}
.t-state-selected,.t-state-selected .t-header,.t-state-selected .t-state-hover,.t-state-selected .t-link{color:#fff}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#f00;background-color:#ffc0cb}
.t-button{border-color:#898772;color:#333}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:#e0e2cb url('Hay/sprite.png') repeat-x 0 -560px}
.t-button:hover{background-position:0 -624px;background-color:#bbbe94}
.t-state-disabled,.t-state-disabled .t-link,.t-state-disabled .t-button{color:#999}
.t-header .t-state-disabled,.t-header .t-state-disabled .t-link{color:#d2d2d2;border-color:#5ca136}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#bbb99d;background-color:#dee0c8}
.t-panelbar .t-link{border-color:#333}
.t-grid-header-wrap{border-color:#378909}
.t-grid-footer-wrap{border-color:#bbb99d}
.t-grid td{border-color:#ddd}
.t-grid tr.t-state-hover td{border-color:#6CC41A}
.t-grid tr.t-state-selected td{border-color:#378909}
.t-grouping-row td{background:#fff url('Hay/sprite.png') repeat-x 0 -48px}
.t-footer-template td{background-color:#dee0c8;border-color:#bbb99d #dee0c8 #fff}
.t-group-footer td{background-color:#dee0c8;border-color:#bbb99d}
.t-grid-footer,.t-grid-footer-wrap table{background-color:#dee0c8;border-color:#bbb99d}
.t-grouping-header .t-group-indicator{color:#333;border-color:#aaa}
.t-grouping-dropclue{background:url('Hay/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#fff}
.t-treeview .t-drop-clue{background-image:url('Hay/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#2C8406}
.t-calendar th{border-color:#cac8ab}
.t-other-month .t-link{color:#777}
.t-treeview-lines .t-top,.t-treeview-lines .t-mid,.t-treeview-lines .t-bot{background-image:url('Hay/treeview-nodes.png')}
.t-rtl .t-treeview-lines .t-top,.t-rtl .t-treeview-lines .t-mid,.t-rtl .t-treeview-lines .t-bot{background-image:url('Hay/treeview-nodes-rtl.png')}
.t-treeview-lines .t-item{background-image:url('Hay/treeview-line.png')}
.t-treeview-lines .t-last{background-image:none}
.t-editor-button .t-state-hover{border-color:#73cd26 #38910a #38910a #73cd26;background-color:#63c215}
.t-editor-button .t-state-active{border-color:#257802 #60ba1d #60ba1d #257802;background-color:#47a605}
/*Slider*/.t-slider .t-draghandle{background-image:url('Hay/sprite.png');color:#7d7c6f}
.t-slider-track{border-color:#b6b499}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Hay/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Hay/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Hay/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Hay/slider-v.gif')}
/*Tooltip*/.t-tooltip{border-color:#cccab0;background:#e0e2cb 0 -560px repeat-x url('Hay/sprite.png')}
.t-callout{background-image:url('Hay/sprite.png')}
/* Splitter */.t-splitter{border-color:#cac8ab}
.t-splitbar-vertical,.t-splitbar-horizontal{background-color:#ececd8;border-color:#cac8ab}
.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Hay/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Hay/sprite-vertical.png')}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#bbb99d}
.t-dropzone-hovered,.t-upload-files{background-color:#f5f5e6}
.t-dropzone em{color:#787878}
.t-progress,.t-progress-status{background-image:url('Hay/sprite.png')}
.t-progress{background-position:0 -467px;border-color:#9a9881 #b6b49b #cdccb7}
.t-progress-status{background-position:0 -472px;border-color:#74cd23 transparent #3a8e09}
/* ImageBrowser */.t-imagebrowser .t-content{background:#f5f5e6}
.t-search-wrap label,.t-tiles-arrange{color:#787878}
.t-breadcrumbs .t-link{color:#333}
.t-tiles{border-color:#bbb99d;background:#fff}
.t-tile{border-color:#fff;background:0 100px repeat-x url('Hay/imagebrowser.png')}
.t-tiles li.t-state-hover{border-color:#46a700;background-position:0 0}
.t-tiles li.t-state-selected{border-color:#bbb99d;background-position:0 -100px;color:#000}
.t-tile .t-folder{background-image:url('Hay/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#525252}
.t-tile-empty strong{color:#bbb99d}

@ -1,95 +0,0 @@
/* Metro theme*/.t-widget,.t-input{border-color:#e5e5e5;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#fff}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#25a0da;background:#25a0da;color:#fff}
.t-icon{background-image:url('Metro/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Metro/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('Metro/loading.gif') no-repeat 0 0}
.t-dropdown .t-input,.t-header.t-link,.t-group .t-header.t-link,.t-header .t-link,.t-state-active .t-header.t-link{color:#fff}
.t-widget,.t-link,.t-popup,.t-group,.t-group .t-link,.t-content,.t-editable-area,.t-breadcrumbs .t-breadcrumbs-wrap .t-link{color:#767676}
.t-group,.t-content,.t-editable-area{border-color:#e5e5e5;background-color:#fff}
.t-colorpicker .t-arrow-down{border-color:#e5e5e5}
.t-separator{border-color:#fff;background-color:#999}
.t-alt{background-color:#f4f4f4}
.t-state-default{border-color:#e5e5e5}
.t-active-filter{background-color:#d8d8d8}
.t-state-active{background-color:#fff;border-color:#e5e5e5}
.t-state-active,.t-state-active .t-link{color:#000}
.t-state-selected{background-color:#25a0da}
.t-state-selected,.t-state-selected .t-link,.t-state-selected.t-link{color:#fff}
.t-state-hover,.t-state-focused{background-color:#e5e5e5;border-color:#e5e5e5}
.t-state-hover,.t-state-hover:hover,.t-state-hover:hover .t-link,.t-link.t-state-hover:hover{color:#000}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#de3914;background-color:#fff}
.t-button{color:#777}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{border-color:#e5e5e5;background:#fff}
.t-button:hover{background:#e5e5e5;color:#000}
.t-state-disabled,.t-state-disabled:hover,.t-state-disabled .t-link,.t-state-disabled .t-button{color:#bbb}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#e5e5e5;background-color:#fff}
.t-grid-header-wrap{border-color:#25a0da}
.t-grid-footer-wrap{border-color:#e5e5e5}
.t-grid td{border-color:#e5e5e5}
.t-grid tr.t-state-selected td{border-color:#25a0da}
.t-grouping-header .t-group-indicator{color:#333;border-color:#e5e5e5}
.t-grouping-dropclue{background:url('Metro/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row td,.t-grouping-row p{background:#e5e5e5}
.t-footer-template td{background-color:#fff;border-color:#e5e5e5 #e5e5e5 #fff}
.t-group-footer td{background-color:#fff;border-color:#e5e5e5}
.t-grid-footer,.t-grid-footer-wrap table{background-color:#fff;border-color:#e5e5e5}
.t-treeview .t-drop-clue{background-image:url('Metro/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#25a0da}
.t-panelbar .t-link,.t-panelbar .t-group,.t-panelbar .t-content{border-color:#e5e5e5}
.t-header .t-arrow-prev{background-position:-48px -496px}
.t-header .t-arrow-next{background-position:-64px -496px}
.t-header .t-arrow-up{background-position:-48px -511px}
.t-header .t-arrow-down{background-position:-64px -510px}
.t-group .t-arrow-prev,.t-arrow-prev{background-position:-16px -192px}
.t-group .t-arrow-next{background-position:-32px -192px}
.t-group .t-arrow-up,.t-state-hover .t-arrow-up{background-position:-16px -160px}
.t-group .t-arrow-down,.t-state-hover .t-arrow-down{background-position:-16px -176px}
.t-header .t-link+.t-grid-filter .t-filter{background-position:-48px -538px}
.t-header .t-state-hover+.t-grid-filter .t-filter,.t-header .t-link+.t-state-hover .t-filter{background-position:0 -240px}
.t-calendar th{border-color:#e5e5e5}
.t-other-month .t-link{color:#777}
/*Slider*/.t-slider .t-draghandle{border-width:1px;border-style:solid;color:#606060}
.t-slider-horizontal .t-draghandle{width:7px;height:18px;top:-8px}
.t-slider-vertical .t-draghandle{width:18px;height:7px;left:-8px}
.t-slider .t-draghandle{border-color:#fff;background-color:#25a0da}
.t-slider-horizontal .t-draghandle{width:5px}
.t-slider-vertical .t-draghandle{height:5px}
.t-slider .t-slider-track{background:#e5e5e5 none;border:1px solid #e5e5e5}
.t-slider .t-slider-selection{background:#25a0da none;border:1px solid #25a0da}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{height:4px}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{width:4px}
.t-slider-horizontal .t-tick{background-image:url('Metro/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Metro/slider-v.gif')}
/*TabStrip*/.t-tabstrip-items .t-state-default{border-color:#25a0da}
.t-tabstrip-items .t-state-hover{border-color:#fff;background-color:transparent}
.t-tabstrip-items .t-state-hover .t-link{color:#fff}
.t-tabstrip-items .t-state-active{border-color:#fff;background-color:#fff}
.t-tabstrip-items .t-state-active .t-link{color:#000}
/*Tooltip*/.t-tooltip{border-color:#25a0da;background:#25a0da;color:#fff}
.t-callout{background-image:url('Metro/sprite.png')}
/* Splitter */.t-splitter{border-color:#e5e5e5}
.t-splitbar-vertical,.t-splitbar-horizontal{background-color:#e5e5e5;border-color:#e5e5e5}
.t-splitbar-vertical-hover,.t-splitbar-horizontal-hover{background-color:#25a0da}
.t-splitbar-horizontal-active,.t-splitbar-vertical-active,.t-ghost-splitbar-horizontal,.t-ghost-splitbar-vertical{background-color:#25a0da}
.t-restricted-size-horizontal,.t-restricted-size-vertical{background-color:#de3914}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#e5e5e5}
.t-dropzone-hovered,.t-upload-files{background-color:#e5e5e5}
.t-dropzone em{color:#9b9b9b}
.t-progress{background-color:#e5e5e5;border-color:#e5e5e5}
.t-progress-status{background-color:#25a0da;border-color:#25a0da}
/* ImageBrowser */.t-imagebrowser .t-content{background:#e5e5e5}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label{color:#9b9b9b}
.t-tiles{border-color:#e5e5e5;background:#fff}
.t-tile{border-color:#fff}
.t-tiles li.t-state-hover{border-color:#e5e5e5;background-color:#e5e5e5}
.t-tiles li.t-state-selected{border-color:#25a0da;background-color:#25a0da;color:#fff}
.t-tile .t-folder{background-image:url('Metro/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#6e6659}
.t-tile-empty strong{color:#9e9e9e}
/*Window,Editor*/html div.t-window{border-width:1px}
:root div.t-window{border-width:1px}
.t-window-actions .t-state-hover,.t-editor-button .t-state-hover{border-color:#fff;background-color:transparent}
.t-editor-button .t-state-active{border-color:#fff;background-color:#57b5df}
/*rounded corners and shadows*/.t-button,div.t-window,.t-window-titlebar,div.t-window-content,.t-window-titlebar .t-state-hover,.t-tabstrip-items .t-item,.t-panelbar .t-tabstrip-items .t-item,.t-pager .t-state-active,.t-pager .t-state-hover,.t-grid .t-filter-options,.t-grouping-header .t-group-indicator,.t-treeview .t-state-hover,.t-treeview .t-state-selected,.t-colorpicker .t-selected-color,.t-editor-button .t-state-hover,.t-editor-button .t-state-active,.t-drag-clue,.t-tooltip,.t-dropzone,.t-upload-files,.t-progress,.t-progress-status,.t-tile{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}
.t-popup,.t-menu .t-group,div.t-window,.t-imagebrowser .t-image{-moz-box-shadow:0;-webkit-box-shadow:0;box-shadow:0}

@ -1,74 +0,0 @@
/* Office2007 theme*/.t-widget,.t-input{border-color:#688caf;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#fff}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#688caf;background:#c3d8f1 url('Office2007/sprite.png') repeat-x 0 -752px}
.t-icon{background-image:url('Office2007/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Office2007/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('Office2007/loading.gif') no-repeat 0 0}
.t-widget,.t-link:link,.t-link:active,.t-link:visited,.t-popup{color:#000}
.t-group,.t-content,.t-editable-area{border-color:#688caf;background-color:#fff}
.t-colorpicker .t-arrow-down{border-color:#688caf}
.t-separator{border-color:#ebf1f9;background-color:#a0b2c7}
.t-alt{background-color:#fff}
.t-state-default{border-color:#688caf}
.t-active-filter{background-color:#c0d9ef}
.t-state-hover,.t-state-hover:hover{background-color:#d6e5f3;border-color:#688caf}
.t-state-active{background-color:#fff;border-color:#688caf}
.t-state-selected{background-color:#ffd176}
.t-state-focused{background-color:#d6e5f3;color:#092061}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#f00;background-color:#ffc0cb}
.t-button{color:#333}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{border-color:#688caf;background:#e5effb url('Office2007/sprite.png') repeat-x 0 -560px}
.t-button:hover{border-color:#d8ca95 #b9a073 #c6b99c;background-position:0 -624px;background-color:#ffdf84}
.t-state-disabled,.t-state-disabled .t-link,.t-state-disabled .t-button{color:#82a6d7}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#5d8cc9;background-color:#d6e5f3}
.t-grid-header-wrap,.t-grid-footer-wrap{border-color:#688caf}
.t-grid td{border-color:#d6e5f3}
.t-grouping-row td{background:#fff url('Office2007/sprite.png') repeat-x 0 -48px}
.t-footer-template td{background-color:#d6e5f3;border-color:#567db0 #d6e5f3 #fff}
.t-group-footer td{background-color:#d6e5f3;border-color:#567db0}
.t-grid-footer,.t-grid-footer-wrap table{background-color:#d6e5f3;border-color:#567db0}
.t-grouping-header .t-group-indicator{color:#333;border-color:#aaa}
.t-grouping-dropclue{background:url('Office2007/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#fff}
.t-treeview .t-drop-clue{background-image:url('Office2007/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#a79d87}
.t-panelbar .t-link,.t-panelbar .t-group,.t-panelbar .t-content{border-color:#5d8cc9}
.t-calendar th{border-color:#9ebfdb}
.t-other-month .t-link{color:#777}
.t-treeview-lines .t-top,.t-treeview-lines .t-mid,.t-treeview-lines .t-bot{background-image:url('Office2007/treeview-nodes.png')}
.t-rtl .t-treeview-lines .t-top,.t-rtl .t-treeview-lines .t-mid,.t-rtl .t-treeview-lines .t-bot{background-image:url('Office2007/treeview-nodes-rtl.png')}
.t-treeview-lines .t-item{background-image:url('Office2007/treeview-line.png')}
.t-treeview-lines .t-last{background-image:none}
.t-editor-button .t-state-hover{border-color:#e8f0fa #98b2d0 #98b2d0 #e8f0fa;background-color:#d4e3f5}
.t-editor-button .t-state-active{border-color:#88a4c5 #d0dcea #d0dcea #88a4c5;background-color:#9fbad9}
/*Slider*/.t-slider .t-draghandle{background-image:url('Office2007/sprite.png');color:#688caf}
.t-slider-track{border-color:#6b89b2}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Office2007/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Office2007/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Office2007/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Office2007/slider-v.gif')}
/*Tooltip*/.t-tooltip{border-color:#767676;background:#cad9ef 0 -96px repeat-x url('Office2007/sprite.png');color:#333}
.t-callout{background-image:url('Office2007/sprite.png')}
/* Splitter */.t-splitter{border-color:#9eb6ce}
.t-splitbar-vertical,.t-splitbar-horizontal{background-color:#d7e6f7;border-color:#9eb6ce}
.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Office2007/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Office2007/sprite-vertical.png')}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#688caf}
.t-dropzone-hovered,.t-upload-files{background-color:#d6e5f3}
.t-dropzone em{color:#3e7ecf}
.t-progress,.t-progress-status{background-image:url('Office2007/sprite.png')}
.t-progress{background-position:0 -465px;border-color:#82a6d7 #8aacda #82a6d7}
.t-progress-status{background-position:0 -472px;border-color:#6b89b2 transparent}
/* ImageBrowser */.t-imagebrowser .t-content{background:#dde8f5}
.t-breadcrumbs .t-link{color:#3e7ecf}
.t-breadcrumbs .t-link:hover{color:#00156e}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label{color:#8bb2e2}
.t-tiles-arrange{color:#3e7ecf}
.t-toolbar .t-upload .t-button,.t-tiles-arrange .t-link{color:#00156e}
.t-tiles{border-color:#8bb2e2;background:#fff}
.t-tile{border-color:#fff;background:0 100px repeat-x url('Office2007/imagebrowser.png')}
.t-tiles li.t-state-hover{border-color:#c5af7f;background-position:0 0}
.t-tiles li.t-state-selected{border-color:#c0a776;background-position:0 -100px}
.t-tile .t-folder{background-image:url('Office2007/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#636363}
.t-tile-empty strong{color:#8bb2e2}

@ -1,73 +0,0 @@
/* Default theme*/.t-widget,.t-input{border-color:#2c2c2c;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#6f6f6f}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#444;background:#6b6b6b url('Office2010Black/sprite.png') repeat-x 0 -752px}
.t-icon{background-image:url('Office2010Black/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Office2010Black/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('Office2010Black/loading.gif') no-repeat 0 0}
.t-widget,.t-link:link,.t-link:active,.t-link:visited,.t-popup,.t-group,.t-grid .t-header{color:#000}
.t-group,.t-content,.t-editable-area{border-color:#828282;background-color:#f6f6f6}
.t-colorpicker .t-arrow-down{border-color:#606060}
.t-separator{border-color:#606060;background-color:#adadad}
.t-alt{background-color:#646464}
.t-state-default{border-color:#848484}
.t-active-filter{background-color:#f9d04c}
.t-state-hover,.t-state-hover:hover{background-color:#ffe175;border-color:#f7c840}
.t-header .t-state-hover{background-color:#ffe175}
.t-state-active,.t-header .t-state-active{background-color:#e6e6e6;/*#ffcb36;*/border-color:#444;/*#c28b31 #c29a42 #c2a34c;*/}
.t-state-selected{background-color:#ffcb36}
.t-state-focused{background-color:#a9a9a9}
.t-state-hover,.t-state-selected{color:#000}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#f00;background-color:#ffc0cb}
.t-button{border-color:#262626;color:#000}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:#6f6f6f url('Office2010Black/sprite.png') repeat-x 0 -560px}
.t-button:hover{background-position:0 -624px;background-color:#fff3c9}
.t-state-disabled,.t-state-disabled:hover,.t-state-disabled .t-link,.t-state-disabled .t-button{border-color:#262626;color:#5e5e5e}
.t-popup,.t-menu .t-group{-moz-box-shadow:2px 2px 2px #444;-webkit-box-shadow:2px 2px 2px #444;box-shadow:2px 2px 2px #444}
.t-autocomplete,.t-input{background-color:#fff}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-group-footer td,.t-grid-footer,.t-footer-template td,.t-widget .t-status{border-color:#444;background-color:#777}
.t-grid{color:#fff}
.t-grid-pager .t-link{color:#fff}
.t-grid-pager .t-state-hover,.t-grid-pager .t-state-active{color:#000}
.t-grid-header-wrap,.t-grid-footer-wrap,.t-grid td{border-color:#444}
.t-grouping-row td{background:url('Office2010Black/sprite.png') repeat-x 0 -48px}
.t-grouping-header .t-group-indicator{border-color:#444;background:#6f6f6f url('Office2010Black/sprite.png') repeat-x 0 -560px}
.t-grouping-dropclue{background:url('Office2010Black/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#6f6f6f}
.t-treeview .t-drop-clue{background-image:url('Office2010Black/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#4f4f4f}
.t-panelbar .t-link,.t-panelbar .t-group,.t-panelbar .t-content{border-color:#4f4f4f}
.t-filter-options,.t-menu .t-group{-moz-box-shadow:2px 2px 2px #4f4f4f;-webkit-box-shadow:2px 2px 2px #4f4f4f;box-shadow:2px 2px 2px #4f4f4f}
.t-calendar th{border-color:#c5c5c5}
.t-other-month .t-link{color:#898989}
.t-treeview-lines .t-top,.t-treeview-lines .t-mid,.t-treeview-lines .t-bot{background-image:url('Office2010Black/treeview-nodes.png')}
.t-rtl .t-treeview-lines .t-top,.t-rtl .t-treeview-lines .t-mid,.t-rtl .t-treeview-lines .t-bot{background-image:url('Office2010Black/treeview-nodes-rtl.png')}
.t-treeview-lines .t-item{background-image:url('Office2010Black/treeview-line.png')}
.t-treeview-lines .t-last{background-image:none}
div.t-window{-moz-box-shadow:0 0 5px 2px #444;-webkit-box-shadow:0 0 5px 2px #444;box-shadow:0 0 5px 2px #444}
/* Slider */.t-slider .t-draghandle{background-image:url('Office2010Black/sprite.png');color:#666}
.t-slider-track{border-color:#2c2c2c}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Office2010Black/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Office2010Black/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Office2010Black/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Office2010Black/slider-v.gif')}
/* Tooltip */.t-tooltip{border-color:#767676;background:#e9e9f2 0 -96px repeat-x url('Office2010Black/sprite.png')}
.t-callout{background-image:url('Office2010Black/sprite.png')}
/* Splitter */.t-splitbar{border-color:#2c2c2c;background-color:#4b4b4b}
.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Office2010Black/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Office2010Black/sprite-vertical.png')}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#2c2c2c}
.t-dropzone-active{background-color:#6f6f6f}
.t-dropzone-hovered,.t-upload-files{background-color:#4b4b4b}
.t-dropzone em{color:#e2e2e2}
.t-progress,.t-progress-status{background-image:url('Office2010Black/sprite.png')}
.t-progress{background-position:0 -464px;border-color:#2c2c2c}
.t-progress-status{background-position:0 -472px;border-color:#ffe37c transparent #f9cd4c}
/* ImageBrowser */.t-imagebrowser .t-content{background:#9e9e9e}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label{/*color:#9f9f9f;*/}
.t-tiles{border-color:#848484;background:#fff}
.t-tile{border-color:#fff;background:0 100px repeat-x url('Office2010Black/imagebrowser.png')}
.t-tiles li.t-state-hover{border-color:#ffd14b;background-position:0 0}
.t-tiles li.t-state-selected{border-color:#c28a30 #c29b43 #c2a44d;background-position:0 -100px}
.t-tile .t-folder{background-image:url('Office2010Black/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#464646}
.t-tile-empty strong{color:#aaa}

@ -1,69 +0,0 @@
/* Office2010Blue theme*/.t-widget,.t-input{border-color:#8ba0bc;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#fff;/** #bccadd;*/}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header,.t-toolbar,.t-grouping-header,.t-tooltip,.t-grid-pager{border-color:#8ba0bc;background:#bccadd url('Office2010Blue/gradient.png') repeat-x 0 center}
.t-menu-vertical,.t-editor,.t-tooltip,.t-tabstrip{background-position:0 -48px}
.t-icon{background-image:url('Office2010Blue/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Office2010Blue/editor.png')}
.t-picker-wrap{padding-right:23px}
.t-loading,.t-widget .t-loading{background:transparent url('Office2010Blue/loading.gif') no-repeat 0 0}
.t-widget,.t-link:link,.t-link:active,.t-link:visited,.t-popup,.t-grid .t-header{color:#384e73}
.t-group{background-color:#dce3ed;border-color:#8ba0bc}
.t-content,.t-editable-area{border-color:#8ba0bc;background-color:#fff}
.t-colorpicker .t-arrow-down{border-color:#8ba0bc}
.t-separator{border-color:#8ba0bc;background-color:#f1f4f8}
.t-alt{background-color:#eff2f6}
.t-state-default{border-color:#8ba0bc}
.t-active-filter{background-color:#fff}
.t-state-hover,.t-state-hover:hover{background-color:#fae185;border-color:#f3d64a;color:#1e395b}
.t-state-active,.t-header .t-state-active{background-color:#fafbfd;border-color:#8ba0bc}
.t-state-selected{background-color:#ffcd42}
.t-state-focused{background-color:#bfcde0}
.t-state-hover,.t-state-selected{color:#1e395b}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#ff7c7c;background-color:#ffe4e4;color:#f20000}
.t-button{border-color:#8ba0bc;color:#384e73}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:#bccadd url('Office2010Blue/gradient.png') repeat-x 0 center}
.t-button:hover{border-color:#f3d64a;background-color:#fae185;color:#1e395b}
.t-state-disabled,.t-state-disabled:hover,.t-state-disabled .t-link,.t-state-disabled .t-button{border-color:#8ba0bc;color:#8ba0bc}
.t-autocomplete{background-color:#fff}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-group-footer td,.t-grid-footer,.t-footer-template td,.t-widget .t-status{border-color:#8ba0bc;background-color:#dce3ed}
.t-widget .t-status{background-color:transparent}
.t-grid-header-wrap,.t-grid-footer-wrap{border-color:#8ba0bc}
.t-grid td{border-color:#bfcde0}
.t-grouping-row td{background:url('Office2010Blue/sprite.png') repeat-x 0 -48px}
.t-grouping-header .t-group-indicator{border-color:#8ba0bc}
.t-grouping-dropclue{background:url('Office2010Blue/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#fff}
.t-treeview .t-drop-clue{background-image:url('Office2010Blue/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#e3bb4a}
.t-panelbar .t-link,.t-panelbar .t-group,.t-panelbar .t-content{border-color:#8ba0bc}
.t-calendar th{border-color:#dadcdd;background-color:#dbe3ee}
.t-other-month .t-link{color:#8ba0bc}
/* Slider */.t-slider .t-draghandle{background-image:url('Office2010Blue/sprite.png');color:#666}
.t-slider-track{border-color:#8ba0bc}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Office2010Blue/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Office2010Blue/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Office2010Blue/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Office2010Blue/slider-v.gif')}
/* Tooltip */.t-tooltip{border-width:2px;border-color:#beccde}
.t-callout{background-image:url('Office2010Blue/sprite.png')}
.t-callout-n,.t-callout-s{width:10px;height:5px}
.t-callout-w,.t-callout-e{width:5px;height:10px}
.t-callout-n{top:-7px;left:50%;margin-left:-5px;background-position:-64px -368px}
.t-callout-w{left:-7px;top:50%;margin-top:-5px;background-position:-64px -384px}
.t-callout-s{top:100%;left:50%;margin-left:-5px;margin-top:2px;background-position:-64px -400px}
.t-callout-e{left:100%;top:50%;margin-top:-5px;margin-left:2px;background-position:-64px -416px}
/* Splitter */.t-splitbar{border-color:#8ba0bc;background-color:#dce3ed}
.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Office2010Blue/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Office2010Blue/sprite-vertical.png')}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#8ba0bc}
.t-dropzone-hovered,.t-upload-files{background-color:#dce3ed}
.t-dropzone em{color:#8ba0bc}
.t-progress,.t-progress-status{background-image:url('Office2010Blue/sprite.png')}
.t-progress{background-position:0 -464px;border-color:#8ba0bc}
.t-progress-status{background-position:0 -472px;border-color:#f3d64a transparent}
/* ImageBrowser */.t-tiles{border-color:#8ba0bc;background:#fff}
.t-tile{border-color:#fff;background-image:url('Office2010Blue/gradient.png');background-position:0 100px;background-repeat:repeat-x}
.t-tiles li.t-state-hover{border-color:#f3d64a;background-position:0 0}
.t-tiles li.t-state-selected{border-color:#e3bb4a;background-position:0 0}
.t-tile .t-folder{background-image:url('Office2010Blue/imagebrowser.png')}
.t-tile-empty strong{color:#aaa}

@ -1,69 +0,0 @@
/* Office2010Silver theme*/.t-widget,.t-input{border-color:#a4abb2;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#fff;/** #bccadd;*/}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header,.t-toolbar,.t-grouping-header,.t-tooltip,.t-grid-pager{border-color:#a4abb2;background:#d2d5d9 url('Office2010Silver/gradient.png') repeat-x 0 center}
.t-menu-vertical,.t-editor,.t-tooltip,.t-tabstrip{background-position:0 -48px}
.t-icon{background-image:url('Office2010Silver/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Office2010Silver/editor.png')}
.t-picker-wrap{padding-right:23px}
.t-loading,.t-widget .t-loading{background:transparent url('Office2010Silver/loading.gif') no-repeat 0 0}
.t-widget,.t-link:link,.t-link:active,.t-link:visited,.t-popup,.t-grid .t-header{color:#3b3b3b}
.t-group{background-color:#f1f2f3;border-color:#a4abb2}
.t-content,.t-editable-area{border-color:#a4abb2;background-color:#fff}
.t-colorpicker .t-arrow-down{border-color:#a4abb2}
.t-separator{border-color:#a4abb2;background-color:#fff}
.t-alt{background-color:#f1f2f3}
.t-state-default{border-color:#a4abb2}
.t-active-filter{background-color:#fff}
.t-state-hover,.t-state-hover:hover{background-color:#fae185;border-color:#f3d64a;color:#000}
.t-state-active,.t-header .t-state-active{background-color:#fff;border-color:#a4abb2}
.t-state-selected{background-color:#f4b914}
.t-state-focused{background-color:#d3d6da}
.t-state-hover,.t-state-selected{color:#000}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#ff7c7c;background-color:#ffe4e4;color:#f20000}
.t-button{border-color:#a4abb2;color:#3b3b3b}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:#d2d5d9 url('Office2010Silver/gradient.png') repeat-x 0 center}
.t-button:hover{border-color:#f3d64a;background-color:#fae185;color:#000}
.t-state-disabled,.t-state-disabled:hover,.t-state-disabled .t-link,.t-state-disabled .t-button{border-color:#a4abb2;color:#a4abb2}
.t-autocomplete{background-color:#fff}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-group-footer td,.t-grid-footer,.t-footer-template td,.t-widget .t-status{border-color:#a4abb2;background-color:#f1f2f3}
.t-widget .t-status{background-color:transparent}
.t-grid-header-wrap,.t-grid-footer-wrap{border-color:#a4abb2}
.t-grid td{border-color:#d3d6da}
.t-grouping-row td{background:url('Office2010Silver/sprite.png') repeat-x 0 -48px}
.t-grouping-header .t-group-indicator{border-color:#a4abb2}
.t-grouping-dropclue{background:url('Office2010Silver/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#fff}
.t-treeview .t-drop-clue{background-image:url('Office2010Silver/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#f4b914}
.t-panelbar .t-link,.t-panelbar .t-group,.t-panelbar .t-content{border-color:#a4abb2}
.t-calendar th{border-color:#d3d6da;background-color:#f1f2f3}
.t-other-month .t-link{color:#a4abb2}
/* Slider */.t-slider .t-draghandle{background-image:url('Office2010Silver/sprite.png');color:#666}
.t-slider-track{border-color:#a4abb2}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Office2010Silver/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Office2010Silver/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Office2010Silver/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Office2010Silver/slider-v.gif')}
/* Tooltip */.t-tooltip{border-width:2px;border-color:#dfe1e4}
.t-callout{background-image:url('Office2010Silver/sprite.png')}
.t-callout-n,.t-callout-s{width:10px;height:5px}
.t-callout-w,.t-callout-e{width:5px;height:10px}
.t-callout-n{top:-7px;left:50%;margin-left:-5px;background-position:-64px -368px}
.t-callout-w{left:-7px;top:50%;margin-top:-5px;background-position:-64px -384px}
.t-callout-s{top:100%;left:50%;margin-left:-5px;margin-top:2px;background-position:-64px -400px}
.t-callout-e{left:100%;top:50%;margin-top:-5px;margin-left:2px;background-position:-64px -416px}
/* Splitter */.t-splitbar{border-color:#a4abb2;background-color:#f1f2f3}
.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Office2010Silver/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Office2010Silver/sprite-vertical.png')}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#a4abb2}
.t-dropzone-hovered,.t-upload-files{background-color:#f1f2f3}
.t-dropzone em{color:#a4abb2}
.t-progress,.t-progress-status{background-image:url('Office2010Silver/sprite.png')}
.t-progress{background-position:0 -464px;border-color:#a4abb2}
.t-progress-status{background-position:0 -472px;border-color:#f3d64a transparent}
/* ImageBrowser */.t-tiles{border-color:#a4abb2;background:#fff}
.t-tile{border-color:#fff;background-image:url('Office2010Silver/gradient.png');background-position:0 100px;background-repeat:repeat-x}
.t-tiles li.t-state-hover{border-color:#f3d64a;background-position:0 0}
.t-tiles li.t-state-selected{border-color:#f4b914;background-position:0 0}
.t-tile .t-folder{background-image:url('Office2010Silver/imagebrowser.png')}
.t-tile-empty strong{color:#aaa}

@ -1,74 +0,0 @@
/* Outlook theme*/.t-widget,.t-input{border-color:#5d8cc9;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC Outlook) */background-color:#fff}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC Outlook) */.t-header,.t-grid-header{border-color:#5d8cc9;background:#7da5e0 url('Outlook/sprite.png') repeat-x 0 -752px}
.t-icon{background-image:url('Outlook/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Outlook/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('Outlook/loading.gif') no-repeat 0 0}
.t-widget,.t-link:link,.t-link:active,.t-link:visited,.t-popup{color:#000}
.t-group,.t-content,.t-editable-area{border-color:#5d8cc9;background-color:#fff}
.t-colorpicker .t-arrow-down{border-color:#5d8cc9}
.t-separator{border-color:#cfdef4;background-color:#7e98bc}
.t-alt{background-color:#f7f7f7}
.t-state-default{border-color:#5d8cc9}
.t-active-filter{background-color:#b6cef2}
.t-state-hover,.t-state-hover:hover{background-color:#d6e5f3;border-color:#5d8cc9}
.t-state-active{background-color:#fff;border-color:#5d8cc9}
.t-state-selected{background-color:#bcd3f3}
.t-state-focused{background-color:#a3c0ea}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#f00;background-color:#ffc0cb}
.t-button{border-color:#5d8cc9;color:#333}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:#ebe8e2 url('Outlook/sprite.png') repeat-x 0 -560px}
.t-button:hover{background-position:0 -624px;background-color:#f2f2f2;color:#000}
.t-state-disabled,.t-state-disabled:hover,.t-state-disabled .t-link,.t-state-disabled .t-button{color:#999}
.t-header .t-state-disabled,.t-header .t-state-disabled .t-link{color:#577aac;border-color:#7da5e0}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#5d8cc9;background-color:#d6e5f3}
.t-grid-header-wrap,.t-grid-footer-wrap{border-color:#5d8cc9}
.t-grid td{border-color:#ddd}
.t-grid tr.t-state-hover td{border-color:#d6e5f3}
.t-grid tr.t-state-selected td{border-color:#bcd3f3}
.t-grouping-row td{background:#fff url('Outlook/sprite.png') repeat-x 0 -48px}
.t-footer-template td{background-color:#d6e5f3;border-color:#567db0 #d6e5f3 #fff}
.t-group-footer td{background-color:#d6e5f3;border-color:#567db0}
.t-grid-footer,.t-grid-footer-wrap table{background-color:#d6e5f3;border-color:#567db0}
.t-grouping-header .t-group-indicator{color:#333;border-color:#aaa}
.t-grouping-dropclue{background:url('Outlook/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#fff}
.t-treeview .t-drop-clue{background-image:url('Outlook/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#002d96}
.t-panelbar .t-link,.t-panelbar .t-group,.t-panelbar .t-content{border-color:#5d8cc9}
.t-calendar th{border-color:#89aee5}
.t-other-month .t-link{color:#777}
.t-treeview-lines .t-top,.t-treeview-lines .t-mid,.t-treeview-lines .t-bot{background-image:url('Outlook/treeview-nodes.png')}
.t-rtl .t-treeview-lines .t-top,.t-rtl .t-treeview-lines .t-mid,.t-rtl .t-treeview-lines .t-bot{background-image:url('Outlook/treeview-nodes-rtl.png')}
.t-treeview-lines .t-item{background-image:url('Outlook/treeview-line.png')}
.t-treeview-lines .t-last{background-image:none}
.t-editor-button .t-state-hover{border-color:#dae8fa #668dcf #668dcf #dae8fa;background-color:#93b5e7}
.t-editor-button .t-state-active{border-color:#5781c9 #a3c1ea #a3c1ea #5781c9;background-color:#7da5e0}
/*Slider*/.t-slider .t-draghandle{background-image:url('Outlook/sprite.png');color:#5d8cc9}
.t-slider-track{border-color:#7b9ecc}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Outlook/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Outlook/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Outlook/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Outlook/slider-v.gif')}
/*Tooltip*/.t-tooltip{border-color:#000;background:#ffffe1}
.t-callout{background-image:url('Outlook/sprite.png')}
/* Splitter */.t-splitter{border-color:#89aee5}
.t-splitbar-vertical,.t-splitbar-horizontal{background-color:#bcd3f3;border-color:#89aee5}
.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Outlook/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Outlook/sprite-vertical.png')}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#7f9eba}
.t-dropzone-hovered,.t-upload-files{background-color:#d6e5f3}
.t-dropzone em{color:#6c7a8c}
.t-progress,.t-progress-status{background-image:url('Outlook/sprite.png')}
.t-progress{background-position:0 -466px;border-color:#7699c5 #83a4ce #81a5d6}
.t-progress-status{background-position:0 -472px;border-color:#99bbea transparent #40689e}
/* ImageBrowser */.t-imagebrowser .t-content{background:#c3dafa}
.t-breadcrumbs .t-link:hover{color:#003db2}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label{color:#6c7a8c}
.t-tiles{border-color:#7f9eba;background:#fff}
.t-tile{border-color:#fff;background:0 100px repeat-x url('Outlook/imagebrowser.png')}
.t-tiles li.t-state-hover{border-color:#e0b224;background-position:0 0}
.t-tiles li.t-state-selected{border-color:#df8b13;background-position:0 -100px}
.t-tile .t-folder{background-image:url('Outlook/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#6c7a8c}
.t-tile-empty strong{color:#8bb2e2}

@ -1,74 +0,0 @@
/* base stylesheet */.t-rtl{direction:rtl;zoom:1}
.t-rtl .t-button-icontext .t-icon{margin:0 -3px 0 3px}
/* Window */.t-rtl .t-window-actions{right:auto;left:.5em}
.t-rtl .t-window-title .t-image{margin:0 0 0 5px}
/* TabStrip */.t-rtl .t-tabstrip-items .t-item,.t-rtl .t-panelbar .t-tabstrip-items .t-item{margin:.1em 0 0 .3em}
.t-rtl .t-tabstrip-items .t-item .t-icon,.t-rtl .t-panelbar .t-tabstrip-items .t-item .t-icon{margin:-1px -3px 0 4px}
.t-rtl .t-tabstrip-items .t-item .t-image,.t-rtl .t-tabstrip-items .t-item .t-sprite,.t-rtl .t-panelbar .t-tabstrip-items .t-item .t-image,.t-rtl .t-panelbar .t-tabstrip-items .t-item .t-sprite{margin:-4px -3px 0 3px}
.t-rtl .t-tabstrip-items .t-state-active,.t-rtl .t-panelbar .t-tabstrip-items .t-state-active{padding-bottom:1px;margin-bottom:-1px}
/* PanelBar */.t-rtl .t-panelbar .t-item{zoom:normal}
.t-rtl .t-panelbar .t-image,.t-rtl .t-panelbar .t-sprite{margin-right:0;margin-left:5px;float:right}
.t-rtl .t-panelbar .t-arrow-up,.t-rtl .t-panelbar .t-arrow-down{right:auto;left:2px}
.t-rtl .t-panelbar .t-group .t-group .t-link{padding-left:0;padding-right:2em}
/* Menu */.t-rtl .t-menu .t-group .t-link{padding-left:2em;padding-right:.97em}
.t-rtl .t-menu .t-item{border-width:0 0 0 1px}
.t-rtl .t-menu .t-image,.t-rtl .t-menu .t-sprite{margin:0 -4px 0 4px}
.t-rtl .t-menu .t-arrow-down{margin-left:-10px;margin-right:2px}
.t-rtl .t-menu .t-arrow-next{right:auto;left:0}
.t-rtl .t-menu .t-animation-container,.t-rtl .t-menu .t-group{left:auto;right:-1px}
.t-rtl .t-menu .t-animation-container .t-animation-container,.t-rtl .t-menu .t-group .t-group{right:100%;left:auto}
.t-rtl .t-menu-vertical .t-animation-container,.t-rtl .t-menu-vertical .t-group{right:100%;left:auto}
.t-rtl .t-menu .t-animation-container .t-group{right:auto}
/* Grid */.t-rtl .t-grid div.t-grid-header,.t-rtl .t-grid .t-grid-content,.t-rtl .t-grid .t-grid-footer,.t-rtl .t-grid .t-grouping-header,.t-rtl .t-grid .t-grid-toolbar,.t-rtl .t-grid .t-filter-options,.t-rtl .t-grid tbody{zoom:1;direction:rtl}
.t-rtl .t-grid table{border-collapse:separate}
.t-rtl .t-grid div.t-grid-header,.t-rtl .t-grid .t-header,.t-rtl .t-grid td{text-align:right}
.t-rtl .t-grid div.t-grid-header{padding-right:0;padding-left:17px}
.t-rtl .t-grid.t-grid-rightscroll div.t-grid-header{padding-left:0;padding-right:17px}
.t-rtl .t-grid .t-header,.t-rtl .t-grid td{border-width:0 0 0 1px}
.t-rtl .t-grid.t-grid-rightscroll .t-header,.t-rtl .t-grid.t-grid-rightscroll td{border-width:0 1px 0 0}
.t-rtl .t-grid .t-header .t-link{padding:.3em .6em .3em 2.4em}
.t-rtl .t-grid .t-grid-filter{float:left;margin-right:3px;margin-left:-.6em}
.t-rtl .t-grid .t-pager{direction:ltr;float:right}
.t-rtl .t-grid .t-status{float:right;border-right-width:0;border-left-style:solid;border-left-width:1px;margin:-.2em -.6em -.2em .6em}
.t-rtl .t-grid .t-status-text{float:left}
.t-rtl .t-grid .t-grouping-row p{margin-right:-0.6em;margin-left:0;padding-right:.6em;padding-left:0}
.t-rtl .t-grid .t-button .t-icon{margin-left:3px;margin-right:-3px}
.t-rtl .t-grid .t-last{border-left-width:0}
.t-rtl .t-grouping-header .t-button .t-icon{margin:0 3px 0 0}
/* ComboBox */.t-rtl .t-autocomplete{background-position:0 50%!important}
.t-rtl .t-dropdown-wrap{padding-right:0;padding-left:16px;/* icon width*/zoom:1}
* html .t-rtl .t-combobox .t-dropdown-wrap{padding-right:0;padding-left:16px}
* html .t-rtl .t-picker-wrap{padding-right:0;padding-left:25px}
.t-rtl .t-picker-wrap .t-select,.t-rtl .t-dropdown-wrap .t-select{right:auto;left:0;zoom:1}
* html .t-rtl .t-picker-wrap .t-select,* html .t-rtl .t-dropdown-wrap .t-select{right:auto;left:1px}
.t-rtl .t-combobox .t-select{border-width:0 1px 0 0}
.t-rtl .t-dropdown .t-input,.t-rtl .t-selectbox .t-input{padding:.2em 3px .2em 0}
/* Date/Time Pickers */.t-rtl .t-picker-wrap .t-icon-calendar,.t-rtl .t-picker-wrap .t-icon-clock{margin:3px 3px 0 0}
.t-rtl .t-picker-wrap{padding:0 0 0 25px}
.t-rtl .t-datetimepicker .t-picker-wrap{padding:0 0 0 44px}
/* TreeView */.t-rtl .t-treeview .t-item{padding:0 16px 0 0}
.t-rtl .t-treeview-lines .t-top,.t-rtl .t-treeview-lines .t-mid,.t-rtl .t-treeview-lines .t-bot{margin-left:0;margin-right:-16px;padding-left:0;padding-right:20px}
.t-rtl .t-treeview .t-plus,.t-rtl .t-treeview .t-minus,.t-rtl .t-treeview .t-plus-disabled,.t-rtl .t-treeview .t-minus-disabled{margin-left:0;margin-right:-20px;float:right;/* required for Opera */*float:none;/* IE6 does not like it as node text wraps */}
.t-rtl .t-treeview .t-image{margin-right:0;margin-left:3px}
.t-rtl .t-treeview-lines .t-top{background-position:100% 0}
.t-rtl .t-treeview-lines .t-bot{background-position:100% -22px}
.t-rtl .t-treeview-lines .t-mid{background-position:100% -44px}
.t-rtl .t-treeview-lines .t-last .t-top{background-position:100% -66px}
.t-rtl .t-treeview-lines .t-group .t-last .t-bot{background-position:100% -22px}
.t-rtl .t-treeview-lines .t-item{background-position:100% 0}
.t-rtl .t-treeview-lines .t-first{background-position:100% 16px}
/* NumericTextBox */.t-rtl .t-numerictextbox .t-icon{margin-left:0;margin-right:-16px}
@media screen and (-webkit-min-device-pixel-ratio:0){.t-rtl .t-numerictextbox .t-icon{position:relative;z-index:2}
.t-rtl .t-numerictextbox{position:relative}
.t-rtl .t-numerictextbox .t-formatted-value{right:0}
}
/* Editor */.t-rtl .t-editor-colorpicker .t-icon{border-width:0 1px 0 0}
.t-rtl .t-header .t-tabstrip-items .t-link{padding:.3em .9em}
/* ImageBrowser */.t-rtl .t-breadcrumbs{float:right;margin:0 -1px 0 0}
.t-rtl .t-breadcrumbs-wrap{left:auto;right:0;padding-left:0;padding-right:5px}
.t-rtl .t-breadcrumbs-input{padding-left:0;padding-right:2px}
.t-rtl .t-search-wrap{float:left}
.t-rtl .t-search-wrap label{left:auto;right:7px}
.t-rtl .t-search-wrap .t-search{right:auto;left:2px}
.t-rtl .t-tile{float:right}
.t-rtl .t-imagebrowser .t-thumb{float:right;margin:4px 4px 0 10px}

@ -1,76 +0,0 @@
/* Simple theme*/.t-widget,.t-input{border-color:#828282;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#fff}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#828282;background:#e6e6e6}
.t-icon{background-image:url('Simple/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Simple/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('Simple/loading.gif') no-repeat 0 0}
.t-widget,.t-link:link,.t-link:active,.t-link:visited,.t-popup{color:#000}
.t-group,.t-content,.t-editable-area{border-color:#828282;background-color:#fff}
.t-colorpicker .t-arrow-down{border-color:#828282}
.t-separator{border-color:#fff;background-color:#999}
.t-alt{background-color:#f7f7f7}
.t-state-default{border-color:#828282}
.t-active-filter{background-color:#d8d8d8}
.t-state-hover,.t-state-hover:hover{background-color:#ffe79c;border-color:#c98400}
.t-state-active{background-color:#fff;border-color:#828282}
.t-state-selected{background-color:#ffa517}
.t-state-focused{background-color:#fff3cd}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#f00;background-color:#ffc0cb}
.t-button{color:#333}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{border-color:#828282;background:#e8e8e8}
.t-button:hover{background:#ffe79c}
.t-state-disabled,.t-state-disabled .t-link,.t-state-disabled .t-button{color:#999}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#aaa;background-color:#eee}
.t-grid-header-wrap,.t-grid-footer-wrap{border-color:#828282}
.t-grid td{border-color:#ddd}
.t-grid tr.t-state-selected td{border-color:#ffa517}
.t-grouping-header .t-group-indicator{color:#333;border-color:#ccc}
.t-grouping-dropclue{background:url('Simple/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row td,.t-grouping-row p{background:#fff}
.t-footer-template td{background-color:#e4e4e4;border-color:#999 #e4e4e4 #fff}
.t-group-footer td{background-color:#e4e4e4;border-color:#999}
.t-grid-footer,.t-grid-footer-wrap table{background-color:#e4e4e4;border-color:#999}
.t-treeview .t-drop-clue{background-image:url('Simple/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#ffa517}
.t-panelbar .t-link,.t-panelbar .t-group,.t-panelbar .t-content{border-color:#aaa}
.t-calendar th{border-color:#999}
.t-other-month .t-link{color:#777}
.t-treeview-lines .t-top,.t-treeview-lines .t-mid,.t-treeview-lines .t-bot{background-image:url('Simple/treeview-nodes.png')}
.t-rtl .t-treeview-lines .t-top,.t-rtl .t-treeview-lines .t-mid,.t-rtl .t-treeview-lines .t-bot{background-image:url('Simple/treeview-nodes-rtl.png')}
.t-treeview-lines .t-item{background-image:url('Simple/treeview-line.png')}
.t-treeview-lines .t-last{background-image:none}
.t-editor-button .t-state-hover{border-color:#f1f1f1 #8a8a8a #8a8a8a #f1f1f1;background-color:#e6e6e6}
.t-editor-button .t-state-active{border-color:#a4a4a4 #e0e0e0 #e0e0e0 #a4a4a4;background-color:#c8c8c8}
/*Slider*/.t-slider .t-draghandle{border-width:1px;border-style:solid;color:#606060}
.t-slider-horizontal .t-draghandle{width:7px;height:18px;top:-8px}
.t-slider-vertical .t-draghandle{width:18px;height:7px;left:-8px}
.t-slider .t-draghandle,.t-state-disabled.t-slider a.t-draghandle,.t-state-disabled .t-slider a.t-draghandle{border-color:#828282;background-color:#e8e8e8}
.t-slider .t-draghandle:hover,.t-slider .t-draghandle:focus{border-color:#c98400;background-color:#ffe79c}
.t-slider .t-draghandle:active{border-color:#c98400;background-color:#ffa517}
.t-slider .t-slider-track{background:#e1e1e1 none;border:1px solid #acacac}
.t-slider .t-slider-selection{background:#ffa517 none;border:1px solid #ca4b0c}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{height:4px}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{width:4px}
.t-slider-horizontal .t-tick{background-image:url('Simple/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Simple/slider-v.gif')}
/*Tooltip*/.t-tooltip{border-color:#ffa517;background:#ffe79c}
.t-callout{background-image:url('Simple/sprite.png')}
/* Splitter */.t-splitter{border-color:#828282}
.t-splitbar-vertical,.t-splitbar-horizontal{background-color:#e6e6e6;border-color:#828282}
.t-splitbar-vertical-hover,.t-splitbar-horizontal-hover{background-color:#ffe79c}
.t-splitbar-horizontal-active,.t-splitbar-vertical-active,.t-ghost-splitbar-horizontal,.t-ghost-splitbar-vertical{background-color:#ffa517}
.t-restricted-size-horizontal,.t-restricted-size-vertical{background-color:#f00}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#9b9b9b}
.t-dropzone-hovered,.t-upload-files{background-color:#e8e8e8}
.t-dropzone em{color:#9b9b9b}
.t-progress{background-color:#e1e1e1;border-color:#b4b4b4 #adadad #9e9e9e}
.t-progress-status{background-color:#ffa517;border-color:#ca4b0c}
/* ImageBrowser */.t-imagebrowser .t-content{background:#e8e8e8}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label{color:#9b9b9b}
.t-tiles{border-color:#9b9b9b;background:#fff}
.t-tile{border-color:#fff}
.t-tiles li.t-state-hover{border-color:#c98400;background-color:#ffe79c}
.t-tiles li.t-state-selected{border-color:#c98400;background-color:#ffa517}
.t-tile .t-folder{background-image:url('Simple/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#6e6659}
.t-tile-empty strong{color:#9e9e9e}

@ -1,87 +0,0 @@
/* Sitefinity theme*/.t-widget,.t-input{border-width:0;border-color:#ccc;/* if component overrides the above *//*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background:0}
.t-autocomplete{border-width:1px;border-style:solid}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#ccc;background:#fff}
.t-icon{background-image:url('Sitefinity/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Sitefinity/editor.png')}
.t-plus,.t-plus-disabled{background-position:-16px -272px}
.t-minus,.t-minus-disabled{background-position:0 -272px}
.t-rtl .t-plus,.t-rtl .t-plus-disabled{background-position:-32px -272px}
.t-rtl .t-minus,.t-rtl .t-minus-disabled{background-position:-1px -272px}
.t-grid .t-header .t-link .t-arrow-down{background-position:0 -256px}
.t-grid .t-header .t-link .t-arrow-up{background-position:-16px -256px}
.t-loading,.t-widget .t-loading{background:transparent url('Sitefinity/loading.gif') no-repeat 0 0}
.t-widget{color:#000}
.t-link,.t-popup{color:#105cd6}
.t-group,.t-content,.t-editable-area{border-color:#ccc #666 #666 #ccc;background-color:#fff;border-width:1px 2px 2px 1px}
.t-window-content{border-width:0}
.t-colorpicker .t-arrow-down{border-color:#ccc}
.t-separator{border-color:#fff;background-color:#999}
.t-alt{background:0}
.t-state-default{border-color:#eee}
.t-active-filter{background-color:#e5e5e5}
.t-state-hover{border-color:#dee2e7}
.t-state-active{background-color:#fff;border-color:#ccc}
.t-state-selected{background-color:#ffffe1}
.t-state-focused{background-color:#fffacd}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#e50000}
.t-button{border-width:1px 2px 2px 1px;border-color:#ccc #666 #666 #ccc;color:#333;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:#f1f1f1}
.t-button:hover{background:#fff}
.t-state-disabled,.t-state-disabled .t-link,.t-state-disabled .t-button{color:#afaeae;border-color:#ccc}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#ccc;background-color:transparent}
.t-widget .t-status{border:0}
.t-autocomplete{border-width:1px;border-style:solid}
.t-combobox .t-state-default,.t-dropdown .t-state-default{border-color:#ccc}
.t-grid th.t-header,.t-grid th.t-header .t-link{letter-spacing:1px;text-transform:uppercase;font-size:.866em;line-height:2.6em;color:#666;background:0}
.t-grid-header-wrap,.t-grid-footer-wrap{border-color:#eee}
.t-grid .t-header,.t-grid td{border-bottom-width:1px;border-color:#eee}
.t-grid .t-grid-filter{border-left:0}
.t-grouping-header .t-group-indicator{color:#333;border-color:#ccc}
.t-grouping-dropclue{background:url('Sitefinity/sprite.png') no-repeat -48px -288px}
.t-treeview .t-drop-clue{background-image:url('Sitefinity/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#999}
.t-group-footer td,.t-footer-template td,.t-grid-footer{border-color:#eee #fff}
.t-grid-pager .t-state-hover{border-color:#ccc;color:#002bb8;background:#f0f0f0}
.t-menu .t-state-hover,.t-panelbar .t-state-hover,.t-tabstrip .t-state-hover{color:#002bb8}
.t-tabstrip{border:1px solid #ccc}
.t-tabstrip .t-state-default,.t-tabstrip .t-state-disabled{border-bottom-color:#ccc}
.t-panelbar .t-link,.t-panelbar .t-group,.t-panelbar .t-content{border-color:#aaa}
.t-calendar th{border-color:#ddd}
.t-other-month .t-link{color:#777}
.t-treeview-lines .t-top,.t-treeview-lines .t-mid,.t-treeview-lines .t-bot{background-image:url('Sitefinity/treeview-nodes.png')}
.t-rtl .t-treeview-lines .t-top,.t-rtl .t-treeview-lines .t-mid,.t-rtl .t-treeview-lines .t-bot{background-image:url('Sitefinity/treeview-nodes-rtl.png')}
.t-treeview-lines .t-item{background-image:url('Sitefinity/treeview-line.png')}
.t-treeview-lines .t-last{background-image:none}
.t-window,.t-drag-clue{background-color:#fff}
/*Slider*/.t-slider .t-draghandle{background-image:url('Sitefinity/sprite.png');color:#000}
.t-slider-track{border-color:#e8e9ea}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Sitefinity/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Sitefinity/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Sitefinity/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Sitefinity/slider-v.gif')}
/*Tooltip*/.t-tooltip{border-width:1px;background:#f1f1f1;color:#333}
.t-callout{background-image:url('Sitefinity/sprite.png')}
/* Splitter */div.t-splitter{border:1px solid #ccc}
.t-splitbar-vertical,.t-splitbar-horizontal{background-color:#f1f1f1;border-color:#ccc}
.t-splitbar-vertical-hover,.t-splitbar-horizontal-hover{background-color:#ddd}
.t-splitbar-horizontal-active,.t-splitbar-vertical-active,.t-ghost-splitbar-horizontal,.t-ghost-splitbar-vertical{background-color:#ccc}
.t-restricted-size-horizontal,.t-restricted-size-vertical{background-color:#f00}
/* Upload */.t-dropzone-active{border-color:#aaa}
.t-dropzone-hovered{background-color:#efefef}
.t-dropzone em{color:#999}
.t-upload-files{border-width:0}
.t-progress,.t-progress-status{background-image:url('Sitefinity/sprite.png')}
.t-progress{background-position:0 -465px;border-color:#f8f8f8 transparent #cacaca}
.t-progress-status{background-position:0 -471px;border-color:#62962a transparent #4e8315}
/* ImageBrowser */.t-imagebrowser .t-content{background:#efefef}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label{color:#999}
.t-tiles-arrange a{color:#000}
.t-tiles{border-color:#ccc;background:#fff}
.t-tile{border-color:#fff}
.t-tiles li.t-state-hover{border-color:#abadb3}
.t-tiles li.t-state-selected{border-color:#abadb3;background-color:#999;color:#fff}
.t-tile .t-folder{background-image:url('Telerik/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#999}
.t-tiles li.t-state-selected em,.t-tiles li.t-state-selected .t-filesize{color:#d2d2d2}
.t-tile-empty strong{color:#9b9b9b}

@ -1,82 +0,0 @@
/* Sunset theme*/.t-widget,.t-input{border-color:#714734;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#ececd8}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#854324;background:#90330a url('Sunset/sprite.png') repeat-x 0 -752px}
.t-icon{background-image:url('Sunset/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Sunset/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('Sunset/loading.gif') no-repeat 0 0}
.t-widget,.t-link,.t-popup{color:#333}
.t-header,.t-header .t-link,.t-grid-header .t-header .t-link,.t-grid-header .t-header,.t-state-active .t-header .t-state-default .t-link /*nested tabstrips*/{color:#fbfbc7}
.t-header .t-group,.t-group .t-link{color:#333}
.t-group,.t-content,.t-editable-area{border-color:#bbb99d;background-color:#ececd8}
.t-colorpicker .t-arrow-down{border-color:#714734}
.t-separator{border-color:#a85835;background-color:#7c2f0c}
.t-alt{background-color:#fff}
.t-state-default{border-color:#854324}
.t-active-filter{background-color:#d25e21}
.t-state-selected{border-color:#904c23;background-color:#ea9959}
.t-state-hover,.t-state-hover .t-link,.t-group .t-state-hover{color:#fff}
.t-state-hover,.t-state-hover:hover{background-color:#c5551c;border-color:#854324}
.t-state-focused{background-color:#cdccb3}
.t-state-active{background-color:#ececd8;border-color:#854324}
.t-state-active,.t-state-active .t-link,.t-state-active .t-tabstrip .t-state-active .t-link /*nested tabstrips*/{color:#333}
.t-state-active .t-header,.t-state-active .t-state-hover{color:#fff}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#f00;background-color:#ffc0cb}
.t-button{border-color:#d1711a;color:#2d0e06}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:#d1711a url('Sunset/sprite.png') repeat-x 0 -560px}
.t-button:hover{border-color:#e7941e;background-position:0 -624px;background-color:#e8961e}
.t-state-disabled,.t-state-disabled:hover,.t-state-disabled .t-link,.t-state-disabled .t-button{border-color:#666;color:#bf9e8f}
a.t-button.t-state-disabled,button.t-button.t-state-disabled,.t-state-disabled .t-button{color:#b83b01;border-color:#d1711a}
.t-header .t-state-disabled,.t-header .t-state-disabled .t-link{border-color:#a04a23}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#bbb99d;background-color:#dee0c8}
.t-panelbar .t-link{border-color:#714734}
.t-editor-button .t-state-active{background-color:#d3751a}
.t-grid-header-wrap{border-color:#854324}
.t-grid-footer-wrap{border-color:#cabaab}
.t-grid td{border-color:#ddd}
.t-grouping-row td{background:#fff url('Sunset/sprite.png') repeat-x 0 -48px}
.t-footer-template td{background-color:#dee0c8;border-color:#cabaab #dee0c8 #f1e9dc}
.t-group-footer td{background-color:#dee0c8;border-color:#cabaab}
.t-grid-footer,.t-grid-footer-wrap table{background-color:#dee0c8;border-color:#cabaab}
.t-grouping-header .t-group-indicator{color:#333;border-color:#999}
.t-grouping-dropclue{background:url('Sunset/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#fff}
.t-treeview .t-drop-clue{background-image:url('Sunset/sprite.png');background-position:0 -358px}
.t-calendar th{border-color:#d2c7b4}
.t-other-month .t-link{color:#777}
.t-treeview-lines .t-top,.t-treeview-lines .t-mid,.t-treeview-lines .t-bot{background-image:url('Sunset/treeview-nodes.png')}
.t-rtl .t-treeview-lines .t-top,.t-rtl .t-treeview-lines .t-mid,.t-rtl .t-treeview-lines .t-bot{background-image:url('Sunset/treeview-nodes-rtl.png')}
.t-treeview-lines .t-item{background-image:url('Sunset/treeview-line.png')}
.t-treeview-lines .t-last{background-image:none}
.t-editor-button .t-state-hover{border-color:#ca734b #722205 #722205 #ca734b;background-color:#a13606}
.t-editor-button .t-state-active{border-color:#a24b0f #e09d5c #e09d5c #a24b0f;background-color:#d3751a}
/*Slider*/.t-slider .t-draghandle{background-image:url('Sunset/sprite.png');color:#714734}
.t-slider-track{border-color:#c6c0a8}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Sunset/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Sunset/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Sunset/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Sunset/slider-v.gif')}
/*Tooltip*/.t-tooltip{border-color:#c0bca2;background:#d6ceba 0 -96px repeat-x url('Sunset/sprite.png');color:#2d0e06}
.t-callout{background-image:url('Sunset/sprite.png')}
/* Splitter */.t-splitter{border-color:#cac8ab}
.t-splitbar-vertical,.t-splitbar-horizontal{background-color:#ececd8;border-color:#cac8ab}
.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Sunset/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Sunset/sprite-vertical.png')}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#bbb99d}
.t-dropzone-hovered,.t-upload-files{background-color:#f5f5e6}
.t-dropzone em{color:#714734}
.t-progress,.t-progress-status{background-image:url('Sunset/sprite.png')}
.t-progress{background-position:0 -465px;border-color:#cfc5b1 #cbc6af #c2bda4}
.t-progress-status{background-position:0 -472px;border-color:#2b140d transparent #593324}
/* ImageBrowser */.t-imagebrowser .t-content{background:#dee0c8}
.t-breadcrumbs .t-link{color:#2d0e06}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label{color:#714734}
.t-tiles-arrange{color:#714734}
.t-tiles-arrange a{color:#2d0e06}
.t-tiles{border-color:#bbb99d;background:#fff}
.t-tile{border-color:#fff;background:0 100px repeat-x url('Sunset/imagebrowser.png')}
.t-tiles li.t-state-hover{border-color:#e7941e;background-position:0 0}
.t-tiles li.t-state-selected{border-color:#854324;background-position:0 -100px;color:#fff}
.t-tile .t-folder{background-image:url('Sunset/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#986011}
.t-tiles li.t-state-selected em,.t-tiles li.t-state-selected .t-filesize{color:#dbaa93}
.t-tile-empty strong{color:#ae9b87}

@ -1,75 +0,0 @@
/* Telerik theme*/.t-widget,.t-input{border-color:#828282;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#fff}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#828282;background:#f6f6f6 url('Telerik/sprite.png') repeat-x 0 -752px}
.t-icon{background-image:url('Telerik/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Telerik/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('Telerik/loading.gif') no-repeat 0 0}
.t-widget,.t-link:link,.t-link:active,.t-link:visited,.t-popup{color:#000}
.t-group,.t-content,.t-editable-area{border-color:#828282;background-color:#fff}
.t-colorpicker .t-arrow-down{border-color:#828282}
.t-separator{border-color:#f3f3f3;background-color:#bdbdbd}
.t-alt{background-color:#f7f7f7}
.t-state-default{border-color:#828282}
.t-active-filter{background-color:#dfdfdf}
.t-state-hover,.t-state-hover:hover{background-color:#b6f0a3;border-color:#28a900}
.t-state-active{background-color:#fff;border-color:#28a900}
.t-state-selected{background-color:#8cc569}
.t-state-focused{background-color:#d4ffc5}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#f00;background-color:#ffc0cb}
.t-button{border-color:#828282;color:#333}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:#f6f6f6 url('Telerik/sprite.png') repeat-x 0 -560px}
.t-button:hover{background-position:0 -624px;background-color:#a2ea8b}
.t-state-disabled,.t-state-disabled .t-link,.t-state-disabled .t-button{color:#999}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#aaa;background-color:#eee}
.t-grid-header-wrap,.t-grid-footer-wrap{border-color:#828282}
.t-grid td{border-color:#ddd}
.t-grouping-row td{background:#fff url('Telerik/sprite.png') repeat-x 0 -48px}
.t-footer-template td{background-color:#eee;border-color:#828282 #eee #fff}
.t-group-footer td{background-color:#eee;border-color:#828282}
.t-grid-footer,.t-grid-footer-wrap table{background-color:#eee;border-color:#828282}
.t-grouping-header .t-group-indicator{color:#333;border-color:#ccc}
.t-grouping-dropclue{background:url('Telerik/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#fff}
.t-treeview .t-drop-clue{background-image:url('Telerik/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#1c7600}
.t-panelbar .t-link,.t-panelbar .t-group,.t-panelbar .t-content{border-color:#aaa}
.t-calendar th{border-color:#c5c5c5}
.t-other-month .t-link{color:#777}
.t-treeview-lines .t-top,.t-treeview-lines .t-mid,.t-treeview-lines .t-bot{background-image:url('Telerik/treeview-nodes.png')}
.t-rtl .t-treeview-lines .t-top,.t-rtl .t-treeview-lines .t-mid,.t-rtl .t-treeview-lines .t-bot{background-image:url('Telerik/treeview-nodes-rtl.png')}
.t-treeview-lines .t-item{background-image:url('Telerik/treeview-line.png')}
.t-treeview-lines .t-last{background-image:none}
.t-editor-button .t-state-hover{border-color:#d6f1cd #809a77 #809a77 #d6f1cd;background-color:#c0e9b3}
.t-editor-button .t-state-active{border-color:#8c8c8c #d8d8d8 #d8d8d8 #8c8c8c;background-color:#c4c4c4}
/*Slider*/.t-slider .t-draghandle{background-image:url('Telerik/sprite.png');color:#828282}
.t-slider-track{border-color:#a5a5a5}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Telerik/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Telerik/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Telerik/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Telerik/slider-v.gif')}
/*Tooltip*/.t-tooltip{border-color:#cccab0;background:#f6f6f6 0 -557px repeat-x url('Telerik/sprite.png')}
.t-callout{background-image:url('Telerik/sprite.png')}
/* Splitter */.t-splitter{border-color:#aaa}
.t-splitbar-vertical,.t-splitbar-horizontal{background-color:#eee;border-color:#aaa}
.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Telerik/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Telerik/sprite-vertical.png')}
.t-restricted-size-horizontal,.t-restricted-size-vertical{background-color:#f00}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#abadb3}
.t-dropzone-hovered,.t-upload-files{background-color:#f1f1f1}
.t-dropzone em{color:#999}
.t-progress,.t-progress-status{background-image:url('Telerik/sprite.png')}
.t-progress{background-position:0 -465px;border-color:#b4b4b4 #cbc6af #c2bda4}
.t-progress-status{background-position:0 -472px;border-color:#9bcc76 transparent #63af3a}
/* ImageBrowser */.t-imagebrowser .t-content{background:#f1f1f1}
.t-breadcrumbs .t-link{color:#666}
.t-breadcrumbs .t-link:hover{color:#000}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label{color:#999}
.t-tiles-arrange{color:#666}
.t-tiles-arrange a{color:#000}
.t-tiles{border-color:#e2e3ea;background:#fff}
.t-tile{border-color:#fff;background:0 100px repeat-x url('Telerik/imagebrowser.png')}
.t-tiles li.t-state-hover{border-color:#abadb3;background-position:0 0}
.t-tiles li.t-state-selected{border-color:#abadb3;background-position:0 -100px}
.t-tile .t-folder{background-image:url('Telerik/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#666}
.t-tile-empty strong{color:#9e9e9e}

@ -1,73 +0,0 @@
/* Transparent theme*/.t-widget,div.t-combobox,.t-input{border-color:#c5c5c5;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background:url('Transparent/widget.png')}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header,.t-grouping-header,.t-tooltip,.t-grid-pager{border-color:#c5c5c5;background:url('Transparent/gradient.png') repeat-x 0 center}
.t-menu-vertical,.t-editor,.t-tooltip,.t-tabstrip{background-position:0 -48px}
.t-icon{background-image:url('Transparent/sprite.png')}
.t-editor .t-editor-toolbar .t-tool-icon{background-image:url('Transparent/editor.png')}
.t-picker-wrap{padding-right:23px}
.t-loading,.t-widget .t-loading{background:transparent url('Transparent/loading.gif') no-repeat 0 0}
.t-widget,.t-link:link,.t-link:active,.t-link:visited,.t-state-hover .t-link:hover,.t-popup,.t-grid .t-header{color:#000}
.t-animation-container .t-group{background:url('Transparent/group.png');border-color:#e0e0e0}
.t-animation-container .t-content,.t-editable-area{border-color:#c5c5c5;background:url('Transparent/group.png')}
.t-colorpicker .t-arrow-down{border-color:#c5c5c5}
.t-separator{border-color:#c5c5c5;background-color:#fff}
.t-alt{background:url('Transparent/widget.png')}
.t-state-default{border-color:#c5c5c5}
.t-active-filter{background:url('Transparent/active.png')}
.t-state-hover,.t-state-hover:hover{background-image:url('Transparent/hover.png');border-color:#999;color:#000}
.t-state-active,.t-header .t-state-active{background-image:url('Transparent/active.png');border-color:#c5c5c5}
.t-panelbar .t-item.t-state-active{background-image:none}
.t-state-selected{background-image:url('Transparent/selected.png');border-color:#aaa}
.t-state-selected,.t-state-selected .t-link,a.t-state-selected.t-link{color:#fff}
.t-state-focused{background:url('Transparent/hover.png')}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{color:#f20000}
.t-button{border-color:#c5c5c5;color:#333}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:url('Transparent/gradient.png') repeat-x 0 center}
.t-button:hover{color:#000}
.t-state-disabled,.t-state-disabled:hover,.t-state-disabled .t-link,.t-state-disabled .t-button{color:#777;border-color:#c5c5c5}
.t-combobox .t-input{background:transparent}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-group-footer td,.t-grid-footer,.t-footer-template td,.t-widget .t-status{border-color:#c5c5c5;background:url('Transparent/toolbar.png')}
.t-imagebrowser .t-toolbar{background-repeat:repeat}
.t-widget .t-status{background:none transparent}
.t-grid-header-wrap,.t-grid-footer-wrap,.t-grid td{border-color:#c5c5c5}
.t-grouping-header .t-group-indicator{border-color:#c5c5c5}
.t-grouping-dropclue{background:url('Transparent/sprite.png') no-repeat -48px -288px}
.t-treeview .t-drop-clue{background-image:url('Transparent/sprite.png');background-position:0 -358px}
.t-panelbar .t-link,.t-panelbar .t-group,.t-panelbar .t-content{border-color:#c5c5c5}
.t-calendar th{border-color:#d3d6da;background:url('Transparent/toolbar.png')}
.t-other-month .t-link{color:#666}
/* TabStrip */.t-tabstrip-items .t-state-active,.t-panelbar .t-tabstrip-items .t-state-active{margin-bottom:0}
.t-tabstrip .t-content,.t-panelbar .t-tabstrip .t-content{border-top-width:0}
/* Slider */.t-slider{background-image:none}
.t-slider .t-draghandle{background-image:url('Transparent/sprite.png');color:#666}
.t-slider-track{border-color:#c5c5c5}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Transparent/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Transparent/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Transparent/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Transparent/slider-v.gif')}
/* Tooltip */.t-tooltip{border-width:2px;border-color:#c5c5c5}
.t-callout{background-image:url('Transparent/sprite.png')}
.t-callout-n,.t-callout-s{width:10px;height:5px}
.t-callout-w,.t-callout-e{width:5px;height:10px}
.t-callout-n{top:-7px;left:50%;margin-left:-5px;background-position:-64px -368px}
.t-callout-w{left:-7px;top:50%;margin-top:-5px;background-position:-64px -384px}
.t-callout-s{top:100%;left:50%;margin-left:-5px;margin-top:2px;background-position:-64px -400px}
.t-callout-e{left:100%;top:50%;margin-top:-5px;margin-left:2px;background-position:-64px -416px}
/* Splitter */.t-splitbar{border-color:#c5c5c5;background:url('Transparent/toolbar.png')}
.t-splitbar .t-icon{background-image:url('Transparent/sprite.png')}
.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Transparent/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Transparent/sprite-vertical.png');background-color:transparent}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#c5c5c5}
.t-dropzone-hovered,.t-upload-files{background:url('Transparent/toolbar.png')}
.t-dropzone em{color:#c5c5c5}
.t-progress,.t-progress-status{background-image:url('Transparent/sprite.png')}
.t-progress{background-position:0 -464px;border-color:#c5c5c5}
.t-progress-status{background-position:0 -472px;border-color:transparent}
/* ImageBrowser */.t-tiles{border-color:#c5c5c5;background:url('Transparent/alt.png')}
.t-tile{border-color:#fff;background-image:url('Transparent/gradient.png');background-position:0 100px;background-repeat:repeat-x}
.t-tiles li.t-state-hover{border-color:#999;background-position:0 0}
.t-tiles li.t-state-selected{border-color:#aaa;background-position:0 0}
.t-tile .t-folder{background-image:url('Transparent/imagebrowser.png')}
.t-tile-empty strong{color:#aaa}
/* Window */.t-window-content{background:url('Transparent/group.png')}
.t-window-actions{background:0}

@ -1,68 +0,0 @@
/** Vista theme **/.t-widget,.t-input{border-color:#a7bac5;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#fff}
/* since vista is a theme,based on an operating system,it has a custom font-family */.t-widget,.t-widget button,.t-widget input,.t-widget select,.t-button,.t-formatted-value{font-family:"Segoe UI",Arial,sans-serif}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#a7bac5;background:#a6d9f4 url('Vista/sprite.png') repeat-x 0 -752px}
.t-icon{background-image:url('Vista/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Vista/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('Vista/loading.gif') no-repeat 0 0}
.t-widget,.t-link:link,.t-link:active,.t-link:visited,.t-popup{color:#000}
.t-group,.t-content,.t-editable-area{border-color:#a7bac5;background-color:#fff}
.t-colorpicker .t-arrow-down{border-color:#a7bac5}
.t-separator{border-color:#eaf6fd;background-color:#a7bac5}
.t-alt{background-color:#f7f7f7}
.t-state-default{border-color:#a7bac5}
.t-active-filter{background-color:#ceeefd}
.t-state-hover,.t-state-hover:hover{background-color:#e3f4fc;border-color:#a7bac5}
.t-state-active{background-color:#fff;border-color:#a7bac5}
.t-state-selected{background-color:#c8e8f8}
.t-state-focused{background-color:#90c5e1}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#f00;background-color:#ffc0cb}
.t-button{border-color:#a7bac5;color:#333}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:#d1d1d1 url('Vista/sprite.png') repeat-x 0 -560px}
.t-button:hover{background-position:0 -624px;background-color:#a7daf4}
.t-state-disabled,.t-state-disabled .t-link,.t-state-disabled .t-button{color:#999;border-color:#bbb}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#bbb;background-color:#eff7fc}
.t-grid-header-wrap,.t-grid-footer-wrap{border-color:#a7bac5}
.t-grid td{border-color:#ddd}
.t-grouping-row td{background:#fff url('Vista/sprite.png') repeat-x 0 -48px}
.t-footer-template td{background-color:#e0e5f5;border-color:#aec5d1 #e0e5f5 #fff}
.t-group-footer td{background-color:#e0e5f5;border-color:#aec5d1}
.t-grid-footer,.t-grid-footer-wrap table{background-color:#e0e5f5;border-color:#aec5d1}
.t-grouping-header .t-group-indicator{color:#333;border-color:#ccc}
.t-grouping-dropclue{background:url('Vista/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#fff}
.t-grouping-row p{margin-left:-.6em;padding-left:.6em}
.t-treeview .t-drop-clue{background-image:url('Vista/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#99defd}
.t-panelbar .t-link,.t-panelbar .t-group,.t-panelbar .t-content{border-color:#aaa}
.t-calendar th{border-color:#e0e0e0}
.t-other-month .t-link{color:#777}
.t-editor-button .t-state-hover{border-color:#ebf6fd #88a1af #88a1af #ebf6fd;background-color:#c9e8fa}
.t-editor-button .t-state-active{border-color:#809eae #bae1f5 #bae1f5 #809eae;background-color:#95cfec}
/*Slider*/.t-slider .t-draghandle{background-image:url('Vista/sprite.png');color:#333}
.t-slider-track{border-color:#d3dce2}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Vista/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Vista/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Vista/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Vista/slider-v.gif')}
/*Tooltip*/.t-tooltip{border-color:#767676;background:#e4e5f0 0 -96px repeat-x url('Vista/sprite.png')}
.t-callout{background-image:url('Vista/sprite.png')}
/* Splitter */.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Vista/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Vista/sprite-vertical.png')}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#d2dfe6}
.t-dropzone-hovered,.t-upload-files{background-color:#eff7fc}
.t-dropzone em{color:#a7bac5}
.t-progress,.t-progress-status{background-image:url('Vista/sprite.png')}
.t-progress{background-position:0 -467px;border-color:#bfd0da #c4d4dd}
.t-progress-status{background-position:0 -471px;border-color:#1db2ee transparent #0067c2}
/* ImageBrowser */.t-imagebrowser .t-content{background:#f1f1f1}
.t-breadcrumbs .t-link{color:#666}
.t-breadcrumbs .t-link:hover{color:#06c}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label{color:#777d81}
.t-tiles{border-color:#a7bac5;background:#fff}
.t-tile{border-color:#fff;background:0 100px repeat-x url('Vista/imagebrowser.png')}
.t-tiles li.t-state-hover{border-color:#99defd;background-position:0 0}
.t-tiles li.t-state-selected{border-color:#9bd3f0;background-position:0 -100px}
.t-tile .t-folder{background-image:url('Vista/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#767d80}
.t-tile-empty strong{color:#a7bac5}

@ -1,82 +0,0 @@
/* Web20 theme*/.t-widget,.t-input{border-color:#4e75b3;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#fff}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#4a70ae;background:#7fa5d7 url('Web20/sprite.png') repeat-x 0 -752px}
.t-icon{background-image:url('Web20/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Web20/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('Web20/loading.gif') no-repeat 0 0}
.t-widget,.t-link,.t-popup{color:#333}
.t-header,.t-header .t-link{color:#fff}
.t-header .t-group,.t-group .t-link{color:#333}
.t-group,.t-content,.t-editable-area{border-color:#4a70ae;background-color:#fff}
.t-colorpicker .t-arrow-down{border-color:#4e75b3}
.t-separator{border-color:#93b2dc;background-color:#688bbb}
.t-alt{background-color:#fff}
.t-state-default{border-color:#4a70ae}
.t-active-filter{background-color:#87a6d4}
.t-state-hover,.t-state-hover .t-link,.t-header .t-state-hover,.t-group .t-state-hover{color:#333}
.t-state-hover,.t-state-hover:hover{background-color:#a4c2f1;border-color:#4a70ae}
.t-state-active{background-color:#fff;border-color:#4a70ae}
.t-state-active,.t-state-active .t-link,.t-state-active .t-header .t-state-active,.t-state-active .t-header .t-state-active .t-link{color:#333}
.t-state-active .t-header,.t-state-active .t-header .t-link{color:#fff}
.t-state-active .t-state-hover,.t-state-active .t-header .t-state-hover .t-link{color:#333}
.t-state-selected{background-color:#d4ffbc}
.t-state-focused{background-color:#e3eeff}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#f00;background-color:#ffc0cb}
.t-button{border-color:#4a70ae;color:#fff}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:#607fc5 url('Web20/sprite.png') repeat-x 0 -560px}
.t-button:hover{background-position:0 -624px;background-color:#c1d5ef;color:#0f3789}
.t-state-disabled,.t-state-disabled:hover,.t-state-disabled .t-link,.t-state-disabled .t-button{color:#abb9de}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#829cbf;background-color:#e3eeff}
.t-panelbar .t-link{border-color:#4a70ae}
.t-grid-header-wrap{border-color:#4a70ae}
.t-grid-footer-wrap{border-color:#829cbf}
.t-grid td{border-bottom-width:1px;border-color:#cfd9e7 #829cbf}
.t-grouping-row td{background:#fff url('Web20/sprite.png') repeat-x 0 -48px}
.t-footer-template td{background-color:#e3eeff;border-color:#829cbf #e3eeff #fff}
.t-group-footer td{background-color:#e3eeff;border-color:#829cbf}
.t-grid-footer,.t-grid-footer-wrap table{background-color:#e3eeff;border-color:#829cbf}
.t-grouping-header .t-group-indicator{color:#333;border-color:#ccc}
.t-grouping-dropclue{background:url('Web20/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#fff}
.t-treeview .t-drop-clue{background-image:url('Web20/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#85c843}
.t-editor-button .t-state-active{background-color:#4567ba}
.t-calendar th{background-color:#ecf4ff;border-color:#bcd2f1}
.t-other-month .t-link{color:#777}
.t-treeview-lines .t-top,.t-treeview-lines .t-mid,.t-treeview-lines .t-bot{background-image:url('Web20/treeview-nodes.png')}
.t-rtl .t-treeview-lines .t-top,.t-rtl .t-treeview-lines .t-mid,.t-rtl .t-treeview-lines .t-bot{background-image:url('Web20/treeview-nodes-rtl.png')}
.t-treeview-lines .t-item{background-image:url('Web20/treeview-line.png')}
.t-treeview-lines .t-last{background-image:none}
.t-drag-clue{color:#fff}
.t-editor-button .t-state-hover{border-color:#8ea9d1 #385b9d #385b9d #8ea9d1;background-color:#7fa5d7}
.t-editor-button .t-state-active{border-color:#3a5c9d #89a2cc #89a2cc #3a5c9d;background-color:#567cb8}
/*Slider*/.t-slider .t-draghandle{background-image:url('Web20/sprite.png');color:#4e75b3}
.t-slider-track{border-color:#7794c3}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Web20/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Web20/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Web20/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Web20/slider-v.gif')}
/*Tooltip*/.t-tooltip{border-color:#b2c5e4;background:#bed4f6 0 -96px repeat-x url('Web20/sprite.png');color:#0f3789}
.t-callout{background-image:url('Web20/sprite.png')}
/* Splitter */.t-splitter{border-color:#829cbf}
.t-splitbar-vertical,.t-splitbar-horizontal{background-color:#93add4;border-color:#829cbf}
.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Web20/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Web20/sprite-vertical.png')}
.t-restricted-size-horizontal,.t-restricted-size-vertical{background-color:#f00}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#829cbf}
.t-dropzone-hovered,.t-upload-files{background-color:#cedcef}
.t-dropzone em{color:#747886}
.t-progress,.t-progress-status{background-image:url('Web20/sprite.png')}
.t-progress{background-position:0 -465px;border-color:#7996c6 #819dca #7996c6}
.t-progress-status{background-position:0 -472px;border-color:#e1ff86 transparent #82eb30}
/* ImageBrowser */.t-imagebrowser .t-content{background:#c1d5ef}
.t-toolbar .t-upload .t-button,.t-breadcrumbs .t-link,.t-tiles-arrange,.t-tiles-arrange a{color:#102152}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label{color:#747886}
.t-tiles{border-color:#829cbf;background:#fff}
.t-tile{border-color:#fff;background:0 100px repeat-x url('Web20/imagebrowser.png')}
.t-tiles li.t-state-hover{border-color:#4a70ae;background-position:0 0;color:#fff}
.t-tiles li.t-state-selected{border-color:#29448b;background-position:0 -100px;color:#fff}
.t-tile .t-folder{background-image:url('Web20/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#747886}
.t-tiles li.t-state-hover em,.t-tiles li.t-state-hover .t-filesize .t-tiles li.t-state-selected em,.t-tiles li.t-state-selected .t-filesize{color:#b3c4ef}
.t-tile-empty strong{color:#a5bce0}

@ -1,83 +0,0 @@
/* WebBlue theme*/.t-widget,.t-input{border-color:#768ca5;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#fff}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#426682;background:#718ca1 url('WebBlue/sprite.png') repeat-x 0 -752px}
.t-icon{background-image:url('WebBlue/sprite.png')}
.t-editor .t-tool-icon{background-image:url('WebBlue/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('WebBlue/loading.gif') no-repeat 0 0}
.t-widget,.t-link,.t-popup{color:#333}
.t-header,.t-header .t-link,.t-state-active .t-header .t-state-default .t-link /*nested tabstrips*/{color:#fff}
.t-header .t-group,.t-group .t-link{color:#333}
.t-group,.t-content,.t-editable-area{border-color:#426682;background-color:#fff}
.t-colorpicker .t-arrow-down{border-color:#768ca5}
.t-separator{border-color:#8aa0b1;background-color:#516273}
.t-alt{background-color:#dae2e8}
.t-state-default{border-color:#426682}
.t-active-filter{background-color:#8dc1d7}
.t-state-active{background-color:#fff;border-color:#426682}
.t-state-active,.t-state-active .t-link,.t-state-active .t-tabstrip .t-state-active .t-link /*nested tabstrips*/{color:#333}
.t-state-active .t-header{color:#fff}
.t-state-active .t-state-hover{color:#333}
.t-state-selected{background-color:#3e94b4}
.t-state-focused{background-color:#9bacbe}
.t-state-selected,.t-state-selected .t-link,.t-state-selected.t-link{color:#fff}
.t-state-hover,.t-state-hover .t-link,.t-state-hover.t-link,.t-header .t-state-hover,.t-group .t-state-hover{color:#333}
.t-state-hover,.t-state-hover:hover{background-color:#acd4e3;border-color:#5d9fb7;/*426682*/}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#f00;background-color:#ffc0cb}
.t-button{border-color:#426682;color:#0d202b}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{background:#d6e1e7 url('WebBlue/sprite.png') repeat-x 0 -560px}
.t-button:hover{background-position:0 -624px;background-color:#bee3f6;color:#0e3d4f}
.t-state-disabled,.t-state-disabled:hover,.t-state-disabled .t-link{color:#bbb}
.t-button.t-state-disabled,.t-button.t-state-disabled:hover,.t-state-disabled .t-button{color:#657c8c}
.t-header .t-state-disabled,.t-header .t-state-disabled .t-link{color:#abc0d3}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#a2b3c7;background-color:#dae2e8}
.t-panelbar .t-link{border-color:#333}
.t-grid-header-wrap{border-color:#426682}
.t-grid-footer-wrap{border-color:#a2b3c7}
.t-grid td{border-color:#dae2e8}
.t-grouping-row td{background:#fff url('WebBlue/sprite.png') repeat-x 0 -48px}
.t-footer-template td{background-color:#dae2e8;border-color:#a2b3c7 #dae2e8 #fff}
.t-group-footer td{background-color:#dae2e8;border-color:#a2b3c7}
.t-grid-footer,.t-grid-footer-wrap table{background-color:#dae2e8;border-color:#a2b3c7}
.t-grouping-header .t-group-indicator{color:#333;border-color:#aaa}
.t-grouping-dropclue{background:url('WebBlue/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#fff}
.t-treeview .t-drop-clue{background-image:url('WebBlue/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#133C44}
.t-editor-button .t-state-active{background-color:#a2b9c9}
.t-calendar th{background-color:#dfeeff;border-color:#a7c0df}
.t-other-month .t-link{color:#777}
.t-treeview-lines .t-top,.t-treeview-lines .t-mid,.t-treeview-lines .t-bot{background-image:url('WebBlue/treeview-nodes.png')}
.t-rtl .t-treeview-lines .t-top,.t-rtl .t-treeview-lines .t-mid,.t-rtl .t-treeview-lines .t-bot{background-image:url('WebBlue/treeview-nodes-rtl.png')}
.t-treeview-lines .t-item{background-image:url('WebBlue/treeview-line.png')}
.t-treeview-lines .t-last{background-image:none}
.t-editor-button .t-state-hover{border-color:#5f7c95 #3b576f #3b576f #5f7c95;background-color:#5f7c95}
.t-editor-button .t-state-active{border-color:#5b758e #97b5c7 #97b5c7 #5b758e;background-color:#8ca5b8}
/*Slider*/.t-slider .t-draghandle{background-image:url('WebBlue/sprite.png');color:#768ca5}
.t-slider-track{border-color:#c1cbd6}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('WebBlue/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('WebBlue/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('WebBlue/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('WebBlue/slider-v.gif')}
/*Tooltip*/.t-tooltip{border-color:#a7c0df;background:#c4d4dd 0 -96px repeat-x url('WebBlue/sprite.png');color:#0d202b}
.t-callout{background-image:url('WebBlue/sprite.png')}
/* Splitter */.t-splitter{border-color:#a2b3c7}
.t-splitbar-vertical,.t-splitbar-horizontal{background-color:#b4c5d9;border-color:#a2b3c7}
.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('WebBlue/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('WebBlue/sprite-vertical.png')}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#a2b3c7}
.t-dropzone-hovered,.t-upload-files{background-color:#dae2e8}
.t-dropzone em{color:#8a98a8}
.t-progress,.t-progress-status{background-image:url('WebBlue/sprite.png')}
.t-progress{background-position:0 -465px;border-color:#92a4b8 #adbac9 #a2b3c7}
.t-progress-status{background-position:0 -472px;border-color:#a4ff91 transparent #5aff62}
/* ImageBrowser */.t-imagebrowser .t-content{background:#dae2e8}
.t-toolbar .t-upload .t-button,.t-breadcrumbs .t-link,.t-tiles-arrange,.t-tiles-arrange a{color:#0e3d4f}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label{color:#8a98a8}
.t-tiles{border-color:#a2b3c7;background:#fff}
.t-tile{border-color:#fff;background:0 100px repeat-x url('WebBlue/imagebrowser.png');color:#0e3d4f}
.t-tiles li.t-state-hover{border-color:#4a70ae;background-position:0 0}
.t-tiles li.t-state-selected{border-color:#768ca5;background-position:0 -100px;color:#fff}
.t-tile .t-folder{background-image:url('WebBlue/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#8a98a8}
.t-tiles li.t-state-selected em,.t-tiles li.t-state-selected .t-filesize{color:#b2c5d2}
.t-tile-empty strong{color:#b3c6d3}

@ -1,72 +0,0 @@
/* Windows7 theme*/.t-widget,.t-input{border-color:#a5b3c5;/*font-size:.75em;/* 12px base,if there are no inherited font-sizes(MVC default) */background-color:#fcfcfc}
/* .small .t-widget{font-size:.687em}
/* 11px base,if there are no inherited font-sizes(MVC default) */.t-header,.t-grid-header{border-color:#a5b3c5;background:#f1f5fb}
.t-icon{background-image:url('Windows7/sprite.png')}
.t-editor .t-tool-icon{background-image:url('Windows7/editor.png')}
.t-loading,.t-widget .t-loading{background:transparent url('Windows7/loading.gif') no-repeat 0 0}
.t-widget,.t-link,.t-popup{color:#000}
.t-header,.t-header .t-link{color:#4c607a}
.t-header .t-group,.t-group .t-link{color:#333}
.t-group,.t-content,.t-editable-area{border-color:#a5b3c5;background-color:#fcfcfc}
.t-colorpicker .t-arrow-down{border-color:#a5b3c5}
.t-separator{border-color:#fff;background-color:#c2cedb}
.t-alt{background-color:#ebeff3}
.t-state-default{border-color:#a5b3c5}
.t-active-filter{background-color:#c3dcfa}
.t-state-hover,.t-state-hover .t-link,.t-header .t-state-hover,.t-group .t-state-hover{color:#000}
.t-state-hover,.t-state-hover:hover{background-color:#d1e4fc;border-color:#8daed5}
.t-state-active{background-color:#fff;border-color:#426682}
.t-state-selected{background-color:#deecfe}
.t-state-focused{background-color:#c4d1e0}
.t-state-error,.t-widget.input-validation-error,.t-widget .input-validation-error{border-color:#f00;background-color:#ffc0cb}
.t-button{color:#0d202b}
.t-button,button.t-button.t-state-disabled:hover,a.t-button.t-state-disabled:hover,.t-state-disabled .t-button:hover{border-color:#c2cedb;background:#e7ecf5 url('Windows7/sprite.png') repeat-x 0 -560px}
.t-button:hover{border-color:#9bc9ff;background-position:0 -624px;background-color:#dde8f6;color:#0e3d4f}
.t-state-disabled,.t-state-disabled:hover,.t-state-disabled .t-link,.t-state-disabled .t-button{color:#999}
.t-toolbar,.t-grouping-header,.t-grid-pager,.t-widget .t-status{border-color:#aec5d1;background-color:#f1f5fb}
.t-panelbar .t-link{border-color:#a5b3c5}
.t-tabstrip .t-item{border-bottom-color:#426682}
.t-grid-header-wrap,.t-grid-footer-wrap{border-color:#a5b3c5}
.t-grid td{border-color:#dae2e8}
.t-grouping-row td{background:#fff url('Windows7/sprite.png') repeat-x 0 -48px}
.t-footer-template td{background-color:#e2eaf4;border-color:#aec5d1 #e2eaf4}
.t-group-footer td{background-color:#e2eaf4;border-color:#aec5d1}
.t-grid-footer,.t-grid-footer-wrap table{background-color:#e2eaf4;border-color:#aec5d1}
.t-grouping-header .t-group-indicator{color:#333;border-color:#ccc}
.t-grouping-dropclue{background:url('Windows7/sprite.png') no-repeat -48px -288px}
.t-grouping-row .t-group-cell,.t-grouping-row p{background:#fff}
.t-treeview .t-drop-clue{background-image:url('Windows7/sprite.png');background-position:0 -358px}
.t-treeview .t-state-selected{border-color:#8fb0d6}
.t-calendar th{border-color:#d4dbe5}
.t-other-month .t-link{color:#a7a7a7}
.t-editor-button .t-state-hover{border-color:#e5f0fd #8ba6c4 #8ba6c4 #e5f0fd;background-color:#d1e4fc}
.t-editor-button .t-state-active{border-color:#aec1d6 #e3ebf5 #e3ebf5 #aec1d6;background-color:#ccdbed}
/*Slider*/.t-slider .t-draghandle{background-image:url('Windows7/sprite.png');color:#4c607a}
.t-slider-track{border-color:#a6abc3}
.t-slider-horizontal .t-slider-track,.t-slider-horizontal .t-slider-selection{background-image:url('Windows7/sprite.png')}
.t-slider-vertical .t-slider-track,.t-slider-vertical .t-slider-selection{background-image:url('Windows7/sprite-vertical.png')}
.t-slider-horizontal .t-tick{background-image:url('Windows7/slider-h.gif')}
.t-slider-vertical .t-tick{background-image:url('Windows7/slider-v.gif')}
/*Tooltip*/.t-tooltip{background:#e7ecf5 0 -560px repeat-x url('Windows7/sprite.png');color:#0e3d4f}
.t-callout{background-image:url('Windows7/sprite.png')}
/* Splitter */.t-splitter{border-color:#dae2e8}
.t-splitbar-vertical,.t-splitbar-horizontal{background-color:#f1f5fb;border-color:#dae2e8}
.t-splitbar-vertical,.t-ghost-splitbar-vertical{background-image:url('Windows7/sprite.png')}
.t-splitbar-horizontal,.t-ghost-splitbar-horizontal{background-image:url('Windows7/sprite-vertical.png')}
/* Upload */.t-dropzone-active,.t-upload-files{border-color:#c2cedb}
.t-dropzone-hovered,.t-upload-files{background-color:#f1f5fb}
.t-dropzone em{color:#a7a7a7}
.t-progress,.t-progress-status{background-image:url('Windows7/sprite.png')}
.t-progress{background-position:0 -465px;border-color:#c2cedb #c2cedb}
.t-progress-status{background-position:0 -472px;border-color:#1db2ee transparent #3186db}
/* ImageBrowser */.t-imagebrowser .t-content{background:#f1f5fb}
.t-breadcrumbs .t-link,.t-tiles-arrange,.t-tiles-arrange a{color:#1e395b}
.t-breadcrumbs .t-first,.t-breadcrumbs .t-first:hover,.t-search-wrap label{color:#a7a7a7}
.t-tiles{border-color:#c2cedb;background:#fff}
.t-tile{border-color:#fff;background:0 100px repeat-x url('Windows7/imagebrowser.png')}
.t-tiles li.t-state-hover{border-color:#b8d6fb;background-position:0 0}
.t-tiles li.t-state-selected{border-color:#7da2ce;background-position:0 -100px}
.t-tile .t-folder{background-image:url('Windows7/imagebrowser.png')}
.t-tile em,.t-tile .t-filesize{color:#a7a7a7}
.t-tiles li.t-state-selected em,.t-tiles li.t-state-selected .t-filesize{color:#7da2ce}
.t-tile-empty strong{color:#c2cedb}

@ -1,50 +0,0 @@
/**
* jQuery Validation Plugin 1.8.0
*
* http://bassistance.de/jquery-plugins/jquery-plugin-validation/
* http://docs.jquery.com/Plugins/Validation
*
* Copyright (c) 2006 - 2011 Jörn Zaefferer
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
(function(c){c.extend(c.fn,{validate:function(a){if(this.length){var b=c.data(this[0],"validator");if(b)return b;b=new c.validator(a,this[0]);c.data(this[0],"validator",b);if(b.settings.onsubmit){this.find("input, button").filter(".cancel").click(function(){b.cancelSubmit=true});b.settings.submitHandler&&this.find("input, button").filter(":submit").click(function(){b.submitButton=this});this.submit(function(d){function e(){if(b.settings.submitHandler){if(b.submitButton)var f=c("<input type='hidden'/>").attr("name",
b.submitButton.name).val(b.submitButton.value).appendTo(b.currentForm);b.settings.submitHandler.call(b,b.currentForm);b.submitButton&&f.remove();return false}return true}b.settings.debug&&d.preventDefault();if(b.cancelSubmit){b.cancelSubmit=false;return e()}if(b.form()){if(b.pendingRequest){b.formSubmitted=true;return false}return e()}else{b.focusInvalid();return false}})}return b}else a&&a.debug&&window.console&&console.warn("nothing selected, can't validate, returning nothing")},valid:function(){if(c(this[0]).is("form"))return this.validate().form();
else{var a=true,b=c(this[0].form).validate();this.each(function(){a&=b.element(this)});return a}},removeAttrs:function(a){var b={},d=this;c.each(a.split(/\s/),function(e,f){b[f]=d.attr(f);d.removeAttr(f)});return b},rules:function(a,b){var d=this[0];if(a){var e=c.data(d.form,"validator").settings,f=e.rules,g=c.validator.staticRules(d);switch(a){case "add":c.extend(g,c.validator.normalizeRule(b));f[d.name]=g;if(b.messages)e.messages[d.name]=c.extend(e.messages[d.name],b.messages);break;case "remove":if(!b){delete f[d.name];
return g}var h={};c.each(b.split(/\s/),function(j,i){h[i]=g[i];delete g[i]});return h}}d=c.validator.normalizeRules(c.extend({},c.validator.metadataRules(d),c.validator.classRules(d),c.validator.attributeRules(d),c.validator.staticRules(d)),d);if(d.required){e=d.required;delete d.required;d=c.extend({required:e},d)}return d}});c.extend(c.expr[":"],{blank:function(a){return!c.trim(""+a.value)},filled:function(a){return!!c.trim(""+a.value)},unchecked:function(a){return!a.checked}});c.validator=function(a,
b){this.settings=c.extend(true,{},c.validator.defaults,a);this.currentForm=b;this.init()};c.validator.format=function(a,b){if(arguments.length==1)return function(){var d=c.makeArray(arguments);d.unshift(a);return c.validator.format.apply(this,d)};if(arguments.length>2&&b.constructor!=Array)b=c.makeArray(arguments).slice(1);if(b.constructor!=Array)b=[b];c.each(b,function(d,e){a=a.replace(RegExp("\\{"+d+"\\}","g"),e)});return a};c.extend(c.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",
validClass:"valid",errorElement:"label",focusInvalid:true,errorContainer:c([]),errorLabelContainer:c([]),onsubmit:true,ignore:[],ignoreTitle:false,onfocusin:function(a){this.lastActive=a;if(this.settings.focusCleanup&&!this.blockFocusCleanup){this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass);this.addWrapper(this.errorsFor(a)).hide()}},onfocusout:function(a){if(!this.checkable(a)&&(a.name in this.submitted||!this.optional(a)))this.element(a)},
onkeyup:function(a){if(a.name in this.submitted||a==this.lastElement)this.element(a)},onclick:function(a){if(a.name in this.submitted)this.element(a);else a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(a,b,d){c(a).addClass(b).removeClass(d)},unhighlight:function(a,b,d){c(a).removeClass(b).addClass(d)}},setDefaults:function(a){c.extend(c.validator.defaults,a)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",
url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",accept:"Please enter a value with a valid extension.",maxlength:c.validator.format("Please enter no more than {0} characters."),minlength:c.validator.format("Please enter at least {0} characters."),rangelength:c.validator.format("Please enter a value between {0} and {1} characters long."),
range:c.validator.format("Please enter a value between {0} and {1}."),max:c.validator.format("Please enter a value less than or equal to {0}."),min:c.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:false,prototype:{init:function(){function a(e){var f=c.data(this[0].form,"validator");e="on"+e.type.replace(/^validate/,"");f.settings[e]&&f.settings[e].call(f,this[0])}this.labelContainer=c(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&
this.labelContainer||c(this.currentForm);this.containers=c(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var b=this.groups={};c.each(this.settings.groups,function(e,f){c.each(f.split(/\s/),function(g,h){b[h]=e})});var d=this.settings.rules;c.each(d,function(e,f){d[e]=c.validator.normalizeRule(f)});c(this.currentForm).validateDelegate(":text, :password, :file, select, textarea",
"focusin focusout keyup",a).validateDelegate(":radio, :checkbox, select, option","click",a);this.settings.invalidHandler&&c(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler)},form:function(){this.checkForm();c.extend(this.submitted,this.errorMap);this.invalid=c.extend({},this.errorMap);this.valid()||c(this.currentForm).triggerHandler("invalid-form",[this]);this.showErrors();return this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);
return this.valid()},element:function(a){this.lastElement=a=this.clean(a);this.prepareElement(a);this.currentElements=c(a);var b=this.check(a);if(b)delete this.invalid[a.name];else this.invalid[a.name]=true;if(!this.numberOfInvalids())this.toHide=this.toHide.add(this.containers);this.showErrors();return b},showErrors:function(a){if(a){c.extend(this.errorMap,a);this.errorList=[];for(var b in a)this.errorList.push({message:a[b],element:this.findByName(b)[0]});this.successList=c.grep(this.successList,
function(d){return!(d.name in a)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){c.fn.resetForm&&c(this.currentForm).resetForm();this.submitted={};this.prepareForm();this.hideErrors();this.elements().removeClass(this.settings.errorClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b=0,d;for(d in a)b++;return b},hideErrors:function(){this.addWrapper(this.toHide).hide()},
valid:function(){return this.size()==0},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{c(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(a){}},findLastActive:function(){var a=this.lastActive;return a&&c.grep(this.errorList,function(b){return b.element.name==a.name}).length==1&&a},elements:function(){var a=this,b={};return c([]).add(this.currentForm.elements).filter(":input").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){!this.name&&
a.settings.debug&&window.console&&console.error("%o has no name assigned",this);if(this.name in b||!a.objectLength(c(this).rules()))return false;return b[this.name]=true})},clean:function(a){return c(a)[0]},errors:function(){return c(this.settings.errorElement+"."+this.settings.errorClass,this.errorContext)},reset:function(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=c([]);this.toHide=c([]);this.currentElements=c([])},prepareForm:function(){this.reset();this.toHide=this.errors().add(this.containers)},
prepareElement:function(a){this.reset();this.toHide=this.errorsFor(a)},check:function(a){a=this.clean(a);if(this.checkable(a))a=this.findByName(a.name).not(this.settings.ignore)[0];var b=c(a).rules(),d=false,e;for(e in b){var f={method:e,parameters:b[e]};try{var g=c.validator.methods[e].call(this,a.value.replace(/\r/g,""),a,f.parameters);if(g=="dependency-mismatch")d=true;else{d=false;if(g=="pending"){this.toHide=this.toHide.not(this.errorsFor(a));return}if(!g){this.formatAndAdd(a,f);return false}}}catch(h){this.settings.debug&&
window.console&&console.log("exception occured when checking element "+a.id+", check the '"+f.method+"' method",h);throw h;}}if(!d){this.objectLength(b)&&this.successList.push(a);return true}},customMetaMessage:function(a,b){if(c.metadata){var d=this.settings.meta?c(a).metadata()[this.settings.meta]:c(a).metadata();return d&&d.messages&&d.messages[b]}},customMessage:function(a,b){var d=this.settings.messages[a];return d&&(d.constructor==String?d:d[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(arguments[a]!==
undefined)return arguments[a]},defaultMessage:function(a,b){return this.findDefined(this.customMessage(a.name,b),this.customMetaMessage(a,b),!this.settings.ignoreTitle&&a.title||undefined,c.validator.messages[b],"<strong>Warning: No message defined for "+a.name+"</strong>")},formatAndAdd:function(a,b){var d=this.defaultMessage(a,b.method),e=/\$?\{(\d+)\}/g;if(typeof d=="function")d=d.call(this,b.parameters,a);else if(e.test(d))d=jQuery.format(d.replace(e,"{$1}"),b.parameters);this.errorList.push({message:d,
element:a});this.errorMap[a.name]=d;this.submitted[a.name]=d},addWrapper:function(a){if(this.settings.wrapper)a=a.add(a.parent(this.settings.wrapper));return a},defaultShowErrors:function(){for(var a=0;this.errorList[a];a++){var b=this.errorList[a];this.settings.highlight&&this.settings.highlight.call(this,b.element,this.settings.errorClass,this.settings.validClass);this.showLabel(b.element,b.message)}if(this.errorList.length)this.toShow=this.toShow.add(this.containers);if(this.settings.success)for(a=
0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight){a=0;for(b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass)}this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return c(this.errorList).map(function(){return this.element})},showLabel:function(a,
b){var d=this.errorsFor(a);if(d.length){d.removeClass().addClass(this.settings.errorClass);d.attr("generated")&&d.html(b)}else{d=c("<"+this.settings.errorElement+"/>").attr({"for":this.idOrName(a),generated:true}).addClass(this.settings.errorClass).html(b||"");if(this.settings.wrapper)d=d.hide().show().wrap("<"+this.settings.wrapper+"/>").parent();this.labelContainer.append(d).length||(this.settings.errorPlacement?this.settings.errorPlacement(d,c(a)):d.insertAfter(a))}if(!b&&this.settings.success){d.text("");
typeof this.settings.success=="string"?d.addClass(this.settings.success):this.settings.success(d)}this.toShow=this.toShow.add(d)},errorsFor:function(a){var b=this.idOrName(a);return this.errors().filter(function(){return c(this).attr("for")==b})},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(a){var b=this.currentForm;return c(document.getElementsByName(a)).map(function(d,e){return e.form==
b&&e.name==a&&e||null})},getLength:function(a,b){switch(b.nodeName.toLowerCase()){case "select":return c("option:selected",b).length;case "input":if(this.checkable(b))return this.findByName(b.name).filter(":checked").length}return a.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):true},dependTypes:{"boolean":function(a){return a},string:function(a,b){return!!c(a,b.form).length},"function":function(a,b){return a(b)}},optional:function(a){return!c.validator.methods.required.call(this,
c.trim(a.value),a)&&"dependency-mismatch"},startRequest:function(a){if(!this.pending[a.name]){this.pendingRequest++;this.pending[a.name]=true}},stopRequest:function(a,b){this.pendingRequest--;if(this.pendingRequest<0)this.pendingRequest=0;delete this.pending[a.name];if(b&&this.pendingRequest==0&&this.formSubmitted&&this.form()){c(this.currentForm).submit();this.formSubmitted=false}else if(!b&&this.pendingRequest==0&&this.formSubmitted){c(this.currentForm).triggerHandler("invalid-form",[this]);this.formSubmitted=
false}},previousValue:function(a){return c.data(a,"previousValue")||c.data(a,"previousValue",{old:null,valid:true,message:this.defaultMessage(a,"remote")})}},classRuleSettings:{required:{required:true},email:{email:true},url:{url:true},date:{date:true},dateISO:{dateISO:true},dateDE:{dateDE:true},number:{number:true},numberDE:{numberDE:true},digits:{digits:true},creditcard:{creditcard:true}},addClassRules:function(a,b){a.constructor==String?this.classRuleSettings[a]=b:c.extend(this.classRuleSettings,
a)},classRules:function(a){var b={};(a=c(a).attr("class"))&&c.each(a.split(" "),function(){this in c.validator.classRuleSettings&&c.extend(b,c.validator.classRuleSettings[this])});return b},attributeRules:function(a){var b={};a=c(a);for(var d in c.validator.methods){var e=a.attr(d);if(e)b[d]=e}b.maxlength&&/-1|2147483647|524288/.test(b.maxlength)&&delete b.maxlength;return b},metadataRules:function(a){if(!c.metadata)return{};var b=c.data(a.form,"validator").settings.meta;return b?c(a).metadata()[b]:
c(a).metadata()},staticRules:function(a){var b={},d=c.data(a.form,"validator");if(d.settings.rules)b=c.validator.normalizeRule(d.settings.rules[a.name])||{};return b},normalizeRules:function(a,b){c.each(a,function(d,e){if(e===false)delete a[d];else if(e.param||e.depends){var f=true;switch(typeof e.depends){case "string":f=!!c(e.depends,b.form).length;break;case "function":f=e.depends.call(b,b)}if(f)a[d]=e.param!==undefined?e.param:true;else delete a[d]}});c.each(a,function(d,e){a[d]=c.isFunction(e)?
e(b):e});c.each(["minlength","maxlength","min","max"],function(){if(a[this])a[this]=Number(a[this])});c.each(["rangelength","range"],function(){if(a[this])a[this]=[Number(a[this][0]),Number(a[this][1])]});if(c.validator.autoCreateRanges){if(a.min&&a.max){a.range=[a.min,a.max];delete a.min;delete a.max}if(a.minlength&&a.maxlength){a.rangelength=[a.minlength,a.maxlength];delete a.minlength;delete a.maxlength}}a.messages&&delete a.messages;return a},normalizeRule:function(a){if(typeof a=="string"){var b=
{};c.each(a.split(/\s/),function(){b[this]=true});a=b}return a},addMethod:function(a,b,d){c.validator.methods[a]=b;c.validator.messages[a]=d!=undefined?d:c.validator.messages[a];b.length<3&&c.validator.addClassRules(a,c.validator.normalizeRule(a))},methods:{required:function(a,b,d){if(!this.depend(d,b))return"dependency-mismatch";switch(b.nodeName.toLowerCase()){case "select":return(a=c(b).val())&&a.length>0;case "input":if(this.checkable(b))return this.getLength(a,b)>0;default:return c.trim(a).length>
0}},remote:function(a,b,d){if(this.optional(b))return"dependency-mismatch";var e=this.previousValue(b);this.settings.messages[b.name]||(this.settings.messages[b.name]={});e.originalMessage=this.settings.messages[b.name].remote;this.settings.messages[b.name].remote=e.message;d=typeof d=="string"&&{url:d}||d;if(this.pending[b.name])return"pending";if(e.old===a)return e.valid;e.old=a;var f=this;this.startRequest(b);var g={};g[b.name]=a;c.ajax(c.extend(true,{url:d,mode:"abort",port:"validate"+b.name,
dataType:"json",data:g,success:function(h){f.settings.messages[b.name].remote=e.originalMessage;var j=h===true;if(j){var i=f.formSubmitted;f.prepareElement(b);f.formSubmitted=i;f.successList.push(b);f.showErrors()}else{i={};h=h||f.defaultMessage(b,"remote");i[b.name]=e.message=c.isFunction(h)?h(a):h;f.showErrors(i)}e.valid=j;f.stopRequest(b,j)}},d));return"pending"},minlength:function(a,b,d){return this.optional(b)||this.getLength(c.trim(a),b)>=d},maxlength:function(a,b,d){return this.optional(b)||
this.getLength(c.trim(a),b)<=d},rangelength:function(a,b,d){a=this.getLength(c.trim(a),b);return this.optional(b)||a>=d[0]&&a<=d[1]},min:function(a,b,d){return this.optional(b)||a>=d},max:function(a,b,d){return this.optional(b)||a<=d},range:function(a,b,d){return this.optional(b)||a>=d[0]&&a<=d[1]},email:function(a,b){return this.optional(b)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(a)},
url:function(a,b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},
date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a))},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},creditcard:function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9-]+/.test(a))return false;var d=0,e=0,f=false;a=a.replace(/\D/g,"");for(var g=a.length-1;g>=
0;g--){e=a.charAt(g);e=parseInt(e,10);if(f)if((e*=2)>9)e-=9;d+=e;f=!f}return d%10==0},accept:function(a,b,d){d=typeof d=="string"?d.replace(/,/g,"|"):"png|jpe?g|gif";return this.optional(b)||a.match(RegExp(".("+d+")$","i"))},equalTo:function(a,b,d){d=c(d).unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){c(b).valid()});return a==d.val()}}});c.format=c.validator.format})(jQuery);
(function(c){var a={};if(c.ajaxPrefilter)c.ajaxPrefilter(function(d,e,f){e=d.port;if(d.mode=="abort"){a[e]&&a[e].abort();a[e]=f}});else{var b=c.ajax;c.ajax=function(d){var e=("port"in d?d:c.ajaxSettings).port;if(("mode"in d?d:c.ajaxSettings).mode=="abort"){a[e]&&a[e].abort();return a[e]=b.apply(this,arguments)}return b.apply(this,arguments)}}})(jQuery);
(function(c){!jQuery.event.special.focusin&&!jQuery.event.special.focusout&&document.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.handle.call(this,e)}c.event.special[b]={setup:function(){this.addEventListener(a,d,true)},teardown:function(){this.removeEventListener(a,d,true)},handler:function(e){arguments[0]=c.event.fix(e);arguments[0].type=b;return c.event.handle.apply(this,arguments)}}});c.extend(c.fn,{validateDelegate:function(a,
b,d){return this.bind(b,function(e){var f=c(e.target);if(f.is(a))return d.apply(f,arguments)})}})})(jQuery);

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save