2013-01-15 23:46:19 +01:00
/ *
Copyright ( c ) 2003 - 2013 , CKSource - Frederico Knabben . All rights reserved .
For licensing , see LICENSE . html or http : //ckeditor.com/license
* /
( function ( ) { if ( window . CKEDITOR && window . CKEDITOR . dom ) return ; window . CKEDITOR || ( window . CKEDITOR = function ( ) { var b = { timestamp : "D08E" , version : "4.0.1" , revision : "d02739be4b" , rnd : Math . floor ( 900 * Math . random ( ) ) + 100 , _ : { pending : [ ] } , status : "unloaded" , basePath : function ( ) { var a = window . CKEDITOR _BASEPATH || "" ; if ( ! a ) for ( var b = document . getElementsByTagName ( "script" ) , d = 0 ; d < b . length ; d ++ ) { var c = b [ d ] . src . match ( /(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i ) ; if ( c ) { a = c [ 1 ] ; break } } - 1 == a . indexOf ( ":/" ) && ( a = 0 === a . indexOf ( "/" ) ? location . href . match ( /^.*?:\/\/[^\/]*/ ) [ 0 ] + a : location . href . match ( /^[^\?]*\/(?:)/ ) [ 0 ] +
a ) ; if ( ! a ) throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.' ; return a } ( ) , getUrl : function ( a ) { - 1 == a . indexOf ( ":/" ) && 0 !== a . indexOf ( "/" ) && ( a = this . basePath + a ) ; this . timestamp && ( "/" != a . charAt ( a . length - 1 ) && ! /[&?]t=/ . test ( a ) ) && ( a += ( 0 <= a . indexOf ( "?" ) ? "&" : "?" ) + "t=" + this . timestamp ) ; return a } , domReady : function ( ) { function a ( ) { try { document . addEventListener ? ( document . removeEventListener ( "DOMContentLoaded" , a ,
! 1 ) , b ( ) ) : document . attachEvent && "complete" === document . readyState && ( document . detachEvent ( "onreadystatechange" , a ) , b ( ) ) } catch ( d ) { } } function b ( ) { for ( var a ; a = d . shift ( ) ; ) a ( ) } var d = [ ] ; return function ( b ) { d . push ( b ) ; "complete" === document . readyState && setTimeout ( a , 1 ) ; if ( 1 == d . length ) if ( document . addEventListener ) document . addEventListener ( "DOMContentLoaded" , a , ! 1 ) , window . addEventListener ( "load" , a , ! 1 ) ; else if ( document . attachEvent ) { document . attachEvent ( "onreadystatechange" , a ) ; window . attachEvent ( "onload" , a ) ; b = ! 1 ; try { b =
! window . frameElement } catch ( e ) { } if ( document . documentElement . doScroll && b ) { var c = function ( ) { try { document . documentElement . doScroll ( "left" ) } catch ( b ) { setTimeout ( c , 1 ) ; return } a ( ) } ; c ( ) } } } } ( ) } , c = window . CKEDITOR _GETURL ; if ( c ) { var a = b . url ; b . url = function ( f ) { return c . call ( b , f ) || a . call ( b , f ) } } return b } ( ) ) ;
CKEDITOR . event || ( CKEDITOR . event = function ( ) { } , CKEDITOR . event . implementOn = function ( b ) { var c = CKEDITOR . event . prototype , a ; for ( a in c ) b [ a ] == void 0 && ( b [ a ] = c [ a ] ) } , CKEDITOR . event . prototype = function ( ) { function b ( f ) { var b = c ( this ) ; return b [ f ] || ( b [ f ] = new a ( f ) ) } var c = function ( a ) { a = a . getPrivate && a . getPrivate ( ) || a . _ || ( a . _ = { } ) ; return a . events || ( a . events = { } ) } , a = function ( a ) { this . name = a ; this . listeners = [ ] } ; a . prototype = { getListenerIndex : function ( a ) { for ( var b = 0 , d = this . listeners ; b < d . length ; b ++ ) if ( d [ b ] . fn == a ) return b ; return - 1 } } ;
return { define : function ( a , e ) { var d = b . call ( this , a ) ; CKEDITOR . tools . extend ( d , e , true ) } , on : function ( a , e , d , c , k ) { function h ( b , l , o , n ) { b = { name : a , sender : this , editor : b , data : l , listenerData : c , stop : o , cancel : n , removeListener : m } ; return e . call ( d , b ) === false ? false : b . data } function m ( ) { o . removeListener ( a , e ) } var n = b . call ( this , a ) ; if ( n . getListenerIndex ( e ) < 0 ) { n = n . listeners ; d || ( d = this ) ; isNaN ( k ) && ( k = 10 ) ; var o = this ; h . fn = e ; h . priority = k ; for ( var l = n . length - 1 ; l >= 0 ; l -- ) if ( n [ l ] . priority <= k ) { n . splice ( l + 1 , 0 , h ) ; return { removeListener : m } } n . unshift ( h ) } return { removeListener : m } } ,
once : function ( ) { var a = arguments [ 1 ] ; arguments [ 1 ] = function ( b ) { b . removeListener ( ) ; return a . apply ( this , arguments ) } ; return this . on . apply ( this , arguments ) } , capture : function ( ) { CKEDITOR . event . useCapture = 1 ; var a = this . on . apply ( this , arguments ) ; CKEDITOR . event . useCapture = 0 ; return a } , fire : function ( ) { var a = 0 , b = function ( ) { a = 1 } , d = 0 , g = function ( ) { d = 1 } ; return function ( k , h , m ) { var n = c ( this ) [ k ] , k = a , o = d ; a = d = 0 ; if ( n ) { var l = n . listeners ; if ( l . length ) for ( var l = l . slice ( 0 ) , j , q = 0 ; q < l . length ; q ++ ) { if ( n . errorProof ) try { j = l [ q ] . call ( this ,
m , h , b , g ) } catch ( y ) { } else j = l [ q ] . call ( this , m , h , b , g ) ; j === false ? d = 1 : typeof j != "undefined" && ( h = j ) ; if ( a || d ) break } } h = d ? false : typeof h == "undefined" ? true : h ; a = k ; d = o ; return h } } ( ) , fireOnce : function ( a , b , d ) { b = this . fire ( a , b , d ) ; delete c ( this ) [ a ] ; return b } , removeListener : function ( a , b ) { var d = c ( this ) [ a ] ; if ( d ) { var g = d . getListenerIndex ( b ) ; g >= 0 && d . listeners . splice ( g , 1 ) } } , removeAllListeners : function ( ) { var a = c ( this ) , b ; for ( b in a ) delete a [ b ] } , hasListeners : function ( a ) { return ( a = c ( this ) [ a ] ) && a . listeners . length > 0 } } } ( ) ) ;
CKEDITOR . editor || ( CKEDITOR . editor = function ( ) { CKEDITOR . _ . pending . push ( [ this , arguments ] ) ; CKEDITOR . event . call ( this ) } , CKEDITOR . editor . prototype . fire = function ( b , c ) { b in { instanceReady : 1 , loaded : 1 } && ( this [ b ] = true ) ; return CKEDITOR . event . prototype . fire . call ( this , b , c , this ) } , CKEDITOR . editor . prototype . fireOnce = function ( b , c ) { b in { instanceReady : 1 , loaded : 1 } && ( this [ b ] = true ) ; return CKEDITOR . event . prototype . fireOnce . call ( this , b , c , this ) } , CKEDITOR . event . implementOn ( CKEDITOR . editor . prototype ) ) ;
CKEDITOR . env || ( CKEDITOR . env = function ( ) { var b = navigator . userAgent . toLowerCase ( ) , c = window . opera , a = { ie : eval ( "/*@cc_on!@*/false" ) , opera : ! ! c && c . version , webkit : b . indexOf ( " applewebkit/" ) > - 1 , air : b . indexOf ( " adobeair/" ) > - 1 , mac : b . indexOf ( "macintosh" ) > - 1 , quirks : document . compatMode == "BackCompat" , mobile : b . indexOf ( "mobile" ) > - 1 , iOS : /(ipad|iphone|ipod)/ . test ( b ) , isCustomDomain : function ( ) { if ( ! this . ie ) return false ; var a = document . domain , b = window . location . hostname ; return a != b && a != "[" + b + "]" } , secure : location . protocol ==
"https:" } ; a . gecko = navigator . product == "Gecko" && ! a . webkit && ! a . opera ; if ( a . webkit ) b . indexOf ( "chrome" ) > - 1 ? a . chrome = true : a . safari = true ; var f = 0 ; if ( a . ie ) { f = a . quirks || ! document . documentMode ? parseFloat ( b . match ( /msie (\d+)/ ) [ 1 ] ) : document . documentMode ; a . ie9Compat = f == 9 ; a . ie8Compat = f == 8 ; a . ie7Compat = f == 7 ; a . ie6Compat = f < 7 || a . quirks } if ( a . gecko ) { var e = b . match ( /rv:([\d\.]+)/ ) ; if ( e ) { e = e [ 1 ] . split ( "." ) ; f = e [ 0 ] * 1E4 + ( e [ 1 ] || 0 ) * 100 + ( e [ 2 ] || 0 ) * 1 } } a . opera && ( f = parseFloat ( c . version ( ) ) ) ; a . air && ( f = parseFloat ( b . match ( / adobeair\/(\d+)/ ) [ 1 ] ) ) ;
a . webkit && ( f = parseFloat ( b . match ( / applewebkit\/(\d+)/ ) [ 1 ] ) ) ; a . version = f ; a . isCompatible = a . iOS && f >= 534 || ! a . mobile && ( a . ie && f > 6 || a . gecko && f >= 10801 || a . opera && f >= 9.5 || a . air && f >= 1 || a . webkit && f >= 522 || false ) ; a . cssClass = "cke_browser_" + ( a . ie ? "ie" : a . gecko ? "gecko" : a . opera ? "opera" : a . webkit ? "webkit" : "unknown" ) ; if ( a . quirks ) a . cssClass = a . cssClass + " cke_browser_quirks" ; if ( a . ie ) { a . cssClass = a . cssClass + ( " cke_browser_ie" + ( a . quirks || a . version < 7 ? "6" : a . version ) ) ; if ( a . quirks ) a . cssClass = a . cssClass + " cke_browser_iequirks" } if ( a . gecko ) if ( f <
10900 ) a . cssClass = a . cssClass + " cke_browser_gecko18" ; else if ( f <= 11E3 ) a . cssClass = a . cssClass + " cke_browser_gecko19" ; if ( a . air ) a . cssClass = a . cssClass + " cke_browser_air" ; return a } ( ) ) ;
"unloaded" == CKEDITOR . status && function ( ) { CKEDITOR . event . implementOn ( CKEDITOR ) ; CKEDITOR . loadFullCore = function ( ) { if ( CKEDITOR . status != "basic_ready" ) CKEDITOR . loadFullCore . _load = 1 ; else { delete CKEDITOR . loadFullCore ; var b = document . createElement ( "script" ) ; b . type = "text/javascript" ; b . src = CKEDITOR . basePath + "ckeditor.js" ; document . getElementsByTagName ( "head" ) [ 0 ] . appendChild ( b ) } } ; CKEDITOR . loadFullCoreTimeout = 0 ; CKEDITOR . add = function ( b ) { ( this . _ . pending || ( this . _ . pending = [ ] ) ) . push ( b ) } ; ( function ( ) { CKEDITOR . domReady ( function ( ) { var b =
CKEDITOR . loadFullCore , c = CKEDITOR . loadFullCoreTimeout ; if ( b ) { CKEDITOR . status = "basic_ready" ; b && b . _load ? b ( ) : c && setTimeout ( function ( ) { CKEDITOR . loadFullCore && CKEDITOR . loadFullCore ( ) } , c * 1E3 ) } } ) } ) ( ) ; CKEDITOR . status = "basic_loaded" } ( ) ; CKEDITOR . dom = { } ;
( function ( ) { var b = [ ] , c = CKEDITOR . env . gecko ? "-moz-" : CKEDITOR . env . webkit ? "-webkit-" : CKEDITOR . env . opera ? "-o-" : CKEDITOR . env . ie ? "-ms-" : "" ; CKEDITOR . on ( "reset" , function ( ) { b = [ ] } ) ; CKEDITOR . tools = { arrayCompare : function ( a , b ) { if ( ! a && ! b ) return true ; if ( ! a || ! b || a . length != b . length ) return false ; for ( var e = 0 ; e < a . length ; e ++ ) if ( a [ e ] != b [ e ] ) return false ; return true } , clone : function ( a ) { var b ; if ( a && a instanceof Array ) { b = [ ] ; for ( var e = 0 ; e < a . length ; e ++ ) b [ e ] = this . clone ( a [ e ] ) ; return b } if ( a === null || typeof a != "object" || a instanceof
String || a instanceof Number || a instanceof Boolean || a instanceof Date || a instanceof RegExp ) return a ; b = new a . constructor ; for ( e in a ) b [ e ] = this . clone ( a [ e ] ) ; return b } , capitalize : function ( a ) { return a . charAt ( 0 ) . toUpperCase ( ) + a . substring ( 1 ) . toLowerCase ( ) } , extend : function ( a ) { var b = arguments . length , e , d ; if ( typeof ( e = arguments [ b - 1 ] ) == "boolean" ) b -- ; else if ( typeof ( e = arguments [ b - 2 ] ) == "boolean" ) { d = arguments [ b - 1 ] ; b = b - 2 } for ( var c = 1 ; c < b ; c ++ ) { var k = arguments [ c ] , h ; for ( h in k ) if ( e === true || a [ h ] == void 0 ) if ( ! d || h in d ) a [ h ] =
k [ h ] } return a } , prototypedCopy : function ( a ) { var b = function ( ) { } ; b . prototype = a ; return new b } , isArray : function ( a ) { return ! ! a && a instanceof Array } , isEmpty : function ( a ) { for ( var b in a ) if ( a . hasOwnProperty ( b ) ) return false ; return true } , cssVendorPrefix : function ( a , b , e ) { if ( e ) return c + a + ":" + b + ";" + a + ":" + b ; e = { } ; e [ a ] = b ; e [ c + a ] = b ; return e } , cssStyleToDomStyle : function ( ) { var a = document . createElement ( "div" ) . style , b = typeof a . cssFloat != "undefined" ? "cssFloat" : typeof a . styleFloat != "undefined" ? "styleFloat" : "float" ; return function ( a ) { return a ==
"float" ? b : a . replace ( /-./g , function ( a ) { return a . substr ( 1 ) . toUpperCase ( ) } ) } } ( ) , buildStyleHtml : function ( a ) { for ( var a = [ ] . concat ( a ) , b , e = [ ] , c = 0 ; c < a . length ; c ++ ) if ( b = a [ c ] ) / @ import | [ { } ] / . test ( b ) ? e . push ( "<style>" + b + "</style>" ) : e . push ( '<link type="text/css" rel=stylesheet href="' + b + '">' ) ; return e . join ( "" ) } , htmlEncode : function ( a ) { return ( "" + a ) . replace ( /&/g , "&" ) . replace ( />/g , ">" ) . replace ( /</g , "<" ) } , htmlEncodeAttr : function ( a ) { return a . replace ( /"/g , """ ) . replace ( /</g , "<" ) . replace ( />/g , ">" ) } , getNextNumber : function ( ) { var a =
0 ; return function ( ) { return ++ a } } ( ) , getNextId : function ( ) { return "cke_" + this . getNextNumber ( ) } , override : function ( a , b ) { var e = b ( a ) ; e . prototype = a . prototype ; return e } , setTimeout : function ( a , b , e , c , g ) { g || ( g = window ) ; e || ( e = g ) ; return g . setTimeout ( function ( ) { c ? a . apply ( e , [ ] . concat ( c ) ) : a . apply ( e ) } , b || 0 ) } , trim : function ( ) { var a = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g ; return function ( b ) { return b . replace ( a , "" ) } } ( ) , ltrim : function ( ) { var a = /^[ \t\n\r]+/g ; return function ( b ) { return b . replace ( a , "" ) } } ( ) , rtrim : function ( ) { var a = /[ \t\n\r]+$/g ;
return function ( b ) { return b . replace ( a , "" ) } } ( ) , indexOf : function ( a , b ) { if ( typeof b == "function" ) for ( var c = 0 , d = a . length ; c < d ; c ++ ) { if ( b ( a [ c ] ) ) return c } else { if ( a . indexOf ) return a . indexOf ( b ) ; c = 0 ; for ( d = a . length ; c < d ; c ++ ) if ( a [ c ] === b ) return c } return - 1 } , search : function ( a , b ) { var c = CKEDITOR . tools . indexOf ( a , b ) ; return c >= 0 ? a [ c ] : null } , bind : function ( a , b ) { return function ( ) { return a . apply ( b , arguments ) } } , createClass : function ( a ) { var b = a . $ , c = a . base , d = a . privates || a . _ , g = a . proto , a = a . statics ; ! b && ( b = function ( ) { c && this . base . apply ( this ,
arguments ) } ) ; if ( d ) var k = b , b = function ( ) { var a = this . _ || ( this . _ = { } ) , b ; for ( b in d ) { var f = d [ b ] ; a [ b ] = typeof f == "function" ? CKEDITOR . tools . bind ( f , this ) : f } k . apply ( this , arguments ) } ; if ( c ) { b . prototype = this . prototypedCopy ( c . prototype ) ; b . prototype . constructor = b ; b . base = c ; b . baseProto = c . prototype ; b . prototype . base = function ( ) { this . base = c . prototype . base ; c . apply ( this , arguments ) ; this . base = arguments . callee } } g && this . extend ( b . prototype , g , true ) ; a && this . extend ( b , a , true ) ; return b } , addFunction : function ( a , f ) { return b . push ( function ( ) { return a . apply ( f ||
this , arguments ) } ) - 1 } , removeFunction : function ( a ) { b [ a ] = null } , callFunction : function ( a ) { var f = b [ a ] ; return f && f . apply ( window , Array . prototype . slice . call ( arguments , 1 ) ) } , cssLength : function ( ) { var a = /^-?\d+\.?\d*px$/ , b ; return function ( c ) { b = CKEDITOR . tools . trim ( c + "" ) + "px" ; return a . test ( b ) ? b : c || "" } } ( ) , convertToPx : function ( ) { var a ; return function ( b ) { if ( ! a ) { a = CKEDITOR . dom . element . createFromHtml ( '<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>' , CKEDITOR . document ) ;
CKEDITOR . document . getBody ( ) . append ( a ) } if ( ! /%$/ . test ( b ) ) { a . setStyle ( "width" , b ) ; return a . $ . clientWidth } return b } } ( ) , repeat : function ( a , b ) { return Array ( b + 1 ) . join ( a ) } , tryThese : function ( ) { for ( var a , b = 0 , c = arguments . length ; b < c ; b ++ ) { var d = arguments [ b ] ; try { a = d ( ) ; break } catch ( g ) { } } return a } , genKey : function ( ) { return Array . prototype . slice . call ( arguments ) . join ( "-" ) } , defer : function ( a ) { return function ( ) { var b = arguments , c = this ; window . setTimeout ( function ( ) { a . apply ( c , b ) } , 0 ) } } , normalizeCssText : function ( a , b ) { var c = [ ] ,
d , g = CKEDITOR . tools . parseCssText ( a , true , b ) ; for ( d in g ) c . push ( d + ":" + g [ d ] ) ; c . sort ( ) ; return c . length ? c . join ( ";" ) + ";" : "" } , convertRgbToHex : function ( a ) { return a . replace ( /(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi , function ( a , b , c , g ) { a = [ b , c , g ] ; for ( b = 0 ; b < 3 ; b ++ ) a [ b ] = ( "0" + parseInt ( a [ b ] , 10 ) . toString ( 16 ) ) . slice ( - 2 ) ; return "#" + a . join ( "" ) } ) } , parseCssText : function ( a , b , c ) { var d = { } ; if ( c ) { c = new CKEDITOR . dom . element ( "span" ) ; c . setAttribute ( "style" , a ) ; a = CKEDITOR . tools . convertRgbToHex ( c . getAttribute ( "style" ) || "" ) } if ( ! a ||
a == ";" ) return d ; a . replace ( /"/g , '"' ) . replace ( /\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , c , e ) { if ( b ) { c = c . toLowerCase ( ) ; c == "font-family" && ( e = e . toLowerCase ( ) . replace ( /["']/g , "" ) . replace ( /\s*,\s*/g , "," ) ) ; e = CKEDITOR . tools . trim ( e ) } d [ c ] = e } ) ; return d } } } ) ( ) ;
CKEDITOR . dtd = function ( ) { var b = CKEDITOR . tools . extend , c = function ( a , b ) { for ( var f = CKEDITOR . tools . clone ( a ) , l = 1 ; l < arguments . length ; l ++ ) { var b = arguments [ l ] , j ; for ( j in b ) delete f [ j ] } return f } , a = { } , f = { } , e = { address : 1 , article : 1 , aside : 1 , blockquote : 1 , details : 1 , div : 1 , dl : 1 , fieldset : 1 , figure : 1 , footer : 1 , form : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , header : 1 , hgroup : 1 , hr : 1 , menu : 1 , nav : 1 , ol : 1 , p : 1 , pre : 1 , section : 1 , table : 1 , ul : 1 } , d = { command : 1 , link : 1 , meta : 1 , noscript : 1 , script : 1 , style : 1 } , g = { } , k = { "#" : 1 } , h = { center : 1 , dir : 1 , noframes : 1 } ;
b ( a , { a : 1 , abbr : 1 , area : 1 , audio : 1 , b : 1 , bdi : 1 , bdo : 1 , br : 1 , button : 1 , canvas : 1 , cite : 1 , code : 1 , command : 1 , datalist : 1 , del : 1 , dfn : 1 , em : 1 , embed : 1 , i : 1 , iframe : 1 , img : 1 , input : 1 , ins : 1 , kbd : 1 , keygen : 1 , label : 1 , map : 1 , mark : 1 , meter : 1 , noscript : 1 , object : 1 , output : 1 , progress : 1 , q : 1 , ruby : 1 , s : 1 , samp : 1 , script : 1 , select : 1 , small : 1 , span : 1 , strong : 1 , sub : 1 , sup : 1 , textarea : 1 , time : 1 , u : 1 , "var" : 1 , video : 1 , wbr : 1 } , k , { acronym : 1 , applet : 1 , basefont : 1 , big : 1 , font : 1 , isindex : 1 , strike : 1 , style : 1 , tt : 1 } ) ; b ( f , e , a , h ) ; c = { a : c ( a , { a : 1 , button : 1 } ) , abbr : a , address : f ,
area : g , article : b ( { style : 1 } , f ) , aside : b ( { style : 1 } , f ) , audio : b ( { source : 1 , track : 1 } , f ) , b : a , base : g , bdi : a , bdo : a , blockquote : f , body : f , br : g , button : c ( a , { a : 1 , button : 1 } ) , canvas : a , caption : f , cite : a , code : a , col : g , colgroup : { col : 1 } , command : g , datalist : b ( { option : 1 } , a ) , dd : f , del : a , details : b ( { summary : 1 } , f ) , dfn : a , div : b ( { style : 1 } , f ) , dl : { dt : 1 , dd : 1 } , dt : f , em : a , embed : g , fieldset : b ( { legend : 1 } , f ) , figcaption : f , figure : b ( { figcaption : 1 } , f ) , footer : f , form : f , h1 : a , h2 : a , h3 : a , h4 : a , h5 : a , h6 : a , head : b ( { title : 1 , base : 1 } , d ) , header : f , hgroup : { h1 : 1 ,
h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , hr : g , html : b ( { head : 1 , body : 1 } , f , d ) , i : a , iframe : k , img : g , input : g , ins : a , kbd : a , keygen : g , label : a , legend : a , li : f , link : g , map : f , mark : a , menu : b ( { li : 1 } , f ) , meta : g , meter : c ( a , { meter : 1 } ) , nav : f , noscript : b ( { link : 1 , meta : 1 , style : 1 } , a ) , object : b ( { param : 1 } , a ) , ol : { li : 1 } , optgroup : { option : 1 } , option : k , output : a , p : a , param : g , pre : a , progress : c ( a , { progress : 1 } ) , q : a , rp : a , rt : a , ruby : b ( { rp : 1 , rt : 1 } , a ) , s : a , samp : a , script : k , section : b ( { style : 1 } , f ) , select : { optgroup : 1 , option : 1 } , small : a , source : g , span : a , strong : a , style : k ,
sub : a , summary : a , sup : a , table : { caption : 1 , colgroup : 1 , thead : 1 , tfoot : 1 , tbody : 1 , tr : 1 } , tbody : { tr : 1 } , td : f , textarea : k , tfoot : { tr : 1 } , th : f , thead : { tr : 1 } , time : c ( a , { time : 1 } ) , title : k , tr : { th : 1 , td : 1 } , track : g , u : a , ul : { li : 1 } , "var" : a , video : b ( { source : 1 , track : 1 } , f ) , wbr : g , acronym : a , applet : b ( { param : 1 } , f ) , basefont : g , big : a , center : f , dialog : g , dir : { li : 1 } , font : a , isindex : g , noframes : f , strike : a , tt : a } ; b ( c , { $block : b ( { audio : 1 , dd : 1 , dt : 1 , li : 1 , video : 1 } , e , h ) , $blockLimit : { article : 1 , aside : 1 , audio : 1 , body : 1 , caption : 1 , details : 1 , dir : 1 , div : 1 , dl : 1 ,
fieldset : 1 , figure : 1 , footer : 1 , form : 1 , header : 1 , hgroup : 1 , menu : 1 , nav : 1 , ol : 1 , section : 1 , table : 1 , td : 1 , th : 1 , tr : 1 , ul : 1 , video : 1 } , $cdata : { script : 1 , style : 1 } , $editable : { address : 1 , article : 1 , aside : 1 , blockquote : 1 , body : 1 , details : 1 , div : 1 , fieldset : 1 , footer : 1 , form : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , header : 1 , hgroup : 1 , nav : 1 , p : 1 , pre : 1 , section : 1 } , $empty : { area : 1 , base : 1 , basefont : 1 , br : 1 , col : 1 , command : 1 , dialog : 1 , embed : 1 , hr : 1 , img : 1 , input : 1 , isindex : 1 , keygen : 1 , link : 1 , meta : 1 , param : 1 , source : 1 , track : 1 , wbr : 1 } , $inline : a , $list : { dl : 1 , ol : 1 ,
ul : 1 } , $listItem : { dd : 1 , dt : 1 , li : 1 } , $nonBodyContent : b ( { body : 1 , head : 1 , html : 1 } , c . head ) , $nonEditable : { applet : 1 , audio : 1 , button : 1 , embed : 1 , iframe : 1 , map : 1 , object : 1 , option : 1 , param : 1 , script : 1 , textarea : 1 , video : 1 } , $object : { applet : 1 , audio : 1 , button : 1 , hr : 1 , iframe : 1 , img : 1 , input : 1 , object : 1 , select : 1 , table : 1 , textarea : 1 , video : 1 } , $removeEmpty : { abbr : 1 , acronym : 1 , b : 1 , bdi : 1 , bdo : 1 , big : 1 , cite : 1 , code : 1 , del : 1 , dfn : 1 , em : 1 , font : 1 , i : 1 , ins : 1 , label : 1 , kbd : 1 , mark : 1 , meter : 1 , output : 1 , q : 1 , ruby : 1 , s : 1 , samp : 1 , small : 1 , span : 1 , strike : 1 , strong : 1 ,
sub : 1 , sup : 1 , time : 1 , tt : 1 , u : 1 , "var" : 1 } , $tabIndex : { a : 1 , area : 1 , button : 1 , input : 1 , object : 1 , select : 1 , textarea : 1 } , $tableContent : { caption : 1 , col : 1 , colgroup : 1 , tbody : 1 , td : 1 , tfoot : 1 , th : 1 , thead : 1 , tr : 1 } , $transparent : { a : 1 , audio : 1 , canvas : 1 , del : 1 , ins : 1 , map : 1 , noscript : 1 , object : 1 , video : 1 } , $intermediate : { caption : 1 , colgroup : 1 , dd : 1 , dt : 1 , figcaption : 1 , legend : 1 , li : 1 , optgroup : 1 , option : 1 , rp : 1 , rt : 1 , summary : 1 , tbody : 1 , td : 1 , tfoot : 1 , th : 1 , thead : 1 , tr : 1 } } ) ; return c } ( ) ; CKEDITOR . dom . event = function ( b ) { this . $ = b } ;
CKEDITOR . dom . event . prototype = { getKey : function ( ) { return this . $ . keyCode || this . $ . which } , getKeystroke : function ( ) { var b = this . getKey ( ) ; if ( this . $ . ctrlKey || this . $ . metaKey ) b = b + CKEDITOR . CTRL ; this . $ . shiftKey && ( b = b + CKEDITOR . SHIFT ) ; this . $ . altKey && ( b = b + CKEDITOR . ALT ) ; return b } , preventDefault : function ( b ) { var c = this . $ ; c . preventDefault ? c . preventDefault ( ) : c . returnValue = false ; b && this . stopPropagation ( ) } , stopPropagation : function ( ) { var b = this . $ ; b . stopPropagation ? b . stopPropagation ( ) : b . cancelBubble = true } , getTarget : function ( ) { var b =
this . $ . target || this . $ . srcElement ; return b ? new CKEDITOR . dom . node ( b ) : null } , getPhase : function ( ) { return this . $ . eventPhase || 2 } , getPageOffset : function ( ) { var b = this . getTarget ( ) . getDocument ( ) . $ ; return { x : this . $ . pageX || this . $ . clientX + ( b . documentElement . scrollLeft || b . body . scrollLeft ) , y : this . $ . pageY || this . $ . clientY + ( b . documentElement . scrollTop || b . body . scrollTop ) } } } ; CKEDITOR . CTRL = 1114112 ; CKEDITOR . SHIFT = 2228224 ; CKEDITOR . ALT = 4456448 ; CKEDITOR . EVENT _PHASE _CAPTURING = 1 ; CKEDITOR . EVENT _PHASE _AT _TARGET = 2 ;
CKEDITOR . EVENT _PHASE _BUBBLING = 3 ; CKEDITOR . dom . domObject = function ( b ) { if ( b ) this . $ = b } ;
CKEDITOR . dom . domObject . prototype = function ( ) { var b = function ( b , a ) { return function ( f ) { typeof CKEDITOR != "undefined" && b . fire ( a , new CKEDITOR . dom . event ( f ) ) } } ; return { getPrivate : function ( ) { var b ; if ( ! ( b = this . getCustomData ( "_" ) ) ) this . setCustomData ( "_" , b = { } ) ; return b } , on : function ( c ) { var a = this . getCustomData ( "_cke_nativeListeners" ) ; if ( ! a ) { a = { } ; this . setCustomData ( "_cke_nativeListeners" , a ) } if ( ! a [ c ] ) { a = a [ c ] = b ( this , c ) ; this . $ . addEventListener ? this . $ . addEventListener ( c , a , ! ! CKEDITOR . event . useCapture ) : this . $ . attachEvent &&
this . $ . attachEvent ( "on" + c , a ) } return CKEDITOR . event . prototype . on . apply ( this , arguments ) } , removeListener : function ( b ) { CKEDITOR . event . prototype . removeListener . apply ( this , arguments ) ; if ( ! this . hasListeners ( b ) ) { var a = this . getCustomData ( "_cke_nativeListeners" ) , f = a && a [ b ] ; if ( f ) { this . $ . removeEventListener ? this . $ . removeEventListener ( b , f , false ) : this . $ . detachEvent && this . $ . detachEvent ( "on" + b , f ) ; delete a [ b ] } } } , removeAllListeners : function ( ) { var b = this . getCustomData ( "_cke_nativeListeners" ) , a ; for ( a in b ) { var f = b [ a ] ; this . $ . detachEvent ?
this . $ . detachEvent ( "on" + a , f ) : this . $ . removeEventListener && this . $ . removeEventListener ( a , f , false ) ; delete b [ a ] } } } } ( ) ;
( function ( b ) { var c = { } ; CKEDITOR . on ( "reset" , function ( ) { c = { } } ) ; b . equals = function ( a ) { try { return a && a . $ === this . $ } catch ( b ) { return false } } ; b . setCustomData = function ( a , b ) { var e = this . getUniqueId ( ) ; ( c [ e ] || ( c [ e ] = { } ) ) [ a ] = b ; return this } ; b . getCustomData = function ( a ) { var b = this . $ [ "data-cke-expando" ] ; return ( b = b && c [ b ] ) && a in b ? b [ a ] : null } ; b . removeCustomData = function ( a ) { var b = this . $ [ "data-cke-expando" ] , b = b && c [ b ] , e , d ; if ( b ) { e = b [ a ] ; d = a in b ; delete b [ a ] } return d ? e : null } ; b . clearCustomData = function ( ) { this . removeAllListeners ( ) ;
var a = this . $ [ "data-cke-expando" ] ; a && delete c [ a ] } ; b . getUniqueId = function ( ) { return this . $ [ "data-cke-expando" ] || ( this . $ [ "data-cke-expando" ] = CKEDITOR . tools . getNextNumber ( ) ) } ; CKEDITOR . event . implementOn ( b ) } ) ( CKEDITOR . dom . domObject . prototype ) ;
CKEDITOR . dom . node = function ( b ) { return b ? new CKEDITOR . dom [ b . nodeType == CKEDITOR . NODE _DOCUMENT ? "document" : b . nodeType == CKEDITOR . NODE _ELEMENT ? "element" : b . nodeType == CKEDITOR . NODE _TEXT ? "text" : b . nodeType == CKEDITOR . NODE _COMMENT ? "comment" : b . nodeType == CKEDITOR . NODE _DOCUMENT _FRAGMENT ? "documentFragment" : "domObject" ] ( b ) : this } ; CKEDITOR . dom . node . prototype = new CKEDITOR . dom . domObject ; CKEDITOR . NODE _ELEMENT = 1 ; CKEDITOR . NODE _DOCUMENT = 9 ; CKEDITOR . NODE _TEXT = 3 ; CKEDITOR . NODE _COMMENT = 8 ; CKEDITOR . NODE _DOCUMENT _FRAGMENT = 11 ;
CKEDITOR . POSITION _IDENTICAL = 0 ; CKEDITOR . POSITION _DISCONNECTED = 1 ; CKEDITOR . POSITION _FOLLOWING = 2 ; CKEDITOR . POSITION _PRECEDING = 4 ; CKEDITOR . POSITION _IS _CONTAINED = 8 ; CKEDITOR . POSITION _CONTAINS = 16 ;
CKEDITOR . tools . extend ( CKEDITOR . dom . node . prototype , { appendTo : function ( b , c ) { b . append ( this , c ) ; return b } , clone : function ( b , c ) { var a = this . $ . cloneNode ( b ) , f = function ( a ) { a [ "data-cke-expando" ] && ( a [ "data-cke-expando" ] = false ) ; if ( a . nodeType == CKEDITOR . NODE _ELEMENT ) { c || a . removeAttribute ( "id" , false ) ; if ( b ) for ( var a = a . childNodes , d = 0 ; d < a . length ; d ++ ) f ( a [ d ] ) } } ; f ( a ) ; return new CKEDITOR . dom . node ( a ) } , hasPrevious : function ( ) { return ! ! this . $ . previousSibling } , hasNext : function ( ) { return ! ! this . $ . nextSibling } , insertAfter : function ( b ) { b . $ . parentNode . insertBefore ( this . $ ,
b . $ . nextSibling ) ; return b } , insertBefore : function ( b ) { b . $ . parentNode . insertBefore ( this . $ , b . $ ) ; return b } , insertBeforeMe : function ( b ) { this . $ . parentNode . insertBefore ( b . $ , this . $ ) ; return b } , getAddress : function ( b ) { for ( var c = [ ] , a = this . getDocument ( ) . $ . documentElement , f = this . $ ; f && f != a ; ) { var e = f . parentNode ; e && c . unshift ( this . getIndex . call ( { $ : f } , b ) ) ; f = e } return c } , getDocument : function ( ) { return new CKEDITOR . dom . document ( this . $ . ownerDocument || this . $ . parentNode . ownerDocument ) } , getIndex : function ( b ) { var c = this . $ , a = - 1 ,
f ; if ( ! this . $ . parentNode ) return a ; do if ( ! b || ! ( c != this . $ && c . nodeType == CKEDITOR . NODE _TEXT && ( f || ! c . nodeValue ) ) ) { a ++ ; f = c . nodeType == CKEDITOR . NODE _TEXT } while ( c = c . previousSibling ) ; return a } , getNextSourceNode : function ( b , c , a ) { if ( a && ! a . call ) var f = a , a = function ( a ) { return ! a . equals ( f ) } ; var b = ! b && this . getFirst && this . getFirst ( ) , e ; if ( ! b ) { if ( this . type == CKEDITOR . NODE _ELEMENT && a && a ( this , true ) === false ) return null ; b = this . getNext ( ) } for ( ; ! b && ( e = ( e || this ) . getParent ( ) ) ; ) { if ( a && a ( e , true ) === false ) return null ; b = e . getNext ( ) } return ! b ||
a && a ( b ) === false ? null : c && c != b . type ? b . getNextSourceNode ( false , c , a ) : b } , getPreviousSourceNode : function ( b , c , a ) { if ( a && ! a . call ) var f = a , a = function ( a ) { return ! a . equals ( f ) } ; var b = ! b && this . getLast && this . getLast ( ) , e ; if ( ! b ) { if ( this . type == CKEDITOR . NODE _ELEMENT && a && a ( this , true ) === false ) return null ; b = this . getPrevious ( ) } for ( ; ! b && ( e = ( e || this ) . getParent ( ) ) ; ) { if ( a && a ( e , true ) === false ) return null ; b = e . getPrevious ( ) } return ! b || a && a ( b ) === false ? null : c && b . type != c ? b . getPreviousSourceNode ( false , c , a ) : b } , getPrevious : function ( b ) { var c =
this . $ , a ; do a = ( c = c . previousSibling ) && c . nodeType != 10 && new CKEDITOR . dom . node ( c ) ; while ( a && b && ! b ( a ) ) ; return a } , getNext : function ( b ) { var c = this . $ , a ; do a = ( c = c . nextSibling ) && new CKEDITOR . dom . node ( c ) ; while ( a && b && ! b ( a ) ) ; return a } , getParent : function ( b ) { var c = this . $ . parentNode ; return c && ( c . nodeType == CKEDITOR . NODE _ELEMENT || b && c . nodeType == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) ? new CKEDITOR . dom . node ( c ) : null } , getParents : function ( b ) { var c = this , a = [ ] ; do a [ b ? "push" : "unshift" ] ( c ) ; while ( c = c . getParent ( ) ) ; return a } , getCommonAncestor : function ( b ) { if ( b . equals ( this ) ) return this ;
if ( b . contains && b . contains ( this ) ) return b ; var c = this . contains ? this : this . getParent ( ) ; do if ( c . contains ( b ) ) return c ; while ( c = c . getParent ( ) ) ; return null } , getPosition : function ( b ) { var c = this . $ , a = b . $ ; if ( c . compareDocumentPosition ) return c . compareDocumentPosition ( a ) ; if ( c == a ) return CKEDITOR . POSITION _IDENTICAL ; if ( this . type == CKEDITOR . NODE _ELEMENT && b . type == CKEDITOR . NODE _ELEMENT ) { if ( c . contains ) { if ( c . contains ( a ) ) return CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _PRECEDING ; if ( a . contains ( c ) ) return CKEDITOR . POSITION _IS _CONTAINED +
CKEDITOR . POSITION _FOLLOWING } if ( "sourceIndex" in c ) return c . sourceIndex < 0 || a . sourceIndex < 0 ? CKEDITOR . POSITION _DISCONNECTED : c . sourceIndex < a . sourceIndex ? CKEDITOR . POSITION _PRECEDING : CKEDITOR . POSITION _FOLLOWING } for ( var c = this . getAddress ( ) , b = b . getAddress ( ) , a = Math . min ( c . length , b . length ) , f = 0 ; f <= a - 1 ; f ++ ) if ( c [ f ] != b [ f ] ) { if ( f < a ) return c [ f ] < b [ f ] ? CKEDITOR . POSITION _PRECEDING : CKEDITOR . POSITION _FOLLOWING ; break } return c . length < b . length ? CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _PRECEDING : CKEDITOR . POSITION _IS _CONTAINED +
CKEDITOR . POSITION _FOLLOWING } , getAscendant : function ( b , c ) { var a = this . $ , f ; if ( ! c ) a = a . parentNode ; for ( ; a ; ) { if ( a . nodeName && ( f = a . nodeName . toLowerCase ( ) , typeof b == "string" ? f == b : f in b ) ) return new CKEDITOR . dom . node ( a ) ; a = a . parentNode } return null } , hasAscendant : function ( b , c ) { var a = this . $ ; if ( ! c ) a = a . parentNode ; for ( ; a ; ) { if ( a . nodeName && a . nodeName . toLowerCase ( ) == b ) return true ; a = a . parentNode } return false } , move : function ( b , c ) { b . append ( this . remove ( ) , c ) } , remove : function ( b ) { var c = this . $ , a = c . parentNode ; if ( a ) { if ( b ) for ( ; b =
c . firstChild ; ) a . insertBefore ( c . removeChild ( b ) , c ) ; a . removeChild ( c ) } return this } , replace : function ( b ) { this . insertBefore ( b ) ; b . remove ( ) } , trim : function ( ) { this . ltrim ( ) ; this . rtrim ( ) } , ltrim : function ( ) { for ( var b ; this . getFirst && ( b = this . getFirst ( ) ) ; ) { if ( b . type == CKEDITOR . NODE _TEXT ) { var c = CKEDITOR . tools . ltrim ( b . getText ( ) ) , a = b . getLength ( ) ; if ( c ) { if ( c . length < a ) { b . split ( a - c . length ) ; this . $ . removeChild ( this . $ . firstChild ) } } else { b . remove ( ) ; continue } } break } } , rtrim : function ( ) { for ( var b ; this . getLast && ( b = this . getLast ( ) ) ; ) { if ( b . type ==
CKEDITOR . NODE _TEXT ) { var c = CKEDITOR . tools . rtrim ( b . getText ( ) ) , a = b . getLength ( ) ; if ( c ) { if ( c . length < a ) { b . split ( c . length ) ; this . $ . lastChild . parentNode . removeChild ( this . $ . lastChild ) } } else { b . remove ( ) ; continue } } break } if ( ! CKEDITOR . env . ie && ! CKEDITOR . env . opera ) ( b = this . $ . lastChild ) && ( b . type == 1 && b . nodeName . toLowerCase ( ) == "br" ) && b . parentNode . removeChild ( b ) } , isReadOnly : function ( ) { var b = this ; this . type != CKEDITOR . NODE _ELEMENT && ( b = this . getParent ( ) ) ; if ( b && typeof b . $ . isContentEditable != "undefined" ) return ! ( b . $ . isContentEditable ||
b . data ( "cke-editable" ) ) ; for ( ; b ; ) { if ( b . data ( "cke-editable" ) ) break ; if ( b . getAttribute ( "contentEditable" ) == "false" ) return true ; if ( b . getAttribute ( "contentEditable" ) == "true" ) break ; b = b . getParent ( ) } return ! b } } ) ; CKEDITOR . dom . window = function ( b ) { CKEDITOR . dom . domObject . call ( this , b ) } ; CKEDITOR . dom . window . prototype = new CKEDITOR . dom . domObject ;
CKEDITOR . tools . extend ( CKEDITOR . dom . window . prototype , { focus : function ( ) { this . $ . focus ( ) } , getViewPaneSize : function ( ) { var b = this . $ . document , c = b . compatMode == "CSS1Compat" ; return { width : ( c ? b . documentElement . clientWidth : b . body . clientWidth ) || 0 , height : ( c ? b . documentElement . clientHeight : b . body . clientHeight ) || 0 } } , getScrollPosition : function ( ) { var b = this . $ ; if ( "pageXOffset" in b ) return { x : b . pageXOffset || 0 , y : b . pageYOffset || 0 } ; b = b . document ; return { x : b . documentElement . scrollLeft || b . body . scrollLeft || 0 , y : b . documentElement . scrollTop ||
b . body . scrollTop || 0 } } , getFrame : function ( ) { var b = this . $ . frameElement ; return b ? new CKEDITOR . dom . element . get ( b ) : null } } ) ; CKEDITOR . dom . document = function ( b ) { CKEDITOR . dom . domObject . call ( this , b ) } ; CKEDITOR . dom . document . prototype = new CKEDITOR . dom . domObject ;
CKEDITOR . tools . extend ( CKEDITOR . dom . document . prototype , { type : CKEDITOR . NODE _DOCUMENT , appendStyleSheet : function ( b ) { if ( this . $ . createStyleSheet ) this . $ . createStyleSheet ( b ) ; else { var c = new CKEDITOR . dom . element ( "link" ) ; c . setAttributes ( { rel : "stylesheet" , type : "text/css" , href : b } ) ; this . getHead ( ) . append ( c ) } } , appendStyleText : function ( b ) { if ( this . $ . createStyleSheet ) { var c = this . $ . createStyleSheet ( "" ) ; c . cssText = b } else { var a = new CKEDITOR . dom . element ( "style" , this ) ; a . append ( new CKEDITOR . dom . text ( b , this ) ) ; this . getHead ( ) . append ( a ) } return c ||
a . $ . sheet } , createElement : function ( b , c ) { var a = new CKEDITOR . dom . element ( b , this ) ; if ( c ) { c . attributes && a . setAttributes ( c . attributes ) ; c . styles && a . setStyles ( c . styles ) } return a } , createText : function ( b ) { return new CKEDITOR . dom . text ( b , this ) } , focus : function ( ) { this . getWindow ( ) . focus ( ) } , getActive : function ( ) { return new CKEDITOR . dom . element ( this . $ . activeElement ) } , getById : function ( b ) { return ( b = this . $ . getElementById ( b ) ) ? new CKEDITOR . dom . element ( b ) : null } , getByAddress : function ( b , c ) { for ( var a = this . $ . documentElement , f =
0 ; a && f < b . length ; f ++ ) { var e = b [ f ] ; if ( c ) for ( var d = - 1 , g = 0 ; g < a . childNodes . length ; g ++ ) { var k = a . childNodes [ g ] ; if ( ! ( c === true && k . nodeType == 3 && k . previousSibling && k . previousSibling . nodeType == 3 ) ) { d ++ ; if ( d == e ) { a = k ; break } } } else a = a . childNodes [ e ] } return a ? new CKEDITOR . dom . node ( a ) : null } , getElementsByTag : function ( b , c ) { if ( ( ! CKEDITOR . env . ie || document . documentMode > 8 ) && c ) b = c + ":" + b ; return new CKEDITOR . dom . nodeList ( this . $ . getElementsByTagName ( b ) ) } , getHead : function ( ) { var b = this . $ . getElementsByTagName ( "head" ) [ 0 ] ; return b =
b ? new CKEDITOR . dom . element ( b ) : this . getDocumentElement ( ) . append ( new CKEDITOR . dom . element ( "head" ) , true ) } , getBody : function ( ) { return new CKEDITOR . dom . element ( this . $ . body ) } , getDocumentElement : function ( ) { return new CKEDITOR . dom . element ( this . $ . documentElement ) } , getWindow : function ( ) { var b = new CKEDITOR . dom . window ( this . $ . parentWindow || this . $ . defaultView ) ; return ( this . getWindow = function ( ) { return b } ) ( ) } , write : function ( b ) { this . $ . open ( "text/html" , "replace" ) ; CKEDITOR . env . isCustomDomain ( ) && ( this . $ . domain = document . domain ) ;
this . $ . write ( b ) ; this . $ . close ( ) } } ) ; CKEDITOR . dom . nodeList = function ( b ) { this . $ = b } ; CKEDITOR . dom . nodeList . prototype = { count : function ( ) { return this . $ . length } , getItem : function ( b ) { if ( b < 0 || b >= this . $ . length ) return null ; return ( b = this . $ [ b ] ) ? new CKEDITOR . dom . node ( b ) : null } } ; CKEDITOR . dom . element = function ( b , c ) { typeof b == "string" && ( b = ( c ? c . $ : document ) . createElement ( b ) ) ; CKEDITOR . dom . domObject . call ( this , b ) } ;
CKEDITOR . dom . element . get = function ( b ) { return ( b = typeof b == "string" ? document . getElementById ( b ) || document . getElementsByName ( b ) [ 0 ] : b ) && ( b . $ ? b : new CKEDITOR . dom . element ( b ) ) } ; CKEDITOR . dom . element . prototype = new CKEDITOR . dom . node ; CKEDITOR . dom . element . createFromHtml = function ( b , c ) { var a = new CKEDITOR . dom . element ( "div" , c ) ; a . setHtml ( b ) ; return a . getFirst ( ) . remove ( ) } ;
CKEDITOR . dom . element . setMarker = function ( b , c , a , f ) { var e = c . getCustomData ( "list_marker_id" ) || c . setCustomData ( "list_marker_id" , CKEDITOR . tools . getNextNumber ( ) ) . getCustomData ( "list_marker_id" ) , d = c . getCustomData ( "list_marker_names" ) || c . setCustomData ( "list_marker_names" , { } ) . getCustomData ( "list_marker_names" ) ; b [ e ] = c ; d [ a ] = 1 ; return c . setCustomData ( a , f ) } ; CKEDITOR . dom . element . clearAllMarkers = function ( b ) { for ( var c in b ) CKEDITOR . dom . element . clearMarkers ( b , b [ c ] , 1 ) } ;
CKEDITOR . dom . element . clearMarkers = function ( b , c , a ) { var f = c . getCustomData ( "list_marker_names" ) , e = c . getCustomData ( "list_marker_id" ) , d ; for ( d in f ) c . removeCustomData ( d ) ; c . removeCustomData ( "list_marker_names" ) ; if ( a ) { c . removeCustomData ( "list_marker_id" ) ; delete b [ e ] } } ;
( function ( ) { function b ( a ) { for ( var b = 0 , e = 0 , d = c [ a ] . length ; e < d ; e ++ ) b = b + ( parseInt ( this . getComputedStyle ( c [ a ] [ e ] ) || 0 , 10 ) || 0 ) ; return b } CKEDITOR . tools . extend ( CKEDITOR . dom . element . prototype , { type : CKEDITOR . NODE _ELEMENT , addClass : function ( a ) { var b = this . $ . className ; b && ( RegExp ( "(?:^|\\s)" + a + "(?:\\s|$)" , "" ) . test ( b ) || ( b = b + ( " " + a ) ) ) ; this . $ . className = b || a } , removeClass : function ( a ) { var b = this . getAttribute ( "class" ) ; if ( b ) { a = RegExp ( "(?:^|\\s+)" + a + "(?=\\s|$)" , "i" ) ; if ( a . test ( b ) ) ( b = b . replace ( a , "" ) . replace ( /^\s+/ , "" ) ) ? this . setAttribute ( "class" ,
b ) : this . removeAttribute ( "class" ) } return this } , hasClass : function ( a ) { return RegExp ( "(?:^|\\s+)" + a + "(?=\\s|$)" , "" ) . test ( this . getAttribute ( "class" ) ) } , append : function ( a , b ) { typeof a == "string" && ( a = this . getDocument ( ) . createElement ( a ) ) ; b ? this . $ . insertBefore ( a . $ , this . $ . firstChild ) : this . $ . appendChild ( a . $ ) ; return a } , appendHtml : function ( a ) { if ( this . $ . childNodes . length ) { var b = new CKEDITOR . dom . element ( "div" , this . getDocument ( ) ) ; b . setHtml ( a ) ; b . moveChildren ( this ) } else this . setHtml ( a ) } , appendText : function ( a ) { this . $ . text !=
void 0 ? this . $ . text = this . $ . text + a : this . append ( new CKEDITOR . dom . text ( a ) ) } , appendBogus : function ( ) { for ( var a = this . getLast ( ) ; a && a . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . rtrim ( a . getText ( ) ) ; ) a = a . getPrevious ( ) ; if ( ! a || ! a . is || ! a . is ( "br" ) ) { a = CKEDITOR . env . opera ? this . getDocument ( ) . createText ( "" ) : this . getDocument ( ) . createElement ( "br" ) ; CKEDITOR . env . gecko && a . setAttribute ( "type" , "_moz" ) ; this . append ( a ) } } , breakParent : function ( a ) { var b = new CKEDITOR . dom . range ( this . getDocument ( ) ) ; b . setStartAfter ( this ) ; b . setEndAfter ( a ) ;
a = b . extractContents ( ) ; b . insertNode ( this . remove ( ) ) ; a . insertAfterNode ( this ) } , contains : CKEDITOR . env . ie || CKEDITOR . env . webkit ? function ( a ) { var b = this . $ ; return a . type != CKEDITOR . NODE _ELEMENT ? b . contains ( a . getParent ( ) . $ ) : b != a . $ && b . contains ( a . $ ) } : function ( a ) { return ! ! ( this . $ . compareDocumentPosition ( a . $ ) & 16 ) } , focus : function ( ) { function a ( ) { try { this . $ . focus ( ) } catch ( a ) { } } return function ( b ) { b ? CKEDITOR . tools . setTimeout ( a , 100 , this ) : a . call ( this ) } } ( ) , getHtml : function ( ) { var a = this . $ . innerHTML ; return CKEDITOR . env . ie ? a . replace ( /<\?[^>]*>/g ,
"" ) : a } , getOuterHtml : function ( ) { if ( this . $ . outerHTML ) return this . $ . outerHTML . replace ( /<\?[^>]*>/ , "" ) ; var a = this . $ . ownerDocument . createElement ( "div" ) ; a . appendChild ( this . $ . cloneNode ( true ) ) ; return a . innerHTML } , getClientRect : function ( ) { var a = CKEDITOR . tools . extend ( { } , this . $ . getBoundingClientRect ( ) ) ; ! a . width && ( a . width = a . right - a . left ) ; ! a . height && ( a . height = a . bottom - a . top ) ; return a } , setHtml : function ( ) { var a = function ( a ) { return this . $ . innerHTML = a } ; return CKEDITOR . env . ie && CKEDITOR . env . version < 9 ? function ( a ) { try { return this . $ . innerHTML =
a } catch ( b ) { this . $ . innerHTML = "" ; var c = new CKEDITOR . dom . element ( "body" , this . getDocument ( ) ) ; c . $ . innerHTML = a ; for ( c = c . getChildren ( ) ; c . count ( ) ; ) this . append ( c . getItem ( 0 ) ) ; return a } } : a } ( ) , setText : function ( a ) { CKEDITOR . dom . element . prototype . setText = this . $ . innerText != void 0 ? function ( a ) { return this . $ . innerText = a } : function ( a ) { return this . $ . textContent = a } ; return this . setText ( a ) } , getAttribute : function ( ) { var a = function ( a ) { return this . $ . getAttribute ( a , 2 ) } ; return CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) ?
function ( a ) { switch ( a ) { case "class" : a = "className" ; break ; case "http-equiv" : a = "httpEquiv" ; break ; case "name" : return this . $ . name ; case "tabindex" : a = this . $ . getAttribute ( a , 2 ) ; a !== 0 && this . $ . tabIndex === 0 && ( a = null ) ; return a ; case "checked" : a = this . $ . attributes . getNamedItem ( a ) ; return ( a . specified ? a . nodeValue : this . $ . checked ) ? "checked" : null ; case "hspace" : case "value" : return this . $ [ a ] ; case "style" : return this . $ . style . cssText ; case "contenteditable" : case "contentEditable" : return this . $ . attributes . getNamedItem ( "contentEditable" ) . specified ?
this . $ . getAttribute ( "contentEditable" ) : null } return this . $ . getAttribute ( a , 2 ) } : a } ( ) , getChildren : function ( ) { return new CKEDITOR . dom . nodeList ( this . $ . childNodes ) } , getComputedStyle : CKEDITOR . env . ie ? function ( a ) { return this . $ . currentStyle [ CKEDITOR . tools . cssStyleToDomStyle ( a ) ] } : function ( a ) { var b = this . getWindow ( ) . $ . getComputedStyle ( this . $ , null ) ; return b ? b . getPropertyValue ( a ) : "" } , getDtd : function ( ) { var a = CKEDITOR . dtd [ this . getName ( ) ] ; this . getDtd = function ( ) { return a } ; return a } , getElementsByTag : CKEDITOR . dom . document . prototype . getElementsByTag ,
getTabIndex : CKEDITOR . env . ie ? function ( ) { var a = this . $ . tabIndex ; a === 0 && ( ! CKEDITOR . dtd . $tabIndex [ this . getName ( ) ] && parseInt ( this . getAttribute ( "tabindex" ) , 10 ) !== 0 ) && ( a = - 1 ) ; return a } : CKEDITOR . env . webkit ? function ( ) { var a = this . $ . tabIndex ; if ( a == void 0 ) { a = parseInt ( this . getAttribute ( "tabindex" ) , 10 ) ; isNaN ( a ) && ( a = - 1 ) } return a } : function ( ) { return this . $ . tabIndex } , getText : function ( ) { return this . $ . textContent || this . $ . innerText || "" } , getWindow : function ( ) { return this . getDocument ( ) . getWindow ( ) } , getId : function ( ) { return this . $ . id ||
null } , getNameAtt : function ( ) { return this . $ . name || null } , getName : function ( ) { var a = this . $ . nodeName . toLowerCase ( ) ; if ( CKEDITOR . env . ie && ! ( document . documentMode > 8 ) ) { var b = this . $ . scopeName ; b != "HTML" && ( a = b . toLowerCase ( ) + ":" + a ) } return ( this . getName = function ( ) { return a } ) ( ) } , getValue : function ( ) { return this . $ . value } , getFirst : function ( a ) { var b = this . $ . firstChild ; ( b = b && new CKEDITOR . dom . node ( b ) ) && ( a && ! a ( b ) ) && ( b = b . getNext ( a ) ) ; return b } , getLast : function ( a ) { var b = this . $ . lastChild ; ( b = b && new CKEDITOR . dom . node ( b ) ) && ( a && ! a ( b ) ) &&
( b = b . getPrevious ( a ) ) ; return b } , getStyle : function ( a ) { return this . $ . style [ CKEDITOR . tools . cssStyleToDomStyle ( a ) ] } , is : function ( ) { var a = this . getName ( ) ; if ( typeof arguments [ 0 ] == "object" ) return ! ! arguments [ 0 ] [ a ] ; for ( var b = 0 ; b < arguments . length ; b ++ ) if ( arguments [ b ] == a ) return true ; return false } , isEditable : function ( a ) { var b = this . getName ( ) ; if ( this . isReadOnly ( ) || this . getComputedStyle ( "display" ) == "none" || this . getComputedStyle ( "visibility" ) == "hidden" || CKEDITOR . dtd . $nonEditable [ b ] || CKEDITOR . dtd . $empty [ b ] || this . is ( "a" ) &&
( this . data ( "cke-saved-name" ) || this . hasAttribute ( "name" ) ) && ! this . getChildCount ( ) ) return false ; if ( a !== false ) { a = CKEDITOR . dtd [ b ] || CKEDITOR . dtd . span ; return ! ( ! a || ! a [ "#" ] ) } return true } , isIdentical : function ( a ) { var b = this . clone ( 0 , 1 ) , a = a . clone ( 0 , 1 ) ; b . removeAttributes ( [ "_moz_dirty" , "data-cke-expando" , "data-cke-saved-href" , "data-cke-saved-name" ] ) ; a . removeAttributes ( [ "_moz_dirty" , "data-cke-expando" , "data-cke-saved-href" , "data-cke-saved-name" ] ) ; if ( b . $ . isEqualNode ) { b . $ . style . cssText = CKEDITOR . tools . normalizeCssText ( b . $ . style . cssText ) ;
a . $ . style . cssText = CKEDITOR . tools . normalizeCssText ( a . $ . style . cssText ) ; return b . $ . isEqualNode ( a . $ ) } b = b . getOuterHtml ( ) ; a = a . getOuterHtml ( ) ; if ( CKEDITOR . env . ie && CKEDITOR . env . version < 9 && this . is ( "a" ) ) { var c = this . getParent ( ) ; if ( c . type == CKEDITOR . NODE _ELEMENT ) { c = c . clone ( ) ; c . setHtml ( b ) ; b = c . getHtml ( ) ; c . setHtml ( a ) ; a = c . getHtml ( ) } } return b == a } , isVisible : function ( ) { var a = ( this . $ . offsetHeight || this . $ . offsetWidth ) && this . getComputedStyle ( "visibility" ) != "hidden" , b , c ; if ( a && ( CKEDITOR . env . webkit || CKEDITOR . env . opera ) ) { b =
this . getWindow ( ) ; if ( ! b . equals ( CKEDITOR . document . getWindow ( ) ) && ( c = b . $ . frameElement ) ) a = ( new CKEDITOR . dom . element ( c ) ) . isVisible ( ) } return ! ! a } , isEmptyInlineRemoveable : function ( ) { if ( ! CKEDITOR . dtd . $removeEmpty [ this . getName ( ) ] ) return false ; for ( var a = this . getChildren ( ) , b = 0 , c = a . count ( ) ; b < c ; b ++ ) { var d = a . getItem ( b ) ; if ( ! ( d . type == CKEDITOR . NODE _ELEMENT && d . data ( "cke-bookmark" ) ) && ( d . type == CKEDITOR . NODE _ELEMENT && ! d . isEmptyInlineRemoveable ( ) || d . type == CKEDITOR . NODE _TEXT && CKEDITOR . tools . trim ( d . getText ( ) ) ) ) return false } return true } ,
hasAttributes : CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) ? function ( ) { for ( var a = this . $ . attributes , b = 0 ; b < a . length ; b ++ ) { var c = a [ b ] ; switch ( c . nodeName ) { case "class" : if ( this . getAttribute ( "class" ) ) return true ; case "data-cke-expando" : continue ; default : if ( c . specified ) return true } } return false } : function ( ) { var a = this . $ . attributes , b = a . length , c = { "data-cke-expando" : 1 , _moz _dirty : 1 } ; return b > 0 && ( b > 2 || ! c [ a [ 0 ] . nodeName ] || b == 2 && ! c [ a [ 1 ] . nodeName ] ) } , hasAttribute : function ( ) { function a ( a ) { a = this . $ . attributes . getNamedItem ( a ) ;
return ! ( ! a || ! a . specified ) } return CKEDITOR . env . ie && CKEDITOR . env . version < 8 ? function ( b ) { return b == "name" ? ! ! this . $ . name : a . call ( this , b ) } : a } ( ) , hide : function ( ) { this . setStyle ( "display" , "none" ) } , moveChildren : function ( a , b ) { var c = this . $ , a = a . $ ; if ( c != a ) { var d ; if ( b ) for ( ; d = c . lastChild ; ) a . insertBefore ( c . removeChild ( d ) , a . firstChild ) ; else for ( ; d = c . firstChild ; ) a . appendChild ( c . removeChild ( d ) ) } } , mergeSiblings : function ( ) { function a ( a , b , c ) { if ( b && b . type == CKEDITOR . NODE _ELEMENT ) { for ( var g = [ ] ; b . data ( "cke-bookmark" ) || b . isEmptyInlineRemoveable ( ) ; ) { g . push ( b ) ;
b = c ? b . getNext ( ) : b . getPrevious ( ) ; if ( ! b || b . type != CKEDITOR . NODE _ELEMENT ) return } if ( a . isIdentical ( b ) ) { for ( var k = c ? a . getLast ( ) : a . getFirst ( ) ; g . length ; ) g . shift ( ) . move ( a , ! c ) ; b . moveChildren ( a , ! c ) ; b . remove ( ) ; k && k . type == CKEDITOR . NODE _ELEMENT && k . mergeSiblings ( ) } } } return function ( b ) { if ( b === false || CKEDITOR . dtd . $removeEmpty [ this . getName ( ) ] || this . is ( "a" ) ) { a ( this , this . getNext ( ) , true ) ; a ( this , this . getPrevious ( ) ) } } } ( ) , show : function ( ) { this . setStyles ( { display : "" , visibility : "" } ) } , setAttribute : function ( ) { var a = function ( a ,
b ) { this . $ . setAttribute ( a , b ) ; return this } ; return CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) ? function ( b , c ) { b == "class" ? this . $ . className = c : b == "style" ? this . $ . style . cssText = c : b == "tabindex" ? this . $ . tabIndex = c : b == "checked" ? this . $ . checked = c : b == "contenteditable" ? a . call ( this , "contentEditable" , c ) : a . apply ( this , arguments ) ; return this } : CKEDITOR . env . ie8Compat && CKEDITOR . env . secure ? function ( b , c ) { if ( b == "src" && c . match ( /^http:\/\// ) ) try { a . apply ( this , arguments ) } catch ( d ) { } else a . apply ( this , arguments ) ;
return this } : a } ( ) , setAttributes : function ( a ) { for ( var b in a ) this . setAttribute ( b , a [ b ] ) ; return this } , setValue : function ( a ) { this . $ . value = a ; return this } , removeAttribute : function ( ) { var a = function ( a ) { this . $ . removeAttribute ( a ) } ; return CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) ? function ( a ) { a == "class" ? a = "className" : a == "tabindex" ? a = "tabIndex" : a == "contenteditable" && ( a = "contentEditable" ) ; this . $ . removeAttribute ( a ) } : a } ( ) , removeAttributes : function ( a ) { if ( CKEDITOR . tools . isArray ( a ) ) for ( var b = 0 ; b <
a . length ; b ++ ) this . removeAttribute ( a [ b ] ) ; else for ( b in a ) a . hasOwnProperty ( b ) && this . removeAttribute ( b ) } , removeStyle : function ( a ) { var b = this . $ . style ; if ( ! b . removeProperty && ( a == "border" || a == "margin" || a == "padding" ) ) { var c = [ "top" , "left" , "right" , "bottom" ] , d ; a == "border" && ( d = [ "color" , "style" , "width" ] ) ; for ( var b = [ ] , g = 0 ; g < c . length ; g ++ ) if ( d ) for ( var k = 0 ; k < d . length ; k ++ ) b . push ( [ a , c [ g ] , d [ k ] ] . join ( "-" ) ) ; else b . push ( [ a , c [ g ] ] . join ( "-" ) ) ; for ( a = 0 ; a < b . length ; a ++ ) this . removeStyle ( b [ a ] ) } else { b . removeProperty ? b . removeProperty ( a ) :
b . removeAttribute ( CKEDITOR . tools . cssStyleToDomStyle ( a ) ) ; this . $ . style . cssText || this . removeAttribute ( "style" ) } } , setStyle : function ( a , b ) { this . $ . style [ CKEDITOR . tools . cssStyleToDomStyle ( a ) ] = b ; return this } , setStyles : function ( a ) { for ( var b in a ) this . setStyle ( b , a [ b ] ) ; return this } , setOpacity : function ( a ) { if ( CKEDITOR . env . ie && CKEDITOR . env . version < 9 ) { a = Math . round ( a * 100 ) ; this . setStyle ( "filter" , a >= 100 ? "" : "progid:DXImageTransform.Microsoft.Alpha(opacity=" + a + ")" ) } else this . setStyle ( "opacity" , a ) } , unselectable : function ( ) { this . setStyles ( CKEDITOR . tools . cssVendorPrefix ( "user-select" ,
"none" ) ) ; if ( CKEDITOR . env . ie || CKEDITOR . env . opera ) { this . setAttribute ( "unselectable" , "on" ) ; for ( var a , b = this . getElementsByTag ( "*" ) , c = 0 , d = b . count ( ) ; c < d ; c ++ ) { a = b . getItem ( c ) ; a . setAttribute ( "unselectable" , "on" ) } } } , getPositionedAncestor : function ( ) { for ( var a = this ; a . getName ( ) != "html" ; ) { if ( a . getComputedStyle ( "position" ) != "static" ) return a ; a = a . getParent ( ) } return null } , getDocumentPosition : function ( a ) { var b = 0 , c = 0 , d = this . getDocument ( ) , g = d . getBody ( ) , k = d . $ . compatMode == "BackCompat" ; if ( document . documentElement . getBoundingClientRect ) { var h =
this . $ . getBoundingClientRect ( ) , m = d . $ . documentElement , n = m . clientTop || g . $ . clientTop || 0 , o = m . clientLeft || g . $ . clientLeft || 0 , l = true ; if ( CKEDITOR . env . ie ) { l = d . getDocumentElement ( ) . contains ( this ) ; d = d . getBody ( ) . contains ( this ) ; l = k && d || ! k && l } if ( l ) { b = h . left + ( ! k && m . scrollLeft || g . $ . scrollLeft ) ; b = b - o ; c = h . top + ( ! k && m . scrollTop || g . $ . scrollTop ) ; c = c - n } } else { g = this ; for ( d = null ; g && ! ( g . getName ( ) == "body" || g . getName ( ) == "html" ) ; ) { b = b + ( g . $ . offsetLeft - g . $ . scrollLeft ) ; c = c + ( g . $ . offsetTop - g . $ . scrollTop ) ; if ( ! g . equals ( this ) ) { b = b + ( g . $ . clientLeft ||
0 ) ; c = c + ( g . $ . clientTop || 0 ) } for ( ; d && ! d . equals ( g ) ; ) { b = b - d . $ . scrollLeft ; c = c - d . $ . scrollTop ; d = d . getParent ( ) } d = g ; g = ( h = g . $ . offsetParent ) ? new CKEDITOR . dom . element ( h ) : null } } if ( a ) { g = this . getWindow ( ) ; d = a . getWindow ( ) ; if ( ! g . equals ( d ) && g . $ . frameElement ) { a = ( new CKEDITOR . dom . element ( g . $ . frameElement ) ) . getDocumentPosition ( a ) ; b = b + a . x ; c = c + a . y } } if ( ! document . documentElement . getBoundingClientRect && CKEDITOR . env . gecko && ! k ) { b = b + ( this . $ . clientLeft ? 1 : 0 ) ; c = c + ( this . $ . clientTop ? 1 : 0 ) } return { x : b , y : c } } , scrollIntoView : function ( a ) { var b =
this . getParent ( ) ; if ( b ) { do { ( b . $ . clientWidth && b . $ . clientWidth < b . $ . scrollWidth || b . $ . clientHeight && b . $ . clientHeight < b . $ . scrollHeight ) && ! b . is ( "body" ) && this . scrollIntoParent ( b , a , 1 ) ; if ( b . is ( "html" ) ) { var c = b . getWindow ( ) ; try { var d = c . $ . frameElement ; d && ( b = new CKEDITOR . dom . element ( d ) ) } catch ( g ) { } } } while ( b = b . getParent ( ) ) } } , scrollIntoParent : function ( a , b , c ) { var d , g , k , h ; function m ( b , l ) { if ( /body|html/ . test ( a . getName ( ) ) ) a . getWindow ( ) . $ . scrollBy ( b , l ) ; else { a . $ . scrollLeft = a . $ . scrollLeft + b ; a . $ . scrollTop = a . $ . scrollTop + l } }
function n ( a , b ) { var o = { x : 0 , y : 0 } ; if ( ! a . is ( l ? "body" : "html" ) ) { var j = a . $ . getBoundingClientRect ( ) ; o . x = j . left ; o . y = j . top } j = a . getWindow ( ) ; if ( ! j . equals ( b ) ) { j = n ( CKEDITOR . dom . element . get ( j . $ . frameElement ) , b ) ; o . x = o . x + j . x ; o . y = o . y + j . y } return o } function o ( a , b ) { return parseInt ( a . getComputedStyle ( "margin-" + b ) || 0 , 10 ) || 0 } ! a && ( a = this . getWindow ( ) ) ; k = a . getDocument ( ) ; var l = k . $ . compatMode == "BackCompat" ; a instanceof CKEDITOR . dom . window && ( a = l ? k . getBody ( ) : k . getDocumentElement ( ) ) ; k = a . getWindow ( ) ; g = n ( this , k ) ; var j = n ( a , k ) , q = this . $ . offsetHeight ;
d = this . $ . offsetWidth ; var y = a . $ . clientHeight , z = a . $ . clientWidth ; k = g . x - o ( this , "left" ) - j . x || 0 ; h = g . y - o ( this , "top" ) - j . y || 0 ; d = g . x + d + o ( this , "right" ) - ( j . x + z ) || 0 ; g = g . y + q + o ( this , "bottom" ) - ( j . y + y ) || 0 ; if ( h < 0 || g > 0 ) m ( 0 , b === true ? h : b === false ? g : h < 0 ? h : g ) ; if ( c && ( k < 0 || d > 0 ) ) m ( k < 0 ? k : d , 0 ) } , setState : function ( a , b , c ) { b = b || "cke" ; switch ( a ) { case CKEDITOR . TRISTATE _ON : this . addClass ( b + "_on" ) ; this . removeClass ( b + "_off" ) ; this . removeClass ( b + "_disabled" ) ; c && this . setAttribute ( "aria-pressed" , true ) ; c && this . removeAttribute ( "aria-disabled" ) ;
break ; case CKEDITOR . TRISTATE _DISABLED : this . addClass ( b + "_disabled" ) ; this . removeClass ( b + "_off" ) ; this . removeClass ( b + "_on" ) ; c && this . setAttribute ( "aria-disabled" , true ) ; c && this . removeAttribute ( "aria-pressed" ) ; break ; default : this . addClass ( b + "_off" ) ; this . removeClass ( b + "_on" ) ; this . removeClass ( b + "_disabled" ) ; c && this . removeAttribute ( "aria-pressed" ) ; c && this . removeAttribute ( "aria-disabled" ) } } , getFrameDocument : function ( ) { var a = this . $ ; try { a . contentWindow . document } catch ( b ) { a . src = a . src } return a && new CKEDITOR . dom . document ( a . contentWindow . document ) } ,
copyAttributes : function ( a , b ) { for ( var c = this . $ . attributes , b = b || { } , d = 0 ; d < c . length ; d ++ ) { var g = c [ d ] , k = g . nodeName . toLowerCase ( ) , h ; if ( ! ( k in b ) ) if ( k == "checked" && ( h = this . getAttribute ( k ) ) ) a . setAttribute ( k , h ) ; else if ( g . specified || CKEDITOR . env . ie && g . nodeValue && k == "value" ) { h = this . getAttribute ( k ) ; if ( h === null ) h = g . nodeValue ; a . setAttribute ( k , h ) } } if ( this . $ . style . cssText !== "" ) a . $ . style . cssText = this . $ . style . cssText } , renameNode : function ( a ) { if ( this . getName ( ) != a ) { var b = this . getDocument ( ) , a = new CKEDITOR . dom . element ( a ,
b ) ; this . copyAttributes ( a ) ; this . moveChildren ( a ) ; this . getParent ( ) && this . $ . parentNode . replaceChild ( a . $ , this . $ ) ; a . $ [ "data-cke-expando" ] = this . $ [ "data-cke-expando" ] ; this . $ = a . $ } } , getChild : function ( ) { function a ( a , b ) { var c = a . childNodes ; if ( b >= 0 && b < c . length ) return c [ b ] } return function ( b ) { var c = this . $ ; if ( b . slice ) for ( ; b . length > 0 && c ; ) c = a ( c , b . shift ( ) ) ; else c = a ( c , b ) ; return c ? new CKEDITOR . dom . node ( c ) : null } } ( ) , getChildCount : function ( ) { return this . $ . childNodes . length } , disableContextMenu : function ( ) { this . on ( "contextmenu" ,
function ( a ) { a . data . getTarget ( ) . hasClass ( "cke_enable_context_menu" ) || a . data . preventDefault ( ) } ) } , getDirection : function ( a ) { return a ? this . getComputedStyle ( "direction" ) || this . getDirection ( ) || this . getParent ( ) && this . getParent ( ) . getDirection ( 1 ) || this . getDocument ( ) . $ . dir || "ltr" : this . getStyle ( "direction" ) || this . getAttribute ( "dir" ) } , data : function ( a , b ) { a = "data-" + a ; if ( b === void 0 ) return this . getAttribute ( a ) ; b === false ? this . removeAttribute ( a ) : this . setAttribute ( a , b ) ; return null } , getEditor : function ( ) { var a = CKEDITOR . instances ,
b , c ; for ( b in a ) { c = a [ b ] ; if ( c . element . equals ( this ) && c . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO ) return c } return null } } ) ; var c = { width : [ "border-left-width" , "border-right-width" , "padding-left" , "padding-right" ] , height : [ "border-top-width" , "border-bottom-width" , "padding-top" , "padding-bottom" ] } ; CKEDITOR . dom . element . prototype . setSize = function ( a , c , e ) { if ( typeof c == "number" ) { if ( e && ( ! CKEDITOR . env . ie || ! CKEDITOR . env . quirks ) ) c = c - b . call ( this , a ) ; this . setStyle ( a , c + "px" ) } } ; CKEDITOR . dom . element . prototype . getSize = function ( a ,
c ) { var e = Math . max ( this . $ [ "offset" + CKEDITOR . tools . capitalize ( a ) ] , this . $ [ "client" + CKEDITOR . tools . capitalize ( a ) ] ) || 0 ; c && ( e = e - b . call ( this , a ) ) ; return e } } ) ( ) ; CKEDITOR . dom . documentFragment = function ( b ) { b = b || CKEDITOR . document ; this . $ = b . type == CKEDITOR . NODE _DOCUMENT ? b . $ . createDocumentFragment ( ) : b } ;
CKEDITOR . tools . extend ( CKEDITOR . dom . documentFragment . prototype , CKEDITOR . dom . element . prototype , { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , insertAfterNode : function ( b ) { b = b . $ ; b . parentNode . insertBefore ( this . $ , b . nextSibling ) } } , ! 0 , { append : 1 , appendBogus : 1 , getFirst : 1 , getLast : 1 , getParent : 1 , getNext : 1 , getPrevious : 1 , appendTo : 1 , moveChildren : 1 , insertBefore : 1 , insertAfterNode : 1 , replace : 1 , trim : 1 , type : 1 , ltrim : 1 , rtrim : 1 , getDocument : 1 , getChildCount : 1 , getChild : 1 , getChildren : 1 } ) ;
( function ( ) { function b ( a , b ) { var c = this . range ; if ( this . _ . end ) return null ; if ( ! this . _ . start ) { this . _ . start = 1 ; if ( c . collapsed ) { this . end ( ) ; return null } c . optimize ( ) } var d , n = c . startContainer ; d = c . endContainer ; var o = c . startOffset , l = c . endOffset , j , q = this . guard , f = this . type , e = a ? "getPreviousSourceNode" : "getNextSourceNode" ; if ( ! a && ! this . _ . guardLTR ) { var i = d . type == CKEDITOR . NODE _ELEMENT ? d : d . getParent ( ) , s = d . type == CKEDITOR . NODE _ELEMENT ? d . getChild ( l ) : d . getNext ( ) ; this . _ . guardLTR = function ( a , b ) { return ( ! b || ! i . equals ( a ) ) && ( ! s ||
! a . equals ( s ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } if ( a && ! this . _ . guardRTL ) { var A = n . type == CKEDITOR . NODE _ELEMENT ? n : n . getParent ( ) , B = n . type == CKEDITOR . NODE _ELEMENT ? o ? n . getChild ( o - 1 ) : null : n . getPrevious ( ) ; this . _ . guardRTL = function ( a , b ) { return ( ! b || ! A . equals ( a ) ) && ( ! B || ! a . equals ( B ) ) && ( a . type != CKEDITOR . NODE _ELEMENT || ! b || ! a . equals ( c . root ) ) } } var p = a ? this . _ . guardRTL : this . _ . guardLTR ; j = q ? function ( a , b ) { return p ( a , b ) === false ? false : q ( a , b ) } : p ; if ( this . current ) d = this . current [ e ] ( false , f , j ) ; else { if ( a ) d . type ==
CKEDITOR . NODE _ELEMENT && ( d = l > 0 ? d . getChild ( l - 1 ) : j ( d , true ) === false ? null : d . getPreviousSourceNode ( true , f , j ) ) ; else { d = n ; if ( d . type == CKEDITOR . NODE _ELEMENT && ! ( d = d . getChild ( o ) ) ) d = j ( n , true ) === false ? null : n . getNextSourceNode ( true , f , j ) } d && j ( d ) === false && ( d = null ) } for ( ; d && ! this . _ . end ; ) { this . current = d ; if ( ! this . evaluator || this . evaluator ( d ) !== false ) { if ( ! b ) return d } else if ( b && this . evaluator ) return false ; d = d [ e ] ( false , f , j ) } this . end ( ) ; return this . current = null } function c ( a ) { for ( var c , d = null ; c = b . call ( this , a ) ; ) d = c ; return d }
CKEDITOR . dom . walker = CKEDITOR . tools . createClass ( { $ : function ( a ) { this . range = a ; this . _ = { } } , proto : { end : function ( ) { this . _ . end = 1 } , next : function ( ) { return b . call ( this ) } , previous : function ( ) { return b . call ( this , 1 ) } , checkForward : function ( ) { return b . call ( this , 0 , 1 ) !== false } , checkBackward : function ( ) { return b . call ( this , 1 , 1 ) !== false } , lastForward : function ( ) { return c . call ( this ) } , lastBackward : function ( ) { return c . call ( this , 1 ) } , reset : function ( ) { delete this . current ; this . _ = { } } } } ) ; var a = { block : 1 , "list-item" : 1 , table : 1 , "table-row-group" : 1 ,
"table-header-group" : 1 , "table-footer-group" : 1 , "table-row" : 1 , "table-column-group" : 1 , "table-column" : 1 , "table-cell" : 1 , "table-caption" : 1 } ; CKEDITOR . dom . element . prototype . isBlockBoundary = function ( b ) { b = b ? CKEDITOR . tools . extend ( { } , CKEDITOR . dtd . $block , b || { } ) : CKEDITOR . dtd . $block ; return this . getComputedStyle ( "float" ) == "none" && a [ this . getComputedStyle ( "display" ) ] || b [ this . getName ( ) ] } ; CKEDITOR . dom . walker . blockBoundary = function ( a ) { return function ( b ) { return ! ( b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( a ) ) } } ; CKEDITOR . dom . walker . listItemBoundary =
function ( ) { return this . blockBoundary ( { br : 1 } ) } ; CKEDITOR . dom . walker . bookmark = function ( a , b ) { function c ( a ) { return a && a . getName && a . getName ( ) == "span" && a . data ( "cke-bookmark" ) } return function ( d ) { var n , o ; n = d && d . type != CKEDITOR . NODE _ELEMENT && ( o = d . getParent ( ) ) && c ( o ) ; n = a ? n : n || c ( d ) ; return ! ! ( b ^ n ) } } ; CKEDITOR . dom . walker . whitespaces = function ( a ) { return function ( b ) { var c ; b && b . type == CKEDITOR . NODE _TEXT && ( c = ! CKEDITOR . tools . trim ( b . getText ( ) ) || CKEDITOR . env . webkit && b . getText ( ) == " " ) ; return ! ! ( a ^ c ) } } ; CKEDITOR . dom . walker . invisible =
function ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) ; return function ( c ) { if ( b ( c ) ) c = 1 ; else { c . type == CKEDITOR . NODE _TEXT && ( c = c . getParent ( ) ) ; c = ! c . $ . offsetHeight } return ! ! ( a ^ c ) } } ; CKEDITOR . dom . walker . nodeType = function ( a , b ) { return function ( c ) { return ! ! ( b ^ c . type == a ) } } ; CKEDITOR . dom . walker . bogus = function ( a ) { function b ( a ) { return ! e ( a ) && ! d ( a ) } return function ( c ) { var d = ! CKEDITOR . env . ie ? c . is && c . is ( "br" ) : c . getText && f . test ( c . getText ( ) ) ; if ( d ) { d = c . getParent ( ) ; c = c . getNext ( b ) ; d = d . isBlockBoundary ( ) && ( ! c || c . type == CKEDITOR . NODE _ELEMENT &&
c . isBlockBoundary ( ) ) } return ! ! ( a ^ d ) } } ; var f = /^[\t\r\n ]*(?: |\xa0)$/ , e = CKEDITOR . dom . walker . whitespaces ( ) , d = CKEDITOR . dom . walker . bookmark ( ) ; CKEDITOR . dom . element . prototype . getBogus = function ( ) { var a = this ; do a = a . getPreviousSourceNode ( ) ; while ( d ( a ) || e ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . getName ( ) in CKEDITOR . dtd . $inline && ! ( a . getName ( ) in CKEDITOR . dtd . $empty ) ) ; return a && ( ! CKEDITOR . env . ie ? a . is && a . is ( "br" ) : a . getText && f . test ( a . getText ( ) ) ) ? a : false } } ) ( ) ;
CKEDITOR . dom . range = function ( b ) { this . endOffset = this . endContainer = this . startOffset = this . startContainer = null ; this . collapsed = true ; var c = b instanceof CKEDITOR . dom . document ; this . document = c ? b : b . getDocument ( ) ; this . root = c ? b . getBody ( ) : b } ;
( function ( ) { function b ( ) { var a = false , b = CKEDITOR . dom . walker . whitespaces ( ) , l = CKEDITOR . dom . walker . bookmark ( true ) , c = CKEDITOR . dom . walker . bogus ( ) ; return function ( q ) { if ( l ( q ) || b ( q ) ) return true ; if ( c ( q ) && ! a ) return a = true ; return q . type == CKEDITOR . NODE _TEXT && ( q . hasAscendant ( "pre" ) || CKEDITOR . tools . trim ( q . getText ( ) ) . length ) || q . type == CKEDITOR . NODE _ELEMENT && ! q . is ( d ) ? false : true } } function c ( a ) { var b = CKEDITOR . dom . walker . whitespaces ( ) , l = CKEDITOR . dom . walker . bookmark ( 1 ) ; return function ( c ) { return l ( c ) || b ( c ) ? true : ! a && g ( c ) ||
c . type == CKEDITOR . NODE _ELEMENT && c . is ( CKEDITOR . dtd . $removeEmpty ) } } function a ( a ) { return ! k ( a ) && ! h ( a ) } var f = function ( a ) { a . collapsed = a . startContainer && a . endContainer && a . startContainer . equals ( a . endContainer ) && a . startOffset == a . endOffset } , e = function ( a , b , l , c ) { a . optimizeBookmark ( ) ; var d = a . startContainer , g = a . endContainer , f = a . startOffset , i = a . endOffset , e , k ; if ( g . type == CKEDITOR . NODE _TEXT ) g = g . split ( i ) ; else if ( g . getChildCount ( ) > 0 ) if ( i >= g . getChildCount ( ) ) { g = g . append ( a . document . createText ( "" ) ) ; k = true } else g = g . getChild ( i ) ;
if ( d . type == CKEDITOR . NODE _TEXT ) { d . split ( f ) ; d . equals ( g ) && ( g = d . getNext ( ) ) } else if ( f ) if ( f >= d . getChildCount ( ) ) { d = d . append ( a . document . createText ( "" ) ) ; e = true } else d = d . getChild ( f ) . getPrevious ( ) ; else { d = d . append ( a . document . createText ( "" ) , 1 ) ; e = true } var f = d . getParents ( ) , i = g . getParents ( ) , h , p , m ; for ( h = 0 ; h < f . length ; h ++ ) { p = f [ h ] ; m = i [ h ] ; if ( ! p . equals ( m ) ) break } for ( var u = l , r , D , v , t = h ; t < f . length ; t ++ ) { r = f [ t ] ; u && ! r . equals ( d ) && ( D = u . append ( r . clone ( ) ) ) ; for ( r = r . getNext ( ) ; r ; ) { if ( r . equals ( i [ t ] ) || r . equals ( g ) ) break ; v = r . getNext ( ) ;
if ( b == 2 ) u . append ( r . clone ( true ) ) ; else { r . remove ( ) ; b == 1 && u . append ( r ) } r = v } u && ( u = D ) } u = l ; for ( l = h ; l < i . length ; l ++ ) { r = i [ l ] ; b > 0 && ! r . equals ( g ) && ( D = u . append ( r . clone ( ) ) ) ; if ( ! f [ l ] || r . $ . parentNode != f [ l ] . $ . parentNode ) for ( r = r . getPrevious ( ) ; r ; ) { if ( r . equals ( f [ l ] ) || r . equals ( d ) ) break ; v = r . getPrevious ( ) ; if ( b == 2 ) u . $ . insertBefore ( r . $ . cloneNode ( true ) , u . $ . firstChild ) ; else { r . remove ( ) ; b == 1 && u . $ . insertBefore ( r . $ , u . $ . firstChild ) } r = v } u && ( u = D ) } if ( b == 2 ) { p = a . startContainer ; if ( p . type == CKEDITOR . NODE _TEXT ) { p . $ . data = p . $ . data + p . $ . nextSibling . data ;
p . $ . parentNode . removeChild ( p . $ . nextSibling ) } a = a . endContainer ; if ( a . type == CKEDITOR . NODE _TEXT && a . $ . nextSibling ) { a . $ . data = a . $ . data + a . $ . nextSibling . data ; a . $ . parentNode . removeChild ( a . $ . nextSibling ) } } else { if ( p && m && ( d . $ . parentNode != p . $ . parentNode || g . $ . parentNode != m . $ . parentNode ) ) { b = m . getIndex ( ) ; e && m . $ . parentNode == d . $ . parentNode && b -- ; if ( c && p . type == CKEDITOR . NODE _ELEMENT ) { c = CKEDITOR . dom . element . createFromHtml ( '<span data-cke-bookmark="1" style="display:none"> </span>' , a . document ) ; c . insertAfter ( p ) ; p . mergeSiblings ( false ) ;
a . moveToBookmark ( { startNode : c } ) } else a . setStart ( m . getParent ( ) , b ) } a . collapse ( true ) } e && d . remove ( ) ; k && g . $ . parentNode && g . remove ( ) } , d = { abbr : 1 , acronym : 1 , b : 1 , bdo : 1 , big : 1 , cite : 1 , code : 1 , del : 1 , dfn : 1 , em : 1 , font : 1 , i : 1 , ins : 1 , label : 1 , kbd : 1 , q : 1 , samp : 1 , small : 1 , span : 1 , strike : 1 , strong : 1 , sub : 1 , sup : 1 , tt : 1 , u : 1 , "var" : 1 } , g = CKEDITOR . dom . walker . bogus ( ) , k = new CKEDITOR . dom . walker . whitespaces , h = new CKEDITOR . dom . walker . bookmark , m = /^[\t\r\n ]*(?: |\xa0)$/ ; CKEDITOR . dom . range . prototype = { clone : function ( ) { var a = new CKEDITOR . dom . range ( this . root ) ;
a . startContainer = this . startContainer ; a . startOffset = this . startOffset ; a . endContainer = this . endContainer ; a . endOffset = this . endOffset ; a . collapsed = this . collapsed ; return a } , collapse : function ( a ) { if ( a ) { this . endContainer = this . startContainer ; this . endOffset = this . startOffset } else { this . startContainer = this . endContainer ; this . startOffset = this . endOffset } this . collapsed = true } , cloneContents : function ( ) { var a = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed || e ( this , 2 , a ) ; return a } , deleteContents : function ( a ) { this . collapsed ||
e ( this , 0 , null , a ) } , extractContents : function ( a ) { var b = new CKEDITOR . dom . documentFragment ( this . document ) ; this . collapsed || e ( this , 1 , b , a ) ; return b } , createBookmark : function ( a ) { var b , l , c , d , g = this . collapsed ; b = this . document . createElement ( "span" ) ; b . data ( "cke-bookmark" , 1 ) ; b . setStyle ( "display" , "none" ) ; b . setHtml ( " " ) ; if ( a ) { c = "cke_bm_" + CKEDITOR . tools . getNextNumber ( ) ; b . setAttribute ( "id" , c + ( g ? "C" : "S" ) ) } if ( ! g ) { l = b . clone ( ) ; l . setHtml ( " " ) ; a && l . setAttribute ( "id" , c + "E" ) ; d = this . clone ( ) ; d . collapse ( ) ; d . insertNode ( l ) } d =
this . clone ( ) ; d . collapse ( true ) ; d . insertNode ( b ) ; if ( l ) { this . setStartAfter ( b ) ; this . setEndBefore ( l ) } else this . moveToPosition ( b , CKEDITOR . POSITION _AFTER _END ) ; return { startNode : a ? c + ( g ? "C" : "S" ) : b , endNode : a ? c + "E" : l , serializable : a , collapsed : g } } , createBookmark2 : function ( a ) { var b = this . startContainer , l = this . endContainer , c = this . startOffset , d = this . endOffset , g = this . collapsed , f , i ; if ( ! b || ! l ) return { start : 0 , end : 0 } ; if ( a ) { if ( b . type == CKEDITOR . NODE _ELEMENT ) { if ( ( f = b . getChild ( c ) ) && f . type == CKEDITOR . NODE _TEXT && c > 0 && f . getPrevious ( ) . type ==
CKEDITOR . NODE _TEXT ) { b = f ; c = 0 } f && f . type == CKEDITOR . NODE _ELEMENT && ( c = f . getIndex ( 1 ) ) } for ( ; b . type == CKEDITOR . NODE _TEXT && ( i = b . getPrevious ( ) ) && i . type == CKEDITOR . NODE _TEXT ; ) { b = i ; c = c + i . getLength ( ) } if ( ! g ) { if ( l . type == CKEDITOR . NODE _ELEMENT ) { if ( ( f = l . getChild ( d ) ) && f . type == CKEDITOR . NODE _TEXT && d > 0 && f . getPrevious ( ) . type == CKEDITOR . NODE _TEXT ) { l = f ; d = 0 } f && f . type == CKEDITOR . NODE _ELEMENT && ( d = f . getIndex ( 1 ) ) } for ( ; l . type == CKEDITOR . NODE _TEXT && ( i = l . getPrevious ( ) ) && i . type == CKEDITOR . NODE _TEXT ; ) { l = i ; d = d + i . getLength ( ) } } } return { start : b . getAddress ( a ) ,
end : g ? null : l . getAddress ( a ) , startOffset : c , endOffset : d , normalized : a , collapsed : g , is2 : true } } , moveToBookmark : function ( a ) { if ( a . is2 ) { var b = this . document . getByAddress ( a . start , a . normalized ) , l = a . startOffset , c = a . end && this . document . getByAddress ( a . end , a . normalized ) , a = a . endOffset ; this . setStart ( b , l ) ; c ? this . setEnd ( c , a ) : this . collapse ( true ) } else { b = ( l = a . serializable ) ? this . document . getById ( a . startNode ) : a . startNode ; a = l ? this . document . getById ( a . endNode ) : a . endNode ; this . setStartBefore ( b ) ; b . remove ( ) ; if ( a ) { this . setEndBefore ( a ) ;
a . remove ( ) } else this . collapse ( true ) } } , getBoundaryNodes : function ( ) { var a = this . startContainer , b = this . endContainer , l = this . startOffset , c = this . endOffset , d ; if ( a . type == CKEDITOR . NODE _ELEMENT ) { d = a . getChildCount ( ) ; if ( d > l ) a = a . getChild ( l ) ; else if ( d < 1 ) a = a . getPreviousSourceNode ( ) ; else { for ( a = a . $ ; a . lastChild ; ) a = a . lastChild ; a = new CKEDITOR . dom . node ( a ) ; a = a . getNextSourceNode ( ) || a } } if ( b . type == CKEDITOR . NODE _ELEMENT ) { d = b . getChildCount ( ) ; if ( d > c ) b = b . getChild ( c ) . getPreviousSourceNode ( true ) ; else if ( d < 1 ) b = b . getPreviousSourceNode ( ) ;
else { for ( b = b . $ ; b . lastChild ; ) b = b . lastChild ; b = new CKEDITOR . dom . node ( b ) } } a . getPosition ( b ) & CKEDITOR . POSITION _FOLLOWING && ( a = b ) ; return { startNode : a , endNode : b } } , getCommonAncestor : function ( a , b ) { var l = this . startContainer , c = this . endContainer , l = l . equals ( c ) ? a && l . type == CKEDITOR . NODE _ELEMENT && this . startOffset == this . endOffset - 1 ? l . getChild ( this . startOffset ) : l : l . getCommonAncestor ( c ) ; return b && ! l . is ? l . getParent ( ) : l } , optimize : function ( ) { var a = this . startContainer , b = this . startOffset ; a . type != CKEDITOR . NODE _ELEMENT && ( b ? b >=
a . getLength ( ) && this . setStartAfter ( a ) : this . setStartBefore ( a ) ) ; a = this . endContainer ; b = this . endOffset ; a . type != CKEDITOR . NODE _ELEMENT && ( b ? b >= a . getLength ( ) && this . setEndAfter ( a ) : this . setEndBefore ( a ) ) } , optimizeBookmark : function ( ) { var a = this . startContainer , b = this . endContainer ; a . is && ( a . is ( "span" ) && a . data ( "cke-bookmark" ) ) && this . setStartAt ( a , CKEDITOR . POSITION _BEFORE _START ) ; b && ( b . is && b . is ( "span" ) && b . data ( "cke-bookmark" ) ) && this . setEndAt ( b , CKEDITOR . POSITION _AFTER _END ) } , trim : function ( a , b ) { var c = this . startContainer ,
j = this . startOffset , d = this . collapsed ; if ( ( ! a || d ) && c && c . type == CKEDITOR . NODE _TEXT ) { if ( j ) if ( j >= c . getLength ( ) ) { j = c . getIndex ( ) + 1 ; c = c . getParent ( ) } else { var g = c . split ( j ) , j = c . getIndex ( ) + 1 , c = c . getParent ( ) ; if ( this . startContainer . equals ( this . endContainer ) ) this . setEnd ( g , this . endOffset - this . startOffset ) ; else if ( c . equals ( this . endContainer ) ) this . endOffset = this . endOffset + 1 } else { j = c . getIndex ( ) ; c = c . getParent ( ) } this . setStart ( c , j ) ; if ( d ) { this . collapse ( true ) ; return } } c = this . endContainer ; j = this . endOffset ; if ( ! b && ! d && c && c . type ==
CKEDITOR . NODE _TEXT ) { if ( j ) { j >= c . getLength ( ) || c . split ( j ) ; j = c . getIndex ( ) + 1 } else j = c . getIndex ( ) ; c = c . getParent ( ) ; this . setEnd ( c , j ) } } , enlarge : function ( a , b ) { switch ( a ) { case CKEDITOR . ENLARGE _INLINE : var c = 1 ; case CKEDITOR . ENLARGE _ELEMENT : if ( this . collapsed ) break ; var j = this . getCommonAncestor ( ) , d = this . root , g , f , i , e , h , k = false , p , m ; p = this . startContainer ; m = this . startOffset ; if ( p . type == CKEDITOR . NODE _TEXT ) { if ( m ) { p = ! CKEDITOR . tools . trim ( p . substring ( 0 , m ) ) . length && p ; k = ! ! p } if ( p && ! ( e = p . getPrevious ( ) ) ) i = p . getParent ( ) } else { m &&
( e = p . getChild ( m - 1 ) || p . getLast ( ) ) ; e || ( i = p ) } for ( ; i || e ; ) { if ( i && ! e ) { ! h && i . equals ( j ) && ( h = true ) ; if ( c ? i . isBlockBoundary ( ) : ! d . contains ( i ) ) break ; if ( ! k || i . getComputedStyle ( "display" ) != "inline" ) { k = false ; h ? g = i : this . setStartBefore ( i ) } e = i . getPrevious ( ) } for ( ; e ; ) { p = false ; if ( e . type == CKEDITOR . NODE _COMMENT ) e = e . getPrevious ( ) ; else { if ( e . type == CKEDITOR . NODE _TEXT ) { m = e . getText ( ) ; /[^\s\ufeff]/ . test ( m ) && ( e = null ) ; p = /[\s\ufeff]$/ . test ( m ) } else if ( ( e . $ . offsetWidth > 0 || b && e . is ( "br" ) ) && ! e . data ( "cke-bookmark" ) ) if ( k && CKEDITOR . dtd . $removeEmpty [ e . getName ( ) ] ) { m =
e . getText ( ) ; if ( /[^\s\ufeff]/ . test ( m ) ) e = null ; else for ( var u = e . $ . getElementsByTagName ( "*" ) , r = 0 , D ; D = u [ r ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ D . nodeName . toLowerCase ( ) ] ) { e = null ; break } e && ( p = ! ! m . length ) } else e = null ; p && ( k ? h ? g = i : i && this . setStartBefore ( i ) : k = true ) ; if ( e ) { p = e . getPrevious ( ) ; if ( ! i && ! p ) { i = e ; e = null ; break } e = p } else i = null } } i && ( i = i . getParent ( ) ) } p = this . endContainer ; m = this . endOffset ; i = e = null ; h = k = false ; if ( p . type == CKEDITOR . NODE _TEXT ) { p = ! CKEDITOR . tools . trim ( p . substring ( m ) ) . length && p ; k = ! ( p && p . getLength ( ) ) ; if ( p &&
! ( e = p . getNext ( ) ) ) i = p . getParent ( ) } else ( e = p . getChild ( m ) ) || ( i = p ) ; for ( ; i || e ; ) { if ( i && ! e ) { ! h && i . equals ( j ) && ( h = true ) ; if ( c ? i . isBlockBoundary ( ) : ! d . contains ( i ) ) break ; if ( ! k || i . getComputedStyle ( "display" ) != "inline" ) { k = false ; h ? f = i : i && this . setEndAfter ( i ) } e = i . getNext ( ) } for ( ; e ; ) { p = false ; if ( e . type == CKEDITOR . NODE _TEXT ) { m = e . getText ( ) ; /[^\s\ufeff]/ . test ( m ) && ( e = null ) ; p = /^[\s\ufeff]/ . test ( m ) } else if ( e . type == CKEDITOR . NODE _ELEMENT ) { if ( ( e . $ . offsetWidth > 0 || b && e . is ( "br" ) ) && ! e . data ( "cke-bookmark" ) ) if ( k && CKEDITOR . dtd . $removeEmpty [ e . getName ( ) ] ) { m =
e . getText ( ) ; if ( /[^\s\ufeff]/ . test ( m ) ) e = null ; else { u = e . $ . getElementsByTagName ( "*" ) ; for ( r = 0 ; D = u [ r ++ ] ; ) if ( ! CKEDITOR . dtd . $removeEmpty [ D . nodeName . toLowerCase ( ) ] ) { e = null ; break } } e && ( p = ! ! m . length ) } else e = null } else p = 1 ; p && k && ( h ? f = i : this . setEndAfter ( i ) ) ; if ( e ) { p = e . getNext ( ) ; if ( ! i && ! p ) { i = e ; e = null ; break } e = p } else i = null } i && ( i = i . getParent ( ) ) } if ( g && f ) { j = g . contains ( f ) ? f : g ; this . setStartBefore ( j ) ; this . setEndAfter ( j ) } break ; case CKEDITOR . ENLARGE _BLOCK _CONTENTS : case CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : i = new CKEDITOR . dom . range ( this . root ) ;
d = this . root ; i . setStartAt ( d , CKEDITOR . POSITION _AFTER _START ) ; i . setEnd ( this . startContainer , this . startOffset ) ; i = new CKEDITOR . dom . walker ( i ) ; var v , t , w = CKEDITOR . dom . walker . blockBoundary ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? { br : 1 } : null ) , I = function ( a ) { var b = w ( a ) ; b || ( v = a ) ; return b } , c = function ( a ) { var b = I ( a ) ; ! b && ( a . is && a . is ( "br" ) ) && ( t = a ) ; return b } ; i . guard = I ; i = i . lastBackward ( ) ; v = v || d ; this . setStartAt ( v , ! v . is ( "br" ) && ( ! i && this . checkStartOfBlock ( ) || i && v . contains ( i ) ) ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _AFTER _END ) ;
if ( a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) { i = this . clone ( ) ; i = new CKEDITOR . dom . walker ( i ) ; var G = CKEDITOR . dom . walker . whitespaces ( ) , C = CKEDITOR . dom . walker . bookmark ( ) ; i . evaluator = function ( a ) { return ! G ( a ) && ! C ( a ) } ; if ( ( i = i . previous ( ) ) && i . type == CKEDITOR . NODE _ELEMENT && i . is ( "br" ) ) break } i = this . clone ( ) ; i . collapse ( ) ; i . setEndAt ( d , CKEDITOR . POSITION _BEFORE _END ) ; i = new CKEDITOR . dom . walker ( i ) ; i . guard = a == CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ? c : I ; v = null ; i = i . lastForward ( ) ; v = v || d ; this . setEndAt ( v , ! i && this . checkEndOfBlock ( ) || i &&
v . contains ( i ) ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _BEFORE _START ) ; t && this . setEndAfter ( t ) } } , shrink : function ( a , b , c ) { if ( ! this . collapsed ) { var a = a || CKEDITOR . SHRINK _TEXT , j = this . clone ( ) , d = this . startContainer , g = this . endContainer , f = this . startOffset , e = this . endOffset , k = 1 , h = 1 ; if ( d && d . type == CKEDITOR . NODE _TEXT ) if ( f ) if ( f >= d . getLength ( ) ) j . setStartAfter ( d ) ; else { j . setStartBefore ( d ) ; k = 0 } else j . setStartBefore ( d ) ; if ( g && g . type == CKEDITOR . NODE _TEXT ) if ( e ) if ( e >= g . getLength ( ) ) j . setEndAfter ( g ) ; else { j . setEndAfter ( g ) ;
h = 0 } else j . setEndBefore ( g ) ; var j = new CKEDITOR . dom . walker ( j ) , m = CKEDITOR . dom . walker . bookmark ( ) ; j . evaluator = function ( b ) { return b . type == ( a == CKEDITOR . SHRINK _ELEMENT ? CKEDITOR . NODE _ELEMENT : CKEDITOR . NODE _TEXT ) } ; var p ; j . guard = function ( b , j ) { if ( m ( b ) ) return true ; if ( a == CKEDITOR . SHRINK _ELEMENT && b . type == CKEDITOR . NODE _TEXT || j && b . equals ( p ) || c === false && b . type == CKEDITOR . NODE _ELEMENT && b . isBlockBoundary ( ) ) return false ; ! j && b . type == CKEDITOR . NODE _ELEMENT && ( p = b ) ; return true } ; if ( k ) ( d = j [ a == CKEDITOR . SHRINK _ELEMENT ? "lastForward" :
"next" ] ( ) ) && this . setStartAt ( d , b ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _START ) ; if ( h ) { j . reset ( ) ; ( j = j [ a == CKEDITOR . SHRINK _ELEMENT ? "lastBackward" : "previous" ] ( ) ) && this . setEndAt ( j , b ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _END ) } return ! ( ! k && ! h ) } } , insertNode : function ( a ) { this . optimizeBookmark ( ) ; this . trim ( false , true ) ; var b = this . startContainer , c = b . getChild ( this . startOffset ) ; c ? a . insertBefore ( c ) : b . append ( a ) ; a . getParent ( ) && a . getParent ( ) . equals ( this . endContainer ) && this . endOffset ++ ; this . setStartBefore ( a ) } ,
moveToPosition : function ( a , b ) { this . setStartAt ( a , b ) ; this . collapse ( true ) } , moveToRange : function ( a ) { this . setStart ( a . startContainer , a . startOffset ) ; this . setEnd ( a . endContainer , a . endOffset ) } , selectNodeContents : function ( a ) { this . setStart ( a , 0 ) ; this . setEnd ( a , a . type == CKEDITOR . NODE _TEXT ? a . getLength ( ) : a . getChildCount ( ) ) } , setStart : function ( a , b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ a . getName ( ) ] ) { b = a . getIndex ( ) ; a = a . getParent ( ) } this . startContainer = a ; this . startOffset = b ; if ( ! this . endContainer ) { this . endContainer =
a ; this . endOffset = b } f ( this ) } , setEnd : function ( a , b ) { if ( a . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $empty [ a . getName ( ) ] ) { b = a . getIndex ( ) + 1 ; a = a . getParent ( ) } this . endContainer = a ; this . endOffset = b ; if ( ! this . startContainer ) { this . startContainer = a ; this . startOffset = b } f ( this ) } , setStartAfter : function ( a ) { this . setStart ( a . getParent ( ) , a . getIndex ( ) + 1 ) } , setStartBefore : function ( a ) { this . setStart ( a . getParent ( ) , a . getIndex ( ) ) } , setEndAfter : function ( a ) { this . setEnd ( a . getParent ( ) , a . getIndex ( ) + 1 ) } , setEndBefore : function ( a ) { this . setEnd ( a . getParent ( ) ,
a . getIndex ( ) ) } , setStartAt : function ( a , b ) { switch ( b ) { case CKEDITOR . POSITION _AFTER _START : this . setStart ( a , 0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : a . type == CKEDITOR . NODE _TEXT ? this . setStart ( a , a . getLength ( ) ) : this . setStart ( a , a . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setStartBefore ( a ) ; break ; case CKEDITOR . POSITION _AFTER _END : this . setStartAfter ( a ) } f ( this ) } , setEndAt : function ( a , b ) { switch ( b ) { case CKEDITOR . POSITION _AFTER _START : this . setEnd ( a , 0 ) ; break ; case CKEDITOR . POSITION _BEFORE _END : a . type ==
CKEDITOR . NODE _TEXT ? this . setEnd ( a , a . getLength ( ) ) : this . setEnd ( a , a . getChildCount ( ) ) ; break ; case CKEDITOR . POSITION _BEFORE _START : this . setEndBefore ( a ) ; break ; case CKEDITOR . POSITION _AFTER _END : this . setEndAfter ( a ) } f ( this ) } , fixBlock : function ( a , b ) { var c = this . createBookmark ( ) , j = this . document . createElement ( b ) ; this . collapse ( a ) ; this . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; this . extractContents ( ) . appendTo ( j ) ; j . trim ( ) ; CKEDITOR . env . ie || j . appendBogus ( ) ; this . insertNode ( j ) ; this . moveToBookmark ( c ) ; return j } , splitBlock : function ( a ) { var b =
new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) , c = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) , j = b . block , d = c . block , g = null ; if ( ! b . blockLimit . equals ( c . blockLimit ) ) return null ; if ( a != "br" ) { if ( ! j ) { j = this . fixBlock ( true , a ) ; d = ( new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ) . block } d || ( d = this . fixBlock ( false , a ) ) } a = j && this . checkStartOfBlock ( ) ; b = d && this . checkEndOfBlock ( ) ; this . deleteContents ( ) ; if ( j && j . equals ( d ) ) if ( b ) { g = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) ;
this . moveToPosition ( d , CKEDITOR . POSITION _AFTER _END ) ; d = null } else if ( a ) { g = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) ; this . moveToPosition ( j , CKEDITOR . POSITION _BEFORE _START ) ; j = null } else { d = this . splitElement ( j ) ; ! CKEDITOR . env . ie && ! j . is ( "ul" , "ol" ) && j . appendBogus ( ) } return { previousBlock : j , nextBlock : d , wasStartOfBlock : a , wasEndOfBlock : b , elementPath : g } } , splitElement : function ( a ) { if ( ! this . collapsed ) return null ; this . setEndAt ( a , CKEDITOR . POSITION _BEFORE _END ) ; var b = this . extractContents ( ) , c = a . clone ( false ) ;
b . appendTo ( c ) ; c . insertAfter ( a ) ; this . moveToPosition ( a , CKEDITOR . POSITION _AFTER _END ) ; return c } , removeEmptyBlocksAtEnd : function ( ) { function a ( j ) { return function ( a ) { return b ( a ) || ( c ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . isEmptyInlineRemoveable ( ) ) || j . is ( "table" ) && a . is ( "caption" ) ? false : true } } var b = CKEDITOR . dom . walker . whitespaces ( ) , c = CKEDITOR . dom . walker . bookmark ( false ) ; return function ( b ) { for ( var c = this . createBookmark ( ) , l = this [ b ? "endPath" : "startPath" ] ( ) , d = l . block || l . blockLimit , o ; d && ! d . equals ( l . root ) && ! d . getFirst ( a ( d ) ) ; ) { o =
d . getParent ( ) ; this [ b ? "setEndAt" : "setStartAt" ] ( d , CKEDITOR . POSITION _AFTER _END ) ; d . remove ( 1 ) ; d = o } this . moveToBookmark ( c ) } } ( ) , startPath : function ( ) { return new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) } , endPath : function ( ) { return new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) } , checkBoundaryOfElement : function ( a , b ) { var l = b == CKEDITOR . START , d = this . clone ( ) ; d . collapse ( l ) ; d [ l ? "setStartAt" : "setEndAt" ] ( a , l ? CKEDITOR . POSITION _AFTER _START : CKEDITOR . POSITION _BEFORE _END ) ; d = new CKEDITOR . dom . walker ( d ) ;
d . evaluator = c ( l ) ; return d [ l ? "checkBackward" : "checkForward" ] ( ) } , checkStartOfBlock : function ( ) { var a = this . startContainer , c = this . startOffset ; if ( CKEDITOR . env . ie && c && a . type == CKEDITOR . NODE _TEXT ) { a = CKEDITOR . tools . ltrim ( a . substring ( 0 , c ) ) ; m . test ( a ) && this . trim ( 0 , 1 ) } this . trim ( ) ; a = new CKEDITOR . dom . elementPath ( this . startContainer , this . root ) ; c = this . clone ( ) ; c . collapse ( true ) ; c . setStartAt ( a . block || a . blockLimit , CKEDITOR . POSITION _AFTER _START ) ; a = new CKEDITOR . dom . walker ( c ) ; a . evaluator = b ( ) ; return a . checkBackward ( ) } , checkEndOfBlock : function ( ) { var a =
this . endContainer , c = this . endOffset ; if ( CKEDITOR . env . ie && a . type == CKEDITOR . NODE _TEXT ) { a = CKEDITOR . tools . rtrim ( a . substring ( c ) ) ; m . test ( a ) && this . trim ( 1 , 0 ) } this . trim ( ) ; a = new CKEDITOR . dom . elementPath ( this . endContainer , this . root ) ; c = this . clone ( ) ; c . collapse ( false ) ; c . setEndAt ( a . block || a . blockLimit , CKEDITOR . POSITION _BEFORE _END ) ; a = new CKEDITOR . dom . walker ( c ) ; a . evaluator = b ( ) ; return a . checkForward ( ) } , getPreviousNode : function ( a , b , c ) { var d = this . clone ( ) ; d . collapse ( 1 ) ; d . setStartAt ( c || this . root , CKEDITOR . POSITION _AFTER _START ) ;
c = new CKEDITOR . dom . walker ( d ) ; c . evaluator = a ; c . guard = b ; return c . previous ( ) } , getNextNode : function ( a , b , c ) { var d = this . clone ( ) ; d . collapse ( ) ; d . setEndAt ( c || this . root , CKEDITOR . POSITION _BEFORE _END ) ; c = new CKEDITOR . dom . walker ( d ) ; c . evaluator = a ; c . guard = b ; return c . next ( ) } , checkReadOnly : function ( ) { function a ( b , c ) { for ( ; b ; ) { if ( b . type == CKEDITOR . NODE _ELEMENT ) { if ( b . getAttribute ( "contentEditable" ) == "false" && ! b . data ( "cke-editable" ) ) return 0 ; if ( b . is ( "html" ) || b . getAttribute ( "contentEditable" ) == "true" && ( b . contains ( c ) || b . equals ( c ) ) ) break } b =
b . getParent ( ) } return 1 } return function ( ) { var b = this . startContainer , c = this . endContainer ; return ! ( a ( b , c ) && a ( c , b ) ) } } ( ) , moveToElementEditablePosition : function ( b , c ) { if ( b . type == CKEDITOR . NODE _ELEMENT && ! b . isEditable ( false ) ) { this . moveToPosition ( b , c ? CKEDITOR . POSITION _AFTER _END : CKEDITOR . POSITION _BEFORE _START ) ; return true } for ( var l = 0 ; b ; ) { if ( b . type == CKEDITOR . NODE _TEXT ) { c && this . checkEndOfBlock ( ) && m . test ( b . getText ( ) ) ? this . moveToPosition ( b , CKEDITOR . POSITION _BEFORE _START ) : this . moveToPosition ( b , c ? CKEDITOR . POSITION _AFTER _END :
CKEDITOR . POSITION _BEFORE _START ) ; l = 1 ; break } if ( b . type == CKEDITOR . NODE _ELEMENT ) if ( b . isEditable ( ) ) { this . moveToPosition ( b , c ? CKEDITOR . POSITION _BEFORE _END : CKEDITOR . POSITION _AFTER _START ) ; l = 1 } else c && ( b . is ( "br" ) && this . checkEndOfBlock ( ) ) && this . moveToPosition ( b , CKEDITOR . POSITION _BEFORE _START ) ; var d = b , g = l , f = void 0 ; d . type == CKEDITOR . NODE _ELEMENT && d . isEditable ( false ) && ( f = d [ c ? "getLast" : "getFirst" ] ( a ) ) ; ! g && ! f && ( f = d [ c ? "getPrevious" : "getNext" ] ( a ) ) ; b = f } return ! ! l } , moveToElementEditStart : function ( a ) { return this . moveToElementEditablePosition ( a ) } ,
moveToElementEditEnd : function ( a ) { return this . moveToElementEditablePosition ( a , true ) } , getEnclosedNode : function ( ) { var a = this . clone ( ) ; a . optimize ( ) ; if ( a . startContainer . type != CKEDITOR . NODE _ELEMENT || a . endContainer . type != CKEDITOR . NODE _ELEMENT ) return null ; var a = new CKEDITOR . dom . walker ( a ) , b = CKEDITOR . dom . walker . bookmark ( false , true ) , c = CKEDITOR . dom . walker . whitespaces ( true ) ; a . evaluator = function ( a ) { return c ( a ) && b ( a ) } ; var d = a . next ( ) ; a . reset ( ) ; return d && d . equals ( a . previous ( ) ) ? d : null } , getTouchedStartNode : function ( ) { var a =
this . startContainer ; return this . collapsed || a . type != CKEDITOR . NODE _ELEMENT ? a : a . getChild ( this . startOffset ) || a } , getTouchedEndNode : function ( ) { var a = this . endContainer ; return this . collapsed || a . type != CKEDITOR . NODE _ELEMENT ? a : a . getChild ( this . endOffset - 1 ) || a } , scrollIntoView : function ( ) { var a = new CKEDITOR . dom . element . createFromHtml ( "<span> </span>" , this . document ) , b , c , d , g = this . clone ( ) ; g . optimize ( ) ; if ( d = g . startContainer . type == CKEDITOR . NODE _TEXT ) { c = g . startContainer . getText ( ) ; b = g . startContainer . split ( g . startOffset ) ;
a . insertAfter ( g . startContainer ) } else g . insertNode ( a ) ; a . scrollIntoView ( ) ; if ( d ) { g . startContainer . setText ( c ) ; b . remove ( ) } a . remove ( ) } } } ) ( ) ; CKEDITOR . POSITION _AFTER _START = 1 ; CKEDITOR . POSITION _BEFORE _END = 2 ; CKEDITOR . POSITION _BEFORE _START = 3 ; CKEDITOR . POSITION _AFTER _END = 4 ; CKEDITOR . ENLARGE _ELEMENT = 1 ; CKEDITOR . ENLARGE _BLOCK _CONTENTS = 2 ; CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS = 3 ; CKEDITOR . ENLARGE _INLINE = 4 ; CKEDITOR . START = 1 ; CKEDITOR . END = 2 ; CKEDITOR . SHRINK _ELEMENT = 1 ; CKEDITOR . SHRINK _TEXT = 2 ;
( function ( ) { function b ( a ) { if ( ! ( arguments . length < 1 ) ) { this . range = a ; this . forceBrBreak = 0 ; this . enlargeBr = 1 ; this . enforceRealBlocks = 0 ; this . _ || ( this . _ = { } ) } } function c ( a , b , c ) { for ( a = a . getNextSourceNode ( b , null , c ) ; ! f ( a ) ; ) a = a . getNextSourceNode ( b , null , c ) ; return a } var a = /^[\r\n\t ]+$/ , f = CKEDITOR . dom . walker . bookmark ( false , true ) , e = CKEDITOR . dom . walker . whitespaces ( true ) , d = function ( a ) { return f ( a ) && e ( a ) } ; b . prototype = { getNextParagraph : function ( b ) { b = b || "p" ; if ( ! CKEDITOR . dtd [ this . range . root . getName ( ) ] [ b ] ) return null ; var e ,
h , m , n , o , l ; if ( ! this . _ . started ) { h = this . range . clone ( ) ; h . shrink ( CKEDITOR . NODE _ELEMENT , true ) ; n = h . endContainer . hasAscendant ( "pre" , true ) || h . startContainer . hasAscendant ( "pre" , true ) ; h . enlarge ( this . forceBrBreak && ! n || ! this . enlargeBr ? CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS : CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; if ( ! h . collapsed ) { n = new CKEDITOR . dom . walker ( h . clone ( ) ) ; var j = CKEDITOR . dom . walker . bookmark ( true , true ) ; n . evaluator = j ; this . _ . nextNode = n . next ( ) ; n = new CKEDITOR . dom . walker ( h . clone ( ) ) ; n . evaluator = j ; n = n . previous ( ) ; this . _ . lastNode =
n . getNextSourceNode ( true ) ; if ( this . _ . lastNode && this . _ . lastNode . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( this . _ . lastNode . getText ( ) ) && this . _ . lastNode . getParent ( ) . isBlockBoundary ( ) ) { j = this . range . clone ( ) ; j . moveToPosition ( this . _ . lastNode , CKEDITOR . POSITION _AFTER _END ) ; if ( j . checkEndOfBlock ( ) ) { j = new CKEDITOR . dom . elementPath ( j . endContainer , j . root ) ; this . _ . lastNode = ( j . block || j . blockLimit ) . getNextSourceNode ( true ) } } if ( ! this . _ . lastNode ) { this . _ . lastNode = this . _ . docEndMarker = h . document . createText ( "" ) ; this . _ . lastNode . insertAfter ( n ) } h =
null } this . _ . started = 1 } j = this . _ . nextNode ; n = this . _ . lastNode ; for ( this . _ . nextNode = null ; j ; ) { var q = 0 , y = j . hasAscendant ( "pre" ) , z = j . type != CKEDITOR . NODE _ELEMENT , i = 0 ; if ( z ) j . type == CKEDITOR . NODE _TEXT && a . test ( j . getText ( ) ) && ( z = 0 ) ; else { var s = j . getName ( ) ; if ( j . isBlockBoundary ( this . forceBrBreak && ! y && { br : 1 } ) ) { if ( s == "br" ) z = 1 ; else if ( ! h && ! j . getChildCount ( ) && s != "hr" ) { e = j ; m = j . equals ( n ) ; break } if ( h ) { h . setEndAt ( j , CKEDITOR . POSITION _BEFORE _START ) ; if ( s != "br" ) this . _ . nextNode = j } q = 1 } else { if ( j . getFirst ( ) ) { if ( ! h ) { h = this . range . clone ( ) ;
h . setStartAt ( j , CKEDITOR . POSITION _BEFORE _START ) } j = j . getFirst ( ) ; continue } z = 1 } } if ( z && ! h ) { h = this . range . clone ( ) ; h . setStartAt ( j , CKEDITOR . POSITION _BEFORE _START ) } m = ( ! q || z ) && j . equals ( n ) ; if ( h && ! q ) for ( ; ! j . getNext ( d ) && ! m ; ) { s = j . getParent ( ) ; if ( s . isBlockBoundary ( this . forceBrBreak && ! y && { br : 1 } ) ) { q = 1 ; z = 0 ; m || s . equals ( n ) ; h . setEndAt ( s , CKEDITOR . POSITION _BEFORE _END ) ; break } j = s ; z = 1 ; m = j . equals ( n ) ; i = 1 } z && h . setEndAt ( j , CKEDITOR . POSITION _AFTER _END ) ; j = c ( j , i , n ) ; if ( ( m = ! j ) || q && h ) break } if ( ! e ) { if ( ! h ) { this . _ . docEndMarker && this . _ . docEndMarker . remove ( ) ;
return this . _ . nextNode = null } e = new CKEDITOR . dom . elementPath ( h . startContainer , h . root ) ; j = e . blockLimit ; q = { div : 1 , th : 1 , td : 1 } ; e = e . block ; if ( ! e && j && ! this . enforceRealBlocks && q [ j . getName ( ) ] && h . checkStartOfBlock ( ) && h . checkEndOfBlock ( ) && ! j . equals ( h . root ) ) e = j ; else if ( ! e || this . enforceRealBlocks && e . getName ( ) == "li" ) { e = this . range . document . createElement ( b ) ; h . extractContents ( ) . appendTo ( e ) ; e . trim ( ) ; h . insertNode ( e ) ; o = l = true } else if ( e . getName ( ) != "li" ) { if ( ! h . checkStartOfBlock ( ) || ! h . checkEndOfBlock ( ) ) { e = e . clone ( false ) ; h . extractContents ( ) . appendTo ( e ) ;
e . trim ( ) ; l = h . splitBlock ( ) ; o = ! l . wasStartOfBlock ; l = ! l . wasEndOfBlock ; h . insertNode ( e ) } } else if ( ! m ) this . _ . nextNode = e . equals ( n ) ? null : c ( h . getBoundaryNodes ( ) . endNode , 1 , n ) } if ( o ) ( h = e . getPrevious ( ) ) && h . type == CKEDITOR . NODE _ELEMENT && ( h . getName ( ) == "br" ? h . remove ( ) : h . getLast ( ) && h . getLast ( ) . $ . nodeName . toLowerCase ( ) == "br" && h . getLast ( ) . remove ( ) ) ; if ( l ) ( h = e . getLast ( ) ) && h . type == CKEDITOR . NODE _ELEMENT && h . getName ( ) == "br" && ( CKEDITOR . env . ie || h . getPrevious ( f ) || h . getNext ( f ) ) && h . remove ( ) ; if ( ! this . _ . nextNode ) this . _ . nextNode = m ||
e . equals ( n ) || ! n ? null : c ( e , 1 , n ) ; return e } } ; CKEDITOR . dom . range . prototype . createIterator = function ( ) { return new b ( this ) } } ) ( ) ;
CKEDITOR . command = function ( b , c ) { this . uiItems = [ ] ; this . exec = function ( a ) { if ( this . state == CKEDITOR . TRISTATE _DISABLED ) return false ; this . editorFocus && b . focus ( ) ; return this . fire ( "exec" ) === false ? true : c . exec . call ( this , b , a ) !== false } ; this . refresh = function ( a , b ) { if ( ! this . readOnly && a . readOnly ) return true ; if ( this . context && ! b . isContextFor ( this . context ) ) { this . disable ( ) ; return true } this . enable ( ) ; return this . fire ( "refresh" , { editor : a , path : b } ) === false ? true : c . refresh && c . refresh . apply ( this , arguments ) !== false } ; CKEDITOR . tools . extend ( this ,
c , { modes : { wysiwyg : 1 } , editorFocus : 1 , contextSensitive : ! ! c . context , state : CKEDITOR . TRISTATE _OFF } ) ; CKEDITOR . event . call ( this ) } ;
CKEDITOR . command . prototype = { enable : function ( ) { this . state == CKEDITOR . TRISTATE _DISABLED && this . setState ( ! this . preserveState || typeof this . previousState == "undefined" ? CKEDITOR . TRISTATE _OFF : this . previousState ) } , disable : function ( ) { this . setState ( CKEDITOR . TRISTATE _DISABLED ) } , setState : function ( b ) { if ( this . state == b ) return false ; this . previousState = this . state ; this . state = b ; this . fire ( "state" ) ; return true } , toggleState : function ( ) { this . state == CKEDITOR . TRISTATE _OFF ? this . setState ( CKEDITOR . TRISTATE _ON ) : this . state == CKEDITOR . TRISTATE _ON &&
this . setState ( CKEDITOR . TRISTATE _OFF ) } } ; CKEDITOR . event . implementOn ( CKEDITOR . command . prototype ) ; CKEDITOR . ENTER _P = 1 ; CKEDITOR . ENTER _BR = 2 ; CKEDITOR . ENTER _DIV = 3 ;
CKEDITOR . config = { customConfig : "config.js" , autoUpdateElement : ! 0 , language : "" , defaultLanguage : "en" , contentsLangDirection : "" , enterMode : CKEDITOR . ENTER _P , forceEnterMode : ! 1 , shiftEnterMode : CKEDITOR . ENTER _BR , docType : "<!DOCTYPE html>" , bodyId : "" , bodyClass : "" , fullPage : ! 1 , height : 200 , extraPlugins : "" , removePlugins : "" , protectedSource : [ ] , tabIndex : 0 , width : "" , baseFloatZIndex : 1E4 , blockedKeystrokes : [ CKEDITOR . CTRL + 66 , CKEDITOR . CTRL + 73 , CKEDITOR . CTRL + 85 ] } ;
( function ( ) { CKEDITOR . focusManager = function ( b ) { if ( b . focusManager ) return b . focusManager ; this . hasFocus = false ; this . currentActive = null ; this . _ = { editor : b } ; return this } ; CKEDITOR . focusManager . _ = { blurDelay : 200 } ; CKEDITOR . focusManager . prototype = { focus : function ( ) { this . _ . timer && clearTimeout ( this . _ . timer ) ; if ( ! this . hasFocus && ! this . _ . locked ) { var b = CKEDITOR . currentInstance ; b && b . focusManager . blur ( 1 ) ; this . hasFocus = true ; ( b = this . _ . editor . container ) && b . addClass ( "cke_focus" ) ; this . _ . editor . fire ( "focus" ) } } , lock : function ( ) { this . _ . locked =
1 } , unlock : function ( ) { delete this . _ . locked } , blur : function ( b ) { function c ( ) { if ( this . hasFocus ) { this . hasFocus = false ; var a = this . _ . editor . container ; a && a . removeClass ( "cke_focus" ) ; this . _ . editor . fire ( "blur" ) } } if ( ! this . _ . locked ) { this . _ . timer && clearTimeout ( this . _ . timer ) ; var a = CKEDITOR . focusManager . _ . blurDelay ; b || ! a ? c . call ( this ) : this . _ . timer = CKEDITOR . tools . setTimeout ( function ( ) { delete this . _ . timer ; c . call ( this ) } , a , this ) } } , add : function ( b , c ) { var a = b . getCustomData ( "focusmanager" ) ; if ( ! a || a != this ) { a && a . remove ( b ) ; var a =
"focus" , f = "blur" ; if ( c ) if ( CKEDITOR . env . ie ) { a = "focusin" ; f = "focusout" } else CKEDITOR . event . useCapture = 1 ; var e = { blur : function ( ) { b . equals ( this . currentActive ) && this . blur ( ) } , focus : function ( ) { this . currentActive = b ; this . focus ( ) } } ; b . on ( a , e . focus , this ) ; b . on ( f , e . blur , this ) ; if ( c ) CKEDITOR . event . useCapture = 0 ; b . setCustomData ( "focusmanager" , this ) ; b . setCustomData ( "focusmanager_handlers" , e ) } } , remove : function ( b ) { b . removeCustomData ( "focusmanager" ) ; var c = b . removeCustomData ( "focusmanager_handlers" ) ; b . removeListener ( "blur" ,
c . blur ) ; b . removeListener ( "focus" , c . focus ) } } } ) ( ) ; CKEDITOR . keystrokeHandler = function ( b ) { if ( b . keystrokeHandler ) return b . keystrokeHandler ; this . keystrokes = { } ; this . blockedKeystrokes = { } ; this . _ = { editor : b } ; return this } ;
( function ( ) { var b , c = function ( a ) { var a = a . data , c = a . getKeystroke ( ) , d = this . keystrokes [ c ] , g = this . _ . editor ; b = g . fire ( "key" , { keyCode : c } ) === false ; if ( ! b ) { d && ( b = g . execCommand ( d , { from : "keystrokeHandler" } ) !== false ) ; b || ( b = ! ! this . blockedKeystrokes [ c ] ) } b && a . preventDefault ( true ) ; return ! b } , a = function ( a ) { if ( b ) { b = false ; a . data . preventDefault ( true ) } } ; CKEDITOR . keystrokeHandler . prototype = { attach : function ( b ) { b . on ( "keydown" , c , this ) ; if ( CKEDITOR . env . opera || CKEDITOR . env . gecko && CKEDITOR . env . mac ) b . on ( "keypress" , a , this ) } } } ) ( ) ;
( function ( ) { CKEDITOR . lang = { languages : { af : 1 , ar : 1 , bg : 1 , bn : 1 , bs : 1 , ca : 1 , cs : 1 , cy : 1 , da : 1 , de : 1 , el : 1 , "en-au" : 1 , "en-ca" : 1 , "en-gb" : 1 , en : 1 , eo : 1 , es : 1 , et : 1 , eu : 1 , fa : 1 , fi : 1 , fo : 1 , "fr-ca" : 1 , fr : 1 , gl : 1 , gu : 1 , he : 1 , hi : 1 , hr : 1 , hu : 1 , is : 1 , it : 1 , ja : 1 , ka : 1 , km : 1 , ko : 1 , ku : 1 , lt : 1 , lv : 1 , mn : 1 , ms : 1 , nb : 1 , nl : 1 , no : 1 , pl : 1 , "pt-br" : 1 , pt : 1 , ro : 1 , ru : 1 , sk : 1 , sl : 1 , "sr-latn" : 1 , sr : 1 , sv : 1 , th : 1 , tr : 1 , uk : 1 , vi : 1 , "zh-cn" : 1 , zh : 1 } , load : function ( b , c , a ) { if ( ! b || ! CKEDITOR . lang . languages [ b ] ) b = this . detect ( c , b ) ; this [ b ] ? a ( b , this [ b ] ) : CKEDITOR . scriptLoader . load ( CKEDITOR . getUrl ( "lang/" +
b + ".js" ) , function ( ) { a ( b , this [ b ] ) } , this ) } , detect : function ( b , c ) { var a = this . languages , c = c || navigator . userLanguage || navigator . language || b , f = c . toLowerCase ( ) . match ( /([a-z]+)(?:-([a-z]+))?/ ) , e = f [ 1 ] , f = f [ 2 ] ; a [ e + "-" + f ] ? e = e + "-" + f : a [ e ] || ( e = null ) ; CKEDITOR . lang . detect = e ? function ( ) { return e } : function ( a ) { return a } ; return e || b } } } ) ( ) ;
CKEDITOR . scriptLoader = function ( ) { var b = { } , c = { } ; return { load : function ( a , f , e , d ) { var g = typeof a == "string" ; g && ( a = [ a ] ) ; e || ( e = CKEDITOR ) ; var k = a . length , h = [ ] , m = [ ] , n = function ( a ) { f && ( g ? f . call ( e , a ) : f . call ( e , h , m ) ) } ; if ( k === 0 ) n ( true ) ; else { var o = function ( a , b ) { ( b ? h : m ) . push ( a ) ; if ( -- k <= 0 ) { d && CKEDITOR . document . getDocumentElement ( ) . removeStyle ( "cursor" ) ; n ( b ) } } , l = function ( a , l ) { b [ a ] = 1 ; var d = c [ a ] ; delete c [ a ] ; for ( var j = 0 ; j < d . length ; j ++ ) d [ j ] ( a , l ) } , j = function ( a ) { if ( b [ a ] ) o ( a , true ) ; else { var d = c [ a ] || ( c [ a ] = [ ] ) ; d . push ( o ) ; if ( ! ( d . length >
1 ) ) { var j = new CKEDITOR . dom . element ( "script" ) ; j . setAttributes ( { type : "text/javascript" , src : a } ) ; if ( f ) if ( CKEDITOR . env . ie ) j . $ . onreadystatechange = function ( ) { if ( j . $ . readyState == "loaded" || j . $ . readyState == "complete" ) { j . $ . onreadystatechange = null ; l ( a , true ) } } ; else { j . $ . onload = function ( ) { setTimeout ( function ( ) { l ( a , true ) } , 0 ) } ; j . $ . onerror = function ( ) { l ( a , false ) } } j . appendTo ( CKEDITOR . document . getHead ( ) ) } } } ; d && CKEDITOR . document . getDocumentElement ( ) . setStyle ( "cursor" , "wait" ) ; for ( var q = 0 ; q < k ; q ++ ) j ( a [ q ] ) } } } } ( ) ;
CKEDITOR . resourceManager = function ( b , c ) { this . basePath = b ; this . fileName = c ; this . registered = { } ; this . loaded = { } ; this . externals = { } ; this . _ = { waitingList : { } } } ;
CKEDITOR . resourceManager . prototype = { add : function ( b , c ) { if ( this . registered [ b ] ) throw '[CKEDITOR.resourceManager.add] The resource name "' + b + '" is already registered.' ; var a = this . registered [ b ] = c || { } ; a . name = b ; a . path = this . getPath ( b ) ; CKEDITOR . fire ( b + CKEDITOR . tools . capitalize ( this . fileName ) + "Ready" , a ) ; return this . get ( b ) } , get : function ( b ) { return this . registered [ b ] || null } , getPath : function ( b ) { var c = this . externals [ b ] ; return CKEDITOR . getUrl ( c && c . dir || this . basePath + b + "/" ) } , getFilePath : function ( b ) { var c = this . externals [ b ] ;
return CKEDITOR . getUrl ( this . getPath ( b ) + ( c && typeof c . file == "string" ? c . file : this . fileName + ".js" ) ) } , addExternal : function ( b , c , a ) { for ( var b = b . split ( "," ) , f = 0 ; f < b . length ; f ++ ) this . externals [ b [ f ] ] = { dir : c , file : a } } , load : function ( b , c , a ) { CKEDITOR . tools . isArray ( b ) || ( b = b ? [ b ] : [ ] ) ; for ( var f = this . loaded , e = this . registered , d = [ ] , g = { } , k = { } , h = 0 ; h < b . length ; h ++ ) { var m = b [ h ] ; if ( m ) if ( ! f [ m ] && ! e [ m ] ) { var n = this . getFilePath ( m ) ; d . push ( n ) ; n in g || ( g [ n ] = [ ] ) ; g [ n ] . push ( m ) } else k [ m ] = this . get ( m ) } CKEDITOR . scriptLoader . load ( d , function ( b ,
l ) { if ( l . length ) throw '[CKEDITOR.resourceManager.load] Resource name "' + g [ l [ 0 ] ] . join ( "," ) + '" was not found at "' + l [ 0 ] + '".' ; for ( var d = 0 ; d < b . length ; d ++ ) for ( var e = g [ b [ d ] ] , h = 0 ; h < e . length ; h ++ ) { var m = e [ h ] ; k [ m ] = this . get ( m ) ; f [ m ] = 1 } c . call ( a , k ) } , this ) } } ; CKEDITOR . plugins = new CKEDITOR . resourceManager ( "plugins/" , "plugin" ) ;
CKEDITOR . plugins . load = CKEDITOR . tools . override ( CKEDITOR . plugins . load , function ( b ) { var c = { } ; return function ( a , f , e ) { var d = { } , g = function ( a ) { b . call ( this , a , function ( a ) { CKEDITOR . tools . extend ( d , a ) ; var b = [ ] , k ; for ( k in a ) { var o = a [ k ] , l = o && o . requires ; if ( ! c [ k ] ) { if ( o . icons ) for ( var j = o . icons . split ( "," ) , q = 0 ; q < j . length ; q ++ ) CKEDITOR . skin . addIcon ( j [ q ] , o . path + "icons/" + j [ q ] + ".png" ) ; c [ k ] = 1 } if ( l ) { l . split && ( l = l . split ( "," ) ) ; for ( o = 0 ; o < l . length ; o ++ ) d [ l [ o ] ] || b . push ( l [ o ] ) } } if ( b . length ) g . call ( this , b ) ; else { for ( k in d ) { o = d [ k ] ; if ( o . onLoad &&
! o . onLoad . _called ) { o . onLoad ( ) === false && delete d [ k ] ; o . onLoad . _called = 1 } } f && f . call ( e || window , d ) } } , this ) } ; g . call ( this , a ) } } ) ; CKEDITOR . plugins . setLang = function ( b , c , a ) { var f = this . get ( b ) , b = f . langEntries || ( f . langEntries = { } ) , f = f . lang || ( f . lang = [ ] ) ; f . split && ( f = f . split ( "," ) ) ; CKEDITOR . tools . indexOf ( f , c ) == - 1 && f . push ( c ) ; b [ c ] = a } ; CKEDITOR . ui = function ( b ) { if ( b . ui ) return b . ui ; this . items = { } ; this . instances = { } ; this . editor = b ; this . _ = { handlers : { } } ; return this } ;
CKEDITOR . ui . prototype = { add : function ( b , c , a ) { a . name = b . toLowerCase ( ) ; var f = this . items [ b ] = { type : c , command : a . command || null , args : Array . prototype . slice . call ( arguments , 2 ) } ; CKEDITOR . tools . extend ( f , a ) } , get : function ( b ) { return this . instances [ b ] } , create : function ( b ) { var c = this . items [ b ] , a = c && this . _ . handlers [ c . type ] , f = c && c . command && this . editor . getCommand ( c . command ) , a = a && a . create . apply ( this , c . args ) ; this . instances [ b ] = a ; f && f . uiItems . push ( a ) ; if ( a && ! a . type ) a . type = c . type ; return a } , addHandler : function ( b , c ) { this . _ . handlers [ b ] =
c } , space : function ( b ) { return CKEDITOR . document . getById ( this . spaceId ( b ) ) } , spaceId : function ( b ) { return this . editor . id + "_" + b } } ; CKEDITOR . event . implementOn ( CKEDITOR . ui ) ;
( function ( ) { function b ( b , j , o ) { CKEDITOR . event . call ( this ) ; b = b && CKEDITOR . tools . clone ( b ) ; if ( j !== void 0 ) { if ( j instanceof CKEDITOR . dom . element ) { if ( ! o ) throw Error ( "One of the element mode must be specified." ) ; } else throw Error ( "Expect element of type CKEDITOR.dom.element." ) ; if ( CKEDITOR . env . ie && CKEDITOR . env . quirks && o == CKEDITOR . ELEMENT _MODE _INLINE ) throw Error ( "Inline element mode is not supported on IE quirks." ) ; if ( o == CKEDITOR . ELEMENT _MODE _INLINE && ! j . is ( CKEDITOR . dtd . $editable ) || o == CKEDITOR . ELEMENT _MODE _REPLACE &&
j . is ( CKEDITOR . dtd . $nonBodyContent ) ) throw Error ( 'The specified element mode is not supported on element: "' + j . getName ( ) + '".' ) ; this . element = j ; this . elementMode = o ; this . name = this . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO && ( j . getId ( ) || j . getNameAtt ( ) ) } else this . elementMode = CKEDITOR . ELEMENT _MODE _NONE ; this . _ = { } ; this . commands = { } ; this . templates = { } ; this . name = this . name || c ( ) ; this . id = CKEDITOR . tools . getNextId ( ) ; this . config = CKEDITOR . tools . prototypedCopy ( CKEDITOR . config ) ; this . ui = new CKEDITOR . ui ( this ) ; this . focusManager =
new CKEDITOR . focusManager ( this ) ; this . keystrokeHandler = new CKEDITOR . keystrokeHandler ( this ) ; this . on ( "mode" , a ) ; this . on ( "readOnly" , a ) ; this . on ( "selectionChange" , f ) ; this . on ( "instanceReady" , function ( ) { this . config . startupFocus && this . focus ( ) } ) ; CKEDITOR . fire ( "instanceCreated" , null , this ) ; CKEDITOR . add ( this ) ; CKEDITOR . tools . setTimeout ( function ( ) { d ( this , b ) } , 0 , this ) } function c ( ) { do var a = "editor" + ++ n ; while ( CKEDITOR . instances [ a ] ) ; return a } function a ( ) { var a , b = this . commands , c = this . mode ; if ( c ) for ( var d in b ) { a = b [ d ] ;
a [ a . startDisabled ? "disable" : this . readOnly && ! a . readOnly ? "disable" : a . modes [ c ] ? "enable" : "disable" ] ( ) } } function f ( a ) { var b = this . commands , c = a . editor , d = a . data . path , o ; for ( o in b ) { a = b [ o ] ; a . contextSensitive && a . refresh ( c , d ) } } function e ( a ) { var b = a . config . customConfig ; if ( ! b ) return false ; var b = CKEDITOR . getUrl ( b ) , c = o [ b ] || ( o [ b ] = { } ) ; if ( c . fn ) { c . fn . call ( a , a . config ) ; ( CKEDITOR . getUrl ( a . config . customConfig ) == b || ! e ( a ) ) && a . fireOnce ( "customConfigLoaded" ) } else CKEDITOR . scriptLoader . load ( b , function ( ) { c . fn = CKEDITOR . editorConfig ?
CKEDITOR . editorConfig : function ( ) { } ; e ( a ) } ) ; return true } function d ( a , b ) { a . on ( "customConfigLoaded" , function ( ) { if ( b ) { if ( b . on ) for ( var c in b . on ) a . on ( c , b . on [ c ] ) ; CKEDITOR . tools . extend ( a . config , b , true ) ; delete a . config . on } a . readOnly = ! ( ! a . config . readOnly && ! ( a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . element . isReadOnly ( ) : a . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE && a . element . getAttribute ( "disabled" ) ) ) ; a . blockless = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE && ! CKEDITOR . dtd [ a . element . getName ( ) ] . p ; a . tabIndex =
a . config . tabIndex || a . element && a . element . getAttribute ( "tabindex" ) || 0 ; if ( a . config . skin ) CKEDITOR . skinName = a . config . skin ; a . fireOnce ( "configLoaded" ) ; a . dataProcessor = new CKEDITOR . htmlDataProcessor ( a ) ; g ( a ) } ) ; if ( b && b . customConfig != void 0 ) a . config . customConfig = b . customConfig ; e ( a ) || a . fireOnce ( "customConfigLoaded" ) } function g ( a ) { CKEDITOR . skin . loadPart ( "editor" , function ( ) { k ( a ) } ) } function k ( a ) { CKEDITOR . lang . load ( a . config . language , a . config . defaultLanguage , function ( b , c ) { a . langCode = b ; a . lang = CKEDITOR . tools . prototypedCopy ( c ) ;
if ( CKEDITOR . env . gecko && CKEDITOR . env . version < 10900 && a . lang . dir == "rtl" ) a . lang . dir = "ltr" ; if ( ! a . config . contentsLangDirection ) a . config . contentsLangDirection = a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a . element . getDirection ( 1 ) : a . lang . dir ; a . fire ( "langLoaded" ) ; h ( a ) } ) } function h ( a ) { var b = a . config , c = b . plugins , d = b . extraPlugins , o = b . removePlugins ; if ( d ) var e = RegExp ( "(?:^|,)(?:" + d . replace ( /\s*,\s*/g , "|" ) + ")(?=,|$)" , "g" ) , c = c . replace ( e , "" ) , c = c + ( "," + d ) ; if ( o ) var g = RegExp ( "(?:^|,)(?:" + o . replace ( /\s*,\s*/g , "|" ) + ")(?=,|$)" ,
"g" ) , c = c . replace ( g , "" ) ; CKEDITOR . env . air && ( c = c + ",adobeair" ) ; CKEDITOR . plugins . load ( c . split ( "," ) , function ( c ) { var d = [ ] , o = [ ] , e = [ ] ; a . plugins = c ; for ( var f in c ) { var i = c [ f ] , h = i . lang , q = null , t = i . requires , k ; CKEDITOR . tools . isArray ( t ) && ( t = t . join ( "," ) ) ; if ( t && ( k = t . match ( g ) ) ) for ( ; t = k . pop ( ) ; ) CKEDITOR . tools . setTimeout ( function ( a , b ) { throw Error ( 'Plugin "' + a . replace ( "," , "" ) + '" cannot be removed from the plugins list, because it\'s required by "' + b + '" plugin.' ) ; } , 0 , null , [ t , f ] ) ; if ( h && ! a . lang [ f ] ) { h . split && ( h = h . split ( "," ) ) ;
if ( CKEDITOR . tools . indexOf ( h , a . langCode ) >= 0 ) q = a . langCode ; else { q = a . langCode . replace ( /-.*/ , "" ) ; q = q != a . langCode && CKEDITOR . tools . indexOf ( h , q ) >= 0 ? q : CKEDITOR . tools . indexOf ( h , "en" ) >= 0 ? "en" : h [ 0 ] } if ( ! i . langEntries || ! i . langEntries [ q ] ) e . push ( CKEDITOR . getUrl ( i . path + "lang/" + q + ".js" ) ) ; else { a . lang [ f ] = i . langEntries [ q ] ; q = null } } o . push ( q ) ; d . push ( i ) } CKEDITOR . scriptLoader . load ( e , function ( ) { for ( var c = [ "beforeInit" , "init" , "afterInit" ] , e = 0 ; e < c . length ; e ++ ) for ( var g = 0 ; g < d . length ; g ++ ) { var f = d [ g ] ; e === 0 && ( o [ g ] && f . lang && f . langEntries ) &&
( a . lang [ f . name ] = f . langEntries [ o [ g ] ] ) ; if ( f [ c [ e ] ] ) f [ c [ e ] ] ( a ) } a . fireOnce ( "pluginsLoaded" ) ; b . keystrokes && a . setKeystroke ( a . config . keystrokes ) ; for ( g = 0 ; g < a . config . blockedKeystrokes . length ; g ++ ) a . keystrokeHandler . blockedKeystrokes [ a . config . blockedKeystrokes [ g ] ] = 1 ; a . fireOnce ( "loaded" ) ; CKEDITOR . fire ( "instanceLoaded" , null , a ) } ) } ) } function m ( ) { var a = this . element ; if ( a && this . elementMode != CKEDITOR . ELEMENT _MODE _APPENDTO ) { var b = this . getData ( ) ; this . config . htmlEncodeOutput && ( b = CKEDITOR . tools . htmlEncode ( b ) ) ; a . is ( "textarea" ) ?
a . setValue ( b ) : a . setHtml ( b ) ; return true } return false } b . prototype = CKEDITOR . editor . prototype ; CKEDITOR . editor = b ; var n = 0 , o = { } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { addCommand : function ( a , b ) { return this . commands [ a ] = new CKEDITOR . command ( this , b ) } , destroy : function ( a ) { this . fire ( "beforeDestroy" ) ; ! a && m . call ( this ) ; this . editable ( null ) ; this . fire ( "destroy" ) ; this . removeAllListeners ( ) ; CKEDITOR . remove ( this ) ; CKEDITOR . fire ( "instanceDestroyed" , null , this ) } , elementPath : function ( a ) { return ( a = a || this . getSelection ( ) . getStartElement ( ) ) ?
new CKEDITOR . dom . elementPath ( a , this . editable ( ) ) : null } , createRange : function ( ) { var a = this . editable ( ) ; return a ? new CKEDITOR . dom . range ( a ) : null } , execCommand : function ( a , b ) { var c = this . getCommand ( a ) , d = { name : a , commandData : b , command : c } ; if ( c && c . state != CKEDITOR . TRISTATE _DISABLED && this . fire ( "beforeCommandExec" , d ) !== true ) { d . returnValue = c . exec ( d . commandData ) ; if ( ! c . async && this . fire ( "afterCommandExec" , d ) !== true ) return d . returnValue } return false } , getCommand : function ( a ) { return this . commands [ a ] } , getData : function ( a ) { ! a &&
this . fire ( "beforeGetData" ) ; var b = this . _ . data ; if ( typeof b != "string" ) b = ( b = this . element ) && this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE ? b . is ( "textarea" ) ? b . getValue ( ) : b . getHtml ( ) : "" ; b = { dataValue : b } ; ! a && this . fire ( "getData" , b ) ; return b . dataValue } , getSnapshot : function ( ) { var a = this . fire ( "getSnapshot" ) ; if ( typeof a != "string" ) { var b = this . element ; b && this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE && ( a = b . is ( "textarea" ) ? b . getValue ( ) : b . getHtml ( ) ) } return a } , loadSnapshot : function ( a ) { this . fire ( "loadSnapshot" , a ) } ,
setData : function ( a , b , c ) { if ( b ) this . on ( "dataReady" , function ( a ) { a . removeListener ( ) ; b . call ( a . editor ) } ) ; a = { dataValue : a } ; ! c && this . fire ( "setData" , a ) ; this . _ . data = a . dataValue ; ! c && this . fire ( "afterSetData" , a ) } , setReadOnly : function ( a ) { a = a == void 0 || a ; if ( this . readOnly != a ) { this . readOnly = a ; this . editable ( ) . setReadOnly ( a ) ; this . fire ( "readOnly" ) } } , insertHtml : function ( a , b ) { this . fire ( "insertHtml" , { dataValue : a , mode : b } ) } , insertText : function ( a ) { this . fire ( "insertText" , a ) } , insertElement : function ( a ) { this . fire ( "insertElement" ,
a ) } , focus : function ( ) { this . fire ( "beforeFocus" ) } , checkDirty : function ( ) { return this . _ . previousValue !== this . getSnapshot ( ) } , resetDirty : function ( ) { this . _ . previousValue = this . getSnapshot ( ) } , updateElement : function ( ) { return m . call ( this ) } , setKeystroke : function ( ) { for ( var a = this . keystrokeHandler . keystrokes , b = CKEDITOR . tools . isArray ( arguments [ 0 ] ) ? arguments [ 0 ] : [ [ ] . slice . call ( arguments , 0 ) ] , c , d , o = b . length ; o -- ; ) { c = b [ o ] ; d = 0 ; if ( CKEDITOR . tools . isArray ( c ) ) { d = c [ 1 ] ; c = c [ 0 ] } d ? a [ c ] = d : delete a [ c ] } } } ) } ) ( ) ;
CKEDITOR . ELEMENT _MODE _NONE = 0 ; CKEDITOR . ELEMENT _MODE _REPLACE = 1 ; CKEDITOR . ELEMENT _MODE _APPENDTO = 2 ; CKEDITOR . ELEMENT _MODE _INLINE = 3 ; CKEDITOR . htmlParser = function ( ) { this . _ = { htmlPartsRegex : RegExp ( "<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)--\>)|(?:([^\\s>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'>])*)\\/?>))" , "g" ) } } ;
( function ( ) { var b = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g , c = { checked : 1 , compact : 1 , declare : 1 , defer : 1 , disabled : 1 , ismap : 1 , multiple : 1 , nohref : 1 , noresize : 1 , noshade : 1 , nowrap : 1 , readonly : 1 , selected : 1 } ; CKEDITOR . htmlParser . prototype = { onTagOpen : function ( ) { } , onTagClose : function ( ) { } , onText : function ( ) { } , onCDATA : function ( ) { } , onComment : function ( ) { } , parse : function ( a ) { for ( var f , e , d = 0 , g ; f = this . _ . htmlPartsRegex . exec ( a ) ; ) { e = f . index ; if ( e > d ) { d = a . substring ( d , e ) ; if ( g ) g . push ( d ) ; else this . onText ( d ) } d =
this . _ . htmlPartsRegex . lastIndex ; if ( e = f [ 1 ] ) { e = e . toLowerCase ( ) ; if ( g && CKEDITOR . dtd . $cdata [ e ] ) { this . onCDATA ( g . join ( "" ) ) ; g = null } if ( ! g ) { this . onTagClose ( e ) ; continue } } if ( g ) g . push ( f [ 0 ] ) ; else if ( e = f [ 3 ] ) { e = e . toLowerCase ( ) ; if ( ! /="/ . test ( e ) ) { var k = { } , h ; f = f [ 4 ] ; var m = ! ! ( f && f . charAt ( f . length - 1 ) == "/" ) ; if ( f ) for ( ; h = b . exec ( f ) ; ) { var n = h [ 1 ] . toLowerCase ( ) ; h = h [ 2 ] || h [ 3 ] || h [ 4 ] || "" ; k [ n ] = ! h && c [ n ] ? n : h } this . onTagOpen ( e , k , m ) ; ! g && CKEDITOR . dtd . $cdata [ e ] && ( g = [ ] ) } } else if ( e = f [ 2 ] ) this . onComment ( e ) } if ( a . length > d ) this . onText ( a . substring ( d ,
a . length ) ) } } } ) ( ) ;
CKEDITOR . htmlParser . basicWriter = CKEDITOR . tools . createClass ( { $ : function ( ) { this . _ = { output : [ ] } } , proto : { openTag : function ( b ) { this . _ . output . push ( "<" , b ) } , openTagClose : function ( b , c ) { c ? this . _ . output . push ( " />" ) : this . _ . output . push ( ">" ) } , attribute : function ( b , c ) { typeof c == "string" && ( c = CKEDITOR . tools . htmlEncodeAttr ( c ) ) ; this . _ . output . push ( " " , b , '="' , c , '"' ) } , closeTag : function ( b ) { this . _ . output . push ( "</" , b , ">" ) } , text : function ( b ) { this . _ . output . push ( b ) } , comment : function ( b ) { this . _ . output . push ( "<\!--" , b , "--\>" ) } , write : function ( b ) { this . _ . output . push ( b ) } ,
reset : function ( ) { this . _ . output = [ ] ; this . _ . indent = false } , getHtml : function ( b ) { var c = this . _ . output . join ( "" ) ; b && this . reset ( ) ; return c } } } ) ; CKEDITOR . htmlParser . comment = function ( b ) { this . value = b ; this . _ = { isBlockLike : false } } ; CKEDITOR . htmlParser . comment . prototype = { type : CKEDITOR . NODE _COMMENT , writeHtml : function ( b , c ) { var a = this . value ; if ( c ) { if ( ! ( a = c . onComment ( a , this ) ) ) return ; if ( typeof a != "string" ) { a . parent = this . parent ; a . writeHtml ( b , c ) ; return } } b . comment ( a ) } } ;
( function ( ) { CKEDITOR . htmlParser . text = function ( b ) { this . value = b ; this . _ = { isBlockLike : false } } ; CKEDITOR . htmlParser . text . prototype = { type : CKEDITOR . NODE _TEXT , writeHtml : function ( b , c ) { var a = this . value ; ( ! c || ( a = c . onText ( a , this ) ) ) && b . text ( a ) } } } ) ( ) ; ( function ( ) { CKEDITOR . htmlParser . cdata = function ( b ) { this . value = b } ; CKEDITOR . htmlParser . cdata . prototype = { type : CKEDITOR . NODE _TEXT , writeHtml : function ( b ) { b . write ( this . value ) } } } ) ( ) ;
CKEDITOR . htmlParser . fragment = function ( ) { this . children = [ ] ; this . parent = null ; this . _ = { isBlockLike : true , hasInlineStarted : false } } ;
( function ( ) { function b ( a ) { return a . name == "a" && a . attributes . href || CKEDITOR . dtd . $removeEmpty [ a . name ] } var c = CKEDITOR . tools . extend ( { table : 1 , ul : 1 , ol : 1 , dl : 1 } , CKEDITOR . dtd . table , CKEDITOR . dtd . ul , CKEDITOR . dtd . ol , CKEDITOR . dtd . dl ) , a = { ol : 1 , ul : 1 } , f = CKEDITOR . tools . extend ( { } , { html : 1 } , CKEDITOR . dtd . html , CKEDITOR . dtd . body , CKEDITOR . dtd . head , { style : 1 , script : 1 } ) ; CKEDITOR . htmlParser . fragment . fromHtml = function ( e , d , g ) { function k ( a ) { var b ; if ( y . length > 0 ) for ( var c = 0 ; c < y . length ; c ++ ) { var d = y [ c ] , l = d . name , o = CKEDITOR . dtd [ l ] , j = i . name &&
CKEDITOR . dtd [ i . name ] ; if ( ( ! j || j [ l ] ) && ( ! a || ! o || o [ a ] || ! CKEDITOR . dtd [ a ] ) ) { if ( ! b ) { h ( ) ; b = 1 } d = d . clone ( ) ; d . parent = i ; i = d ; y . splice ( c , 1 ) ; c -- } else if ( l == i . name ) { n ( i , i . parent , 1 ) ; c -- } } } function h ( ) { for ( ; z . length ; ) n ( z . shift ( ) , i ) } function m ( a ) { if ( a . _ . isBlockLike && a . name != "pre" && a . name != "textarea" ) { var b = a . children . length , c = a . children [ b - 1 ] , d ; if ( c && c . type == CKEDITOR . NODE _TEXT ) ( d = CKEDITOR . tools . rtrim ( c . value ) ) ? c . value = d : a . children . length = b - 1 } } function n ( a , c , d ) { var c = c || i || q , l = i ; if ( a . previous === void 0 ) { if ( o ( c , a ) ) { i = c ;
j . onTagOpen ( g , { } ) ; a . returnPoint = c = i } m ( a ) ; ( ! b ( a ) || a . children . length ) && c . add ( a ) ; a . name == "pre" && ( A = false ) ; a . name == "textarea" && ( s = false ) } if ( a . returnPoint ) { i = a . returnPoint ; delete a . returnPoint } else i = d ? c : l } function o ( a , b ) { if ( ( a == q || a . name == "body" ) && g && ( ! a . name || CKEDITOR . dtd [ a . name ] [ g ] ) ) { var c , d ; return ( c = b . attributes && ( d = b . attributes [ "data-cke-real-element-type" ] ) ? d : b . name ) && c in CKEDITOR . dtd . $inline && ! ( c in CKEDITOR . dtd . head ) && ! b . isOrphan || b . type == CKEDITOR . NODE _TEXT } } function l ( a , b ) { return a in CKEDITOR . dtd . $listItem ||
a in CKEDITOR . dtd . $tableContent ? a == b || a == "dt" && b == "dd" || a == "dd" && b == "dt" : false } var j = new CKEDITOR . htmlParser , q = d instanceof CKEDITOR . htmlParser . element ? d : typeof d == "string" ? new CKEDITOR . htmlParser . element ( d ) : new CKEDITOR . htmlParser . fragment , y = [ ] , z = [ ] , i = q , s = q . name == "textarea" , A = q . name == "pre" ; j . onTagOpen = function ( d , o , g , e ) { o = new CKEDITOR . htmlParser . element ( d , o ) ; if ( o . isUnknown && g ) o . isEmpty = true ; o . isOptionalClose = e ; if ( b ( o ) ) y . push ( o ) ; else { if ( d == "pre" ) A = true ; else { if ( d == "br" && A ) { i . add ( new CKEDITOR . htmlParser . text ( "\n" ) ) ;
return } d == "textarea" && ( s = true ) } if ( d == "br" ) z . push ( o ) ; else { for ( ; ; ) { e = ( g = i . name ) ? CKEDITOR . dtd [ g ] || ( i . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : f ; if ( ! o . isUnknown && ! i . isUnknown && ! e [ d ] ) if ( i . isOptionalClose ) j . onTagClose ( g ) ; else if ( d in a && g in a ) { g = i . children ; ( g = g [ g . length - 1 ] ) && g . name == "li" || n ( g = new CKEDITOR . htmlParser . element ( "li" ) , i ) ; ! o . returnPoint && ( o . returnPoint = i ) ; i = g } else if ( d in CKEDITOR . dtd . $listItem && ! l ( d , g ) ) j . onTagOpen ( d == "li" ? "ul" : "dl" , { } , 0 , 1 ) ; else if ( g in c && ! l ( d , g ) ) { ! o . returnPoint &&
( o . returnPoint = i ) ; i = i . parent } else { g in CKEDITOR . dtd . $inline && y . unshift ( i ) ; if ( i . parent ) n ( i , i . parent , 1 ) ; else { o . isOrphan = 1 ; break } } else break } k ( d ) ; h ( ) ; o . parent = i ; o . isEmpty ? n ( o ) : i = o } } } ; j . onTagClose = function ( a ) { for ( var b = y . length - 1 ; b >= 0 ; b -- ) if ( a == y [ b ] . name ) { y . splice ( b , 1 ) ; return } for ( var c = [ ] , d = [ ] , o = i ; o != q && o . name != a ; ) { o . _ . isBlockLike || d . unshift ( o ) ; c . push ( o ) ; o = o . returnPoint || o . parent } if ( o != q ) { for ( b = 0 ; b < c . length ; b ++ ) { var l = c [ b ] ; n ( l , l . parent ) } i = o ; o . _ . isBlockLike && h ( ) ; n ( o , o . parent ) ; if ( o == i ) i = i . parent ; y = y . concat ( d ) } a ==
"body" && ( g = false ) } ; j . onText = function ( b ) { if ( ( ! i . _ . hasInlineStarted || z . length ) && ! A && ! s ) { b = CKEDITOR . tools . ltrim ( b ) ; if ( b . length === 0 ) return } var d = i . name , l = d ? CKEDITOR . dtd [ d ] || ( i . _ . isBlockLike ? CKEDITOR . dtd . div : CKEDITOR . dtd . span ) : f ; if ( ! s && ! l [ "#" ] && d in c ) { j . onTagOpen ( d in a ? "li" : d == "dl" ? "dd" : d == "table" ? "tr" : d == "tr" ? "td" : "" ) ; j . onText ( b ) } else { h ( ) ; k ( ) ; ! A && ! s && ( b = b . replace ( /[\t\r\n ]{2,}|[\t\r\n]/g , " " ) ) ; b = new CKEDITOR . htmlParser . text ( b ) ; if ( o ( i , b ) ) this . onTagOpen ( g , { } , 0 , 1 ) ; i . add ( b ) } } ; j . onCDATA = function ( a ) { i . add ( new CKEDITOR . htmlParser . cdata ( a ) ) } ;
j . onComment = function ( a ) { h ( ) ; k ( ) ; i . add ( new CKEDITOR . htmlParser . comment ( a ) ) } ; j . parse ( e ) ; for ( h ( ! CKEDITOR . env . ie && 1 ) ; i != q ; ) n ( i , i . parent , 1 ) ; m ( q ) ; return q } ; CKEDITOR . htmlParser . fragment . prototype = { type : CKEDITOR . NODE _DOCUMENT _FRAGMENT , add : function ( a , b ) { isNaN ( b ) && ( b = this . children . length ) ; var c = b > 0 ? this . children [ b - 1 ] : null ; if ( c ) { if ( a . _ . isBlockLike && c . type == CKEDITOR . NODE _TEXT ) { c . value = CKEDITOR . tools . rtrim ( c . value ) ; if ( c . value . length === 0 ) { this . children . pop ( ) ; this . add ( a ) ; return } } c . next = a } a . previous = c ; a . parent = this ;
this . children . splice ( b , 0 , a ) ; if ( ! this . _ . hasInlineStarted ) this . _ . hasInlineStarted = a . type == CKEDITOR . NODE _TEXT || a . type == CKEDITOR . NODE _ELEMENT && ! a . _ . isBlockLike } , writeHtml : function ( a , b ) { var c ; this . filterChildren = function ( ) { var a = new CKEDITOR . htmlParser . basicWriter ; this . writeChildrenHtml . call ( this , a , b ) ; a = a . getHtml ( ) ; this . children = ( new CKEDITOR . htmlParser . fragment . fromHtml ( a ) ) . children ; c = 1 } ; b && b . onRoot ( this ) ; this . writeChildrenHtml ( a , c ? null : b ) } , writeChildrenHtml : function ( a , b , c ) { if ( c && ! this . parent && b ) b . onRoot ( this ) ;
for ( c = 0 ; c < this . children . length ; c ++ ) this . children [ c ] . writeHtml ( a , b ) } } } ) ( ) ;
( function ( ) { function b ( a , b ) { for ( var c = 0 ; a && c < b . length ; c ++ ) var e = b [ c ] , a = a . replace ( e [ 0 ] , e [ 1 ] ) ; return a } function c ( a , b , c ) { typeof b == "function" && ( b = [ b ] ) ; var e , f ; f = a . length ; var n = b && b . length ; if ( n ) { for ( e = 0 ; e < f && a [ e ] . pri < c ; e ++ ) ; for ( f = n - 1 ; f >= 0 ; f -- ) if ( n = b [ f ] ) { n . pri = c ; a . splice ( e , 0 , n ) } } } function a ( a , b , c ) { if ( b ) for ( var e in b ) { var m = a [ e ] ; a [ e ] = f ( m , b [ e ] , c ) ; m || a . $length ++ } } function f ( a , b , f ) { if ( b ) { b . pri = f ; if ( a ) { if ( a . splice ) c ( a , b , f ) ; else { a = a . pri > f ? [ b , a ] : [ a , b ] ; a . filter = e } return a } return b . filter = b } } function e ( a ) { for ( var b =
a . type || a instanceof CKEDITOR . htmlParser . fragment , c = 0 ; c < this . length ; c ++ ) { if ( b ) var e = a . type , f = a . name ; var n = this [ c ] . apply ( window , arguments ) ; if ( n === false ) return n ; if ( b ) { if ( n && ( n . name != f || n . type != e ) ) return n } else if ( typeof n != "string" ) return n ; n != void 0 && ( a = n ) } return a } CKEDITOR . htmlParser . filter = CKEDITOR . tools . createClass ( { $ : function ( a ) { this . _ = { elementNames : [ ] , attributeNames : [ ] , elements : { $length : 0 } , attributes : { $length : 0 } } ; a && this . addRules ( a , 10 ) } , proto : { addRules : function ( b , e ) { typeof e != "number" && ( e = 10 ) ;
c ( this . _ . elementNames , b . elementNames , e ) ; c ( this . _ . attributeNames , b . attributeNames , e ) ; a ( this . _ . elements , b . elements , e ) ; a ( this . _ . attributes , b . attributes , e ) ; this . _ . text = f ( this . _ . text , b . text , e ) || this . _ . text ; this . _ . comment = f ( this . _ . comment , b . comment , e ) || this . _ . comment ; this . _ . root = f ( this . _ . root , b . root , e ) || this . _ . root } , onElementName : function ( a ) { return b ( a , this . _ . elementNames ) } , onAttributeName : function ( a ) { return b ( a , this . _ . attributeNames ) } , onText : function ( a ) { var b = this . _ . text ; return b ? b . filter ( a ) : a } , onComment : function ( a ,
b ) { var c = this . _ . comment ; return c ? c . filter ( a , b ) : a } , onRoot : function ( a ) { var b = this . _ . root ; return b ? b . filter ( a ) : a } , onElement : function ( a ) { for ( var b = [ this . _ . elements [ "^" ] , this . _ . elements [ a . name ] , this . _ . elements . $ ] , c , e = 0 ; e < 3 ; e ++ ) if ( c = b [ e ] ) { c = c . filter ( a , this ) ; if ( c === false ) return null ; if ( c && c != a ) return this . onNode ( c ) ; if ( a . parent && ! a . name ) break } return a } , onNode : function ( a ) { var b = a . type ; return b == CKEDITOR . NODE _ELEMENT ? this . onElement ( a ) : b == CKEDITOR . NODE _TEXT ? new CKEDITOR . htmlParser . text ( this . onText ( a . value ) ) :
b == CKEDITOR . NODE _COMMENT ? new CKEDITOR . htmlParser . comment ( this . onComment ( a . value ) ) : null } , onAttribute : function ( a , b , c ) { if ( b = this . _ . attributes [ b ] ) { a = b . filter ( c , a , this ) ; if ( a === false ) return false ; if ( typeof a != "undefined" ) return a } return c } } } ) } ) ( ) ;
( function ( ) { function b ( b , c ) { function o ( a ) { return a || CKEDITOR . env . ie ? new CKEDITOR . htmlParser . text ( " " ) : new CKEDITOR . htmlParser . element ( "br" , { "data-cke-bogus" : 1 } ) } function l ( b , c ) { return function ( l ) { if ( l . type != CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var e = [ ] , g = a ( l ) , i , K ; if ( g ) for ( j ( g , 1 ) && e . push ( g ) ; g ; ) { if ( d ( g ) && ( i = f ( g ) ) && j ( i ) ) if ( ( K = f ( i ) ) && ! d ( K ) ) e . push ( i ) ; else { var h = i , q = o ( t ) , m = h . parent . children , y = CKEDITOR . tools . indexOf ( m , h ) ; m . splice ( y + 1 , 0 , q ) ; m = h . next ; h . next = q ; q . previous = h ; q . parent = h . parent ; q . next = m ; k ( i ) } g = g . previous } for ( g =
0 ; g < e . length ; g ++ ) k ( e [ g ] ) ; if ( e = CKEDITOR . env . opera && ! b || ( typeof c == "function" ? c ( l ) !== false : c ) ) if ( ! t && CKEDITOR . env . ie && l . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) e = false ; else if ( ! t && CKEDITOR . env . ie && ( document . documentMode > 7 || l . name in CKEDITOR . dtd . tr || l . name in CKEDITOR . dtd . $listItem ) ) e = false ; else { e = a ( l ) ; e = ! e || l . name == "form" && e . name == "input" } e && l . add ( o ( b ) ) } } } function j ( a , b ) { if ( ( ! t || ! CKEDITOR . env . ie ) && a . type == CKEDITOR . NODE _ELEMENT && a . name == "br" && ! a . attributes [ "data-cke-eol" ] ) return true ; var c ; if ( a . type ==
CKEDITOR . NODE _TEXT && ( c = a . value . match ( s ) ) ) { if ( c . index ) { g ( a , new CKEDITOR . htmlParser . text ( a . value . substring ( 0 , c . index ) ) ) ; a . value = c [ 0 ] } if ( CKEDITOR . env . ie && t && ( ! b || a . parent . name in h ) ) return true ; if ( ! t ) if ( ( c = a . previous ) && c . name == "br" || ! c || d ( c ) ) return true } return false } var i = { elements : { } } , t = c == "html" , h = CKEDITOR . tools . extend ( { } , E ) , q ; for ( q in h ) "#" in B [ q ] || delete h [ q ] ; for ( q in h ) i . elements [ q ] = l ( t , b . config . fillEmptyBlocks !== false ) ; i . root = l ( t ) ; i . elements . br = function ( a ) { return function ( b ) { if ( b . parent . type !=
CKEDITOR . NODE _DOCUMENT _FRAGMENT ) { var c = b . attributes ; if ( "data-cke-bogus" in c || "data-cke-eol" in c ) delete c [ "data-cke-bogus" ] ; else { for ( c = b . next ; c && e ( c ) ; ) c = c . next ; var l = f ( b ) ; if ( ! c && d ( b . parent ) ) { b = b . parent ; c = o ( a ) ; l = b . children [ b . children . length - 1 ] ; b . children . push ( c ) ; c . parent = b ; if ( l ) { l . next = c ; c . previous = l } } else d ( c ) && ( l && ! d ( l ) ) && g ( c , o ( a ) ) } } } } ( t ) ; return i } function c ( a ) { return a . enterMode != CKEDITOR . ENTER _BR && a . autoParagraph !== false ? a . enterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : false } function a ( a ) { for ( a = a . children [ a . children . length -
1 ] ; a && e ( a ) ; ) a = a . previous ; return a } function f ( a ) { for ( a = a . previous ; a && e ( a ) ; ) a = a . previous ; return a } function e ( a ) { return a . type == CKEDITOR . NODE _TEXT && ! CKEDITOR . tools . trim ( a . value ) || a . type == CKEDITOR . NODE _ELEMENT && a . attributes [ "data-cke-bookmark" ] } function d ( a ) { return a && ( a . type == CKEDITOR . NODE _ELEMENT && a . name in E || a . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT ) } function g ( a , b ) { var c = a . parent . children , d = CKEDITOR . tools . indexOf ( c , a ) ; c . splice ( d , 0 , b ) ; c = a . previous ; a . previous = b ; b . next = a ; b . parent = a . parent ; if ( c ) { b . previous =
c ; c . next = b } } function k ( a ) { var b = a . parent . children , c = CKEDITOR . tools . indexOf ( b , a ) , d = a . previous , a = a . next ; d && ( d . next = a ) ; a && ( a . previous = d ) ; b . splice ( c , 1 ) } function h ( a ) { var b = a . parent ; return b ? CKEDITOR . tools . indexOf ( b . children , a ) : - 1 } function m ( a ) { a = a . attributes ; a . contenteditable != "false" && ( a [ "data-cke-editable" ] = a . contenteditable ? "true" : 1 ) ; a . contenteditable = "false" } function n ( a ) { a = a . attributes ; switch ( a [ "data-cke-editable" ] ) { case "true" : a . contenteditable = "true" ; break ; case "1" : delete a . contenteditable } } function o ( a ) { return a . replace ( v ,
function ( a , b , c ) { return "<" + b + c . replace ( t , function ( a , b ) { return ! /^on/ . test ( b ) && c . indexOf ( "data-cke-saved-" + b ) == - 1 ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR . rnd + "-" + a : a } ) + ">" } ) } function l ( a ) { return a . replace ( w , function ( a ) { return "<cke:encoded>" + encodeURIComponent ( a ) + "</cke:encoded>" } ) } function j ( a ) { return a . replace ( I , function ( a , b ) { return decodeURIComponent ( b ) } ) } function q ( a ) { return a . replace ( /<\!--(?!{cke_protected})[\s\S]+?--\>/g , function ( a ) { return "<\!--" + A + "{C}" + encodeURIComponent ( a ) . replace ( /--/g ,
"%2D%2D" ) + "--\>" } ) } function y ( a ) { return a . replace ( /<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g , function ( a , b ) { return decodeURIComponent ( b ) } ) } function z ( a , b ) { var c = b . _ . dataStore ; return a . replace ( /<\!--\{cke_protected\}([\s\S]+?)--\>/g , function ( a , b ) { return decodeURIComponent ( b ) } ) . replace ( /\{cke_protected_(\d+)\}/g , function ( a , b ) { return c && c [ b ] || "" } ) } function i ( a , b ) { for ( var c = [ ] , d = b . config . protectedSource , o = b . _ . dataStore || ( b . _ . dataStore = { id : 1 } ) , l = /<\!--\{cke_temp(comment)?\}(\d*?)--\>/g , d = [ /<script[\s\S]*?<\/script>/gi ,
/<noscript[\s\S]*?<\/noscript>/gi ] . concat ( d ) , a = a . replace ( /<\!--[\s\S]*?--\>/g , function ( a ) { return "<\!--{cke_tempcomment}" + ( c . push ( a ) - 1 ) + "--\>" } ) , j = 0 ; j < d . length ; j ++ ) a = a . replace ( d [ j ] , function ( a ) { a = a . replace ( l , function ( a , b , d ) { return c [ d ] } ) ; return /cke_temp(comment)?/ . test ( a ) ? a : "<\!--{cke_temp}" + ( c . push ( a ) - 1 ) + "--\>" } ) ; a = a . replace ( l , function ( a , b , d ) { return "<\!--" + A + ( b ? "{C}" : "" ) + encodeURIComponent ( c [ d ] ) . replace ( /--/g , "%2D%2D" ) + "--\>" } ) ; return a . replace ( /(['"]).*?\1/g , function ( a ) { return a . replace ( /<\!--\{cke_protected\}([\s\S]+?)--\>/g ,
function ( a , b ) { o [ o . id ] = decodeURIComponent ( b ) ; return "{cke_protected_" + o . id ++ + "}" } ) } ) } CKEDITOR . htmlDataProcessor = function ( a ) { var c , d ; this . editor = a ; this . dataFilter = c = new CKEDITOR . htmlParser . filter ; this . htmlFilter = d = new CKEDITOR . htmlParser . filter ; this . writer = new CKEDITOR . htmlParser . basicWriter ; c . addRules ( u ) ; c . addRules ( b ( a , "data" ) ) ; d . addRules ( r ) ; d . addRules ( b ( a , "html" ) ) } ; CKEDITOR . htmlDataProcessor . prototype = { toHtml : function ( a , b , d ) { var a = i ( a , this . editor ) , a = o ( a ) , a = l ( a ) , a = a . replace ( G , "$1cke:$2" ) , a = a . replace ( Q ,
"<cke:$1$2></cke:$1>" ) , a = CKEDITOR . env . opera ? a : a . replace ( /(<pre\b[^>]*>)(\r\n|\n)/g , "$1$2$2" ) , e = this . editor . editable ( ) , f ; ! b && b !== null && ( b = e . getName ( ) ) ; e = b || e . getName ( ) ; if ( CKEDITOR . env . ie && CKEDITOR . env . version < 9 && e == "pre" ) { e = "div" ; a = "<pre>" + a + "</pre>" ; f = 1 } e = this . editor . document . createElement ( e ) ; e . setHtml ( "a" + a ) ; a = e . getHtml ( ) . substr ( 1 ) ; a = a . replace ( RegExp ( " data-cke-" + CKEDITOR . rnd + "-" , "ig" ) , " " ) ; f && ( a = a . replace ( /^<pre>|<\/pre>$/gi , "" ) ) ; a = a . replace ( C , "$1$2" ) ; a = j ( a ) ; a = y ( a ) ; a = CKEDITOR . htmlParser . fragment . fromHtml ( a ,
b , d === false ? false : c ( this . editor . config ) ) ; b = new CKEDITOR . htmlParser . basicWriter ; a . writeChildrenHtml ( b , this . dataFilter , 1 ) ; a = b . getHtml ( true ) ; return a = q ( a ) } , toDataFormat : function ( a ) { var b = this . editor . editable ( ) , d = this . writer , a = CKEDITOR . htmlParser . fragment . fromHtml ( a , b . getName ( ) , c ( this . editor . config ) ) ; d . reset ( ) ; a . writeChildrenHtml ( d , this . htmlFilter , 1 ) ; d = d . getHtml ( true ) ; d = y ( d ) ; return d = z ( d , this . editor ) } } ; var s = /(?: |\xa0)$/ , A = "{cke_protected}" , B = CKEDITOR . dtd , p = [ "caption" , "colgroup" , "col" , "thead" , "tfoot" ,
"tbody" ] , E = CKEDITOR . tools . extend ( { } , B . $blockLimit , B . $block ) , u = { elements : { } , attributeNames : [ [ /^on/ , "data-cke-pa-on" ] ] } , r = { elementNames : [ [ /^cke:/ , "" ] , [ /^\?xml:namespace$/ , "" ] ] , attributeNames : [ [ /^data-cke-(saved|pa)-/ , "" ] , [ /^data-cke-.*/ , "" ] , [ "hidefocus" , "" ] ] , elements : { $ : function ( a ) { var b = a . attributes ; if ( b ) { if ( b [ "data-cke-temp" ] ) return false ; for ( var c = [ "name" , "href" , "src" ] , d , o = 0 ; o < c . length ; o ++ ) { d = "data-cke-saved-" + c [ o ] ; d in b && delete b [ c [ o ] ] } } return a } , table : function ( a ) { a . children . slice ( 0 ) . sort ( function ( a ,
b ) { var c , d ; if ( a . type == CKEDITOR . NODE _ELEMENT && b . type == a . type ) { c = CKEDITOR . tools . indexOf ( p , a . name ) ; d = CKEDITOR . tools . indexOf ( p , b . name ) } if ( ! ( c > - 1 && d > - 1 && c != d ) ) { c = h ( a ) ; d = h ( b ) } return c > d ? 1 : - 1 } ) } , embed : function ( a ) { var b = a . parent ; if ( b && b . name == "object" ) { var c = b . attributes . width , b = b . attributes . height ; c && ( a . attributes . width = c ) ; b && ( a . attributes . height = b ) } } , param : function ( a ) { a . children = [ ] ; a . isEmpty = true ; return a } , a : function ( a ) { if ( ! a . children . length && ! a . attributes . name && ! a . attributes [ "data-cke-saved-name" ] ) return false } ,
span : function ( a ) { a . attributes [ "class" ] == "Apple-style-span" && delete a . name } , html : function ( a ) { delete a . attributes . contenteditable ; delete a . attributes [ "class" ] } , body : function ( a ) { delete a . attributes . spellcheck ; delete a . attributes . contenteditable } , style : function ( a ) { var b = a . children [ 0 ] ; b && b . value && ( b . value = CKEDITOR . tools . trim ( b . value ) ) ; if ( ! a . attributes . type ) a . attributes . type = "text/css" } , title : function ( a ) { var b = a . children [ 0 ] ; b && ( b . value = a . attributes [ "data-cke-title" ] || "" ) } } , attributes : { "class" : function ( a ) { return CKEDITOR . tools . ltrim ( a . replace ( /(?:^|\s+)cke_[^\s]*/g ,
"" ) ) || false } } } ; if ( CKEDITOR . env . ie ) r . attributes . style = function ( a ) { return a . replace ( /(^|;)([^\:]+)/g , function ( a ) { return a . toLowerCase ( ) } ) } ; for ( var D in { input : 1 , textarea : 1 } ) { u . elements [ D ] = m ; r . elements [ D ] = n } var v = /<(a|area|img|input|source)\b([^>]*)>/gi , t = /\b(on\w+|href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi , w = /(?:<style(?=[ >])[^>]*>[\s\S]*<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi , I = /<cke:encoded>([^<]*)<\/cke:encoded>/gi , G = /(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi ,
C = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi , Q = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi } ) ( ) ;
CKEDITOR . htmlParser . element = function ( b , c ) { this . name = b ; this . attributes = c || { } ; this . children = [ ] ; var a = b || "" , f = a . match ( /^cke:(.*)/ ) ; f && ( a = f [ 1 ] ) ; a = ! ( ! CKEDITOR . dtd . $nonBodyContent [ a ] && ! CKEDITOR . dtd . $block [ a ] && ! CKEDITOR . dtd . $listItem [ a ] && ! CKEDITOR . dtd . $tableContent [ a ] && ! ( CKEDITOR . dtd . $nonEditable [ a ] || a == "br" ) ) ; this . isEmpty = ! ! CKEDITOR . dtd . $empty [ b ] ; this . isUnknown = ! CKEDITOR . dtd [ b ] ; this . _ = { isBlockLike : a , hasInlineStarted : this . isEmpty || ! a } } ;
CKEDITOR . htmlParser . cssStyle = function ( b ) { var c = { } ; ( ( b instanceof CKEDITOR . htmlParser . element ? b . attributes . style : b ) || "" ) . replace ( /"/g , '"' ) . replace ( /\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g , function ( a , b , e ) { b == "font-family" && ( e = e . replace ( /["']/g , "" ) ) ; c [ b . toLowerCase ( ) ] = e } ) ; return { rules : c , populate : function ( a ) { var b = this . toString ( ) ; if ( b ) a instanceof CKEDITOR . dom . element ? a . setAttribute ( "style" , b ) : a instanceof CKEDITOR . htmlParser . element ? a . attributes . style = b : a . style = b } , toString : function ( ) { var a = [ ] , b ;
for ( b in c ) c [ b ] && a . push ( b , ":" , c [ b ] , ";" ) ; return a . join ( "" ) } } } ;
( function ( ) { var b = function ( b , a ) { b = b [ 0 ] ; a = a [ 0 ] ; return b < a ? - 1 : b > a ? 1 : 0 } ; CKEDITOR . htmlParser . element . prototype = { type : CKEDITOR . NODE _ELEMENT , add : CKEDITOR . htmlParser . fragment . prototype . add , clone : function ( ) { return new CKEDITOR . htmlParser . element ( this . name , this . attributes ) } , writeHtml : function ( c , a ) { var f = this . attributes , e = this , d = e . name , g , k , h , m ; e . filterChildren = function ( ) { if ( ! m ) { var b = new CKEDITOR . htmlParser . basicWriter ; CKEDITOR . htmlParser . fragment . prototype . writeChildrenHtml . call ( e , b , a ) ; e . children = ( new CKEDITOR . htmlParser . fragment . fromHtml ( b . getHtml ( ) ,
e . clone ( ) , 0 ) ) . children ; m = 1 } } ; if ( a ) { if ( ! this . parent ) a . onRoot ( this ) ; for ( ; ; ) { if ( ! ( d = a . onElementName ( d ) ) ) return ; e . name = d ; if ( ! ( e = a . onElement ( e ) ) ) return ; e . parent = this . parent ; if ( e . name == d ) break ; if ( e . type != CKEDITOR . NODE _ELEMENT ) { e . writeHtml ( c , a ) ; return } d = e . name ; if ( ! d ) { for ( var d = 0 , n = this . children . length ; d < n ; d ++ ) this . children [ d ] . parent = e . parent ; this . writeChildrenHtml . call ( e , c , m ? null : a ) ; return } } f = e . attributes } c . openTag ( d , f ) ; for ( var n = [ ] , o = 0 ; o < 2 ; o ++ ) for ( g in f ) { k = g ; h = f [ g ] ; if ( o == 1 ) n . push ( [ g , h ] ) ; else if ( a ) { for ( ; ; ) if ( k =
a . onAttributeName ( g ) ) if ( k != g ) { delete f [ g ] ; g = k } else break ; else { delete f [ g ] ; break } k && ( ( h = a . onAttribute ( e , k , h ) ) === false ? delete f [ k ] : f [ k ] = h ) } } c . sortAttributes && n . sort ( b ) ; f = n . length ; for ( o = 0 ; o < f ; o ++ ) { g = n [ o ] ; c . attribute ( g [ 0 ] , g [ 1 ] ) } c . openTagClose ( d , e . isEmpty ) ; if ( ! e . isEmpty ) { this . writeChildrenHtml . call ( e , c , m ? null : a ) ; c . closeTag ( d ) } } , writeChildrenHtml : function ( b , a ) { CKEDITOR . htmlParser . fragment . prototype . writeChildrenHtml . apply ( this , arguments ) } } } ) ( ) ;
( function ( ) { var b = { } ; CKEDITOR . template = function ( c ) { if ( b [ c ] ) this . output = b [ c ] ; else { var a = c . replace ( /'/g , "\\'" ) . replace ( /{([^}]+)}/g , function ( a , b ) { return "',data['" + b + "']==undefined?'{" + b + "}':data['" + b + "'],'" } ) ; this . output = b [ c ] = Function ( "data" , "buffer" , "return buffer?buffer.push('" + a + "'):['" + a + "'].join('');" ) } } } ) ( ) ; delete CKEDITOR . loadFullCore ; CKEDITOR . instances = { } ; CKEDITOR . document = new CKEDITOR . dom . document ( document ) ;
CKEDITOR . add = function ( b ) { CKEDITOR . instances [ b . name ] = b ; b . on ( "focus" , function ( ) { if ( CKEDITOR . currentInstance != b ) { CKEDITOR . currentInstance = b ; CKEDITOR . fire ( "currentInstance" ) } } ) ; b . on ( "blur" , function ( ) { if ( CKEDITOR . currentInstance == b ) { CKEDITOR . currentInstance = null ; CKEDITOR . fire ( "currentInstance" ) } } ) ; CKEDITOR . fire ( "instance" , null , b ) } ; CKEDITOR . remove = function ( b ) { delete CKEDITOR . instances [ b . name ] } ;
( function ( ) { var b = { } ; CKEDITOR . addTemplate = function ( c , a ) { var f = b [ c ] ; if ( f ) return f ; f = { name : c , source : a } ; CKEDITOR . fire ( "template" , f ) ; return b [ c ] = new CKEDITOR . template ( f . source ) } ; CKEDITOR . getTemplate = function ( c ) { return b [ c ] } } ) ( ) ; ( function ( ) { var b = [ ] ; CKEDITOR . addCss = function ( c ) { b . push ( c ) } ; CKEDITOR . getCss = function ( ) { return b . join ( "\n" ) } } ) ( ) ; CKEDITOR . on ( "instanceDestroyed" , function ( ) { CKEDITOR . tools . isEmpty ( this . instances ) && CKEDITOR . fire ( "reset" ) } ) ; CKEDITOR . TRISTATE _ON = 1 ; CKEDITOR . TRISTATE _OFF = 2 ;
CKEDITOR . TRISTATE _DISABLED = 0 ;
( function ( ) { CKEDITOR . inline = function ( b , c ) { if ( ! CKEDITOR . env . isCompatible ) return null ; b = CKEDITOR . dom . element . get ( b ) ; if ( b . getEditor ( ) ) throw 'The editor instance "' + b . getEditor ( ) . name + '" is already attached to the provided element.' ; var a = new CKEDITOR . editor ( c , b , CKEDITOR . ELEMENT _MODE _INLINE ) ; a . setData ( b . getHtml ( ) , null , true ) ; a . on ( "loaded" , function ( ) { a . fire ( "uiReady" ) ; a . editable ( b ) ; a . container = b ; a . setData ( a . getData ( 1 ) ) ; a . fire ( "contentDom" ) ; a . mode = "wysiwyg" ; a . fire ( "mode" ) ; a . fireOnce ( "instanceReady" ) ; CKEDITOR . fire ( "instanceReady" ,
null , a ) ; a . resetDirty ( ) } , null , null , 1E4 ) ; a . on ( "destroy" , function ( ) { a . element . clearCustomData ( ) ; delete a . element } ) ; return a } ; CKEDITOR . inlineAll = function ( ) { var b , c , a ; for ( a in CKEDITOR . dtd . $editable ) for ( var f = CKEDITOR . document . getElementsByTag ( a ) , e = 0 , d = f . count ( ) ; e < d ; e ++ ) { b = f . getItem ( e ) ; if ( b . getAttribute ( "contenteditable" ) == "true" ) { c = { element : b , config : { } } ; CKEDITOR . fire ( "inline" , c ) !== false && CKEDITOR . inline ( b , c . config ) } } } ; CKEDITOR . domReady ( function ( ) { ! CKEDITOR . disableAutoInline && CKEDITOR . inlineAll ( ) } ) } ) ( ) ;
CKEDITOR . replaceClass = "ckeditor" ;
( function ( ) { function b ( b , e , k , h ) { if ( ! CKEDITOR . env . isCompatible ) return null ; b = CKEDITOR . dom . element . get ( b ) ; if ( b . getEditor ( ) ) throw 'The editor instance "' + b . getEditor ( ) . name + '" is already attached to the provided element.' ; var m = new CKEDITOR . editor ( e , b , h ) ; h == CKEDITOR . ELEMENT _MODE _REPLACE && b . setStyle ( "visibility" , "hidden" ) ; k && m . setData ( k , null , true ) ; m . on ( "loaded" , function ( ) { a ( m ) ; h == CKEDITOR . ELEMENT _MODE _REPLACE && m . config . autoUpdateElement && f ( m ) ; m . setMode ( m . config . startupMode , function ( ) { m . fireOnce ( "instanceReady" ) ;
CKEDITOR . fire ( "instanceReady" , null , m ) ; m . resetDirty ( ) } ) } ) ; m . on ( "destroy" , c ) ; return m } function c ( ) { var a = this . container , b = this . element ; if ( a ) { a . clearCustomData ( ) ; a . remove ( ) } if ( b ) { b . clearCustomData ( ) ; this . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE && b . show ( ) ; delete this . element } } function a ( a ) { var b = a . name , c = a . element , f = a . elementMode , m = a . fire ( "uiSpace" , { space : "top" , html : "" } ) . html , n = a . fireOnce ( "uiSpace" , { space : "bottom" , html : "" } ) . html ; e || ( e = CKEDITOR . addTemplate ( "maincontainer" , '<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} ' +
CKEDITOR . env . cssClass + '" dir="{langDir}" lang="{langCode}" role="application" aria-labelledby="cke_{name}_arialbl"><span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span><{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>' ) ) ; b = CKEDITOR . dom . element . createFromHtml ( e . output ( { id : a . id , name : b , langDir : a . lang . dir , langCode : a . langCode , voiceLabel : a . lang . editor ,
topHtml : m ? '<span id="' + a . ui . spaceId ( "top" ) + '" class="cke_top cke_reset_all" role="presentation" style="height:auto">' + m + "</span>" : "" , contentId : a . ui . spaceId ( "contents" ) , bottomHtml : n ? '<span id="' + a . ui . spaceId ( "bottom" ) + '" class="cke_bottom cke_reset_all" role="presentation">' + n + "</span>" : "" , outerEl : CKEDITOR . env . ie ? "span" : "div" } ) ) ; if ( f == CKEDITOR . ELEMENT _MODE _REPLACE ) { c . hide ( ) ; b . insertAfter ( c ) } else c . append ( b ) ; a . container = b ; m && a . ui . space ( "top" ) . unselectable ( ) ; n && a . ui . space ( "bottom" ) . unselectable ( ) ; c =
a . config . width ; f = a . config . height ; c && b . setStyle ( "width" , CKEDITOR . tools . cssLength ( c ) ) ; f && a . ui . space ( "contents" ) . setStyle ( "height" , CKEDITOR . tools . cssLength ( f ) ) ; b . disableContextMenu ( ) ; CKEDITOR . env . webkit && b . on ( "focus" , function ( ) { a . focus ( ) } ) ; a . fireOnce ( "uiReady" ) } function f ( a ) { var b = a . element ; if ( a . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE && b . is ( "textarea" ) ) { var c = b . $ . form && new CKEDITOR . dom . element ( b . $ . form ) ; if ( c ) { var e = function ( ) { a . updateElement ( ) } ; c . on ( "submit" , e ) ; if ( ! c . $ . submit . nodeName && ! c . $ . submit . length ) c . $ . submit =
CKEDITOR . tools . override ( c . $ . submit , function ( b ) { return function ( ) { a . updateElement ( ) ; b . apply ? b . apply ( this , arguments ) : b ( ) } } ) ; a . on ( "destroy" , function ( ) { c . removeListener ( "submit" , e ) } ) } } } CKEDITOR . replace = function ( a , c ) { return b ( a , c , null , CKEDITOR . ELEMENT _MODE _REPLACE ) } ; CKEDITOR . appendTo = function ( a , c , e ) { return b ( a , c , e , CKEDITOR . ELEMENT _MODE _APPENDTO ) } ; CKEDITOR . replaceAll = function ( ) { for ( var a = document . getElementsByTagName ( "textarea" ) , b = 0 ; b < a . length ; b ++ ) { var c = null , e = a [ b ] ; if ( e . name || e . id ) { if ( typeof arguments [ 0 ] ==
"string" ) { if ( ! RegExp ( "(?:^|\\s)" + arguments [ 0 ] + "(?:$|\\s)" ) . test ( e . className ) ) continue } else if ( typeof arguments [ 0 ] == "function" ) { c = { } ; if ( arguments [ 0 ] ( e , c ) === false ) continue } this . replace ( e , c ) } } } ; CKEDITOR . editor . prototype . addMode = function ( a , b ) { ( this . _ . modes || ( this . _ . modes = { } ) ) [ a ] = b } ; CKEDITOR . editor . prototype . setMode = function ( a , b ) { var c = this , e = this . _ . modes ; if ( ! ( a == c . mode || ! e || ! e [ a ] ) ) { c . fire ( "beforeSetMode" , a ) ; if ( c . mode ) { var f = c . checkDirty ( ) ; c . _ . previousMode = c . mode ; c . fire ( "beforeModeUnload" ) ; c . editable ( 0 ) ;
c . ui . space ( "contents" ) . setHtml ( "" ) ; c . mode = "" } this . _ . modes [ a ] ( function ( ) { c . mode = a ; if ( f !== void 0 ) { c . mayBeDirty = true ; ! f && c . resetDirty ( ) } setTimeout ( function ( ) { c . fire ( "mode" ) ; b && b . call ( c ) } , 0 ) } ) } } ; CKEDITOR . editor . prototype . resize = function ( a , b , c , e ) { var f = this . container , n = this . ui . space ( "contents" ) , o = CKEDITOR . env . webkit && this . document && this . document . getWindow ( ) . $ . frameElement , e = e ? f . getChild ( 1 ) : f ; e . setSize ( "width" , a , true ) ; o && ( o . style . width = "1%" ) ; n . setStyle ( "height" , Math . max ( b - ( c ? 0 : ( e . $ . offsetHeight || 0 ) - ( n . $ . clientHeight ||
0 ) ) , 0 ) + "px" ) ; o && ( o . style . width = "100%" ) ; this . fire ( "resize" ) } ; CKEDITOR . editor . prototype . getResizable = function ( a ) { return a ? this . ui . space ( "contents" ) : this . container } ; var e ; CKEDITOR . domReady ( function ( ) { CKEDITOR . replaceClass && CKEDITOR . replaceAll ( CKEDITOR . replaceClass ) } ) } ) ( ) ; CKEDITOR . config . startupMode = "wysiwyg" ;
( function ( ) { function b ( b ) { var c = b . editor , d = c . editable ( ) , e = b . data . path , f = e . blockLimit , g = b . data . selection . getRanges ( ) [ 0 ] , i = c . config . enterMode ; if ( CKEDITOR . env . gecko ) { var h = e . block || e . blockLimit || e . root , m = h && h . getLast ( a ) ; h && ( h . isBlockBoundary ( ) && ( ! m || ! ( m . type == CKEDITOR . NODE _ELEMENT && m . isBlockBoundary ( ) ) ) && ! h . is ( "pre" ) && ! h . getBogus ( ) ) && h . appendBogus ( ) } if ( c . config . autoParagraph !== false && i != CKEDITOR . ENTER _BR && g . collapsed && d . equals ( f ) && ! e . block ) { d = g . clone ( ) ; d . enlarge ( CKEDITOR . ENLARGE _BLOCK _CONTENTS ) ; e = new CKEDITOR . dom . walker ( d ) ;
e . guard = function ( b ) { return ! a ( b ) || b . type == CKEDITOR . NODE _COMMENT || b . isReadOnly ( ) } ; if ( ! e . checkForward ( ) || d . checkStartOfBlock ( ) && d . checkEndOfBlock ( ) ) { c = g . fixBlock ( true , c . config . enterMode == CKEDITOR . ENTER _DIV ? "div" : "p" ) ; if ( CKEDITOR . env . ie ) ( c = c . getFirst ( a ) ) && ( c . type == CKEDITOR . NODE _TEXT && CKEDITOR . tools . trim ( c . getText ( ) ) . match ( /^(?: |\xa0)$/ ) ) && c . remove ( ) ; g . select ( ) ; b . cancel ( ) } } } function c ( a ) { var b = a . data . getTarget ( ) ; if ( b . is ( "input" ) ) { b = b . getAttribute ( "type" ) ; ( b == "submit" || b == "reset" ) && a . data . preventDefault ( ) } }
function a ( a ) { return h ( a ) && m ( a ) } function f ( a , b ) { return function ( c ) { var d = CKEDITOR . dom . element . get ( c . data . $ . toElement || c . data . $ . fromElement || c . data . $ . relatedTarget ) ; ( ! d || ! b . equals ( d ) && ! b . contains ( d ) ) && a . call ( this , c ) } } function e ( b ) { var c , d = b . getRanges ( ) [ 0 ] , b = b . root , e = d . startPath ( ) , f = { table : 1 , ul : 1 , ol : 1 , dl : 1 } , g = CKEDITOR . dom . walker . bogus ( ) ; if ( e . contains ( f ) ) { var i = d . clone ( ) ; i . collapse ( 1 ) ; i . setStartAt ( b , CKEDITOR . POSITION _AFTER _START ) ; i = new CKEDITOR . dom . walker ( i ) ; e = function ( b , d ) { return function ( b , o ) { o && ( b . type ==
CKEDITOR . NODE _ELEMENT && b . is ( f ) ) && ( c = b ) ; if ( a ( b ) && ! o && ( ! d || ! g ( b ) ) ) return false } } ; i . guard = e ( i ) ; i . checkBackward ( ) ; if ( c ) { i = d . clone ( ) ; i . collapse ( ) ; i . setEndAt ( b , CKEDITOR . POSITION _BEFORE _END ) ; i = new CKEDITOR . dom . walker ( i ) ; i . guard = e ( i , 1 ) ; c = 0 ; i . checkForward ( ) ; return c } } return null } function d ( a ) { a . editor . focus ( ) ; a . editor . fire ( "saveSnapshot" ) } function g ( a , b ) { var c = a . editor ; ! b && c . getSelection ( ) . scrollIntoView ( ) ; setTimeout ( function ( ) { c . fire ( "saveSnapshot" ) } , 0 ) } CKEDITOR . editable = CKEDITOR . tools . createClass ( { base : CKEDITOR . dom . element ,
$ : function ( a , b ) { this . base ( b . $ || b ) ; this . editor = a ; this . hasFocus = false ; this . setup ( ) } , proto : { focus : function ( ) { this . $ [ CKEDITOR . env . ie && this . getDocument ( ) . equals ( CKEDITOR . document ) ? "setActive" : "focus" ] ( ) ; CKEDITOR . env . safari && ! this . isInline ( ) && ( CKEDITOR . document . getActive ( ) . equals ( this . getWindow ( ) . getFrame ( ) ) || this . getWindow ( ) . focus ( ) ) } , on : function ( a , b ) { var c = Array . prototype . slice . call ( arguments , 0 ) ; if ( CKEDITOR . env . ie && /^focus|blur$/ . exec ( a ) ) { a = a == "focus" ? "focusin" : "focusout" ; b = f ( b , this ) ; c [ 0 ] = a ; c [ 1 ] = b } return CKEDITOR . dom . element . prototype . on . apply ( this ,
c ) } , attachListener : function ( a , b , c , d , e , f ) { ! this . _ . listeners && ( this . _ . listeners = [ ] ) ; var g = Array . prototype . slice . call ( arguments , 1 ) ; this . _ . listeners . push ( a . on . apply ( a , g ) ) } , clearListeners : function ( ) { var a = this . _ . listeners ; try { for ( ; a . length ; ) a . pop ( ) . removeListener ( ) } catch ( b ) { } } , restoreAttrs : function ( ) { var a = this . _ . attrChanges , b , c ; for ( c in a ) if ( a . hasOwnProperty ( c ) ) { b = a [ c ] ; b !== null ? this . setAttribute ( c , b ) : this . removeAttribute ( c ) } } , attachClass : function ( a ) { var b = this . getCustomData ( "classes" ) ; if ( ! this . hasClass ( a ) ) { ! b &&
( b = [ ] ) ; b . push ( a ) ; this . setCustomData ( "classes" , b ) ; this . addClass ( a ) } } , changeAttr : function ( a , b ) { var c = this . getAttribute ( a ) ; if ( b !== c ) { ! this . _ . attrChanges && ( this . _ . attrChanges = { } ) ; a in this . _ . attrChanges || ( this . _ . attrChanges [ a ] = c ) ; this . setAttribute ( a , b ) } } , insertHtml : function ( a , b ) { d ( this ) ; n ( this , b == "text" ? "text" : "html" , a ) } , insertText : function ( a ) { d ( this ) ; var b = this . editor , c = b . getSelection ( ) . getStartElement ( ) . hasAscendant ( "pre" , true ) ? CKEDITOR . ENTER _BR : b . config . enterMode , b = c == CKEDITOR . ENTER _BR , e = CKEDITOR . tools ,
a = e . htmlEncode ( a . replace ( /\r\n/g , "\n" ) ) , a = a . replace ( /\t/g , " " ) , c = c == CKEDITOR . ENTER _P ? "p" : "div" ; if ( ! b ) { var f = /\n{2}/g ; if ( f . test ( a ) ) var g = "<" + c + ">" , i = "</" + c + ">" , a = g + a . replace ( f , function ( ) { return i + g } ) + i } a = a . replace ( /\n/g , "<br>" ) ; b || ( a = a . replace ( RegExp ( "<br>(?=</" + c + ">)" ) , function ( a ) { return e . repeat ( a , 2 ) } ) ) ; a = a . replace ( /^ | $/g , " " ) ; a = a . replace ( /(>|\s) /g , function ( a , b ) { return b + " " } ) . replace ( / (?=<)/g , " " ) ; n ( this , "text" , a ) } , insertElement : function ( b ) { d ( this ) ; for ( var c =
this . editor , e = c . config . enterMode , f = c . getSelection ( ) , h = f . getRanges ( ) , m = b . getName ( ) , i = CKEDITOR . dtd . $block [ m ] , n , k , B , p = h . length - 1 ; p >= 0 ; p -- ) { n = h [ p ] ; if ( ! n . checkReadOnly ( ) ) { n . deleteContents ( 1 ) ; k = ! p && b || b . clone ( 1 ) ; var E , u ; if ( i ) for ( ; ( E = n . getCommonAncestor ( 0 , 1 ) ) && ( u = CKEDITOR . dtd [ E . getName ( ) ] ) && ( ! u || ! u [ m ] ) ; ) if ( E . getName ( ) in CKEDITOR . dtd . span ) n . splitElement ( E ) ; else if ( n . checkStartOfBlock ( ) && n . checkEndOfBlock ( ) ) { n . setStartBefore ( E ) ; n . collapse ( true ) ; E . remove ( ) } else n . splitBlock ( e == CKEDITOR . ENTER _DIV ? "div" : "p" ,
c . editable ( ) ) ; n . insertNode ( k ) ; B || ( B = k ) } } if ( B ) { n . moveToPosition ( B , CKEDITOR . POSITION _AFTER _END ) ; if ( i ) if ( ( b = B . getNext ( a ) ) && b . type == CKEDITOR . NODE _ELEMENT && b . is ( CKEDITOR . dtd . $block ) ) b . getDtd ( ) [ "#" ] ? n . moveToElementEditStart ( b ) : n . moveToElementEditEnd ( B ) ; else if ( ! b && e != CKEDITOR . ENTER _BR ) { b = n . fixBlock ( true , e == CKEDITOR . ENTER _DIV ? "div" : "p" ) ; n . moveToElementEditStart ( b ) } } f . selectRanges ( [ n ] ) ; g ( this , CKEDITOR . env . opera ) } , setData : function ( a , b ) { ! b && this . editor . dataProcessor && ( a = this . editor . dataProcessor . toHtml ( a ) ) ;
this . setHtml ( a ) ; this . editor . fire ( "dataReady" ) } , getData : function ( a ) { var b = this . getHtml ( ) ; ! a && this . editor . dataProcessor && ( b = this . editor . dataProcessor . toDataFormat ( b ) ) ; return b } , setReadOnly : function ( a ) { this . setAttribute ( "contenteditable" , ! a ) } , detach : function ( ) { this . removeClass ( "cke_editable" ) ; var a = this . editor ; this . _ . detach ( ) ; delete a . document ; delete a . window } , isInline : function ( ) { return this . getDocument ( ) . equals ( CKEDITOR . document ) } , setup : function ( ) { var a = this . editor ; this . attachListener ( a , "beforeGetData" ,
function ( ) { var b = this . getData ( ) ; this . is ( "textarea" ) || a . config . ignoreEmptyParagraph !== false && ( b = b . replace ( k , function ( a , b ) { return b } ) ) ; a . setData ( b , null , 1 ) } , this ) ; this . attachListener ( a , "getSnapshot" , function ( a ) { a . data = this . getData ( 1 ) } , this ) ; this . attachListener ( a , "afterSetData" , function ( ) { this . setData ( a . getData ( 1 ) ) } , this ) ; this . attachListener ( a , "loadSnapshot" , function ( a ) { this . setData ( a . data , 1 ) } , this ) ; this . attachListener ( a , "beforeFocus" , function ( ) { var b = a . getSelection ( ) ; ( b = b && b . getNative ( ) ) && b . type == "Control" ||
this . focus ( ) } , this ) ; this . attachListener ( a , "insertHtml" , function ( a ) { this . insertHtml ( a . data . dataValue , a . data . mode ) } , this ) ; this . attachListener ( a , "insertElement" , function ( a ) { this . insertElement ( a . data ) } , this ) ; this . attachListener ( a , "insertText" , function ( a ) { this . insertText ( a . data ) } , this ) ; this . setReadOnly ( a . readOnly ) ; this . attachClass ( "cke_editable" ) ; this . attachClass ( a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? "cke_editable_inline" : a . elementMode == CKEDITOR . ELEMENT _MODE _REPLACE || a . elementMode == CKEDITOR . ELEMENT _MODE _APPENDTO ?
"cke_editable_themed" : "" ) ; this . attachClass ( "cke_contents_" + a . config . contentsLangDirection ) ; a . keystrokeHandler . blockedKeystrokes [ 8 ] = a . readOnly ; a . keystrokeHandler . attach ( this ) ; this . on ( "blur" , function ( a ) { CKEDITOR . env . opera && CKEDITOR . document . getActive ( ) . equals ( this . isInline ( ) ? this : this . getWindow ( ) . getFrame ( ) ) ? a . cancel ( ) : this . hasFocus = false } , null , null , - 1 ) ; this . on ( "focus" , function ( ) { this . hasFocus = true } , null , null , - 1 ) ; a . focusManager . add ( this ) ; if ( this . equals ( CKEDITOR . document . getActive ( ) ) ) { this . hasFocus =
true ; a . once ( "contentDom" , function ( ) { a . focusManager . focus ( ) } ) } this . isInline ( ) && this . changeAttr ( "tabindex" , a . tabIndex ) ; if ( ! this . is ( "textarea" ) ) { a . document = this . getDocument ( ) ; a . window = this . getWindow ( ) ; var b = a . document ; this . changeAttr ( "spellcheck" , ! a . config . disableNativeSpellChecker ) ; var d = a . config . contentsLangDirection ; this . getDirection ( 1 ) != d && this . changeAttr ( "dir" , d ) ; var f = CKEDITOR . getCss ( ) ; if ( f ) { d = b . getHead ( ) ; if ( ! d . getCustomData ( "stylesheet" ) ) { f = b . appendStyleText ( f ) ; f = new CKEDITOR . dom . element ( f . ownerNode ||
f . owningElement ) ; d . setCustomData ( "stylesheet" , f ) ; f . data ( "cke-temp" , 1 ) } } d = b . getCustomData ( "stylesheet_ref" ) || 0 ; b . setCustomData ( "stylesheet_ref" , d + 1 ) ; this . setCustomData ( "cke_includeReadonly" , ! a . config . disableReadonlyStyling ) ; this . attachListener ( this , "click" , function ( a ) { var a = a . data , b = a . getTarget ( ) ; b . is ( "a" ) && ( a . $ . button != 2 && b . isReadOnly ( ) ) && a . preventDefault ( ) } ) ; this . attachListener ( a , "key" , function ( b ) { if ( a . readOnly ) return true ; var c = b . data . keyCode , d ; if ( c in { 8 : 1 , 46 : 1 } ) { var l = a . getSelection ( ) , b = l . getRanges ( ) [ 0 ] ,
f = b . startPath ( ) , j , g , m , c = c == 8 ; if ( l = e ( l ) ) { a . fire ( "saveSnapshot" ) ; b . moveToPosition ( l , CKEDITOR . POSITION _BEFORE _START ) ; l . remove ( ) ; b . select ( ) ; a . fire ( "saveSnapshot" ) ; d = 1 } else if ( b . collapsed ) if ( ( j = f . block ) && b [ c ? "checkStartOfBlock" : "checkEndOfBlock" ] ( ) && ( m = j [ c ? "getPrevious" : "getNext" ] ( h ) ) && m . is ( "table" ) ) { a . fire ( "saveSnapshot" ) ; b [ c ? "checkEndOfBlock" : "checkStartOfBlock" ] ( ) && j . remove ( ) ; b [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( m ) ; b . select ( ) ; a . fire ( "saveSnapshot" ) ; d = 1 } else if ( f . blockLimit && f . blockLimit . is ( "td" ) &&
( g = f . blockLimit . getAscendant ( "table" ) ) && b . checkBoundaryOfElement ( g , c ? CKEDITOR . START : CKEDITOR . END ) && ( m = g [ c ? "getPrevious" : "getNext" ] ( h ) ) ) { a . fire ( "saveSnapshot" ) ; b [ "moveToElementEdit" + ( c ? "End" : "Start" ) ] ( m ) ; b . checkStartOfBlock ( ) && b . checkEndOfBlock ( ) ? m . remove ( ) : b . select ( ) ; a . fire ( "saveSnapshot" ) ; d = 1 } else if ( ( g = f . contains ( [ "td" , "th" , "caption" ] ) ) && b . checkBoundaryOfElement ( g , c ? CKEDITOR . START : CKEDITOR . END ) ) if ( ( m = g [ c ? "getPreviousSourceNode" : "getNextSourceNode" ] ( 1 , CKEDITOR . NODE _ELEMENT ) ) && ! m . isReadOnly ( ) && b . root . contains ( m ) ) { b [ c ?
"moveToElementEditEnd" : "moveToElementEditStart" ] ( m ) ; b . select ( ) ; d = 1 } } return ! d } ) ; CKEDITOR . env . ie && this . attachListener ( this , "click" , c ) ; ! CKEDITOR . env . ie && ! CKEDITOR . env . opera && this . attachListener ( this , "mousedown" , function ( b ) { var c = b . data . getTarget ( ) ; if ( c . is ( "img" , "hr" , "input" , "textarea" , "select" ) ) { a . getSelection ( ) . selectElement ( c ) ; c . is ( "input" , "textarea" , "select" ) && b . data . preventDefault ( ) } } ) ; CKEDITOR . env . gecko && this . attachListener ( this , "mouseup" , function ( b ) { if ( b . data . $ . button == 2 ) { b = b . data . getTarget ( ) ;
if ( ! b . getOuterHtml ( ) . replace ( k , "" ) ) { var c = a . createRange ( ) ; c . moveToElementEditStart ( b ) ; c . select ( true ) } } } ) ; if ( CKEDITOR . env . webkit ) { this . attachListener ( this , "click" , function ( a ) { a . data . getTarget ( ) . is ( "input" , "select" ) && a . data . preventDefault ( ) } ) ; this . attachListener ( this , "mouseup" , function ( a ) { a . data . getTarget ( ) . is ( "input" , "textarea" ) && a . data . preventDefault ( ) } ) } } } } , _ : { detach : function ( ) { this . editor . setData ( this . editor . getData ( ) , 0 , 1 ) ; this . clearListeners ( ) ; this . restoreAttrs ( ) ; var a ; if ( a = this . removeCustomData ( "classes" ) ) for ( ; a . length ; ) this . removeClass ( a . pop ( ) ) ;
a = this . getDocument ( ) ; var b = a . getHead ( ) ; if ( b . getCustomData ( "stylesheet" ) ) { var c = a . getCustomData ( "stylesheet_ref" ) ; if ( -- c ) a . setCustomData ( "stylesheet_ref" , c ) ; else { a . removeCustomData ( "stylesheet_ref" ) ; b . removeCustomData ( "stylesheet" ) . remove ( ) } } delete this . editor } } } ) ; CKEDITOR . editor . prototype . editable = function ( a ) { var b = this . _ . editable ; if ( b && a ) return 0 ; if ( arguments . length ) b = this . _ . editable = a ? a instanceof CKEDITOR . editable ? a : new CKEDITOR . editable ( this , a ) : ( b && b . detach ( ) , null ) ; return b } ; var k = /(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi ,
h = CKEDITOR . dom . walker . whitespaces ( true ) , m = CKEDITOR . dom . walker . bookmark ( false , true ) ; CKEDITOR . on ( "instanceLoaded" , function ( a ) { var c = a . editor ; c . on ( "insertElement" , function ( a ) { a = a . data ; if ( a . type == CKEDITOR . NODE _ELEMENT && ( a . is ( "input" ) || a . is ( "textarea" ) ) ) { a . getAttribute ( "contentEditable" ) != "false" && a . data ( "cke-editable" , a . hasAttribute ( "contenteditable" ) ? "true" : "1" ) ; a . setAttribute ( "contentEditable" , false ) } } ) ; c . on ( "selectionChange" , function ( a ) { if ( ! c . readOnly ) { var d = c . getSelection ( ) ; if ( d && ! d . isLocked ) { d = c . checkDirty ( ) ;
c . fire ( "lockSnapshot" ) ; b ( a ) ; c . fire ( "unlockSnapshot" ) ; ! d && c . resetDirty ( ) } } } ) } ) ; CKEDITOR . on ( "instanceCreated" , function ( a ) { var b = a . editor ; b . on ( "mode" , function ( ) { var a = b . editable ( ) ; if ( a && a . isInline ( ) ) { var c = this . lang . editor + ", " + this . name ; a . changeAttr ( "role" , "textbox" ) ; a . changeAttr ( "aria-label" , c ) ; a . changeAttr ( "title" , c ) ; if ( c = this . ui . space ( this . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? "top" : "contents" ) ) { var d = CKEDITOR . tools . getNextId ( ) , e = CKEDITOR . dom . element . createFromHtml ( '<span id="' + d + '" class="cke_voice_label">' +
this . lang . common . editorHelp + "</span>" ) ; c . append ( e ) ; a . changeAttr ( "aria-describedby" , d ) } } } ) } ) ; CKEDITOR . addCss ( ".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}" ) ; var n = function ( ) { function b ( a ) { return a . type == CKEDITOR . NODE _ELEMENT } function c ( a , d ) { var e , f , j , g , t = [ ] , h = d . range . startContainer ; e = d . range . startPath ( ) ; for ( var h = i [ h . getName ( ) ] , m = 0 , n = a . getChildren ( ) , q = n . count ( ) , k = - 1 , z = - 1 , y = 0 , s = e . contains ( i . $list ) ; m < q ; ++ m ) { e = n . getItem ( m ) ; if ( b ( e ) ) { j = e . getName ( ) ;
if ( s && j in CKEDITOR . dtd . $list ) t = t . concat ( c ( e , d ) ) ; else { g = ! ! h [ j ] ; if ( j == "br" && e . data ( "cke-eol" ) && ( ! m || m == q - 1 ) ) { y = ( f = m ? t [ m - 1 ] . node : n . getItem ( m + 1 ) ) && ( ! b ( f ) || ! f . is ( "br" ) ) ; f = f && b ( f ) && i . $block [ f . getName ( ) ] } k == - 1 && ! g && ( k = m ) ; g || ( z = m ) ; t . push ( { isElement : 1 , isLineBreak : y , isBlock : e . isBlockBoundary ( ) , hasBlockSibling : f , node : e , name : j , allowed : g } ) ; f = y = 0 } } else t . push ( { isElement : 0 , node : e , allowed : 1 } ) } if ( k > - 1 ) t [ k ] . firstNotAllowed = 1 ; if ( z > - 1 ) t [ z ] . lastNotAllowed = 1 ; return t } function d ( a , c ) { var e = [ ] , f = a . getChildren ( ) , l = f . count ( ) ,
g , t = 0 , h = i [ c ] , m = ! a . is ( i . $inline ) || a . is ( "br" ) ; for ( m && e . push ( " " ) ; t < l ; t ++ ) { g = f . getItem ( t ) ; b ( g ) && ! g . is ( h ) ? e = e . concat ( d ( g , c ) ) : e . push ( g ) } m && e . push ( " " ) ; return e } function e ( a ) { return a && b ( a ) && ( a . is ( i . $removeEmpty ) || a . is ( "a" ) && ! a . isBlockBoundary ( ) ) } function f ( a , c , d , e ) { var l = a . clone ( ) , j , g ; l . setEndAt ( c , CKEDITOR . POSITION _BEFORE _END ) ; if ( ( j = ( new CKEDITOR . dom . walker ( l ) ) . next ( ) ) && b ( j ) && m [ j . getName ( ) ] && ( g = j . getPrevious ( ) ) && b ( g ) && ! g . getParent ( ) . equals ( a . startContainer ) && d . contains ( g ) && e . contains ( j ) && j . isIdentical ( g ) ) { j . moveChildren ( g ) ;
j . remove ( ) ; f ( a , c , d , e ) } } function h ( a , c ) { function d ( a , c ) { if ( c . isBlock && c . isElement && ! c . node . is ( "br" ) && b ( a ) && a . is ( "br" ) ) { a . remove ( ) ; return 1 } } var e = c . endContainer . getChild ( c . endOffset ) , f = c . endContainer . getChild ( c . endOffset - 1 ) ; e && d ( e , a [ a . length - 1 ] ) ; if ( f && d ( f , a [ 0 ] ) ) { c . setEnd ( c . endContainer , c . endOffset - 1 ) ; c . collapse ( ) } } var i = CKEDITOR . dtd , m = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , ul : 1 , ol : 1 , li : 1 , pre : 1 , dl : 1 , blockquote : 1 } , n = { p : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 } , k = CKEDITOR . tools . extend ( { } , i . $inline ) ; delete k . br ;
return function ( m , s , u ) { var r = m . editor ; m . getDocument ( ) ; var D = r . getSelection ( ) . getRanges ( ) [ 0 ] ; if ( ! D . checkReadOnly ( ) ) { var v = ( new CKEDITOR . dom . elementPath ( D . startContainer , D . root ) ) . blockLimit || D . root , s = { type : s , editable : m , editor : r , range : D , blockLimit : v , mergeCandidates : [ ] , zombies : [ ] } , r = s . range , v = s . mergeCandidates , t , w , I , G , C ; if ( s . type == "text" && r . shrink ( CKEDITOR . SHRINK _ELEMENT , true , false ) ) { w = CKEDITOR . dom . element . createFromHtml ( "<span> </span>" , r . document ) ; r . insertNode ( w ) ; r . setStartAfter ( w ) } I = new CKEDITOR . dom . elementPath ( r . startContainer ) ;
s . endPath = G = new CKEDITOR . dom . elementPath ( r . endContainer ) ; if ( ! r . collapsed ) { t = G . block || G . blockLimit ; var Q = r . getCommonAncestor ( ) ; t && ( ! t . equals ( Q ) && ! t . contains ( Q ) && r . checkEndOfBlock ( ) ) && s . zombies . push ( t ) ; r . deleteContents ( ) } for ( ; ( C = b ( r . startContainer ) && r . startContainer . getChild ( r . startOffset - 1 ) ) && b ( C ) && C . isBlockBoundary ( ) && I . contains ( C ) ; ) r . moveToPosition ( C , CKEDITOR . POSITION _BEFORE _END ) ; f ( r , s . blockLimit , I , G ) ; if ( w ) { r . setEndBefore ( w ) ; r . collapse ( ) ; w . remove ( ) } w = r . startPath ( ) ; if ( t = w . contains ( e , false , 1 ) ) { r . splitElement ( t ) ;
s . inlineStylesRoot = t ; s . inlineStylesPeak = w . lastElement } w = r . createBookmark ( ) ; ( t = w . startNode . getPrevious ( a ) ) && b ( t ) && e ( t ) && v . push ( t ) ; ( t = w . startNode . getNext ( a ) ) && b ( t ) && e ( t ) && v . push ( t ) ; for ( t = w . startNode ; ( t = t . getParent ( ) ) && e ( t ) ; ) v . push ( t ) ; r . moveToBookmark ( w ) ; if ( u ) { C = u ; u = s . range ; if ( s . type == "text" && s . inlineStylesRoot ) { w = C ; C = s . inlineStylesPeak ; r = C . getDocument ( ) . createText ( "{cke-peak}" ) ; for ( v = s . inlineStylesRoot . getParent ( ) ; ! C . equals ( v ) ; ) { r = r . appendTo ( C . clone ( ) ) ; C = C . getParent ( ) } C = r . getOuterHtml ( ) . replace ( "{cke-peak}" ,
w ) } w = s . blockLimit . getName ( ) ; if ( /^\s+|\s+$/ . test ( C ) && "span" in CKEDITOR . dtd [ w ] ) { var K = '<span data-cke-marker="1"> </span>' ; C = K + C + K } C = s . editor . dataProcessor . toHtml ( C , null , false ) ; w = u . document . createElement ( "body" ) ; w . setHtml ( C ) ; if ( K ) { w . getFirst ( ) . remove ( ) ; w . getLast ( ) . remove ( ) } if ( ( K = u . startPath ( ) . block ) && ! ( K . getChildCount ( ) == 1 && K . getBogus ( ) ) ) a : { var F ; if ( w . getChildCount ( ) == 1 && b ( F = w . getFirst ( ) ) && F . is ( n ) ) { K = F . getElementsByTag ( "*" ) ; u = 0 ; for ( r = K . count ( ) ; u < r ; u ++ ) { C = K . getItem ( u ) ; if ( ! C . is ( k ) ) break a } F . moveChildren ( F . getParent ( 1 ) ) ;
F . remove ( ) } } s . dataWrapper = w ; F = s . range ; var K = F . document , x , u = s . blockLimit ; w = 0 ; var J ; C = [ ] ; var H , N , v = r = 0 , L , O ; I = F . startContainer ; t = s . endPath . elements [ 0 ] ; var P ; G = t . getPosition ( I ) ; Q = ! ! t . getCommonAncestor ( I ) && G != CKEDITOR . POSITION _IDENTICAL && ! ( G & CKEDITOR . POSITION _CONTAINS + CKEDITOR . POSITION _IS _CONTAINED ) ; I = c ( s . dataWrapper , s ) ; for ( h ( I , F ) ; w < I . length ; w ++ ) { G = I [ w ] ; if ( x = G . isLineBreak ) { x = F ; L = u ; var M = void 0 , R = void 0 ; if ( G . hasBlockSibling ) x = 1 ; else { M = x . startContainer . getAscendant ( i . $block , 1 ) ; if ( ! M || ! M . is ( { div : 1 , p : 1 } ) ) x =
0 ; else { R = M . getPosition ( L ) ; if ( R == CKEDITOR . POSITION _IDENTICAL || R == CKEDITOR . POSITION _CONTAINS ) x = 0 ; else { L = x . splitElement ( M ) ; x . moveToPosition ( L , CKEDITOR . POSITION _AFTER _START ) ; x = 1 } } } } if ( x ) v = w > 0 ; else { x = F . startPath ( ) ; if ( ! G . isBlock && ( N = s . editor . config . enterMode != CKEDITOR . ENTER _BR && s . editor . config . autoParagraph !== false ? s . editor . config . enterMode == CKEDITOR . ENTER _DIV ? "div" : "p" : false ) && ! x . block && x . blockLimit && x . blockLimit . equals ( F . root ) ) { N = K . createElement ( N ) ; ! CKEDITOR . env . ie && N . appendBogus ( ) ; F . insertNode ( N ) ; ! CKEDITOR . env . ie &&
( J = N . getBogus ( ) ) && J . remove ( ) ; F . moveToPosition ( N , CKEDITOR . POSITION _BEFORE _END ) } if ( ( x = F . startPath ( ) . block ) && ! x . equals ( H ) ) { if ( J = x . getBogus ( ) ) { J . remove ( ) ; C . push ( x ) } H = x } G . firstNotAllowed && ( r = 1 ) ; if ( r && G . isElement ) { x = F . startContainer ; for ( L = null ; x && ! i [ x . getName ( ) ] [ G . name ] ; ) { if ( x . equals ( u ) ) { x = null ; break } L = x ; x = x . getParent ( ) } if ( x ) { if ( L ) { O = F . splitElement ( L ) ; s . zombies . push ( O ) ; s . zombies . push ( L ) } } else { L = u . getName ( ) ; P = ! w ; x = w == I . length - 1 ; L = d ( G . node , L ) ; for ( var M = [ ] , R = L . length , T = 0 , U = void 0 , V = 0 , W = - 1 ; T < R ; T ++ ) { U = L [ T ] ;
if ( U == " " ) { if ( ! V && ( ! P || T ) ) { M . push ( new CKEDITOR . dom . text ( " " ) ) ; W = M . length } V = 1 } else { M . push ( U ) ; V = 0 } } x && W == M . length && M . pop ( ) ; P = M } } if ( P ) { for ( ; x = P . pop ( ) ; ) F . insertNode ( x ) ; P = 0 } else F . insertNode ( G . node ) ; if ( G . lastNotAllowed && w < I . length - 1 ) { ( O = Q ? t : O ) && F . setEndAt ( O , CKEDITOR . POSITION _AFTER _START ) ; r = 0 } F . collapse ( ) } } s . dontMoveCaret = v ; s . bogusNeededBlocks = C } J = s . range ; var S ; O = s . bogusNeededBlocks ; for ( P = J . createBookmark ( ) ; H = s . zombies . pop ( ) ; ) if ( H . getParent ( ) ) { N = J . clone ( ) ; N . moveToElementEditStart ( H ) ; N . removeEmptyBlocksAtEnd ( ) } if ( O ) for ( ; H =
O . pop ( ) ; ) H . append ( CKEDITOR . env . ie ? J . document . createText ( " " ) : J . document . createElement ( "br" ) ) ; for ( ; H = s . mergeCandidates . pop ( ) ; ) H . mergeSiblings ( ) ; J . moveToBookmark ( P ) ; if ( ! s . dontMoveCaret ) { for ( H = b ( J . startContainer ) && J . startContainer . getChild ( J . startOffset - 1 ) ; H && b ( H ) && ! H . is ( i . $empty ) ; ) { if ( H . isBlockBoundary ( ) ) J . moveToPosition ( H , CKEDITOR . POSITION _BEFORE _END ) ; else { if ( e ( H ) && H . getHtml ( ) . match ( /(\s| )$/g ) ) { S = null ; break } S = J . clone ( ) ; S . moveToPosition ( H , CKEDITOR . POSITION _BEFORE _END ) } H = H . getLast ( a ) } S && J . moveToRange ( S ) } D . select ( ) ;
g ( m ) } } } ( ) } ) ( ) ;
( function ( ) { function b ( ) { var a = this . getSelection ( 1 ) ; if ( a . getType ( ) != CKEDITOR . SELECTION _NONE ) { this . fire ( "selectionCheck" , a ) ; var b = this . elementPath ( ) ; if ( ! b . compare ( this . _ . selectionPreviousPath ) ) { this . _ . selectionPreviousPath = b ; this . fire ( "selectionChange" , { selection : a , path : b } ) } } } function c ( ) { k = true ; if ( ! g ) { a . call ( this ) ; g = CKEDITOR . tools . setTimeout ( a , 200 , this ) } } function a ( ) { g = null ; if ( k ) { CKEDITOR . tools . setTimeout ( b , 0 , this ) ; k = false } } function f ( a ) { function b ( c , d ) { return ! c || c . type == CKEDITOR . NODE _TEXT ? false :
a . clone ( ) [ "moveToElementEdit" + ( d ? "End" : "Start" ) ] ( c ) } if ( ! ( a . root instanceof CKEDITOR . editable ) ) return false ; var c = a . startContainer , d = a . getPreviousNode ( h , null , c ) , e = a . getNextNode ( h , null , c ) ; return b ( d ) || b ( e , 1 ) || ! d && ! e && ! ( c . type == CKEDITOR . NODE _ELEMENT && c . isBlockBoundary ( ) && c . getBogus ( ) ) ? true : false } function e ( a ) { return a . getCustomData ( "cke-fillingChar" ) } function d ( a , b ) { var c = a && a . removeCustomData ( "cke-fillingChar" ) ; if ( c ) { if ( b !== false ) { var d , e = a . getDocument ( ) . getSelection ( ) . getNative ( ) , f = e && e . type != "None" &&
e . getRangeAt ( 0 ) ; if ( c . getLength ( ) > 1 && f && f . intersectsNode ( c . $ ) ) { d = [ e . anchorOffset , e . focusOffset ] ; f = e . focusNode == c . $ && e . focusOffset > 0 ; e . anchorNode == c . $ && e . anchorOffset > 0 && d [ 0 ] -- ; f && d [ 1 ] -- ; var g ; f = e ; if ( ! f . isCollapsed ) { g = f . getRangeAt ( 0 ) ; g . setStart ( f . anchorNode , f . anchorOffset ) ; g . setEnd ( f . focusNode , f . focusOffset ) ; g = g . collapsed } g && d . unshift ( d . pop ( ) ) } } c . setText ( c . getText ( ) . replace ( /\u200B/g , "" ) ) ; if ( d ) { c = e . getRangeAt ( 0 ) ; c . setStart ( c . startContainer , d [ 0 ] ) ; c . setEnd ( c . startContainer , d [ 1 ] ) ; e . removeAllRanges ( ) ; e . addRange ( c ) } } }
var g , k , h = CKEDITOR . dom . walker . invisible ( 1 ) ; CKEDITOR . on ( "instanceCreated" , function ( a ) { function e ( ) { var a = f . getSelection ( ) ; a && a . removeAllRanges ( ) } var f = a . editor ; f . define ( "selectionChange" , { errorProof : 1 } ) ; f . on ( "contentDom" , function ( ) { var a = f . document , e = CKEDITOR . document , l = f . editable ( ) , g = a . getBody ( ) , o = a . getDocumentElement ( ) , h = l . isInline ( ) ; if ( CKEDITOR . env . ie || CKEDITOR . env . opera || h ) { var n ; l . attachListener ( l , "focus" , function ( ) { f . unlockSelection ( n ) ; n = 0 } , null , null , - 1 ) ; var k , E = function ( ) { k = f . getSelection ( 1 ) ;
k . lock ( ) } ; m ? l . attachListener ( l , "beforedeactivate" , E , null , null , - 1 ) : l . attachListener ( f , "selectionCheck" , E , null , null , - 1 ) ; l . attachListener ( l , "blur" , function ( ) { f . lockSelection ( k ) ; n = 1 } , null , null , - 1 ) ; l . attachListener ( l , "mousedown" , function ( ) { n = 0 } ) } if ( CKEDITOR . env . ie && ! h ) { var u ; l . attachListener ( l , "mousedown" , function ( a ) { a . data . $ . button == 2 && f . document . $ . selection . type == "None" && ( u = f . window . getScrollPosition ( ) ) } ) ; l . attachListener ( l , "mouseup" , function ( a ) { if ( a . data . $ . button == 2 && u ) { f . document . $ . documentElement . scrollLeft =
u . x ; f . document . $ . documentElement . scrollTop = u . y } u = null } ) ; if ( a . $ . compatMode != "BackCompat" ) { if ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) o . on ( "mousedown" , function ( a ) { function b ( a ) { a = a . data . $ ; if ( d ) { var c = g . $ . createTextRange ( ) ; try { c . moveToPoint ( a . x , a . y ) } catch ( e ) { } d . setEndPoint ( l . compareEndPoints ( "StartToStart" , c ) < 0 ? "EndToEnd" : "StartToStart" , c ) ; d . select ( ) } } function c ( ) { o . removeListener ( "mousemove" , b ) ; e . removeListener ( "mouseup" , c ) ; o . removeListener ( "mouseup" , c ) ; d . select ( ) } a = a . data ; if ( a . getTarget ( ) . is ( "html" ) &&
a . $ . y < o . $ . clientHeight && a . $ . x < o . $ . clientWidth ) { var d = g . $ . createTextRange ( ) ; try { d . moveToPoint ( a . $ . x , a . $ . y ) } catch ( f ) { } var l = d . duplicate ( ) ; o . on ( "mousemove" , b ) ; e . on ( "mouseup" , c ) ; o . on ( "mouseup" , c ) } } ) ; if ( CKEDITOR . env . version > 7 ) { o . on ( "mousedown" , function ( a ) { if ( a . data . getTarget ( ) . is ( "html" ) ) { e . on ( "mouseup" , r ) ; o . on ( "mouseup" , r ) } } ) ; var r = function ( ) { e . removeListener ( "mouseup" , r ) ; o . removeListener ( "mouseup" , r ) ; var b = CKEDITOR . document . $ . selection , c = b . createRange ( ) ; b . type != "None" && c . parentElement ( ) . ownerDocument ==
a . $ && c . select ( ) } } } } l . attachListener ( l , "selectionchange" , b , f ) ; l . attachListener ( l , "keyup" , c , f ) ; l . attachListener ( l , "focus" , function ( ) { f . forceNextSelectionCheck ( ) ; f . selectionChange ( 1 ) } ) ; if ( l . isInline ( ) ? CKEDITOR . env . webkit || CKEDITOR . env . gecko : CKEDITOR . env . opera ) { var D ; l . attachListener ( l , "mousedown" , function ( ) { D = 1 } ) ; l . attachListener ( a . getDocumentElement ( ) , "mouseup" , function ( ) { D && c . call ( f ) ; D = 0 } ) } else l . attachListener ( l , "mouseup" , c , f ) ; if ( CKEDITOR . env . webkit ) a . on ( "keydown" , function ( a ) { switch ( a . data . getKey ( ) ) { case 13 : case 33 : case 34 : case 35 : case 36 : case 37 : case 39 : case 8 : case 45 : case 46 : d ( f . editable ( ) ) } } ,
null , null , - 1 ) } ) ; f . on ( "contentDomUnload" , f . forceNextSelectionCheck , f ) ; f . on ( "dataReady" , function ( ) { f . selectionChange ( 1 ) } ) ; CKEDITOR . env . ie9Compat && f . on ( "beforeDestroy" , e , null , null , 9 ) ; CKEDITOR . env . webkit && f . on ( "setData" , e ) ; f . on ( "contentDomUnload" , function ( ) { f . unlockSelection ( ) } ) } ) ; CKEDITOR . on ( "instanceReady" , function ( a ) { var b = a . editor , c = b . editable ( ) ; if ( CKEDITOR . env . webkit ) { b . on ( "selectionChange" , function ( ) { var a = e ( c ) ; a && ( a . getCustomData ( "ready" ) ? d ( c ) : a . setCustomData ( "ready" , 1 ) ) } , null , null , - 1 ) ; b . on ( "beforeSetMode" ,
function ( ) { d ( c ) } , null , null , - 1 ) ; var f , g , a = function ( ) { var a = b . document , d = e ( c ) ; if ( d ) { a = a . $ . defaultView . getSelection ( ) ; a . type == "Caret" && a . anchorNode == d . $ && ( g = 1 ) ; f = d . getText ( ) ; d . setText ( f . replace ( /\u200B/g , "" ) ) } } , h = function ( ) { var a = b . document , d = e ( c ) ; if ( d ) { d . setText ( f ) ; if ( g ) { a . $ . defaultView . getSelection ( ) . setPosition ( d . $ , d . getLength ( ) ) ; g = 0 } } } ; b . on ( "beforeUndoImage" , a ) ; b . on ( "afterUndoImage" , h ) ; b . on ( "beforeGetData" , a , null , null , 0 ) ; b . on ( "getData" , h ) } } ) ; CKEDITOR . editor . prototype . selectionChange = function ( a ) { ( a ?
b : c ) . call ( this ) } ; CKEDITOR . editor . prototype . getSelection = function ( a ) { if ( this . _ . savedSelection && ! a ) return this . _ . savedSelection ; return ( a = this . editable ( ) ) ? new CKEDITOR . dom . selection ( a ) : null } ; CKEDITOR . editor . prototype . lockSelection = function ( a ) { a = a || this . getSelection ( 1 ) ; if ( a . getType ( ) != CKEDITOR . SELECTION _NONE ) { ! a . isLocked && a . lock ( ) ; this . _ . savedSelection = a ; return true } return false } ; CKEDITOR . editor . prototype . unlockSelection = function ( a ) { var b = this . _ . savedSelection ; if ( b ) { b . unlock ( a ) ; delete this . _ . savedSelection ;
return true } return false } ; CKEDITOR . editor . prototype . forceNextSelectionCheck = function ( ) { delete this . _ . selectionPreviousPath } ; CKEDITOR . dom . document . prototype . getSelection = function ( ) { return new CKEDITOR . dom . selection ( this ) } ; CKEDITOR . dom . range . prototype . select = function ( ) { var a = this . root instanceof CKEDITOR . editable ? this . root . editor . getSelection ( ) : new CKEDITOR . dom . selection ( this . root ) ; a . selectRanges ( [ this ] ) ; return a } ; CKEDITOR . SELECTION _NONE = 1 ; CKEDITOR . SELECTION _TEXT = 2 ; CKEDITOR . SELECTION _ELEMENT = 3 ; var m =
typeof window . getSelection != "function" ; CKEDITOR . dom . selection = function ( a ) { var b = a instanceof CKEDITOR . dom . element ; this . document = a instanceof CKEDITOR . dom . document ? a : a . getDocument ( ) ; this . root = b ? a : this . document . getBody ( ) ; this . isLocked = 0 ; this . _ = { cache : { } } ; if ( CKEDITOR . env . webkit ) { a = this . document . getWindow ( ) . $ . getSelection ( ) ; if ( a . type == "None" && this . document . getActive ( ) . equals ( this . root ) || a . type == "Caret" && a . anchorNode . nodeType == CKEDITOR . NODE _DOCUMENT ) { var c = new CKEDITOR . dom . range ( this . root ) ; c . moveToPosition ( this . root ,
CKEDITOR . POSITION _AFTER _START ) ; b = this . document . $ . createRange ( ) ; b . setStart ( c . startContainer . $ , c . startOffset ) ; b . collapse ( 1 ) ; a . addRange ( b ) } } var a = this . getNative ( ) , d ; if ( a ) if ( a . getRangeAt ) d = ( c = a . rangeCount && a . getRangeAt ( 0 ) ) && new CKEDITOR . dom . node ( c . commonAncestorContainer ) ; else { try { c = a . createRange ( ) } catch ( e ) { } d = c && CKEDITOR . dom . element . get ( c . item && c . item ( 0 ) || c . parentElement ( ) ) } if ( ! d || ! this . root . equals ( d ) && ! this . root . contains ( d ) ) { this . _ . cache . type = CKEDITOR . SELECTION _NONE ; this . _ . cache . startElement = null ; this . _ . cache . selectedElement =
null ; this . _ . cache . selectedText = "" ; this . _ . cache . ranges = new CKEDITOR . dom . rangeList } return this } ; var n = { img : 1 , hr : 1 , li : 1 , table : 1 , tr : 1 , td : 1 , th : 1 , embed : 1 , object : 1 , ol : 1 , ul : 1 , a : 1 , input : 1 , form : 1 , select : 1 , textarea : 1 , button : 1 , fieldset : 1 , thead : 1 , tfoot : 1 } ; CKEDITOR . dom . selection . prototype = { getNative : function ( ) { return this . _ . cache . nativeSel !== void 0 ? this . _ . cache . nativeSel : this . _ . cache . nativeSel = m ? this . document . $ . selection : this . document . getWindow ( ) . $ . getSelection ( ) } , getType : m ? function ( ) { var a = this . _ . cache ; if ( a . type ) return a . type ;
var b = CKEDITOR . SELECTION _NONE ; try { var c = this . getNative ( ) , d = c . type ; if ( d == "Text" ) b = CKEDITOR . SELECTION _TEXT ; if ( d == "Control" ) b = CKEDITOR . SELECTION _ELEMENT ; if ( c . createRange ( ) . parentElement ( ) ) b = CKEDITOR . SELECTION _TEXT } catch ( e ) { } return a . type = b } : function ( ) { var a = this . _ . cache ; if ( a . type ) return a . type ; var b = CKEDITOR . SELECTION _TEXT , c = this . getNative ( ) ; if ( ! c || ! c . rangeCount ) b = CKEDITOR . SELECTION _NONE ; else if ( c . rangeCount == 1 ) { var c = c . getRangeAt ( 0 ) , d = c . startContainer ; if ( d == c . endContainer && d . nodeType == 1 && c . endOffset -
c . startOffset == 1 && n [ d . childNodes [ c . startOffset ] . nodeName . toLowerCase ( ) ] ) b = CKEDITOR . SELECTION _ELEMENT } return a . type = b } , getRanges : function ( ) { var a = m ? function ( ) { function a ( b ) { return ( new CKEDITOR . dom . node ( b ) ) . getIndex ( ) } var b = function ( b , c ) { b = b . duplicate ( ) ; b . collapse ( c ) ; var d = b . parentElement ( ) , e = d . ownerDocument ; if ( ! d . hasChildNodes ( ) ) return { container : d , offset : 0 } ; for ( var f = d . children , g , j , h = b . duplicate ( ) , o = 0 , m = f . length - 1 , n = - 1 , k , v ; o <= m ; ) { n = Math . floor ( ( o + m ) / 2 ) ; g = f [ n ] ; h . moveToElementText ( g ) ; k = h . compareEndPoints ( "StartToStart" ,
b ) ; if ( k > 0 ) m = n - 1 ; else if ( k < 0 ) o = n + 1 ; else { if ( CKEDITOR . env . ie9Compat && g . tagName == "BR" ) { f = e . defaultView . getSelection ( ) ; return { container : f [ c ? "anchorNode" : "focusNode" ] , offset : f [ c ? "anchorOffset" : "focusOffset" ] } } return { container : d , offset : a ( g ) } } } if ( n == - 1 || n == f . length - 1 && k < 0 ) { h . moveToElementText ( d ) ; h . setEndPoint ( "StartToStart" , b ) ; e = h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; f = d . childNodes ; if ( ! e ) { g = f [ f . length - 1 ] ; return g . nodeType != CKEDITOR . NODE _TEXT ? { container : d , offset : f . length } : { container : g , offset : g . nodeValue . length } } for ( d =
f . length ; e > 0 && d > 0 ; ) { j = f [ -- d ] ; if ( j . nodeType == CKEDITOR . NODE _TEXT ) { v = j ; e = e - j . nodeValue . length } } return { container : v , offset : - e } } h . collapse ( k > 0 ? true : false ) ; h . setEndPoint ( k > 0 ? "StartToStart" : "EndToStart" , b ) ; e = h . text . replace ( /(\r\n|\r)/g , "\n" ) . length ; if ( ! e ) return { container : d , offset : a ( g ) + ( k > 0 ? 0 : 1 ) } ; for ( ; e > 0 ; ) try { j = g [ k > 0 ? "previousSibling" : "nextSibling" ] ; if ( j . nodeType == CKEDITOR . NODE _TEXT ) { e = e - j . nodeValue . length ; v = j } g = j } catch ( t ) { return { container : d , offset : a ( g ) } } return { container : v , offset : k > 0 ? - e : v . nodeValue . length +
e } } ; return function ( ) { var a = this . getNative ( ) , c = a && a . createRange ( ) , d = this . getType ( ) ; if ( ! a ) return [ ] ; if ( d == CKEDITOR . SELECTION _TEXT ) { a = new CKEDITOR . dom . range ( this . root ) ; d = b ( c , true ) ; a . setStart ( new CKEDITOR . dom . node ( d . container ) , d . offset ) ; d = b ( c ) ; a . setEnd ( new CKEDITOR . dom . node ( d . container ) , d . offset ) ; a . endContainer . getPosition ( a . startContainer ) & CKEDITOR . POSITION _PRECEDING && a . endOffset <= a . startContainer . getIndex ( ) && a . collapse ( ) ; return [ a ] } if ( d == CKEDITOR . SELECTION _ELEMENT ) { for ( var d = [ ] , e = 0 ; e < c . length ; e ++ ) { for ( var f =
c . item ( e ) , g = f . parentNode , l = 0 , a = new CKEDITOR . dom . range ( this . root ) ; l < g . childNodes . length && g . childNodes [ l ] != f ; l ++ ) ; a . setStart ( new CKEDITOR . dom . node ( g ) , l ) ; a . setEnd ( new CKEDITOR . dom . node ( g ) , l + 1 ) ; d . push ( a ) } return d } return [ ] } } ( ) : function ( ) { var a = [ ] , b , c = this . getNative ( ) ; if ( ! c ) return a ; for ( var d = 0 ; d < c . rangeCount ; d ++ ) { var e = c . getRangeAt ( d ) ; b = new CKEDITOR . dom . range ( this . root ) ; b . setStart ( new CKEDITOR . dom . node ( e . startContainer ) , e . startOffset ) ; b . setEnd ( new CKEDITOR . dom . node ( e . endContainer ) , e . endOffset ) ; a . push ( b ) } return a } ;
return function ( b ) { var c = this . _ . cache ; if ( c . ranges && ! b ) return c . ranges ; if ( ! c . ranges ) c . ranges = new CKEDITOR . dom . rangeList ( a . call ( this ) ) ; if ( b ) for ( var d = c . ranges , e = 0 ; e < d . length ; e ++ ) { var f = d [ e ] ; f . getCommonAncestor ( ) . isReadOnly ( ) && d . splice ( e , 1 ) ; if ( ! f . collapsed ) { if ( f . startContainer . isReadOnly ( ) ) for ( var b = f . startContainer , g ; b ; ) { if ( ( g = b . type == CKEDITOR . NODE _ELEMENT ) && b . is ( "body" ) || ! b . isReadOnly ( ) ) break ; g && b . getAttribute ( "contentEditable" ) == "false" && f . setStartAfter ( b ) ; b = b . getParent ( ) } b = f . startContainer ; g = f . endContainer ;
var h = f . startOffset , m = f . endOffset , n = f . clone ( ) ; b && b . type == CKEDITOR . NODE _TEXT && ( h >= b . getLength ( ) ? n . setStartAfter ( b ) : n . setStartBefore ( b ) ) ; g && g . type == CKEDITOR . NODE _TEXT && ( m ? n . setEndAfter ( g ) : n . setEndBefore ( g ) ) ; b = new CKEDITOR . dom . walker ( n ) ; b . evaluator = function ( a ) { if ( a . type == CKEDITOR . NODE _ELEMENT && a . isReadOnly ( ) ) { var b = f . clone ( ) ; f . setEndBefore ( a ) ; f . collapsed && d . splice ( e -- , 1 ) ; if ( ! ( a . getPosition ( n . endContainer ) & CKEDITOR . POSITION _CONTAINS ) ) { b . setStartAfter ( a ) ; b . collapsed || d . splice ( e + 1 , 0 , b ) } return true } return false } ;
b . next ( ) } } return c . ranges } } ( ) , getStartElement : function ( ) { var a = this . _ . cache ; if ( a . startElement !== void 0 ) return a . startElement ; var b ; switch ( this . getType ( ) ) { case CKEDITOR . SELECTION _ELEMENT : return this . getSelectedElement ( ) ; case CKEDITOR . SELECTION _TEXT : var c = this . getRanges ( ) [ 0 ] ; if ( c ) { if ( c . collapsed ) { b = c . startContainer ; b . type != CKEDITOR . NODE _ELEMENT && ( b = b . getParent ( ) ) } else { for ( c . optimize ( ) ; ; ) { b = c . startContainer ; if ( c . startOffset == ( b . getChildCount ? b . getChildCount ( ) : b . getLength ( ) ) && ! b . isBlockBoundary ( ) ) c . setStartAfter ( b ) ;
else break } b = c . startContainer ; if ( b . type != CKEDITOR . NODE _ELEMENT ) return b . getParent ( ) ; b = b . getChild ( c . startOffset ) ; if ( ! b || b . type != CKEDITOR . NODE _ELEMENT ) b = c . startContainer ; else for ( c = b . getFirst ( ) ; c && c . type == CKEDITOR . NODE _ELEMENT ; ) { b = c ; c = c . getFirst ( ) } } b = b . $ } } return a . startElement = b ? new CKEDITOR . dom . element ( b ) : null } , getSelectedElement : function ( ) { var a = this . _ . cache ; if ( a . selectedElement !== void 0 ) return a . selectedElement ; var b = this , c = CKEDITOR . tools . tryThese ( function ( ) { return b . getNative ( ) . createRange ( ) . item ( 0 ) } ,
function ( ) { for ( var a = b . getRanges ( ) [ 0 ] , c , d , e = 2 ; e && ( ! ( c = a . getEnclosedNode ( ) ) || ! ( c . type == CKEDITOR . NODE _ELEMENT && n [ c . getName ( ) ] && ( d = c ) ) ) ; e -- ) a . shrink ( CKEDITOR . SHRINK _ELEMENT ) ; return d . $ } ) ; return a . selectedElement = c ? new CKEDITOR . dom . element ( c ) : null } , getSelectedText : function ( ) { var a = this . _ . cache ; if ( a . selectedText !== void 0 ) return a . selectedText ; var b = this . getNative ( ) , b = m ? b . type == "Control" ? "" : b . createRange ( ) . text : b . toString ( ) ; return a . selectedText = b } , lock : function ( ) { this . getRanges ( ) ; this . getStartElement ( ) ;
this . getSelectedElement ( ) ; this . getSelectedText ( ) ; this . _ . cache . nativeSel = null ; this . isLocked = 1 } , unlock : function ( a ) { if ( this . isLocked ) { if ( a ) var b = this . getSelectedElement ( ) , c = ! b && this . getRanges ( ) ; this . isLocked = 0 ; this . reset ( ) ; if ( a ) ( a = b || c [ 0 ] . getCommonAncestor ( ) ) && a . getAscendant ( "body" , 1 ) && ( b ? this . selectElement ( b ) : this . selectRanges ( c ) ) } } , reset : function ( ) { this . _ . cache = { } } , selectElement : function ( a ) { var b = new CKEDITOR . dom . range ( this . root ) ; b . setStartBefore ( a ) ; b . setEndAfter ( a ) ; this . selectRanges ( [ b ] ) } , selectRanges : function ( a ) { if ( a . length ) if ( this . isLocked ) { var b =
CKEDITOR . document . getActive ( ) ; this . unlock ( ) ; this . selectRanges ( a ) ; this . lock ( ) ; ! b . equals ( this . root ) && b . focus ( ) } else { if ( m ) { var c = CKEDITOR . dom . walker . whitespaces ( true ) , e = /\ufeff|\u00a0/ , g = { table : 1 , tbody : 1 , tr : 1 } ; if ( a . length > 1 ) { b = a [ a . length - 1 ] ; a [ 0 ] . setEnd ( b . endContainer , b . endOffset ) } var b = a [ 0 ] , a = b . collapsed , h , i , k , A = b . getEnclosedNode ( ) ; if ( A && A . type == CKEDITOR . NODE _ELEMENT && A . getName ( ) in n && ( ! A . is ( "a" ) || ! A . getText ( ) ) ) try { k = A . $ . createControlRange ( ) ; k . addElement ( A . $ ) ; k . select ( ) ; return } catch ( B ) { } ( b . startContainer . type ==
CKEDITOR . NODE _ELEMENT && b . startContainer . getName ( ) in g || b . endContainer . type == CKEDITOR . NODE _ELEMENT && b . endContainer . getName ( ) in g ) && b . shrink ( CKEDITOR . NODE _ELEMENT , true ) ; k = b . createBookmark ( ) ; var g = k . startNode , p ; if ( ! a ) p = k . endNode ; k = b . document . $ . body . createTextRange ( ) ; k . moveToElementText ( g . $ ) ; k . moveStart ( "character" , 1 ) ; if ( p ) { e = b . document . $ . body . createTextRange ( ) ; e . moveToElementText ( p . $ ) ; k . setEndPoint ( "EndToEnd" , e ) ; k . moveEnd ( "character" , - 1 ) } else { h = g . getNext ( c ) ; i = g . hasAscendant ( "pre" ) ; h = ! ( h && h . getText &&
h . getText ( ) . match ( e ) ) && ( i || ! g . hasPrevious ( ) || g . getPrevious ( ) . is && g . getPrevious ( ) . is ( "br" ) ) ; i = b . document . createElement ( "span" ) ; i . setHtml ( "" ) ; i . insertBefore ( g ) ; h && b . document . createText ( " " ) . insertBefore ( g ) } b . setStartBefore ( g ) ; g . remove ( ) ; if ( a ) { if ( h ) { k . moveStart ( "character" , - 1 ) ; k . select ( ) ; b . document . $ . selection . clear ( ) } else k . select ( ) ; b . moveToPosition ( i , CKEDITOR . POSITION _BEFORE _START ) ; i . remove ( ) } else { b . setEndBefore ( p ) ; p . remove ( ) ; k . select ( ) } } else { p = this . getNative ( ) ; if ( ! p ) return ; if ( CKEDITOR . env . opera ) { b =
this . document . $ . createRange ( ) ; b . selectNodeContents ( this . root . $ ) ; p . addRange ( b ) } this . removeAllRanges ( ) ; for ( e = 0 ; e < a . length ; e ++ ) { if ( e < a . length - 1 ) { b = a [ e ] ; k = a [ e + 1 ] ; i = b . clone ( ) ; i . setStart ( b . endContainer , b . endOffset ) ; i . setEnd ( k . startContainer , k . startOffset ) ; if ( ! i . collapsed ) { i . shrink ( CKEDITOR . NODE _ELEMENT , true ) ; h = i . getCommonAncestor ( ) ; i = i . getEnclosedNode ( ) ; if ( h . isReadOnly ( ) || i && i . isReadOnly ( ) ) { k . setStart ( b . startContainer , b . startOffset ) ; a . splice ( e -- , 1 ) ; continue } } } b = a [ e ] ; k = this . document . $ . createRange ( ) ; h = b . startContainer ;
if ( CKEDITOR . env . opera && b . collapsed && h . type == CKEDITOR . NODE _ELEMENT ) { i = h . getChild ( b . startOffset - 1 ) ; c = h . getChild ( b . startOffset ) ; if ( ! i && ! c && h . is ( CKEDITOR . dtd . $removeEmpty ) || i && i . type == CKEDITOR . NODE _ELEMENT || c && c . type == CKEDITOR . NODE _ELEMENT ) { b . insertNode ( this . document . createText ( "" ) ) ; b . collapse ( 1 ) } } if ( b . collapsed && CKEDITOR . env . webkit && f ( b ) ) { h = this . root ; d ( h , false ) ; i = h . getDocument ( ) . createText ( " " ) ; h . setCustomData ( "cke-fillingChar" , i ) ; b . insertNode ( i ) ; if ( ( h = i . getNext ( ) ) && ! i . getPrevious ( ) && h . type == CKEDITOR . NODE _ELEMENT &&
h . getName ( ) == "br" ) { d ( this . root ) ; b . moveToPosition ( h , CKEDITOR . POSITION _BEFORE _START ) } else b . moveToPosition ( i , CKEDITOR . POSITION _AFTER _END ) } k . setStart ( b . startContainer . $ , b . startOffset ) ; try { k . setEnd ( b . endContainer . $ , b . endOffset ) } catch ( E ) { if ( E . toString ( ) . indexOf ( "NS_ERROR_ILLEGAL_VALUE" ) >= 0 ) { b . collapse ( 1 ) ; k . setEnd ( b . endContainer . $ , b . endOffset ) } else throw E ; } p . addRange ( k ) } } this . reset ( ) ; this . root . fire ( "selectionchange" ) } } , createBookmarks : function ( a ) { return this . getRanges ( ) . createBookmarks ( a ) } , createBookmarks2 : function ( a ) { return this . getRanges ( ) . createBookmarks2 ( a ) } ,
selectBookmarks : function ( a ) { for ( var b = [ ] , c = 0 ; c < a . length ; c ++ ) { var d = new CKEDITOR . dom . range ( this . root ) ; d . moveToBookmark ( a [ c ] ) ; b . push ( d ) } this . selectRanges ( b ) ; return this } , getCommonAncestor : function ( ) { var a = this . getRanges ( ) ; return a [ 0 ] . startContainer . getCommonAncestor ( a [ a . length - 1 ] . endContainer ) } , scrollIntoView : function ( ) { this . type != CKEDITOR . SELECTION _NONE && this . getRanges ( ) [ 0 ] . scrollIntoView ( ) } , removeAllRanges : function ( ) { var a = this . getNative ( ) ; try { a && a [ m ? "empty" : "removeAllRanges" ] ( ) } catch ( b ) { } this . reset ( ) } } } ) ( ) ;
CKEDITOR . editor . prototype . attachStyleStateChange = function ( b , c ) { var a = this . _ . styleStateChangeCallbacks ; if ( ! a ) { a = this . _ . styleStateChangeCallbacks = [ ] ; this . on ( "selectionChange" , function ( b ) { for ( var c = 0 ; c < a . length ; c ++ ) { var d = a [ c ] , g = d . style . checkActive ( b . data . path ) ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ; d . fn . call ( this , g ) } } ) } a . push ( { style : b , fn : c } ) } ; CKEDITOR . STYLE _BLOCK = 1 ; CKEDITOR . STYLE _INLINE = 2 ; CKEDITOR . STYLE _OBJECT = 3 ;
( function ( ) { function b ( a , b ) { for ( var c , d ; a = a . getParent ( ) ; ) { if ( a . equals ( b ) ) break ; if ( a . getAttribute ( "data-nostyle" ) ) c = a ; else if ( ! d ) { var e = a . getAttribute ( "contentEditable" ) ; e == "false" ? c = a : e == "true" && ( d = 1 ) } } return c } function c ( a ) { var c = a . document ; if ( a . collapsed ) { c = y ( this , c ) ; a . insertNode ( c ) ; a . moveToPosition ( c , CKEDITOR . POSITION _BEFORE _END ) } else { var d = this . element , e = this . _ . definition , f , g = e . ignoreReadonly , h = g || e . includeReadonly ; h == void 0 && ( h = a . root . getCustomData ( "cke_includeReadonly" ) ) ; var j = CKEDITOR . dtd [ d ] ||
( f = true , CKEDITOR . dtd . span ) ; a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; a . trim ( ) ; var m = a . createBookmark ( ) , i = m . startNode , n = m . endNode , k = i , o ; if ( ! g ) { var q = a . getCommonAncestor ( ) , g = b ( i , q ) , q = b ( n , q ) ; g && ( k = g . getNextSourceNode ( true ) ) ; q && ( n = q ) } for ( k . getPosition ( n ) == CKEDITOR . POSITION _FOLLOWING && ( k = 0 ) ; k ; ) { g = false ; if ( k . equals ( n ) ) { k = null ; g = true } else { var p = k . type , r = p == CKEDITOR . NODE _ELEMENT ? k . getName ( ) : null , q = r && k . getAttribute ( "contentEditable" ) == "false" , s = r && k . getAttribute ( "data-nostyle" ) ; if ( r && k . data ( "cke-bookmark" ) ) { k =
k . getNextSourceNode ( true ) ; continue } if ( ! r || j [ r ] && ! s && ( ! q || h ) && ( k . getPosition ( n ) | CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED ) == CKEDITOR . POSITION _PRECEDING + CKEDITOR . POSITION _IDENTICAL + CKEDITOR . POSITION _IS _CONTAINED && ( ! e . childRule || e . childRule ( k ) ) ) { var u = k . getParent ( ) ; if ( u && ( ( u . getDtd ( ) || CKEDITOR . dtd . span ) [ d ] || f ) && ( ! e . parentRule || e . parentRule ( u ) ) ) { if ( ! o && ( ! r || ! CKEDITOR . dtd . $removeEmpty [ r ] || ( k . getPosition ( n ) | CKEDITOR . POSITION _PRECEDING | CKEDITOR . POSITION _IDENTICAL |
CKEDITOR . POSITION _IS _CONTAINED ) == CKEDITOR . POSITION _PRECEDING + CKEDITOR . POSITION _IDENTICAL + CKEDITOR . POSITION _IS _CONTAINED ) ) { o = a . clone ( ) ; o . setStartBefore ( k ) } if ( p == CKEDITOR . NODE _TEXT || q || p == CKEDITOR . NODE _ELEMENT && ! k . getChildCount ( ) ) { for ( var p = k , v ; ( g = ! p . getNext ( D ) ) && ( v = p . getParent ( ) , j [ v . getName ( ) ] ) && ( v . getPosition ( i ) | CKEDITOR . POSITION _FOLLOWING | CKEDITOR . POSITION _IDENTICAL | CKEDITOR . POSITION _IS _CONTAINED ) == CKEDITOR . POSITION _FOLLOWING + CKEDITOR . POSITION _IDENTICAL + CKEDITOR . POSITION _IS _CONTAINED && ( ! e . childRule ||
e . childRule ( v ) ) ; ) p = v ; o . setEndAfter ( p ) } } else g = true } else g = true ; k = k . getNextSourceNode ( s || q && ! h ) } if ( g && o && ! o . collapsed ) { for ( var g = y ( this , c ) , q = g . hasAttributes ( ) , s = o . getCommonAncestor ( ) , p = { } , r = { } , u = { } , z = { } , A , B , E ; g && s ; ) { if ( s . getName ( ) == d ) { for ( A in e . attributes ) if ( ! z [ A ] && ( E = s . getAttribute ( B ) ) ) g . getAttribute ( A ) == E ? r [ A ] = 1 : z [ A ] = 1 ; for ( B in e . styles ) if ( ! u [ B ] && ( E = s . getStyle ( B ) ) ) g . getStyle ( B ) == E ? p [ B ] = 1 : u [ B ] = 1 } s = s . getParent ( ) } for ( A in r ) g . removeAttribute ( A ) ; for ( B in p ) g . removeStyle ( B ) ; q && ! g . hasAttributes ( ) && ( g =
null ) ; if ( g ) { o . extractContents ( ) . appendTo ( g ) ; l . call ( this , g ) ; o . insertNode ( g ) ; g . mergeSiblings ( ) ; CKEDITOR . env . ie || g . $ . normalize ( ) } else { g = new CKEDITOR . dom . element ( "span" ) ; o . extractContents ( ) . appendTo ( g ) ; o . insertNode ( g ) ; l . call ( this , g ) ; g . remove ( true ) } o = null } } a . moveToBookmark ( m ) ; a . shrink ( CKEDITOR . SHRINK _TEXT ) } } function a ( a ) { a . enlarge ( CKEDITOR . ENLARGE _INLINE , 1 ) ; var b = a . createBookmark ( ) , c = b . startNode ; if ( a . collapsed ) { for ( var d = new CKEDITOR . dom . elementPath ( c . getParent ( ) , a . root ) , e , f = 0 , g ; f < d . elements . length && ( g =
d . elements [ f ] ) ; f ++ ) { if ( g == d . block || g == d . blockLimit ) break ; if ( this . checkElementRemovable ( g ) ) { var h ; if ( a . collapsed && ( a . checkBoundaryOfElement ( g , CKEDITOR . END ) || ( h = a . checkBoundaryOfElement ( g , CKEDITOR . START ) ) ) ) { e = g ; e . match = h ? "start" : "end" } else { g . mergeSiblings ( ) ; g . getName ( ) == this . element ? o . call ( this , g ) : j ( g , s ( this ) [ g . getName ( ) ] ) } } } if ( e ) { g = c ; for ( f = 0 ; ; f ++ ) { h = d . elements [ f ] ; if ( h . equals ( e ) ) break ; else if ( h . match ) continue ; else h = h . clone ( ) ; h . append ( g ) ; g = h } g [ e . match == "start" ? "insertBefore" : "insertAfter" ] ( e ) } } else { var m =
b . endNode , l = this , d = function ( ) { for ( var a = new CKEDITOR . dom . elementPath ( c . getParent ( ) ) , b = new CKEDITOR . dom . elementPath ( m . getParent ( ) ) , d = null , e = null , f = 0 ; f < a . elements . length ; f ++ ) { var g = a . elements [ f ] ; if ( g == a . block || g == a . blockLimit ) break ; l . checkElementRemovable ( g ) && ( d = g ) } for ( f = 0 ; f < b . elements . length ; f ++ ) { g = b . elements [ f ] ; if ( g == b . block || g == b . blockLimit ) break ; l . checkElementRemovable ( g ) && ( e = g ) } e && m . breakParent ( e ) ; d && c . breakParent ( d ) } ; d ( ) ; for ( e = c ; ! e . equals ( m ) ; ) { f = e . getNextSourceNode ( ) ; if ( e . type == CKEDITOR . NODE _ELEMENT &&
this . checkElementRemovable ( e ) ) { e . getName ( ) == this . element ? o . call ( this , e ) : j ( e , s ( this ) [ e . getName ( ) ] ) ; if ( f . type == CKEDITOR . NODE _ELEMENT && f . contains ( c ) ) { d ( ) ; f = c . getNext ( ) } } e = f } } a . moveToBookmark ( b ) } function f ( a ) { var b = a . getEnclosedNode ( ) || a . getCommonAncestor ( false , true ) ; ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) && ! a . isReadOnly ( ) && z ( a , this ) } function e ( a ) { var b = a . getCommonAncestor ( true , true ) ; if ( a = ( new CKEDITOR . dom . elementPath ( b , a . root ) ) . contains ( this . element , 1 ) ) { var b = this . _ . definition ,
c = b . attributes ; if ( c ) for ( var d in c ) a . removeAttribute ( d , c [ d ] ) ; if ( b . styles ) for ( var e in b . styles ) b . styles . hasOwnProperty ( e ) && a . removeStyle ( e ) } } function d ( a ) { var b = a . createBookmark ( true ) , c = a . createIterator ( ) ; c . enforceRealBlocks = true ; if ( this . _ . enterMode ) c . enlargeBr = this . _ . enterMode != CKEDITOR . ENTER _BR ; for ( var d , e = a . document ; d = c . getNextParagraph ( ) ; ) if ( ! d . isReadOnly ( ) ) { var f = y ( this , e , d ) ; k ( d , f ) } a . moveToBookmark ( b ) } function g ( a ) { var b = a . createBookmark ( 1 ) , c = a . createIterator ( ) ; c . enforceRealBlocks = true ; c . enlargeBr =
this . _ . enterMode != CKEDITOR . ENTER _BR ; for ( var d ; d = c . getNextParagraph ( ) ; ) if ( this . checkElementRemovable ( d ) ) if ( d . is ( "pre" ) ) { var e = this . _ . enterMode == CKEDITOR . ENTER _BR ? null : a . document . createElement ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ; e && d . copyAttributes ( e ) ; k ( d , e ) } else o . call ( this , d ) ; a . moveToBookmark ( b ) } function k ( a , b ) { var c = ! b ; if ( c ) { b = a . getDocument ( ) . createElement ( "div" ) ; a . copyAttributes ( b ) } var d = b && b . is ( "pre" ) , e = a . is ( "pre" ) , f = ! d && e ; if ( d && ! e ) { e = b ; ( f = a . getBogus ( ) ) && f . remove ( ) ; f = a . getHtml ( ) ; f = m ( f ,
/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g , "" ) ; f = f . replace ( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi , "$1" ) ; f = f . replace ( /([ \t\n\r]+| )/g , " " ) ; f = f . replace ( /<br\b[^>]*>/gi , "\n" ) ; if ( CKEDITOR . env . ie ) { var g = a . getDocument ( ) . createElement ( "div" ) ; g . append ( e ) ; e . $ . outerHTML = "<pre>" + f + "</pre>" ; e . copyAttributes ( g . getFirst ( ) ) ; e = g . getFirst ( ) . remove ( ) } else e . setHtml ( f ) ; b = e } else f ? b = n ( c ? [ a . getHtml ( ) ] : h ( a ) , b ) : a . moveChildren ( b ) ; b . replace ( a ) ; if ( d ) { var c = b , j ; if ( ( j = c . getPrevious ( v ) ) && j . is && j . is ( "pre" ) ) { d = m ( j . getHtml ( ) , /\n$/ , "" ) +
"\n\n" + m ( c . getHtml ( ) , /^\n/ , "" ) ; CKEDITOR . env . ie ? c . $ . outerHTML = "<pre>" + d + "</pre>" : c . setHtml ( d ) ; j . remove ( ) } } else c && q ( b ) } function h ( a ) { a . getName ( ) ; var b = [ ] ; m ( a . getOuterHtml ( ) , /(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi , function ( a , b , c ) { return b + "</pre>" + c + "<pre>" } ) . replace ( /<pre\b.*?>([\s\S]*?)<\/pre>/gi , function ( a , c ) { b . push ( c ) } ) ; return b } function m ( a , b , c ) { var d = "" , e = "" , a = a . replace ( /(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi , function ( a ,
b , c ) { b && ( d = b ) ; c && ( e = c ) ; return "" } ) ; return d + a . replace ( b , c ) + e } function n ( a , b ) { var c ; a . length > 1 && ( c = new CKEDITOR . dom . documentFragment ( b . getDocument ( ) ) ) ; for ( var d = 0 ; d < a . length ; d ++ ) { var e = a [ d ] , e = e . replace ( /(\r\n|\r)/g , "\n" ) , e = m ( e , /^[ \t]*\n/ , "" ) , e = m ( e , /\n$/ , "" ) , e = m ( e , /^[ \t]+|[ \t]+$/g , function ( a , b ) { return a . length == 1 ? " " : b ? " " + CKEDITOR . tools . repeat ( " " , a . length - 1 ) : CKEDITOR . tools . repeat ( " " , a . length - 1 ) + " " } ) , e = e . replace ( /\n/g , "<br>" ) , e = e . replace ( /[ \t]{2,}/g , function ( a ) { return CKEDITOR . tools . repeat ( " " ,
a . length - 1 ) + " " } ) ; if ( c ) { var f = b . clone ( ) ; f . setHtml ( e ) ; c . append ( f ) } else b . setHtml ( e ) } return c || b } function o ( a ) { var b = this . _ . definition , c = b . attributes , b = b . styles , d = s ( this ) [ a . getName ( ) ] , e = CKEDITOR . tools . isEmpty ( c ) && CKEDITOR . tools . isEmpty ( b ) , f ; for ( f in c ) if ( ! ( ( f == "class" || this . _ . definition . fullMatch ) && a . getAttribute ( f ) != A ( f , c [ f ] ) ) ) { e = a . hasAttribute ( f ) ; a . removeAttribute ( f ) } for ( var g in b ) if ( ! ( this . _ . definition . fullMatch && a . getStyle ( g ) != A ( g , b [ g ] , true ) ) ) { e = e || ! ! a . getStyle ( g ) ; a . removeStyle ( g ) } j ( a , d , p [ a . getName ( ) ] ) ;
e && ( this . _ . definition . alwaysRemoveElement ? q ( a , 1 ) : ! CKEDITOR . dtd . $block [ a . getName ( ) ] || this . _ . enterMode == CKEDITOR . ENTER _BR && ! a . hasAttributes ( ) ? q ( a ) : a . renameNode ( this . _ . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) ) } function l ( a ) { for ( var b = s ( this ) , c = a . getElementsByTag ( this . element ) , d = c . count ( ) ; -- d >= 0 ; ) o . call ( this , c . getItem ( d ) ) ; for ( var e in b ) if ( e != this . element ) { c = a . getElementsByTag ( e ) ; for ( d = c . count ( ) - 1 ; d >= 0 ; d -- ) { var f = c . getItem ( d ) ; j ( f , b [ e ] ) } } } function j ( a , b , c ) { if ( b = b && b . attributes ) for ( var d = 0 ; d < b . length ; d ++ ) { var e =
b [ d ] [ 0 ] , f ; if ( f = a . getAttribute ( e ) ) { var g = b [ d ] [ 1 ] ; ( g === null || g . test && g . test ( f ) || typeof g == "string" && f == g ) && a . removeAttribute ( e ) } } c || q ( a ) } function q ( a , b ) { if ( ! a . hasAttributes ( ) || b ) if ( CKEDITOR . dtd . $block [ a . getName ( ) ] ) { var c = a . getPrevious ( v ) , d = a . getNext ( v ) ; c && ( c . type == CKEDITOR . NODE _TEXT || ! c . isBlockBoundary ( { br : 1 } ) ) && a . append ( "br" , 1 ) ; d && ( d . type == CKEDITOR . NODE _TEXT || ! d . isBlockBoundary ( { br : 1 } ) ) && a . append ( "br" ) ; a . remove ( true ) } else { c = a . getFirst ( ) ; d = a . getLast ( ) ; a . remove ( true ) ; if ( c ) { c . type == CKEDITOR . NODE _ELEMENT &&
c . mergeSiblings ( ) ; d && ( ! c . equals ( d ) && d . type == CKEDITOR . NODE _ELEMENT ) && d . mergeSiblings ( ) } } } function y ( a , b , c ) { var d ; d = a . element ; d == "*" && ( d = "span" ) ; d = new CKEDITOR . dom . element ( d , b ) ; c && c . copyAttributes ( d ) ; d = z ( d , a ) ; b . getCustomData ( "doc_processing_style" ) && d . hasAttribute ( "id" ) ? d . removeAttribute ( "id" ) : b . setCustomData ( "doc_processing_style" , 1 ) ; return d } function z ( a , b ) { var c = b . _ . definition , d = c . attributes , c = CKEDITOR . style . getStyleText ( c ) ; if ( d ) for ( var e in d ) a . setAttribute ( e , d [ e ] ) ; c && a . setAttribute ( "style" , c ) ;
return a } function i ( a , b ) { for ( var c in a ) a [ c ] = a [ c ] . replace ( r , function ( a , c ) { return b [ c ] } ) } function s ( a ) { if ( a . _ . overrides ) return a . _ . overrides ; var b = a . _ . overrides = { } , c = a . _ . definition . overrides ; if ( c ) { CKEDITOR . tools . isArray ( c ) || ( c = [ c ] ) ; for ( var d = 0 ; d < c . length ; d ++ ) { var e = c [ d ] , f , g ; if ( typeof e == "string" ) f = e . toLowerCase ( ) ; else { f = e . element ? e . element . toLowerCase ( ) : a . element ; g = e . attributes } e = b [ f ] || ( b [ f ] = { } ) ; if ( g ) { var e = e . attributes = e . attributes || [ ] , h ; for ( h in g ) e . push ( [ h . toLowerCase ( ) , g [ h ] ] ) } } } return b } function A ( a ,
b , c ) { var d = new CKEDITOR . dom . element ( "span" ) ; d [ c ? "setStyle" : "setAttribute" ] ( a , b ) ; return d [ c ? "getStyle" : "getAttribute" ] ( a ) } function B ( a , b ) { for ( var c = a . document , d = a . getRanges ( ) , e = b ? this . removeFromRange : this . applyToRange , f , g = d . createIterator ( ) ; f = g . getNextRange ( ) ; ) e . call ( this , f ) ; a . selectRanges ( d ) ; c . removeCustomData ( "doc_processing_style" ) } var p = { address : 1 , div : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , p : 1 , pre : 1 , section : 1 , header : 1 , footer : 1 , nav : 1 , article : 1 , aside : 1 , figure : 1 , dialog : 1 , hgroup : 1 , time : 1 , meter : 1 , menu : 1 , command : 1 ,
keygen : 1 , output : 1 , progress : 1 , details : 1 , datagrid : 1 , datalist : 1 } , E = { a : 1 , embed : 1 , hr : 1 , img : 1 , li : 1 , object : 1 , ol : 1 , table : 1 , td : 1 , tr : 1 , th : 1 , ul : 1 , dl : 1 , dt : 1 , dd : 1 , form : 1 , audio : 1 , video : 1 } , u = /\s*(?:;\s*|$)/ , r = /#\((.+?)\)/g , D = CKEDITOR . dom . walker . bookmark ( 0 , 1 ) , v = CKEDITOR . dom . walker . whitespaces ( 1 ) ; CKEDITOR . style = function ( a , b ) { var c = a . attributes ; if ( c && c . style ) { a . styles = CKEDITOR . tools . extend ( { } , a . styles , CKEDITOR . tools . parseCssText ( c . style ) ) ; delete c . style } if ( b ) { a = CKEDITOR . tools . clone ( a ) ; i ( a . attributes , b ) ; i ( a . styles ,
b ) } c = this . element = a . element ? typeof a . element == "string" ? a . element . toLowerCase ( ) : a . element : "*" ; this . type = a . type || ( p [ c ] ? CKEDITOR . STYLE _BLOCK : E [ c ] ? CKEDITOR . STYLE _OBJECT : CKEDITOR . STYLE _INLINE ) ; if ( typeof this . element == "object" ) this . type = CKEDITOR . STYLE _OBJECT ; this . _ = { definition : a } } ; CKEDITOR . editor . prototype . applyStyle = function ( a ) { B . call ( a , this . getSelection ( ) ) } ; CKEDITOR . editor . prototype . removeStyle = function ( a ) { B . call ( a , this . getSelection ( ) , 1 ) } ; CKEDITOR . style . prototype = { apply : function ( a ) { B . call ( this , a . getSelection ( ) ) } ,
remove : function ( a ) { B . call ( this , a . getSelection ( ) , 1 ) } , applyToRange : function ( a ) { return ( this . applyToRange = this . type == CKEDITOR . STYLE _INLINE ? c : this . type == CKEDITOR . STYLE _BLOCK ? d : this . type == CKEDITOR . STYLE _OBJECT ? f : null ) . call ( this , a ) } , removeFromRange : function ( b ) { return ( this . removeFromRange = this . type == CKEDITOR . STYLE _INLINE ? a : this . type == CKEDITOR . STYLE _BLOCK ? g : this . type == CKEDITOR . STYLE _OBJECT ? e : null ) . call ( this , b ) } , applyToObject : function ( a ) { z ( a , this ) } , checkActive : function ( a ) { switch ( this . type ) { case CKEDITOR . STYLE _BLOCK : return this . checkElementRemovable ( a . block ||
a . blockLimit , true ) ; case CKEDITOR . STYLE _OBJECT : case CKEDITOR . STYLE _INLINE : for ( var b = a . elements , c = 0 , d ; c < b . length ; c ++ ) { d = b [ c ] ; if ( ! ( this . type == CKEDITOR . STYLE _INLINE && ( d == a . block || d == a . blockLimit ) ) ) { if ( this . type == CKEDITOR . STYLE _OBJECT ) { var e = d . getName ( ) ; if ( ! ( typeof this . element == "string" ? e == this . element : e in this . element ) ) continue } if ( this . checkElementRemovable ( d , true ) ) return true } } } return false } , checkApplicable : function ( a ) { switch ( this . type ) { case CKEDITOR . STYLE _OBJECT : return a . contains ( this . element ) } return true } ,
checkElementMatch : function ( a , b ) { var c = this . _ . definition ; if ( ! a || ! c . ignoreReadonly && a . isReadOnly ( ) ) return false ; var d = a . getName ( ) ; if ( typeof this . element == "string" ? d == this . element : d in this . element ) { if ( ! b && ! a . hasAttributes ( ) ) return true ; if ( d = c . _AC ) c = d ; else { var d = { } , e = 0 , f = c . attributes ; if ( f ) for ( var g in f ) { e ++ ; d [ g ] = f [ g ] } if ( g = CKEDITOR . style . getStyleText ( c ) ) { d . style || e ++ ; d . style = g } d . _length = e ; c = c . _AC = d } if ( c . _length ) { for ( var h in c ) if ( h != "_length" ) { e = a . getAttribute ( h ) || "" ; if ( h == "style" ) a : { d = c [ h ] ; typeof d ==
"string" && ( d = CKEDITOR . tools . parseCssText ( d ) ) ; typeof e == "string" && ( e = CKEDITOR . tools . parseCssText ( e , true ) ) ; g = void 0 ; for ( g in d ) if ( ! ( g in e && ( e [ g ] == d [ g ] || d [ g ] == "inherit" || e [ g ] == "inherit" ) ) ) { d = false ; break a } d = true } else d = c [ h ] == e ; if ( d ) { if ( ! b ) return true } else if ( b ) return false } if ( b ) return true } else return true } return false } , checkElementRemovable : function ( a , b ) { if ( this . checkElementMatch ( a , b ) ) return true ; var c = s ( this ) [ a . getName ( ) ] ; if ( c ) { var d ; if ( ! ( c = c . attributes ) ) return true ; for ( var e = 0 ; e < c . length ; e ++ ) { d =
c [ e ] [ 0 ] ; if ( d = a . getAttribute ( d ) ) { var f = c [ e ] [ 1 ] ; if ( f === null || typeof f == "string" && d == f || f . test ( d ) ) return true } } } return false } , buildPreview : function ( a ) { var b = this . _ . definition , c = [ ] , d = b . element ; d == "bdo" && ( d = "span" ) ; var c = [ "<" , d ] , e = b . attributes ; if ( e ) for ( var f in e ) c . push ( " " , f , '="' , e [ f ] , '"' ) ; ( e = CKEDITOR . style . getStyleText ( b ) ) && c . push ( ' style="' , e , '"' ) ; c . push ( ">" , a || b . name , "</" , d , ">" ) ; return c . join ( "" ) } } ; CKEDITOR . style . getStyleText = function ( a ) { var b = a . _ST ; if ( b ) return b ; var b = a . styles , c = a . attributes && a . attributes . style ||
"" , d = "" ; c . length && ( c = c . replace ( u , ";" ) ) ; for ( var e in b ) { var f = b [ e ] , g = ( e + ":" + f ) . replace ( u , ";" ) ; f == "inherit" ? d = d + g : c = c + g } c . length && ( c = CKEDITOR . tools . normalizeCssText ( c , true ) ) ; return a . _ST = c + d } } ) ( ) ; CKEDITOR . styleCommand = function ( b ) { this . style = b } ; CKEDITOR . styleCommand . prototype . exec = function ( b ) { b . focus ( ) ; this . state == CKEDITOR . TRISTATE _OFF ? b . applyStyle ( this . style ) : this . state == CKEDITOR . TRISTATE _ON && b . removeStyle ( this . style ) } ; CKEDITOR . stylesSet = new CKEDITOR . resourceManager ( "" , "stylesSet" ) ;
CKEDITOR . addStylesSet = CKEDITOR . tools . bind ( CKEDITOR . stylesSet . add , CKEDITOR . stylesSet ) ; CKEDITOR . loadStylesSet = function ( b , c , a ) { CKEDITOR . stylesSet . addExternal ( b , c , "" ) ; CKEDITOR . stylesSet . load ( b , a ) } ;
CKEDITOR . editor . prototype . getStylesSet = function ( b ) { if ( this . _ . stylesDefinitions ) b ( this . _ . stylesDefinitions ) ; else { var c = this , a = c . config . stylesCombo _stylesSet || c . config . stylesSet || "default" ; if ( a instanceof Array ) { c . _ . stylesDefinitions = a ; b ( a ) } else { var a = a . split ( ":" ) , f = a [ 0 ] ; CKEDITOR . stylesSet . addExternal ( f , a [ 1 ] ? a . slice ( 1 ) . join ( ":" ) : CKEDITOR . getUrl ( "styles.js" ) , "" ) ; CKEDITOR . stylesSet . load ( f , function ( a ) { c . _ . stylesDefinitions = a [ f ] ; b ( c . _ . stylesDefinitions ) } ) } } } ;
CKEDITOR . dom . comment = function ( b , c ) { typeof b == "string" && ( b = ( c ? c . $ : document ) . createComment ( b ) ) ; CKEDITOR . dom . domObject . call ( this , b ) } ; CKEDITOR . dom . comment . prototype = new CKEDITOR . dom . node ; CKEDITOR . tools . extend ( CKEDITOR . dom . comment . prototype , { type : CKEDITOR . NODE _COMMENT , getOuterHtml : function ( ) { return "<\!--" + this . $ . nodeValue + "--\>" } } ) ;
( function ( ) { var b = { } , c ; for ( c in CKEDITOR . dtd . $blockLimit ) c in CKEDITOR . dtd . $list || ( b [ c ] = 1 ) ; var a = { } ; for ( c in CKEDITOR . dtd . $block ) c in CKEDITOR . dtd . $blockLimit || c in CKEDITOR . dtd . $empty || ( a [ c ] = 1 ) ; CKEDITOR . dom . elementPath = function ( c , e ) { var d = null , g = null , k = [ ] , e = e || c . getDocument ( ) . getBody ( ) , h = c ; do if ( h . type == CKEDITOR . NODE _ELEMENT ) { k . push ( h ) ; if ( ! this . lastElement ) { this . lastElement = h ; if ( h . is ( CKEDITOR . dtd . $object ) ) continue } var m = h . getName ( ) ; if ( ! g ) { ! d && a [ m ] && ( d = h ) ; if ( b [ m ] ) { var n ; if ( n = ! d ) { if ( m = m == "div" ) { a : { m =
h . getChildren ( ) ; n = 0 ; for ( var o = m . count ( ) ; n < o ; n ++ ) { var l = m . getItem ( n ) ; if ( l . type == CKEDITOR . NODE _ELEMENT && CKEDITOR . dtd . $block [ l . getName ( ) ] ) { m = true ; break a } } m = false } m = ! m && ! h . equals ( e ) } n = m } n ? d = h : g = h } } if ( h . equals ( e ) ) break } while ( h = h . getParent ( ) ) ; this . block = d ; this . blockLimit = g ; this . root = e ; this . elements = k } } ) ( ) ;
CKEDITOR . dom . elementPath . prototype = { compare : function ( b ) { var c = this . elements , b = b && b . elements ; if ( ! b || c . length != b . length ) return false ; for ( var a = 0 ; a < c . length ; a ++ ) if ( ! c [ a ] . equals ( b [ a ] ) ) return false ; return true } , contains : function ( b , c , a ) { var f ; typeof b == "string" && ( f = function ( a ) { return a . getName ( ) == b } ) ; b instanceof CKEDITOR . dom . element ? f = function ( a ) { return a . equals ( b ) } : CKEDITOR . tools . isArray ( b ) ? f = function ( a ) { return CKEDITOR . tools . indexOf ( b , a . getName ( ) ) > - 1 } : typeof b == "function" ? f = b : typeof b == "object" && ( f =
function ( a ) { return a . getName ( ) in b } ) ; var e = this . elements , d = e . length ; c && d -- ; if ( a ) { e = Array . prototype . slice . call ( e , 0 ) ; e . reverse ( ) } for ( c = 0 ; c < d ; c ++ ) if ( f ( e [ c ] ) ) return e [ c ] ; return null } , isContextFor : function ( b ) { var c ; if ( b in CKEDITOR . dtd . $block ) { c = this . contains ( CKEDITOR . dtd . $intermediate ) || this . root . equals ( this . block ) && this . block || this . blockLimit ; return ! ! c . getDtd ( ) [ b ] } return true } , direction : function ( ) { return ( this . block || this . blockLimit || this . root ) . getDirection ( 1 ) } } ;
CKEDITOR . dom . text = function ( b , c ) { typeof b == "string" && ( b = ( c ? c . $ : document ) . createTextNode ( b ) ) ; this . $ = b } ; CKEDITOR . dom . text . prototype = new CKEDITOR . dom . node ;
CKEDITOR . tools . extend ( CKEDITOR . dom . text . prototype , { type : CKEDITOR . NODE _TEXT , getLength : function ( ) { return this . $ . nodeValue . length } , getText : function ( ) { return this . $ . nodeValue } , setText : function ( b ) { this . $ . nodeValue = b } , split : function ( b ) { var c = this . $ . parentNode , a = c . childNodes . length , f = this . getLength ( ) , e = this . getDocument ( ) , d = new CKEDITOR . dom . text ( this . $ . splitText ( b ) , e ) ; if ( c . childNodes . length == a ) if ( b >= f ) { d = e . createText ( "" ) ; d . insertAfter ( this ) } else { b = e . createText ( "" ) ; b . insertAfter ( d ) ; b . remove ( ) } return d } , substring : function ( b ,
c ) { return typeof c != "number" ? this . $ . nodeValue . substr ( b ) : this . $ . nodeValue . substring ( b , c ) } } ) ;
( function ( ) { function b ( a , b , c ) { var d = a . serializable , g = b [ c ? "endContainer" : "startContainer" ] , k = c ? "endOffset" : "startOffset" , h = d ? b . document . getById ( a . startNode ) : a . startNode , a = d ? b . document . getById ( a . endNode ) : a . endNode ; if ( g . equals ( h . getPrevious ( ) ) ) { b . startOffset = b . startOffset - g . getLength ( ) - a . getPrevious ( ) . getLength ( ) ; g = a . getNext ( ) } else if ( g . equals ( a . getPrevious ( ) ) ) { b . startOffset = b . startOffset - g . getLength ( ) ; g = a . getNext ( ) } g . equals ( h . getParent ( ) ) && b [ k ] ++ ; g . equals ( a . getParent ( ) ) && b [ k ] ++ ; b [ c ? "endContainer" : "startContainer" ] =
g ; return b } CKEDITOR . dom . rangeList = function ( a ) { if ( a instanceof CKEDITOR . dom . rangeList ) return a ; a ? a instanceof CKEDITOR . dom . range && ( a = [ a ] ) : a = [ ] ; return CKEDITOR . tools . extend ( a , c ) } ; var c = { createIterator : function ( ) { var a = this , b = CKEDITOR . dom . walker . bookmark ( ) , c = [ ] , d ; return { getNextRange : function ( g ) { d = d == void 0 ? 0 : d + 1 ; var k = a [ d ] ; if ( k && a . length > 1 ) { if ( ! d ) for ( var h = a . length - 1 ; h >= 0 ; h -- ) c . unshift ( a [ h ] . createBookmark ( true ) ) ; if ( g ) for ( var m = 0 ; a [ d + m + 1 ] ; ) { for ( var n = k . document , g = 0 , h = n . getById ( c [ m ] . endNode ) , n = n . getById ( c [ m +
1 ] . startNode ) ; ; ) { h = h . getNextSourceNode ( false ) ; if ( n . equals ( h ) ) g = 1 ; else if ( b ( h ) || h . type == CKEDITOR . NODE _ELEMENT && h . isBlockBoundary ( ) ) continue ; break } if ( ! g ) break ; m ++ } for ( k . moveToBookmark ( c . shift ( ) ) ; m -- ; ) { h = a [ ++ d ] ; h . moveToBookmark ( c . shift ( ) ) ; k . setEnd ( h . endContainer , h . endOffset ) } } return k } } } , createBookmarks : function ( a ) { for ( var c = [ ] , e , d = 0 ; d < this . length ; d ++ ) { c . push ( e = this [ d ] . createBookmark ( a , true ) ) ; for ( var g = d + 1 ; g < this . length ; g ++ ) { this [ g ] = b ( e , this [ g ] ) ; this [ g ] = b ( e , this [ g ] , true ) } } return c } , createBookmarks2 : function ( a ) { for ( var b =
[ ] , c = 0 ; c < this . length ; c ++ ) b . push ( this [ c ] . createBookmark2 ( a ) ) ; return b } , moveToBookmarks : function ( a ) { for ( var b = 0 ; b < this . length ; b ++ ) this [ b ] . moveToBookmark ( a [ b ] ) } } } ) ( ) ;
( function ( ) { function b ( ) { return CKEDITOR . getUrl ( CKEDITOR . skinName . split ( "," ) [ 1 ] || "skins/" + CKEDITOR . skinName . split ( "," ) [ 0 ] + "/" ) } function c ( a ) { var c = CKEDITOR . skin [ "ua_" + a ] , d = CKEDITOR . env ; if ( c ) for ( var c = c . split ( "," ) . sort ( function ( a , b ) { return a > b ? - 1 : 1 } ) , e = 0 , f ; e < c . length ; e ++ ) { f = c [ e ] ; if ( d . ie && ( f . replace ( /^ie/ , "" ) == d . version || d . quirks && f == "iequirks" ) ) f = "ie" ; if ( d [ f ] ) { a = a + ( "_" + c [ e ] ) ; break } } return CKEDITOR . getUrl ( b ( ) + a + ".css" ) } function a ( a , b ) { if ( ! d [ a ] ) { CKEDITOR . document . appendStyleSheet ( c ( a ) ) ; d [ a ] = 1 } b && b ( ) }
function f ( a ) { var b = a . getById ( g ) ; if ( ! b ) { b = a . getHead ( ) . append ( "style" ) ; b . setAttribute ( "id" , g ) ; b . setAttribute ( "type" , "text/css" ) } return b } function e ( a , b , c ) { var d , e , f ; if ( CKEDITOR . env . webkit ) { b = b . split ( "}" ) . slice ( 0 , - 1 ) ; for ( e = 0 ; e < b . length ; e ++ ) b [ e ] = b [ e ] . split ( "{" ) } for ( var g = 0 ; g < a . length ; g ++ ) if ( CKEDITOR . env . webkit ) for ( e = 0 ; e < b . length ; e ++ ) { f = b [ e ] [ 1 ] ; for ( d = 0 ; d < c . length ; d ++ ) f = f . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; a [ g ] . $ . sheet . addRule ( b [ e ] [ 0 ] , f ) } else { f = b ; for ( d = 0 ; d < c . length ; d ++ ) f = f . replace ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; CKEDITOR . env . ie ?
a [ g ] . $ . styleSheet . cssText = a [ g ] . $ . styleSheet . cssText + f : a [ g ] . $ . innerHTML = a [ g ] . $ . innerHTML + f } } var d = { } ; CKEDITOR . skin = { path : b , loadPart : function ( c , d ) { CKEDITOR . skin . name != CKEDITOR . skinName . split ( "," ) [ 0 ] ? CKEDITOR . scriptLoader . load ( CKEDITOR . getUrl ( b ( ) + "skin.js" ) , function ( ) { a ( c , d ) } ) : a ( c , d ) } , getPath : function ( a ) { return CKEDITOR . getUrl ( c ( a ) ) } , icons : { } , addIcon : function ( a , b , c ) { a = a . toLowerCase ( ) ; this . icons [ a ] || ( this . icons [ a ] = { path : b , offset : c || 0 } ) } , getIconStyle : function ( a , b , c , d ) { var e ; if ( a ) { a = a . toLowerCase ( ) ; b &&
( e = this . icons [ a + "-rtl" ] ) ; e || ( e = this . icons [ a ] ) } a = c || e && e . path || "" ; d = d || e && e . offset ; return a && "background-image:url(" + CKEDITOR . getUrl ( a ) + ");background-position:0 " + d + "px;" } } ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { getUiColor : function ( ) { return this . uiColor } , setUiColor : function ( a ) { var b = f ( CKEDITOR . document ) ; return ( this . setUiColor = function ( a ) { var c = CKEDITOR . skin . chameleon , d = [ [ h , a ] ] ; this . uiColor = a ; e ( [ b ] , c ( this , "editor" ) , d ) ; e ( k , c ( this , "panel" ) , d ) } ) . call ( this , a ) } } ) ; var g = "cke_ui_color" , k = [ ] , h = /\$color/g ;
CKEDITOR . on ( "instanceLoaded" , function ( a ) { if ( ! CKEDITOR . env . ie || ! CKEDITOR . env . quirks ) { var b = a . editor , a = function ( a ) { a = ( a . data [ 0 ] || a . data ) . element . getElementsByTag ( "iframe" ) . getItem ( 0 ) . getFrameDocument ( ) ; if ( ! a . getById ( "cke_ui_color" ) ) { a = f ( a ) ; k . push ( a ) ; var c = b . getUiColor ( ) ; c && e ( [ a ] , CKEDITOR . skin . chameleon ( b , "panel" ) , [ [ h , c ] ] ) } } ; b . on ( "panelShow" , a ) ; b . on ( "menuShow" , a ) ; b . config . uiColor && b . setUiColor ( b . config . uiColor ) } } ) } ) ( ) ;
( function ( ) { if ( CKEDITOR . env . webkit ) CKEDITOR . env . hc = false ; else { var b = CKEDITOR . dom . element . createFromHtml ( '<div style="width:0px;height:0px;position:absolute;left:-10000px;border: 1px solid;border-color: red blue;"></div>' , CKEDITOR . document ) ; b . appendTo ( CKEDITOR . document . getHead ( ) ) ; try { CKEDITOR . env . hc = b . getComputedStyle ( "border-top-color" ) == b . getComputedStyle ( "border-right-color" ) } catch ( c ) { CKEDITOR . env . hc = false } b . remove ( ) } if ( CKEDITOR . env . hc ) CKEDITOR . env . cssClass = CKEDITOR . env . cssClass + " cke_hc" ; CKEDITOR . document . appendStyleText ( ".cke{visibility:hidden;}" ) ;
CKEDITOR . status = "loaded" ; CKEDITOR . fireOnce ( "loaded" ) ; if ( b = CKEDITOR . _ . pending ) { delete CKEDITOR . _ . pending ; for ( var a = 0 ; a < b . length ; a ++ ) { CKEDITOR . editor . prototype . constructor . apply ( b [ a ] [ 0 ] , b [ a ] [ 1 ] ) ; CKEDITOR . add ( b [ a ] [ 0 ] ) } } } ) ( ) ; / *
Copyright ( c ) 2003 - 2013 , CKSource - Frederico Knabben . All rights reserved .
For licensing , see LICENSE . html or http : //ckeditor.com/license
* /
CKEDITOR . skin . name = "moono" ; CKEDITOR . skin . ua _editor = "ie,iequirks,ie7,ie8,gecko" ; CKEDITOR . skin . ua _dialog = "ie,iequirks,ie7,ie8,opera" ;
CKEDITOR . skin . chameleon = function ( ) { var b = function ( ) { return function ( b , e ) { for ( var a = b . match ( /[^#]./g ) , c = 0 ; 3 > c ; c ++ ) { var f = a , h = c , d ; d = parseInt ( a [ c ] , 16 ) ; d = ( "0" + ( 0 > e ? 0 | d * ( 1 + e ) : 0 | d + ( 255 - d ) * e ) . toString ( 16 ) ) . slice ( - 2 ) ; f [ h ] = d } return "#" + a . join ( "" ) } } ( ) , c = function ( ) { var b = new CKEDITOR . template ( "background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');" ) ; return function ( c ,
a ) { return b . output ( { from : c , to : a } ) } } ( ) , f = { editor : new CKEDITOR . template ( "{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] " ) ,
panel : new CKEDITOR . template ( ".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] " ) } ;
return function ( g , e ) { var a = g . uiColor , a = { id : "." + g . id , defaultBorder : b ( a , - 0.1 ) , defaultGradient : c ( b ( a , 0.9 ) , a ) , lightGradient : c ( b ( a , 1 ) , b ( a , 0.7 ) ) , mediumGradient : c ( b ( a , 0.8 ) , b ( a , 0.5 ) ) , ckeButtonOn : c ( b ( a , 0.6 ) , b ( a , 0.7 ) ) , ckeResizer : b ( a , - 0.4 ) , ckeToolbarSeparator : b ( a , 0.5 ) , ckeColorauto : b ( a , 0.8 ) , dialogBody : b ( a , 0.7 ) , dialogTabSelected : c ( "#FFFFFF" , "#FFFFFF" ) , dialogTabSelectedBorder : "#FFF" , elementsPathColor : b ( a , - 0.6 ) , elementsPathBg : a , menubuttonIcon : b ( a , 0.5 ) , menubuttonIconHover : b ( a , 0.3 ) } ; return f [ e ] . output ( a ) . replace ( /\[/g ,
"{" ) . replace ( /\]/g , "}" ) } } ( ) ; CKEDITOR . plugins . add ( "dialogui" , { onLoad : function ( ) { var h = function ( b ) { this . _ || ( this . _ = { } ) ; this . _ [ "default" ] = this . _ . initValue = b [ "default" ] || "" ; this . _ . required = b . required || ! 1 ; for ( var a = [ this . _ ] , d = 1 ; d < arguments . length ; d ++ ) a . push ( arguments [ d ] ) ; a . push ( ! 0 ) ; CKEDITOR . tools . extend . apply ( CKEDITOR . tools , a ) ; return this . _ } , r = { build : function ( b , a , d ) { return new CKEDITOR . ui . dialog . textInput ( b , a , d ) } } , l = { build : function ( b , a , d ) { return new CKEDITOR . ui . dialog [ a . type ] ( b , a , d ) } } , n = { isChanged : function ( ) { return this . getValue ( ) !=
this . getInitValue ( ) } , reset : function ( b ) { this . setValue ( this . getInitValue ( ) , b ) } , setInitValue : function ( ) { this . _ . initValue = this . getValue ( ) } , resetInitValue : function ( ) { this . _ . initValue = this . _ [ "default" ] } , getInitValue : function ( ) { return this . _ . initValue } } , o = CKEDITOR . tools . extend ( { } , CKEDITOR . ui . dialog . uiElement . prototype . eventProcessors , { onChange : function ( b , a ) { this . _ . domOnChangeRegistered || ( b . on ( "load" , function ( ) { this . getInputElement ( ) . on ( "change" , function ( ) { b . parts . dialog . isVisible ( ) && this . fire ( "change" , { value : this . getValue ( ) } ) } ,
this ) } , this ) , this . _ . domOnChangeRegistered = ! 0 ) ; this . on ( "change" , a ) } } , ! 0 ) , s = /^on([A-Z]\w+)/ , p = function ( b ) { for ( var a in b ) ( s . test ( a ) || "title" == a || "type" == a ) && delete b [ a ] ; return b } ; CKEDITOR . tools . extend ( CKEDITOR . ui . dialog , { labeledElement : function ( b , a , d , e ) { if ( ! ( 4 > arguments . length ) ) { var c = h . call ( this , a ) ; c . labelId = CKEDITOR . tools . getNextId ( ) + "_label" ; this . _ . children = [ ] ; CKEDITOR . ui . dialog . uiElement . call ( this , b , a , d , "div" , null , { role : "presentation" } , function ( ) { var f = [ ] , d = a . required ? " cke_required" : "" ; "horizontal" !=
a . labelLayout ? f . push ( '<label class="cke_dialog_ui_labeled_label' + d + '" ' , ' id="' + c . labelId + '"' , c . inputId ? ' for="' + c . inputId + '"' : "" , ( a . labelStyle ? ' style="' + a . labelStyle + '"' : "" ) + ">" , a . label , "</label>" , '<div class="cke_dialog_ui_labeled_content"' + ( a . controlStyle ? ' style="' + a . controlStyle + '"' : "" ) + ' role="presentation">' , e . call ( this , b , a ) , "</div>" ) : ( d = { type : "hbox" , widths : a . widths , padding : 0 , children : [ { type : "html" , html : '<label class="cke_dialog_ui_labeled_label' + d + '" id="' + c . labelId + '" for="' + c . inputId + '"' +
( a . labelStyle ? ' style="' + a . labelStyle + '"' : "" ) + ">" + CKEDITOR . tools . htmlEncode ( a . label ) + "</span>" } , { type : "html" , html : '<span class="cke_dialog_ui_labeled_content"' + ( a . controlStyle ? ' style="' + a . controlStyle + '"' : "" ) + ">" + e . call ( this , b , a ) + "</span>" } ] } , CKEDITOR . dialog . _ . uiElementBuilders . hbox . build ( b , d , f ) ) ; return f . join ( "" ) } ) } } , textInput : function ( b , a , d ) { if ( ! ( 3 > arguments . length ) ) { h . call ( this , a ) ; var e = this . _ . inputId = CKEDITOR . tools . getNextId ( ) + "_textInput" , c = { "class" : "cke_dialog_ui_input_" + a . type , id : e , type : a . type } ;
a . validate && ( this . validate = a . validate ) ; a . maxLength && ( c . maxlength = a . maxLength ) ; a . size && ( c . size = a . size ) ; a . inputStyle && ( c . style = a . inputStyle ) ; var f = this , i = ! 1 ; b . on ( "load" , function ( ) { f . getInputElement ( ) . on ( "keydown" , function ( a ) { a . data . getKeystroke ( ) == 13 && ( i = true ) } ) ; f . getInputElement ( ) . on ( "keyup" , function ( a ) { if ( a . data . getKeystroke ( ) == 13 && i ) { b . getButton ( "ok" ) && setTimeout ( function ( ) { b . getButton ( "ok" ) . click ( ) } , 0 ) ; i = false } } , null , null , 1E3 ) } ) ; CKEDITOR . ui . dialog . labeledElement . call ( this , b , a , d , function ( ) { var b =
[ '<div class="cke_dialog_ui_input_' , a . type , '" role="presentation"' ] ; a . width && b . push ( 'style="width:' + a . width + '" ' ) ; b . push ( "><input " ) ; c [ "aria-labelledby" ] = this . _ . labelId ; this . _ . required && ( c [ "aria-required" ] = this . _ . required ) ; for ( var f in c ) b . push ( f + '="' + c [ f ] + '" ' ) ; b . push ( " /></div>" ) ; return b . join ( "" ) } ) } } , textarea : function ( b , a , d ) { if ( ! ( 3 > arguments . length ) ) { h . call ( this , a ) ; var e = this , c = this . _ . inputId = CKEDITOR . tools . getNextId ( ) + "_textarea" , f = { } ; a . validate && ( this . validate = a . validate ) ; f . rows = a . rows || 5 ; f . cols =
a . cols || 20 ; "undefined" != typeof a . inputStyle && ( f . style = a . inputStyle ) ; CKEDITOR . ui . dialog . labeledElement . call ( this , b , a , d , function ( ) { f [ "aria-labelledby" ] = this . _ . labelId ; this . _ . required && ( f [ "aria-required" ] = this . _ . required ) ; var a = [ '<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea class="cke_dialog_ui_input_textarea" id="' , c , '" ' ] , b ; for ( b in f ) a . push ( b + '="' + CKEDITOR . tools . htmlEncode ( f [ b ] ) + '" ' ) ; a . push ( ">" , CKEDITOR . tools . htmlEncode ( e . _ [ "default" ] ) , "</textarea></div>" ) ; return a . join ( "" ) } ) } } ,
checkbox : function ( b , a , d ) { if ( ! ( 3 > arguments . length ) ) { var e = h . call ( this , a , { "default" : ! ! a [ "default" ] } ) ; a . validate && ( this . validate = a . validate ) ; CKEDITOR . ui . dialog . uiElement . call ( this , b , a , d , "span" , null , null , function ( ) { var c = CKEDITOR . tools . extend ( { } , a , { id : a . id ? a . id + "_checkbox" : CKEDITOR . tools . getNextId ( ) + "_checkbox" } , true ) , f = [ ] , d = CKEDITOR . tools . getNextId ( ) + "_label" , g = { "class" : "cke_dialog_ui_checkbox_input" , type : "checkbox" , "aria-labelledby" : d } ; p ( c ) ; if ( a [ "default" ] ) g . checked = "checked" ; if ( typeof c . inputStyle !=
"undefined" ) c . style = c . inputStyle ; e . checkbox = new CKEDITOR . ui . dialog . uiElement ( b , c , f , "input" , null , g ) ; f . push ( ' <label id="' , d , '" for="' , g . id , '"' + ( a . labelStyle ? ' style="' + a . labelStyle + '"' : "" ) + ">" , CKEDITOR . tools . htmlEncode ( a . label ) , "</label>" ) ; return f . join ( "" ) } ) } } , radio : function ( b , a , d ) { if ( ! ( 3 > arguments . length ) ) { h . call ( this , a ) ; this . _ [ "default" ] || ( this . _ [ "default" ] = this . _ . initValue = a . items [ 0 ] [ 1 ] ) ; a . validate && ( this . validate = a . valdiate ) ; var e = [ ] , c = this ; CKEDITOR . ui . dialog . labeledElement . call ( this , b , a , d , function ( ) { for ( var f =
[ ] , d = [ ] , g = a . id ? a . id + "_radio" : CKEDITOR . tools . getNextId ( ) + "_radio" , j = 0 ; j < a . items . length ; j ++ ) { var k = a . items [ j ] , h = k [ 2 ] !== void 0 ? k [ 2 ] : k [ 0 ] , l = k [ 1 ] !== void 0 ? k [ 1 ] : k [ 0 ] , m = CKEDITOR . tools . getNextId ( ) + "_radio_input" , n = m + "_label" , m = CKEDITOR . tools . extend ( { } , a , { id : m , title : null , type : null } , true ) , h = CKEDITOR . tools . extend ( { } , m , { title : h } , true ) , o = { type : "radio" , "class" : "cke_dialog_ui_radio_input" , name : g , value : l , "aria-labelledby" : n } , q = [ ] ; if ( c . _ [ "default" ] == l ) o . checked = "checked" ; p ( m ) ; p ( h ) ; if ( typeof m . inputStyle != "undefined" ) m . style =
m . inputStyle ; e . push ( new CKEDITOR . ui . dialog . uiElement ( b , m , q , "input" , null , o ) ) ; q . push ( " " ) ; new CKEDITOR . ui . dialog . uiElement ( b , h , q , "label" , null , { id : n , "for" : o . id } , k [ 0 ] ) ; f . push ( q . join ( "" ) ) } new CKEDITOR . ui . dialog . hbox ( b , e , f , d ) ; return d . join ( "" ) } ) ; this . _ . children = e } } , button : function ( b , a , d ) { if ( arguments . length ) { "function" == typeof a && ( a = a ( b . getParentEditor ( ) ) ) ; h . call ( this , a , { disabled : a . disabled || ! 1 } ) ; CKEDITOR . event . implementOn ( this ) ; var e = this ; b . on ( "load" , function ( ) { var a = this . getElement ( ) ; ( function ( ) { a . on ( "click" ,
e . click , e ) ; a . on ( "keydown" , function ( a ) { a . data . getKeystroke ( ) in { 32 : 1 } && ( e . click ( ) , a . data . preventDefault ( ) ) } ) } ) ( ) ; a . unselectable ( ) } , this ) ; var c = CKEDITOR . tools . extend ( { } , a ) ; delete c . style ; var f = CKEDITOR . tools . getNextId ( ) + "_label" ; CKEDITOR . ui . dialog . uiElement . call ( this , b , c , d , "a" , null , { style : a . style , href : "javascript:void(0)" , title : a . label , hidefocus : "true" , "class" : a [ "class" ] , role : "button" , "aria-labelledby" : f } , '<span id="' + f + '" class="cke_dialog_ui_button">' + CKEDITOR . tools . htmlEncode ( a . label ) + "</span>" ) } } ,
select : function ( b , a , d ) { if ( ! ( 3 > arguments . length ) ) { var e = h . call ( this , a ) ; a . validate && ( this . validate = a . validate ) ; e . inputId = CKEDITOR . tools . getNextId ( ) + "_select" ; CKEDITOR . ui . dialog . labeledElement . call ( this , b , a , d , function ( ) { var c = CKEDITOR . tools . extend ( { } , a , { id : a . id ? a . id + "_select" : CKEDITOR . tools . getNextId ( ) + "_select" } , true ) , d = [ ] , i = [ ] , g = { id : e . inputId , "class" : "cke_dialog_ui_input_select" , "aria-labelledby" : this . _ . labelId } ; d . push ( '<div class="cke_dialog_ui_input_' , a . type , '" role="presentation"' ) ; a . width && d . push ( 'style="width:' +
a . width + '" ' ) ; d . push ( ">" ) ; if ( a . size != void 0 ) g . size = a . size ; if ( a . multiple != void 0 ) g . multiple = a . multiple ; p ( c ) ; for ( var j = 0 , k ; j < a . items . length && ( k = a . items [ j ] ) ; j ++ ) i . push ( '<option value="' , CKEDITOR . tools . htmlEncode ( k [ 1 ] !== void 0 ? k [ 1 ] : k [ 0 ] ) . replace ( /"/g , """ ) , '" /> ' , CKEDITOR . tools . htmlEncode ( k [ 0 ] ) ) ; if ( typeof c . inputStyle != "undefined" ) c . style = c . inputStyle ; e . select = new CKEDITOR . ui . dialog . uiElement ( b , c , d , "select" , null , g , i . join ( "" ) ) ; d . push ( "</div>" ) ; return d . join ( "" ) } ) } } , file : function ( b , a , d ) { if ( ! ( 3 > arguments . length ) ) { void 0 ===
a [ "default" ] && ( a [ "default" ] = "" ) ; var e = CKEDITOR . tools . extend ( h . call ( this , a ) , { definition : a , buttons : [ ] } ) ; a . validate && ( this . validate = a . validate ) ; b . on ( "load" , function ( ) { CKEDITOR . document . getById ( e . frameId ) . getParent ( ) . addClass ( "cke_dialog_ui_input_file" ) } ) ; CKEDITOR . ui . dialog . labeledElement . call ( this , b , a , d , function ( ) { e . frameId = CKEDITOR . tools . getNextId ( ) + "_fileInput" ; var b = CKEDITOR . env . isCustomDomain ( ) , d = [ '<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" role="presentation" id="' ,
e . frameId , '" title="' , a . label , '" src="javascript:void(' ] ; d . push ( b ? "(function(){document.open();document.domain='" + document . domain + "';document.close();})()" : "0" ) ; d . push ( ')"></iframe>' ) ; return d . join ( "" ) } ) } } , fileButton : function ( b , a , d ) { if ( ! ( 3 > arguments . length ) ) { h . call ( this , a ) ; var e = this ; a . validate && ( this . validate = a . validate ) ; var c = CKEDITOR . tools . extend ( { } , a ) , f = c . onClick ; c . className = ( c . className ? c . className + " " : "" ) + "cke_dialog_ui_button" ; c . onClick = function ( c ) { var d = a [ "for" ] ; if ( ! f || f . call ( this , c ) !== false ) { b . getContentElement ( d [ 0 ] ,
d [ 1 ] ) . submit ( ) ; this . disable ( ) } } ; b . on ( "load" , function ( ) { b . getContentElement ( a [ "for" ] [ 0 ] , a [ "for" ] [ 1 ] ) . _ . buttons . push ( e ) } ) ; CKEDITOR . ui . dialog . button . call ( this , b , c , d ) } } , html : function ( ) { var b = /^\s*<[\w:]+\s+([^>]*)?>/ , a = /^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/ , d = /\/$/ ; return function ( e , c , f ) { if ( ! ( 3 > arguments . length ) ) { var i = [ ] , g = c . html ; "<" != g . charAt ( 0 ) && ( g = "<span>" + g + "</span>" ) ; var j = c . focus ; j && ( this . focus = function ( ) { this . selectParentTab ( ) ; "function" == typeof j && j . call ( this ) ; this . fire ( "focus" ) } , c . isFocusable &&
( this . isFocusable = this . isFocusable ) , this . keyboardFocusable = ! 0 ) ; CKEDITOR . ui . dialog . uiElement . call ( this , e , c , i , "span" , null , null , "" ) ; i = i . join ( "" ) . match ( b ) ; g = g . match ( a ) || [ "" , "" , "" ] ; d . test ( g [ 1 ] ) && ( g [ 1 ] = g [ 1 ] . slice ( 0 , - 1 ) , g [ 2 ] = "/" + g [ 2 ] ) ; f . push ( [ g [ 1 ] , " " , i [ 1 ] || "" , g [ 2 ] ] . join ( "" ) ) } } } ( ) , fieldset : function ( b , a , d , e , c ) { var f = c . label ; this . _ = { children : a } ; CKEDITOR . ui . dialog . uiElement . call ( this , b , c , e , "fieldset" , null , null , function ( ) { var a = [ ] ; f && a . push ( "<legend" + ( c . labelStyle ? ' style="' + c . labelStyle + '"' : "" ) + ">" + f + "</legend>" ) ;
for ( var b = 0 ; b < d . length ; b ++ ) a . push ( d [ b ] ) ; return a . join ( "" ) } ) } } , ! 0 ) ; CKEDITOR . ui . dialog . html . prototype = new CKEDITOR . ui . dialog . uiElement ; CKEDITOR . ui . dialog . labeledElement . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . uiElement , { setLabel : function ( b ) { var a = CKEDITOR . document . getById ( this . _ . labelId ) ; 1 > a . getChildCount ( ) ? ( new CKEDITOR . dom . text ( b , CKEDITOR . document ) ) . appendTo ( a ) : a . getChild ( 0 ) . $ . nodeValue = b ; return this } , getLabel : function ( ) { var b = CKEDITOR . document . getById ( this . _ . labelId ) ; return ! b || 1 > b . getChildCount ( ) ?
"" : b . getChild ( 0 ) . getText ( ) } , eventProcessors : o } , ! 0 ) ; CKEDITOR . ui . dialog . button . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . uiElement , { click : function ( ) { return ! this . _ . disabled ? this . fire ( "click" , { dialog : this . _ . dialog } ) : ! 1 } , enable : function ( ) { this . _ . disabled = ! 1 ; var b = this . getElement ( ) ; b && b . removeClass ( "cke_disabled" ) } , disable : function ( ) { this . _ . disabled = ! 0 ; this . getElement ( ) . addClass ( "cke_disabled" ) } , isVisible : function ( ) { return this . getElement ( ) . getFirst ( ) . isVisible ( ) } , isEnabled : function ( ) { return ! this . _ . disabled } ,
eventProcessors : CKEDITOR . tools . extend ( { } , CKEDITOR . ui . dialog . uiElement . prototype . eventProcessors , { onClick : function ( b , a ) { this . on ( "click" , function ( ) { a . apply ( this , arguments ) } ) } } , ! 0 ) , accessKeyUp : function ( ) { this . click ( ) } , accessKeyDown : function ( ) { this . focus ( ) } , keyboardFocusable : ! 0 } , ! 0 ) ; CKEDITOR . ui . dialog . textInput . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . labeledElement , { getInputElement : function ( ) { return CKEDITOR . document . getById ( this . _ . inputId ) } , focus : function ( ) { var b = this . selectParentTab ( ) ;
setTimeout ( function ( ) { var a = b . getInputElement ( ) ; a && a . $ . focus ( ) } , 0 ) } , select : function ( ) { var b = this . selectParentTab ( ) ; setTimeout ( function ( ) { var a = b . getInputElement ( ) ; a && ( a . $ . focus ( ) , a . $ . select ( ) ) } , 0 ) } , accessKeyUp : function ( ) { this . select ( ) } , setValue : function ( b ) { ! b && ( b = "" ) ; return CKEDITOR . ui . dialog . uiElement . prototype . setValue . apply ( this , arguments ) } , keyboardFocusable : ! 0 } , n , ! 0 ) ; CKEDITOR . ui . dialog . textarea . prototype = new CKEDITOR . ui . dialog . textInput ; CKEDITOR . ui . dialog . select . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . labeledElement ,
{ getInputElement : function ( ) { return this . _ . select . getElement ( ) } , add : function ( b , a , d ) { var e = new CKEDITOR . dom . element ( "option" , this . getDialog ( ) . getParentEditor ( ) . document ) , c = this . getInputElement ( ) . $ ; e . $ . text = b ; e . $ . value = void 0 === a || null === a ? b : a ; void 0 === d || null === d ? CKEDITOR . env . ie ? c . add ( e . $ ) : c . add ( e . $ , null ) : c . add ( e . $ , d ) ; return this } , remove : function ( b ) { this . getInputElement ( ) . $ . remove ( b ) ; return this } , clear : function ( ) { for ( var b = this . getInputElement ( ) . $ ; 0 < b . length ; ) b . remove ( 0 ) ; return this } , keyboardFocusable : ! 0 } ,
n , ! 0 ) ; CKEDITOR . ui . dialog . checkbox . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . uiElement , { getInputElement : function ( ) { return this . _ . checkbox . getElement ( ) } , setValue : function ( b , a ) { this . getInputElement ( ) . $ . checked = b ; ! a && this . fire ( "change" , { value : b } ) } , getValue : function ( ) { return this . getInputElement ( ) . $ . checked } , accessKeyUp : function ( ) { this . setValue ( ! this . getValue ( ) ) } , eventProcessors : { onChange : function ( b , a ) { if ( ! CKEDITOR . env . ie || 8 < CKEDITOR . env . version ) return o . onChange . apply ( this , arguments ) ; b . on ( "load" ,
function ( ) { var a = this . _ . checkbox . getElement ( ) ; a . on ( "propertychange" , function ( b ) { b = b . data . $ ; "checked" == b . propertyName && this . fire ( "change" , { value : a . $ . checked } ) } , this ) } , this ) ; this . on ( "change" , a ) ; return null } } , keyboardFocusable : ! 0 } , n , ! 0 ) ; CKEDITOR . ui . dialog . radio . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . uiElement , { setValue : function ( b , a ) { for ( var d = this . _ . children , e , c = 0 ; c < d . length && ( e = d [ c ] ) ; c ++ ) e . getElement ( ) . $ . checked = e . getValue ( ) == b ; ! a && this . fire ( "change" , { value : b } ) } , getValue : function ( ) { for ( var b =
this . _ . children , a = 0 ; a < b . length ; a ++ ) if ( b [ a ] . getElement ( ) . $ . checked ) return b [ a ] . getValue ( ) ; return null } , accessKeyUp : function ( ) { var b = this . _ . children , a ; for ( a = 0 ; a < b . length ; a ++ ) if ( b [ a ] . getElement ( ) . $ . checked ) { b [ a ] . getElement ( ) . focus ( ) ; return } b [ 0 ] . getElement ( ) . focus ( ) } , eventProcessors : { onChange : function ( b , a ) { if ( CKEDITOR . env . ie ) b . on ( "load" , function ( ) { for ( var a = this . _ . children , b = this , c = 0 ; c < a . length ; c ++ ) a [ c ] . getElement ( ) . on ( "propertychange" , function ( a ) { a = a . data . $ ; "checked" == a . propertyName && this . $ . checked &&
b . fire ( "change" , { value : this . getAttribute ( "value" ) } ) } ) } , this ) , this . on ( "change" , a ) ; else return o . onChange . apply ( this , arguments ) ; return null } } , keyboardFocusable : ! 0 } , n , ! 0 ) ; CKEDITOR . ui . dialog . file . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . labeledElement , n , { getInputElement : function ( ) { var b = CKEDITOR . document . getById ( this . _ . frameId ) . getFrameDocument ( ) ; return 0 < b . $ . forms . length ? new CKEDITOR . dom . element ( b . $ . forms [ 0 ] . elements [ 0 ] ) : this . getElement ( ) } , submit : function ( ) { this . getInputElement ( ) . getParent ( ) . $ . submit ( ) ;
return this } , getAction : function ( ) { return this . getInputElement ( ) . getParent ( ) . $ . action } , registerEvents : function ( b ) { var a = /^on([A-Z]\w+)/ , d , e = function ( a , b , c , d ) { a . on ( "formLoaded" , function ( ) { a . getInputElement ( ) . on ( c , d , a ) } ) } , c ; for ( c in b ) if ( d = c . match ( a ) ) this . eventProcessors [ c ] ? this . eventProcessors [ c ] . call ( this , this . _ . dialog , b [ c ] ) : e ( this , this . _ . dialog , d [ 1 ] . toLowerCase ( ) , b [ c ] ) ; return this } , reset : function ( ) { function b ( ) { d . $ . open ( ) ; CKEDITOR . env . isCustomDomain ( ) && ( d . $ . domain = document . domain ) ; var b = "" ; e . size &&
( b = e . size - ( CKEDITOR . env . ie ? 7 : 0 ) ) ; var h = a . frameId + "_input" ; d . $ . write ( [ '<html dir="' + g + '" lang="' + j + '"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">' , '<form enctype="multipart/form-data" method="POST" dir="' + g + '" lang="' + j + '" action="' , CKEDITOR . tools . htmlEncode ( e . action ) , '"><label id="' , a . labelId , '" for="' , h , '" style="display:none">' , CKEDITOR . tools . htmlEncode ( e . label ) , '</label><input id="' , h , '" aria-labelledby="' , a . labelId , '" type="file" name="' , CKEDITOR . tools . htmlEncode ( e . id ||
"cke_upload" ) , '" size="' , CKEDITOR . tools . htmlEncode ( 0 < b ? b : "" ) , '" /></form></body></html>' , "<script>window.parent.CKEDITOR.tools.callFunction(" + f + ");" , "window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction(" + i + ")}<\/script>" ] . join ( "" ) ) ; d . $ . close ( ) ; for ( b = 0 ; b < c . length ; b ++ ) c [ b ] . enable ( ) } var a = this . _ , d = CKEDITOR . document . getById ( a . frameId ) . getFrameDocument ( ) , e = a . definition , c = a . buttons , f = this . formLoadedNumber , i = this . formUnloadNumber , g = a . dialog . _ . editor . lang . dir , j = a . dialog . _ . editor . langCode ;
f || ( f = this . formLoadedNumber = CKEDITOR . tools . addFunction ( function ( ) { this . fire ( "formLoaded" ) } , this ) , i = this . formUnloadNumber = CKEDITOR . tools . addFunction ( function ( ) { this . getInputElement ( ) . clearCustomData ( ) } , this ) , this . getDialog ( ) . _ . editor . on ( "destroy" , function ( ) { CKEDITOR . tools . removeFunction ( f ) ; CKEDITOR . tools . removeFunction ( i ) } ) ) ; CKEDITOR . env . gecko ? setTimeout ( b , 500 ) : b ( ) } , getValue : function ( ) { return this . getInputElement ( ) . $ . value || "" } , setInitValue : function ( ) { this . _ . initValue = "" } , eventProcessors : { onChange : function ( b ,
a ) { this . _ . domOnChangeRegistered || ( this . on ( "formLoaded" , function ( ) { this . getInputElement ( ) . on ( "change" , function ( ) { this . fire ( "change" , { value : this . getValue ( ) } ) } , this ) } , this ) , this . _ . domOnChangeRegistered = ! 0 ) ; this . on ( "change" , a ) } } , keyboardFocusable : ! 0 } , ! 0 ) ; CKEDITOR . ui . dialog . fileButton . prototype = new CKEDITOR . ui . dialog . button ; CKEDITOR . ui . dialog . fieldset . prototype = CKEDITOR . tools . clone ( CKEDITOR . ui . dialog . hbox . prototype ) ; CKEDITOR . dialog . addUIElement ( "text" , r ) ; CKEDITOR . dialog . addUIElement ( "password" , r ) ; CKEDITOR . dialog . addUIElement ( "textarea" ,
l ) ; CKEDITOR . dialog . addUIElement ( "checkbox" , l ) ; CKEDITOR . dialog . addUIElement ( "radio" , l ) ; CKEDITOR . dialog . addUIElement ( "button" , l ) ; CKEDITOR . dialog . addUIElement ( "select" , l ) ; CKEDITOR . dialog . addUIElement ( "file" , l ) ; CKEDITOR . dialog . addUIElement ( "fileButton" , l ) ; CKEDITOR . dialog . addUIElement ( "html" , l ) ; CKEDITOR . dialog . addUIElement ( "fieldset" , { build : function ( b , a , d ) { for ( var e = a . children , c , f = [ ] , i = [ ] , g = 0 ; g < e . length && ( c = e [ g ] ) ; g ++ ) { var h = [ ] ; f . push ( h ) ; i . push ( CKEDITOR . dialog . _ . uiElementBuilders [ c . type ] . build ( b , c , h ) ) } return new CKEDITOR . ui . dialog [ a . type ] ( b ,
i , f , d , a ) } } ) } } ) ; CKEDITOR . DIALOG _RESIZE _NONE = 0 ; CKEDITOR . DIALOG _RESIZE _WIDTH = 1 ; CKEDITOR . DIALOG _RESIZE _HEIGHT = 2 ; CKEDITOR . DIALOG _RESIZE _BOTH = 3 ;
( function ( ) { function p ( ) { for ( var a = this . _ . tabIdList . length , b = CKEDITOR . tools . indexOf ( this . _ . tabIdList , this . _ . currentTabId ) + a , c = b - 1 ; c > b - a ; c -- ) if ( this . _ . tabs [ this . _ . tabIdList [ c % a ] ] [ 0 ] . $ . offsetHeight ) return this . _ . tabIdList [ c % a ] ; return null } function u ( ) { for ( var a = this . _ . tabIdList . length , b = CKEDITOR . tools . indexOf ( this . _ . tabIdList , this . _ . currentTabId ) , c = b + 1 ; c < b + a ; c ++ ) if ( this . _ . tabs [ this . _ . tabIdList [ c % a ] ] [ 0 ] . $ . offsetHeight ) return this . _ . tabIdList [ c % a ] ; return null } function q ( a , b ) { for ( var c = a . $ . getElementsByTagName ( "input" ) ,
e = 0 , d = c . length ; e < d ; e ++ ) { var g = new CKEDITOR . dom . element ( c [ e ] ) ; "text" == g . getAttribute ( "type" ) . toLowerCase ( ) && ( b ? ( g . setAttribute ( "value" , g . getCustomData ( "fake_value" ) || "" ) , g . removeCustomData ( "fake_value" ) ) : ( g . setCustomData ( "fake_value" , g . getAttribute ( "value" ) ) , g . setAttribute ( "value" , "" ) ) ) } } function P ( a , b ) { var c = this . getInputElement ( ) ; c && ( a ? c . removeAttribute ( "aria-invalid" ) : c . setAttribute ( "aria-invalid" , ! 0 ) ) ; a || ( this . select ? this . select ( ) : this . focus ( ) ) ; b && alert ( b ) ; this . fire ( "validated" , { valid : a , msg : b } ) }
function Q ( ) { var a = this . getInputElement ( ) ; a && a . removeAttribute ( "aria-invalid" ) } function R ( a ) { var a = CKEDITOR . dom . element . createFromHtml ( CKEDITOR . addTemplate ( "dialog" , S ) . output ( { id : CKEDITOR . tools . getNextNumber ( ) , editorId : a . id , langDir : a . lang . dir , langCode : a . langCode , editorDialogClass : "cke_editor_" + a . name . replace ( /\./g , "\\." ) + "_dialog" , closeTitle : a . lang . common . close } ) ) , b = a . getChild ( [ 0 , 0 , 0 , 0 , 0 ] ) , c = b . getChild ( 0 ) , e = b . getChild ( 1 ) ; if ( CKEDITOR . env . ie && ! CKEDITOR . env . ie6Compat ) { var d = CKEDITOR . env . isCustomDomain ( ) ,
d = "javascript:void(function(){" + encodeURIComponent ( "document.open();" + ( d ? 'document.domain="' + document . domain + '";' : "" ) + "document.close();" ) + "}())" ; CKEDITOR . dom . element . createFromHtml ( '<iframe frameBorder="0" class="cke_iframe_shim" src="' + d + '" tabIndex="-1"></iframe>' ) . appendTo ( b . getParent ( ) ) } c . unselectable ( ) ; e . unselectable ( ) ; return { element : a , parts : { dialog : a . getChild ( 0 ) , title : c , close : e , tabs : b . getChild ( 2 ) , contents : b . getChild ( [ 3 , 0 , 0 , 0 ] ) , footer : b . getChild ( [ 3 , 0 , 1 , 0 ] ) } } } function H ( a , b , c ) { this . element = b ;
this . focusIndex = c ; this . tabIndex = 0 ; this . isFocusable = function ( ) { return ! b . getAttribute ( "disabled" ) && b . isVisible ( ) } ; this . focus = function ( ) { a . _ . currentFocusIndex = this . focusIndex ; this . element . focus ( ) } ; b . on ( "keydown" , function ( a ) { a . data . getKeystroke ( ) in { 32 : 1 , 13 : 1 } && this . fire ( "click" ) } ) ; b . on ( "focus" , function ( ) { this . fire ( "mouseover" ) } ) ; b . on ( "blur" , function ( ) { this . fire ( "mouseout" ) } ) } function T ( a ) { function b ( ) { a . layout ( ) } var c = CKEDITOR . document . getWindow ( ) ; c . on ( "resize" , b ) ; a . on ( "hide" , function ( ) { c . removeListener ( "resize" ,
b ) } ) } function I ( a , b ) { this . _ = { dialog : a } ; CKEDITOR . tools . extend ( this , b ) } function U ( a ) { function b ( b ) { var c = a . getSize ( ) , h = CKEDITOR . document . getWindow ( ) . getViewPaneSize ( ) , o = b . data . $ . screenX , i = b . data . $ . screenY , n = o - e . x , l = i - e . y ; e = { x : o , y : i } ; d . x += n ; d . y += l ; a . move ( d . x + k [ 3 ] < f ? - k [ 3 ] : d . x - k [ 1 ] > h . width - c . width - f ? h . width - c . width + ( "rtl" == g . lang . dir ? 0 : k [ 1 ] ) : d . x , d . y + k [ 0 ] < f ? - k [ 0 ] : d . y - k [ 2 ] > h . height - c . height - f ? h . height - c . height + k [ 2 ] : d . y , 1 ) ; b . data . preventDefault ( ) } function c ( ) { CKEDITOR . document . removeListener ( "mousemove" ,
b ) ; CKEDITOR . document . removeListener ( "mouseup" , c ) ; if ( CKEDITOR . env . ie6Compat ) { var a = r . getChild ( 0 ) . getFrameDocument ( ) ; a . removeListener ( "mousemove" , b ) ; a . removeListener ( "mouseup" , c ) } } var e = null , d = null ; a . getElement ( ) . getFirst ( ) ; var g = a . getParentEditor ( ) , f = g . config . dialog _magnetDistance , k = CKEDITOR . skin . margins || [ 0 , 0 , 0 , 0 ] ; "undefined" == typeof f && ( f = 20 ) ; a . parts . title . on ( "mousedown" , function ( f ) { e = { x : f . data . $ . screenX , y : f . data . $ . screenY } ; CKEDITOR . document . on ( "mousemove" , b ) ; CKEDITOR . document . on ( "mouseup" , c ) ; d =
a . getPosition ( ) ; if ( CKEDITOR . env . ie6Compat ) { var g = r . getChild ( 0 ) . getFrameDocument ( ) ; g . on ( "mousemove" , b ) ; g . on ( "mouseup" , c ) } f . data . preventDefault ( ) } , a ) } function V ( a ) { var b , c ; function e ( d ) { var e = "rtl" == k . lang . dir , i = o . width , D = o . height , E = i + ( d . data . $ . screenX - b ) * ( e ? - 1 : 1 ) * ( a . _ . moved ? 1 : 2 ) , n = D + ( d . data . $ . screenY - c ) * ( a . _ . moved ? 1 : 2 ) , x = a . _ . element . getFirst ( ) , x = e && x . getComputedStyle ( "right" ) , y = a . getPosition ( ) ; y . y + n > h . height && ( n = h . height - y . y ) ; if ( ( e ? x : y . x ) + E > h . width ) E = h . width - ( e ? x : y . x ) ; if ( f == CKEDITOR . DIALOG _RESIZE _WIDTH ||
f == CKEDITOR . DIALOG _RESIZE _BOTH ) i = Math . max ( g . minWidth || 0 , E - m ) ; if ( f == CKEDITOR . DIALOG _RESIZE _HEIGHT || f == CKEDITOR . DIALOG _RESIZE _BOTH ) D = Math . max ( g . minHeight || 0 , n - j ) ; a . resize ( i , D ) ; a . _ . moved || a . layout ( ) ; d . data . preventDefault ( ) } function d ( ) { CKEDITOR . document . removeListener ( "mouseup" , d ) ; CKEDITOR . document . removeListener ( "mousemove" , e ) ; i && ( i . remove ( ) , i = null ) ; if ( CKEDITOR . env . ie6Compat ) { var a = r . getChild ( 0 ) . getFrameDocument ( ) ; a . removeListener ( "mouseup" , d ) ; a . removeListener ( "mousemove" , e ) } } var g = a . definition , f = g . resizable ;
if ( f != CKEDITOR . DIALOG _RESIZE _NONE ) { var k = a . getParentEditor ( ) , m , j , h , o , i , n = CKEDITOR . tools . addFunction ( function ( f ) { o = a . getSize ( ) ; var g = a . parts . contents ; g . $ . getElementsByTagName ( "iframe" ) . length && ( i = CKEDITOR . dom . element . createFromHtml ( '<div class="cke_dialog_resize_cover" style="height: 100%; position: absolute; width: 100%;"></div>' ) , g . append ( i ) ) ; j = o . height - a . parts . contents . getSize ( "height" , ! ( CKEDITOR . env . gecko || CKEDITOR . env . opera || CKEDITOR . env . ie && CKEDITOR . env . quirks ) ) ; m = o . width - a . parts . contents . getSize ( "width" ,
1 ) ; b = f . screenX ; c = f . screenY ; h = CKEDITOR . document . getWindow ( ) . getViewPaneSize ( ) ; CKEDITOR . document . on ( "mousemove" , e ) ; CKEDITOR . document . on ( "mouseup" , d ) ; CKEDITOR . env . ie6Compat && ( g = r . getChild ( 0 ) . getFrameDocument ( ) , g . on ( "mousemove" , e ) , g . on ( "mouseup" , d ) ) ; f . preventDefault && f . preventDefault ( ) } ) ; a . on ( "load" , function ( ) { var b = "" ; f == CKEDITOR . DIALOG _RESIZE _WIDTH ? b = " cke_resizer_horizontal" : f == CKEDITOR . DIALOG _RESIZE _HEIGHT && ( b = " cke_resizer_vertical" ) ; b = CKEDITOR . dom . element . createFromHtml ( '<div class="cke_resizer' +
b + " cke_resizer_" + k . lang . dir + '" title="' + CKEDITOR . tools . htmlEncode ( k . lang . common . resize ) + '" onmousedown="CKEDITOR.tools.callFunction(' + n + ', event )">' + ( "ltr" == k . lang . dir ? "◢" : "◣" ) + "</div>" ) ; a . parts . footer . append ( b , 1 ) } ) ; k . on ( "destroy" , function ( ) { CKEDITOR . tools . removeFunction ( n ) } ) } } function F ( a ) { a . data . preventDefault ( 1 ) } function J ( a ) { var b = CKEDITOR . document . getWindow ( ) , c = a . config , e = c . dialog _backgroundCoverColor || "white" , d = c . dialog _backgroundCoverOpacity , g = c . baseFloatZIndex , c = CKEDITOR . tools . genKey ( e ,
d , g ) , f = w [ c ] ; if ( f ) f . show ( ) ; else { g = [ '<div tabIndex="-1" style="position: ' , CKEDITOR . env . ie6Compat ? "absolute" : "fixed" , "; z-index: " , g , "; top: 0px; left: 0px; " , ! CKEDITOR . env . ie6Compat ? "background-color: " + e : "" , '" class="cke_dialog_background_cover">' ] ; if ( CKEDITOR . env . ie6Compat ) { var k = CKEDITOR . env . isCustomDomain ( ) , e = "<html><body style=\\'background-color:" + e + ";\\'></body></html>" ; g . push ( '<iframe hidefocus="true" frameborder="0" id="cke_dialog_background_iframe" src="javascript:' ) ; g . push ( "void((function(){document.open();" +
( k ? "document.domain='" + document . domain + "';" : "" ) + "document.write( '" + e + "' );document.close();})())" ) ; g . push ( '" style="position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0)"></iframe>' ) } g . push ( "</div>" ) ; f = CKEDITOR . dom . element . createFromHtml ( g . join ( "" ) ) ; f . setOpacity ( void 0 != d ? d : 0.5 ) ; f . on ( "keydown" , F ) ; f . on ( "keypress" , F ) ; f . on ( "keyup" , F ) ; f . appendTo ( CKEDITOR . document . getBody ( ) ) ; w [ c ] = f } a . focusManager . add ( f ) ; r = f ; var a = function ( ) { var a = b . getViewPaneSize ( ) ;
f . setStyles ( { width : a . width + "px" , height : a . height + "px" } ) } , m = function ( ) { var a = b . getScrollPosition ( ) , c = CKEDITOR . dialog . _ . currentTop ; f . setStyles ( { left : a . x + "px" , top : a . y + "px" } ) ; if ( c ) { do a = c . getPosition ( ) , c . move ( a . x , a . y ) ; while ( c = c . _ . parentDialog ) } } ; G = a ; b . on ( "resize" , a ) ; a ( ) ; ( ! CKEDITOR . env . mac || ! CKEDITOR . env . webkit ) && f . focus ( ) ; if ( CKEDITOR . env . ie6Compat ) { var j = function ( ) { m ( ) ; arguments . callee . prevScrollHandler . apply ( this , arguments ) } ; b . $ . setTimeout ( function ( ) { j . prevScrollHandler = window . onscroll || function ( ) { } ;
window . onscroll = j } , 0 ) ; m ( ) } } function K ( a ) { r && ( a . focusManager . remove ( r ) , a = CKEDITOR . document . getWindow ( ) , r . hide ( ) , a . removeListener ( "resize" , G ) , CKEDITOR . env . ie6Compat && a . $ . setTimeout ( function ( ) { window . onscroll = window . onscroll && window . onscroll . prevScrollHandler || null } , 0 ) , G = null ) } var s = CKEDITOR . tools . cssLength , S = '<div class="cke cke_reset_all {editorId} {editorDialogClass}" dir="{langDir}" lang="{langCode}" role="application"><table class="cke_dialog ' + CKEDITOR . env . cssClass + ' cke_{langDir}" aria-labelledby="cke_dialog_title_{id}" style="position:absolute" role="dialog"><tr><td role="presentation"><div class="cke_dialog_body" role="presentation"><div id="cke_dialog_title_{id}" class="cke_dialog_title" role="presentation"></div><a id="cke_dialog_close_button_{id}" class="cke_dialog_close_button" href="javascript:void(0)" title="{closeTitle}" role="button"><span class="cke_label">X</span></a><div id="cke_dialog_tabs_{id}" class="cke_dialog_tabs" role="tablist"></div><table class="cke_dialog_contents" role="presentation"><tr><td id="cke_dialog_contents_{id}" class="cke_dialog_contents_body" role="presentation"></td></tr><tr><td id="cke_dialog_footer_{id}" class="cke_dialog_footer" role="presentation"></td></tr></table></div></td></tr></table></div>' ;
CKEDITOR . dialog = function ( a , b ) { function c ( ) { var a = l . _ . focusList ; a . sort ( function ( a , b ) { return a . tabIndex != b . tabIndex ? b . tabIndex - a . tabIndex : a . focusIndex - b . focusIndex } ) ; for ( var b = a . length , c = 0 ; c < b ; c ++ ) a [ c ] . focusIndex = c } function e ( a ) { var b = l . _ . focusList , a = a || 0 ; if ( ! ( 1 > b . length ) ) { var c = l . _ . currentFocusIndex ; try { b [ c ] . getInputElement ( ) . $ . blur ( ) } catch ( d ) { } for ( var f = c = ( c + a + b . length ) % b . length ; a && ! b [ f ] . isFocusable ( ) && ! ( f = ( f + a + b . length ) % b . length , f == c ) ; ) ; b [ f ] . focus ( ) ; "text" == b [ f ] . type && b [ f ] . select ( ) } } function d ( b ) { if ( l ==
CKEDITOR . dialog . _ . currentTop ) { var c = b . data . getKeystroke ( ) , f = "rtl" == a . lang . dir ; o = i = 0 ; if ( 9 == c || c == CKEDITOR . SHIFT + 9 ) c = c == CKEDITOR . SHIFT + 9 , l . _ . tabBarMode ? ( c = c ? p . call ( l ) : u . call ( l ) , l . selectPage ( c ) , l . _ . tabs [ c ] [ 0 ] . focus ( ) ) : e ( c ? - 1 : 1 ) , o = 1 ; else if ( c == CKEDITOR . ALT + 121 && ! l . _ . tabBarMode && 1 < l . getPageCount ( ) ) l . _ . tabBarMode = ! 0 , l . _ . tabs [ l . _ . currentTabId ] [ 0 ] . focus ( ) , o = 1 ; else if ( ( 37 == c || 39 == c ) && l . _ . tabBarMode ) c = c == ( f ? 39 : 37 ) ? p . call ( l ) : u . call ( l ) , l . selectPage ( c ) , l . _ . tabs [ c ] [ 0 ] . focus ( ) , o = 1 ; else if ( ( 13 == c || 32 == c ) && l . _ . tabBarMode ) this . selectPage ( this . _ . currentTabId ) ,
this . _ . tabBarMode = ! 1 , this . _ . currentFocusIndex = - 1 , e ( 1 ) , o = 1 ; else if ( 13 == c ) { c = b . data . getTarget ( ) ; if ( ! c . is ( "a" , "button" , "select" , "textarea" ) && ( ! c . is ( "input" ) || "button" != c . $ . type ) ) ( c = this . getButton ( "ok" ) ) && CKEDITOR . tools . setTimeout ( c . click , 0 , c ) , o = 1 ; i = 1 } else if ( 27 == c ) ( c = this . getButton ( "cancel" ) ) ? CKEDITOR . tools . setTimeout ( c . click , 0 , c ) : ! 1 !== this . fire ( "cancel" , { hide : ! 0 } ) . hide && this . hide ( ) , i = 1 ; else return ; g ( b ) } } function g ( a ) { o ? a . data . preventDefault ( 1 ) : i && a . data . stopPropagation ( ) } var f = CKEDITOR . dialog . _ . dialogDefinitions [ b ] ,
k = CKEDITOR . tools . clone ( W ) , m = a . config . dialog _buttonsOrder || "OS" , j = a . lang . dir , h = { } , o , i ; ( "OS" == m && CKEDITOR . env . mac || "rtl" == m && "ltr" == j || "ltr" == m && "rtl" == j ) && k . buttons . reverse ( ) ; f = CKEDITOR . tools . extend ( f ( a ) , k ) ; f = CKEDITOR . tools . clone ( f ) ; f = new L ( this , f ) ; k = R ( a ) ; this . _ = { editor : a , element : k . element , name : b , contentSize : { width : 0 , height : 0 } , size : { width : 0 , height : 0 } , contents : { } , buttons : { } , accessKeyMap : { } , tabs : { } , tabIdList : [ ] , currentTabId : null , currentTabIndex : null , pageCount : 0 , lastTab : null , tabBarMode : ! 1 , focusList : [ ] ,
currentFocusIndex : 0 , hasFocus : ! 1 } ; this . parts = k . parts ; CKEDITOR . tools . setTimeout ( function ( ) { a . fire ( "ariaWidget" , this . parts . contents ) } , 0 , this ) ; k = { position : CKEDITOR . env . ie6Compat ? "absolute" : "fixed" , top : 0 , visibility : "hidden" } ; k [ "rtl" == j ? "right" : "left" ] = 0 ; this . parts . dialog . setStyles ( k ) ; CKEDITOR . event . call ( this ) ; this . definition = f = CKEDITOR . fire ( "dialogDefinition" , { name : b , definition : f } , a ) . definition ; if ( ! ( "removeDialogTabs" in a . _ ) && a . config . removeDialogTabs ) { k = a . config . removeDialogTabs . split ( ";" ) ; for ( j = 0 ; j <
k . length ; j ++ ) if ( m = k [ j ] . split ( ":" ) , 2 == m . length ) { var n = m [ 0 ] ; h [ n ] || ( h [ n ] = [ ] ) ; h [ n ] . push ( m [ 1 ] ) } a . _ . removeDialogTabs = h } if ( a . _ . removeDialogTabs && ( h = a . _ . removeDialogTabs [ b ] ) ) for ( j = 0 ; j < h . length ; j ++ ) f . removeContents ( h [ j ] ) ; if ( f . onLoad ) this . on ( "load" , f . onLoad ) ; if ( f . onShow ) this . on ( "show" , f . onShow ) ; if ( f . onHide ) this . on ( "hide" , f . onHide ) ; if ( f . onOk ) this . on ( "ok" , function ( b ) { a . fire ( "saveSnapshot" ) ; setTimeout ( function ( ) { a . fire ( "saveSnapshot" ) } , 0 ) ; ! 1 === f . onOk . call ( this , b ) && ( b . data . hide = ! 1 ) } ) ; if ( f . onCancel ) this . on ( "cancel" ,
function ( a ) { ! 1 === f . onCancel . call ( this , a ) && ( a . data . hide = ! 1 ) } ) ; var l = this , C = function ( a ) { var b = l . _ . contents , c = ! 1 , f ; for ( f in b ) for ( var d in b [ f ] ) if ( c = a . call ( this , b [ f ] [ d ] ) ) return } ; this . on ( "ok" , function ( a ) { C ( function ( b ) { if ( b . validate ) { var c = b . validate ( this ) , f = "string" == typeof c || ! 1 === c ; f && ( a . data . hide = ! 1 , a . stop ( ) ) ; P . call ( b , ! f , "string" == typeof c ? c : void 0 ) ; return f } } ) } , this , null , 0 ) ; this . on ( "cancel" , function ( b ) { C ( function ( c ) { if ( c . isChanged ( ) ) return confirm ( a . lang . common . confirmCancel ) || ( b . data . hide = ! 1 ) , ! 0 } ) } ,
this , null , 0 ) ; this . parts . close . on ( "click" , function ( a ) { ! 1 !== this . fire ( "cancel" , { hide : ! 0 } ) . hide && this . hide ( ) ; a . data . preventDefault ( ) } , this ) ; this . changeFocus = e ; var v = this . _ . element ; a . focusManager . add ( v , 1 ) ; this . on ( "show" , function ( ) { v . on ( "keydown" , d , this ) ; if ( CKEDITOR . env . opera || CKEDITOR . env . gecko ) v . on ( "keypress" , g , this ) } ) ; this . on ( "hide" , function ( ) { v . removeListener ( "keydown" , d ) ; ( CKEDITOR . env . opera || CKEDITOR . env . gecko ) && v . removeListener ( "keypress" , g ) ; C ( function ( a ) { Q . apply ( a ) } ) } ) ; this . on ( "iframeAdded" , function ( a ) { ( new CKEDITOR . dom . document ( a . data . iframe . $ . contentWindow . document ) ) . on ( "keydown" ,
d , this , null , 0 ) } ) ; this . on ( "show" , function ( ) { c ( ) ; if ( a . config . dialog _startupFocusTab && 1 < l . _ . pageCount ) l . _ . tabBarMode = ! 0 , l . _ . tabs [ l . _ . currentTabId ] [ 0 ] . focus ( ) ; else if ( ! this . _ . hasFocus ) if ( this . _ . currentFocusIndex = - 1 , f . onFocus ) { var b = f . onFocus . call ( this ) ; b && b . focus ( ) } else e ( 1 ) } , this , null , 4294967295 ) ; if ( CKEDITOR . env . ie6Compat ) this . on ( "load" , function ( ) { var a = this . getElement ( ) , b = a . getFirst ( ) ; b . remove ( ) ; b . appendTo ( a ) } , this ) ; U ( this ) ; V ( this ) ; ( new CKEDITOR . dom . text ( f . title , CKEDITOR . document ) ) . appendTo ( this . parts . title ) ;
for ( j = 0 ; j < f . contents . length ; j ++ ) ( h = f . contents [ j ] ) && this . addPage ( h ) ; this . parts . tabs . on ( "click" , function ( a ) { var b = a . data . getTarget ( ) ; b . hasClass ( "cke_dialog_tab" ) && ( b = b . $ . id , this . selectPage ( b . substring ( 4 , b . lastIndexOf ( "_" ) ) ) , this . _ . tabBarMode && ( this . _ . tabBarMode = ! 1 , this . _ . currentFocusIndex = - 1 , e ( 1 ) ) , a . data . preventDefault ( ) ) } , this ) ; j = [ ] ; h = CKEDITOR . dialog . _ . uiElementBuilders . hbox . build ( this , { type : "hbox" , className : "cke_dialog_footer_buttons" , widths : [ ] , children : f . buttons } , j ) . getChild ( ) ; this . parts . footer . setHtml ( j . join ( "" ) ) ;
for ( j = 0 ; j < h . length ; j ++ ) this . _ . buttons [ h [ j ] . id ] = h [ j ] } ; CKEDITOR . dialog . prototype = { destroy : function ( ) { this . hide ( ) ; this . _ . element . remove ( ) } , resize : function ( ) { return function ( a , b ) { if ( ! this . _ . contentSize || ! ( this . _ . contentSize . width == a && this . _ . contentSize . height == b ) ) CKEDITOR . dialog . fire ( "resize" , { dialog : this , width : a , height : b } , this . _ . editor ) , this . fire ( "resize" , { width : a , height : b } , this . _ . editor ) , this . parts . contents . setStyles ( { width : a + "px" , height : b + "px" } ) , "rtl" == this . _ . editor . lang . dir && this . _ . position && ( this . _ . position . x =
CKEDITOR . document . getWindow ( ) . getViewPaneSize ( ) . width - this . _ . contentSize . width - parseInt ( this . _ . element . getFirst ( ) . getStyle ( "right" ) , 10 ) ) , this . _ . contentSize = { width : a , height : b } } } ( ) , getSize : function ( ) { var a = this . _ . element . getFirst ( ) ; return { width : a . $ . offsetWidth || 0 , height : a . $ . offsetHeight || 0 } } , move : function ( a , b , c ) { var e = this . _ . element . getFirst ( ) , d = "rtl" == this . _ . editor . lang . dir , g = "fixed" == e . getComputedStyle ( "position" ) ; CKEDITOR . env . ie && e . setStyle ( "zoom" , "100%" ) ; if ( ! g || ! this . _ . position || ! ( this . _ . position . x ==
a && this . _ . position . y == b ) ) this . _ . position = { x : a , y : b } , g || ( g = CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) , a += g . x , b += g . y ) , d && ( g = this . getSize ( ) , a = CKEDITOR . document . getWindow ( ) . getViewPaneSize ( ) . width - g . width - a ) , b = { top : ( 0 < b ? b : 0 ) + "px" } , b [ d ? "right" : "left" ] = ( 0 < a ? a : 0 ) + "px" , e . setStyles ( b ) , c && ( this . _ . moved = 1 ) } , getPosition : function ( ) { return CKEDITOR . tools . extend ( { } , this . _ . position ) } , show : function ( ) { var a = this . _ . element , b = this . definition ; ! a . getParent ( ) || ! a . getParent ( ) . equals ( CKEDITOR . document . getBody ( ) ) ? a . appendTo ( CKEDITOR . document . getBody ( ) ) :
a . setStyle ( "display" , "block" ) ; if ( CKEDITOR . env . gecko && 10900 > CKEDITOR . env . version ) { var c = this . parts . dialog ; c . setStyle ( "position" , "absolute" ) ; setTimeout ( function ( ) { c . setStyle ( "position" , "fixed" ) } , 0 ) } this . resize ( this . _ . contentSize && this . _ . contentSize . width || b . width || b . minWidth , this . _ . contentSize && this . _ . contentSize . height || b . height || b . minHeight ) ; this . reset ( ) ; this . selectPage ( this . definition . contents [ 0 ] . id ) ; null === CKEDITOR . dialog . _ . currentZIndex && ( CKEDITOR . dialog . _ . currentZIndex = this . _ . editor . config . baseFloatZIndex ) ;
this . _ . element . getFirst ( ) . setStyle ( "z-index" , CKEDITOR . dialog . _ . currentZIndex += 10 ) ; null === CKEDITOR . dialog . _ . currentTop ? ( CKEDITOR . dialog . _ . currentTop = this , this . _ . parentDialog = null , J ( this . _ . editor ) ) : ( this . _ . parentDialog = CKEDITOR . dialog . _ . currentTop , this . _ . parentDialog . getElement ( ) . getFirst ( ) . $ . style . zIndex -= Math . floor ( this . _ . editor . config . baseFloatZIndex / 2 ) , CKEDITOR . dialog . _ . currentTop = this ) ; a . on ( "keydown" , M ) ; a . on ( CKEDITOR . env . opera ? "keypress" : "keyup" , N ) ; this . _ . hasFocus = ! 1 ; CKEDITOR . tools . setTimeout ( function ( ) { this . layout ( ) ;
T ( this ) ; this . parts . dialog . setStyle ( "visibility" , "" ) ; this . fireOnce ( "load" , { } ) ; CKEDITOR . ui . fire ( "ready" , this ) ; this . fire ( "show" , { } ) ; this . _ . editor . fire ( "dialogShow" , this ) ; this . _ . parentDialog || this . _ . editor . focusManager . lock ( ) ; this . foreach ( function ( a ) { a . setInitValue && a . setInitValue ( ) } ) } , 100 , this ) } , layout : function ( ) { var a = this . parts . dialog , b = this . getSize ( ) , c = CKEDITOR . document . getWindow ( ) . getViewPaneSize ( ) , e = ( c . width - b . width ) / 2 , d = ( c . height - b . height ) / 2 ; CKEDITOR . env . ie6Compat || ( b . height + ( 0 < d ? d : 0 ) > c . height ||
b . width + ( 0 < e ? e : 0 ) > c . width ? a . setStyle ( "position" , "absolute" ) : a . setStyle ( "position" , "fixed" ) ) ; this . move ( this . _ . moved ? this . _ . position . x : e , this . _ . moved ? this . _ . position . y : d ) } , foreach : function ( a ) { for ( var b in this . _ . contents ) for ( var c in this . _ . contents [ b ] ) a . call ( this , this . _ . contents [ b ] [ c ] ) ; return this } , reset : function ( ) { var a = function ( a ) { a . reset && a . reset ( 1 ) } ; return function ( ) { this . foreach ( a ) ; return this } } ( ) , setupContent : function ( ) { var a = arguments ; this . foreach ( function ( b ) { b . setup && b . setup . apply ( b , a ) } ) } ,
commitContent : function ( ) { var a = arguments ; this . foreach ( function ( b ) { CKEDITOR . env . ie && this . _ . currentFocusIndex == b . focusIndex && b . getInputElement ( ) . $ . blur ( ) ; b . commit && b . commit . apply ( b , a ) } ) } , hide : function ( ) { if ( this . parts . dialog . isVisible ( ) ) { this . fire ( "hide" , { } ) ; this . _ . editor . fire ( "dialogHide" , this ) ; this . selectPage ( this . _ . tabIdList [ 0 ] ) ; var a = this . _ . element ; a . setStyle ( "display" , "none" ) ; this . parts . dialog . setStyle ( "visibility" , "hidden" ) ; for ( X ( this ) ; CKEDITOR . dialog . _ . currentTop != this ; ) CKEDITOR . dialog . _ . currentTop . hide ( ) ;
if ( this . _ . parentDialog ) { var b = this . _ . parentDialog . getElement ( ) . getFirst ( ) ; b . setStyle ( "z-index" , parseInt ( b . $ . style . zIndex , 10 ) + Math . floor ( this . _ . editor . config . baseFloatZIndex / 2 ) ) } else K ( this . _ . editor ) ; if ( CKEDITOR . dialog . _ . currentTop = this . _ . parentDialog ) CKEDITOR . dialog . _ . currentZIndex -= 10 ; else { CKEDITOR . dialog . _ . currentZIndex = null ; a . removeListener ( "keydown" , M ) ; a . removeListener ( CKEDITOR . env . opera ? "keypress" : "keyup" , N ) ; var c = this . _ . editor ; c . focus ( ) ; setTimeout ( function ( ) { c . focusManager . unlock ( ) } , 0 ) } delete this . _ . parentDialog ;
this . foreach ( function ( a ) { a . resetInitValue && a . resetInitValue ( ) } ) } } , addPage : function ( a ) { var b = [ ] , c = a . label ? ' title="' + CKEDITOR . tools . htmlEncode ( a . label ) + '"' : "" , e = CKEDITOR . dialog . _ . uiElementBuilders . vbox . build ( this , { type : "vbox" , className : "cke_dialog_page_contents" , children : a . elements , expand : ! ! a . expand , padding : a . padding , style : a . style || "width: 100%;" } , b ) , b = CKEDITOR . dom . element . createFromHtml ( b . join ( "" ) ) ; b . setAttribute ( "role" , "tabpanel" ) ; var d = CKEDITOR . env , g = "cke_" + a . id + "_" + CKEDITOR . tools . getNextNumber ( ) ,
c = CKEDITOR . dom . element . createFromHtml ( [ '<a class="cke_dialog_tab"' , 0 < this . _ . pageCount ? " cke_last" : "cke_first" , c , a . hidden ? ' style="display:none"' : "" , ' id="' , g , '"' , d . gecko && 10900 <= d . version && ! d . hc ? "" : ' href="javascript:void(0)"' , ' tabIndex="-1" hidefocus="true" role="tab">' , a . label , "</a>" ] . join ( "" ) ) ; b . setAttribute ( "aria-labelledby" , g ) ; this . _ . tabs [ a . id ] = [ c , b ] ; this . _ . tabIdList . push ( a . id ) ; ! a . hidden && this . _ . pageCount ++ ; this . _ . lastTab = c ; this . updateStyle ( ) ; g = this . _ . contents [ a . id ] = { } ; for ( d = e . getChild ( ) ; e =
d . shift ( ) ; ) g [ e . id ] = e , "function" == typeof e . getChild && d . push . apply ( d , e . getChild ( ) ) ; b . setAttribute ( "name" , a . id ) ; b . appendTo ( this . parts . contents ) ; c . unselectable ( ) ; this . parts . tabs . append ( c ) ; a . accessKey && ( O ( this , this , "CTRL+" + a . accessKey , Y , Z ) , this . _ . accessKeyMap [ "CTRL+" + a . accessKey ] = a . id ) } , selectPage : function ( a ) { if ( this . _ . currentTabId != a && ! 0 !== this . fire ( "selectPage" , { page : a , currentPage : this . _ . currentTabId } ) ) { for ( var b in this . _ . tabs ) { var c = this . _ . tabs [ b ] [ 0 ] , e = this . _ . tabs [ b ] [ 1 ] ; b != a && ( c . removeClass ( "cke_dialog_tab_selected" ) ,
e . hide ( ) ) ; e . setAttribute ( "aria-hidden" , b != a ) } var d = this . _ . tabs [ a ] ; d [ 0 ] . addClass ( "cke_dialog_tab_selected" ) ; CKEDITOR . env . ie6Compat || CKEDITOR . env . ie7Compat ? ( q ( d [ 1 ] ) , d [ 1 ] . show ( ) , setTimeout ( function ( ) { q ( d [ 1 ] , 1 ) } , 0 ) ) : d [ 1 ] . show ( ) ; this . _ . currentTabId = a ; this . _ . currentTabIndex = CKEDITOR . tools . indexOf ( this . _ . tabIdList , a ) } } , updateStyle : function ( ) { this . parts . dialog [ ( 1 === this . _ . pageCount ? "add" : "remove" ) + "Class" ] ( "cke_single_page" ) } , hidePage : function ( a ) { var b = this . _ . tabs [ a ] && this . _ . tabs [ a ] [ 0 ] ; b && ( 1 != this . _ . pageCount &&
b . isVisible ( ) ) && ( a == this . _ . currentTabId && this . selectPage ( p . call ( this ) ) , b . hide ( ) , this . _ . pageCount -- , this . updateStyle ( ) ) } , showPage : function ( a ) { if ( a = this . _ . tabs [ a ] && this . _ . tabs [ a ] [ 0 ] ) a . show ( ) , this . _ . pageCount ++ , this . updateStyle ( ) } , getElement : function ( ) { return this . _ . element } , getName : function ( ) { return this . _ . name } , getContentElement : function ( a , b ) { var c = this . _ . contents [ a ] ; return c && c [ b ] } , getValueOf : function ( a , b ) { return this . getContentElement ( a , b ) . getValue ( ) } , setValueOf : function ( a , b , c ) { return this . getContentElement ( a ,
b ) . setValue ( c ) } , getButton : function ( a ) { return this . _ . buttons [ a ] } , click : function ( a ) { return this . _ . buttons [ a ] . click ( ) } , disableButton : function ( a ) { return this . _ . buttons [ a ] . disable ( ) } , enableButton : function ( a ) { return this . _ . buttons [ a ] . enable ( ) } , getPageCount : function ( ) { return this . _ . pageCount } , getParentEditor : function ( ) { return this . _ . editor } , getSelectedElement : function ( ) { return this . getParentEditor ( ) . getSelection ( ) . getSelectedElement ( ) } , addFocusable : function ( a , b ) { if ( "undefined" == typeof b ) b = this . _ . focusList . length ,
this . _ . focusList . push ( new H ( this , a , b ) ) ; else { this . _ . focusList . splice ( b , 0 , new H ( this , a , b ) ) ; for ( var c = b + 1 ; c < this . _ . focusList . length ; c ++ ) this . _ . focusList [ c ] . focusIndex ++ } } } ; CKEDITOR . tools . extend ( CKEDITOR . dialog , { add : function ( a , b ) { if ( ! this . _ . dialogDefinitions [ a ] || "function" == typeof b ) this . _ . dialogDefinitions [ a ] = b } , exists : function ( a ) { return ! ! this . _ . dialogDefinitions [ a ] } , getCurrent : function ( ) { return CKEDITOR . dialog . _ . currentTop } , okButton : function ( ) { var a = function ( a , c ) { c = c || { } ; return CKEDITOR . tools . extend ( { id : "ok" ,
type : "button" , label : a . lang . common . ok , "class" : "cke_dialog_ui_button_ok" , onClick : function ( a ) { a = a . data . dialog ; ! 1 !== a . fire ( "ok" , { hide : ! 0 } ) . hide && a . hide ( ) } } , c , ! 0 ) } ; a . type = "button" ; a . override = function ( b ) { return CKEDITOR . tools . extend ( function ( c ) { return a ( c , b ) } , { type : "button" } , ! 0 ) } ; return a } ( ) , cancelButton : function ( ) { var a = function ( a , c ) { c = c || { } ; return CKEDITOR . tools . extend ( { id : "cancel" , type : "button" , label : a . lang . common . cancel , "class" : "cke_dialog_ui_button_cancel" , onClick : function ( a ) { a = a . data . dialog ; ! 1 !==
a . fire ( "cancel" , { hide : ! 0 } ) . hide && a . hide ( ) } } , c , ! 0 ) } ; a . type = "button" ; a . override = function ( b ) { return CKEDITOR . tools . extend ( function ( c ) { return a ( c , b ) } , { type : "button" } , ! 0 ) } ; return a } ( ) , addUIElement : function ( a , b ) { this . _ . uiElementBuilders [ a ] = b } } ) ; CKEDITOR . dialog . _ = { uiElementBuilders : { } , dialogDefinitions : { } , currentTop : null , currentZIndex : null } ; CKEDITOR . event . implementOn ( CKEDITOR . dialog ) ; CKEDITOR . event . implementOn ( CKEDITOR . dialog . prototype ) ; var W = { resizable : CKEDITOR . DIALOG _RESIZE _BOTH , minWidth : 600 , minHeight : 400 ,
buttons : [ CKEDITOR . dialog . okButton , CKEDITOR . dialog . cancelButton ] } , z = function ( a , b , c ) { for ( var e = 0 , d ; d = a [ e ] ; e ++ ) if ( d . id == b || c && d [ c ] && ( d = z ( d [ c ] , b , c ) ) ) return d ; return null } , A = function ( a , b , c , e , d ) { if ( c ) { for ( var g = 0 , f ; f = a [ g ] ; g ++ ) { if ( f . id == c ) return a . splice ( g , 0 , b ) , b ; if ( e && f [ e ] && ( f = A ( f [ e ] , b , c , e , ! 0 ) ) ) return f } if ( d ) return null } a . push ( b ) ; return b } , B = function ( a , b , c ) { for ( var e = 0 , d ; d = a [ e ] ; e ++ ) { if ( d . id == b ) return a . splice ( e , 1 ) ; if ( c && d [ c ] && ( d = B ( d [ c ] , b , c ) ) ) return d } return null } , L = function ( a , b ) { this . dialog = a ; for ( var c =
b . contents , e = 0 , d ; d = c [ e ] ; e ++ ) c [ e ] = d && new I ( a , d ) ; CKEDITOR . tools . extend ( this , b ) } ; L . prototype = { getContents : function ( a ) { return z ( this . contents , a ) } , getButton : function ( a ) { return z ( this . buttons , a ) } , addContents : function ( a , b ) { return A ( this . contents , a , b ) } , addButton : function ( a , b ) { return A ( this . buttons , a , b ) } , removeContents : function ( a ) { B ( this . contents , a ) } , removeButton : function ( a ) { B ( this . buttons , a ) } } ; I . prototype = { get : function ( a ) { return z ( this . elements , a , "children" ) } , add : function ( a , b ) { return A ( this . elements , a , b ,
"children" ) } , remove : function ( a ) { B ( this . elements , a , "children" ) } } ; var G , w = { } , r , t = { } , M = function ( a ) { var b = a . data . $ . ctrlKey || a . data . $ . metaKey , c = a . data . $ . altKey , e = a . data . $ . shiftKey , d = String . fromCharCode ( a . data . $ . keyCode ) ; if ( ( b = t [ ( b ? "CTRL+" : "" ) + ( c ? "ALT+" : "" ) + ( e ? "SHIFT+" : "" ) + d ] ) && b . length ) b = b [ b . length - 1 ] , b . keydown && b . keydown . call ( b . uiElement , b . dialog , b . key ) , a . data . preventDefault ( ) } , N = function ( a ) { var b = a . data . $ . ctrlKey || a . data . $ . metaKey , c = a . data . $ . altKey , e = a . data . $ . shiftKey , d = String . fromCharCode ( a . data . $ . keyCode ) ;
if ( ( b = t [ ( b ? "CTRL+" : "" ) + ( c ? "ALT+" : "" ) + ( e ? "SHIFT+" : "" ) + d ] ) && b . length ) b = b [ b . length - 1 ] , b . keyup && ( b . keyup . call ( b . uiElement , b . dialog , b . key ) , a . data . preventDefault ( ) ) } , O = function ( a , b , c , e , d ) { ( t [ c ] || ( t [ c ] = [ ] ) ) . push ( { uiElement : a , dialog : b , key : c , keyup : d || a . accessKeyUp , keydown : e || a . accessKeyDown } ) } , X = function ( a ) { for ( var b in t ) { for ( var c = t [ b ] , e = c . length - 1 ; 0 <= e ; e -- ) ( c [ e ] . dialog == a || c [ e ] . uiElement == a ) && c . splice ( e , 1 ) ; 0 === c . length && delete t [ b ] } } , Z = function ( a , b ) { a . _ . accessKeyMap [ b ] && a . selectPage ( a . _ . accessKeyMap [ b ] ) } ,
Y = function ( ) { } ; ( function ( ) { CKEDITOR . ui . dialog = { uiElement : function ( a , b , c , e , d , g , f ) { if ( ! ( 4 > arguments . length ) ) { var k = ( e . call ? e ( b ) : e ) || "div" , m = [ "<" , k , " " ] , j = ( d && d . call ? d ( b ) : d ) || { } , h = ( g && g . call ? g ( b ) : g ) || { } , o = ( f && f . call ? f . call ( this , a , b ) : f ) || "" , i = this . domId = h . id || CKEDITOR . tools . getNextId ( ) + "_uiElement" ; this . id = b . id ; h . id = i ; var n = { } ; b . type && ( n [ "cke_dialog_ui_" + b . type ] = 1 ) ; b . className && ( n [ b . className ] = 1 ) ; b . disabled && ( n . cke _disabled = 1 ) ; for ( var l = h [ "class" ] && h [ "class" ] . split ? h [ "class" ] . split ( " " ) : [ ] , i = 0 ; i < l . length ; i ++ ) l [ i ] &&
( n [ l [ i ] ] = 1 ) ; l = [ ] ; for ( i in n ) l . push ( i ) ; h [ "class" ] = l . join ( " " ) ; b . title && ( h . title = b . title ) ; n = ( b . style || "" ) . split ( ";" ) ; b . align && ( l = b . align , j [ "margin-left" ] = "left" == l ? 0 : "auto" , j [ "margin-right" ] = "right" == l ? 0 : "auto" ) ; for ( i in j ) n . push ( i + ":" + j [ i ] ) ; b . hidden && n . push ( "display:none" ) ; for ( i = n . length - 1 ; 0 <= i ; i -- ) "" === n [ i ] && n . splice ( i , 1 ) ; 0 < n . length && ( h . style = ( h . style ? h . style + "; " : "" ) + n . join ( "; " ) ) ; for ( i in h ) m . push ( i + '="' + CKEDITOR . tools . htmlEncode ( h [ i ] ) + '" ' ) ; m . push ( ">" , o , "</" , k , ">" ) ; c . push ( m . join ( "" ) ) ; ( this . _ ||
( this . _ = { } ) ) . dialog = a ; "boolean" == typeof b . isChanged && ( this . isChanged = function ( ) { return b . isChanged } ) ; "function" == typeof b . isChanged && ( this . isChanged = b . isChanged ) ; "function" == typeof b . setValue && ( this . setValue = CKEDITOR . tools . override ( this . setValue , function ( a ) { return function ( c ) { a . call ( this , b . setValue . call ( this , c ) ) } } ) ) ; "function" == typeof b . getValue && ( this . getValue = CKEDITOR . tools . override ( this . getValue , function ( a ) { return function ( ) { return b . getValue . call ( this , a . call ( this ) ) } } ) ) ; CKEDITOR . event . implementOn ( this ) ;
this . registerEvents ( b ) ; this . accessKeyUp && ( this . accessKeyDown && b . accessKey ) && O ( this , a , "CTRL+" + b . accessKey ) ; var p = this ; a . on ( "load" , function ( ) { var b = p . getInputElement ( ) ; if ( b ) { var c = p . type in { checkbox : 1 , ratio : 1 } && CKEDITOR . env . ie && CKEDITOR . env . version < 8 ? "cke_dialog_ui_focused" : "" ; b . on ( "focus" , function ( ) { a . _ . tabBarMode = false ; a . _ . hasFocus = true ; p . fire ( "focus" ) ; c && this . addClass ( c ) } ) ; b . on ( "blur" , function ( ) { p . fire ( "blur" ) ; c && this . removeClass ( c ) } ) } } ) ; this . keyboardFocusable && ( this . tabIndex = b . tabIndex || 0 , this . focusIndex =
a . _ . focusList . push ( this ) - 1 , this . on ( "focus" , function ( ) { a . _ . currentFocusIndex = p . focusIndex } ) ) ; CKEDITOR . tools . extend ( this , b ) } } , hbox : function ( a , b , c , e , d ) { if ( ! ( 4 > arguments . length ) ) { this . _ || ( this . _ = { } ) ; var g = this . _ . children = b , f = d && d . widths || null , k = d && d . height || null , m , j = { role : "presentation" } ; d && d . align && ( j . align = d . align ) ; CKEDITOR . ui . dialog . uiElement . call ( this , a , d || { type : "hbox" } , e , "table" , { } , j , function ( ) { var a = [ '<tbody><tr class="cke_dialog_ui_hbox">' ] ; for ( m = 0 ; m < c . length ; m ++ ) { var b = "cke_dialog_ui_hbox_child" ,
e = [ ] ; 0 === m && ( b = "cke_dialog_ui_hbox_first" ) ; m == c . length - 1 && ( b = "cke_dialog_ui_hbox_last" ) ; a . push ( '<td class="' , b , '" role="presentation" ' ) ; f ? f [ m ] && e . push ( "width:" + s ( f [ m ] ) ) : e . push ( "width:" + Math . floor ( 100 / c . length ) + "%" ) ; k && e . push ( "height:" + s ( k ) ) ; d && void 0 != d . padding && e . push ( "padding:" + s ( d . padding ) ) ; CKEDITOR . env . ie && ( CKEDITOR . env . quirks && g [ m ] . align ) && e . push ( "text-align:" + g [ m ] . align ) ; 0 < e . length && a . push ( 'style="' + e . join ( "; " ) + '" ' ) ; a . push ( ">" , c [ m ] , "</td>" ) } a . push ( "</tr></tbody>" ) ; return a . join ( "" ) } ) } } , vbox : function ( a ,
b , c , e , d ) { if ( ! ( 3 > arguments . length ) ) { this . _ || ( this . _ = { } ) ; var g = this . _ . children = b , f = d && d . width || null , k = d && d . heights || null ; CKEDITOR . ui . dialog . uiElement . call ( this , a , d || { type : "vbox" } , e , "div" , null , { role : "presentation" } , function ( ) { var b = [ '<table role="presentation" cellspacing="0" border="0" ' ] ; b . push ( 'style="' ) ; d && d . expand && b . push ( "height:100%;" ) ; b . push ( "width:" + s ( f || "100%" ) , ";" ) ; b . push ( '"' ) ; b . push ( 'align="' , CKEDITOR . tools . htmlEncode ( d && d . align || ( "ltr" == a . getParentEditor ( ) . lang . dir ? "left" : "right" ) ) , '" ' ) ;
b . push ( "><tbody>" ) ; for ( var e = 0 ; e < c . length ; e ++ ) { var h = [ ] ; b . push ( '<tr><td role="presentation" ' ) ; f && h . push ( "width:" + s ( f || "100%" ) ) ; k ? h . push ( "height:" + s ( k [ e ] ) ) : d && d . expand && h . push ( "height:" + Math . floor ( 100 / c . length ) + "%" ) ; d && void 0 != d . padding && h . push ( "padding:" + s ( d . padding ) ) ; CKEDITOR . env . ie && ( CKEDITOR . env . quirks && g [ e ] . align ) && h . push ( "text-align:" + g [ e ] . align ) ; 0 < h . length && b . push ( 'style="' , h . join ( "; " ) , '" ' ) ; b . push ( ' class="cke_dialog_ui_vbox_child">' , c [ e ] , "</td></tr>" ) } b . push ( "</tbody></table>" ) ; return b . join ( "" ) } ) } } } } ) ( ) ;
CKEDITOR . ui . dialog . uiElement . prototype = { getElement : function ( ) { return CKEDITOR . document . getById ( this . domId ) } , getInputElement : function ( ) { return this . getElement ( ) } , getDialog : function ( ) { return this . _ . dialog } , setValue : function ( a , b ) { this . getInputElement ( ) . setValue ( a ) ; ! b && this . fire ( "change" , { value : a } ) ; return this } , getValue : function ( ) { return this . getInputElement ( ) . getValue ( ) } , isChanged : function ( ) { return ! 1 } , selectParentTab : function ( ) { for ( var a = this . getInputElement ( ) ; ( a = a . getParent ( ) ) && - 1 == a . $ . className . search ( "cke_dialog_page_contents" ) ; ) ;
if ( ! a ) return this ; a = a . getAttribute ( "name" ) ; this . _ . dialog . _ . currentTabId != a && this . _ . dialog . selectPage ( a ) ; return this } , focus : function ( ) { this . selectParentTab ( ) . getInputElement ( ) . focus ( ) ; return this } , registerEvents : function ( a ) { var b = /^on([A-Z]\w+)/ , c , e = function ( a , b , c , d ) { b . on ( "load" , function ( ) { a . getInputElement ( ) . on ( c , d , a ) } ) } , d ; for ( d in a ) if ( c = d . match ( b ) ) this . eventProcessors [ d ] ? this . eventProcessors [ d ] . call ( this , this . _ . dialog , a [ d ] ) : e ( this , this . _ . dialog , c [ 1 ] . toLowerCase ( ) , a [ d ] ) ; return this } , eventProcessors : { onLoad : function ( a ,
b ) { a . on ( "load" , b , this ) } , onShow : function ( a , b ) { a . on ( "show" , b , this ) } , onHide : function ( a , b ) { a . on ( "hide" , b , this ) } } , accessKeyDown : function ( ) { this . focus ( ) } , accessKeyUp : function ( ) { } , disable : function ( ) { var a = this . getElement ( ) ; this . getInputElement ( ) . setAttribute ( "disabled" , "true" ) ; a . addClass ( "cke_disabled" ) } , enable : function ( ) { var a = this . getElement ( ) ; this . getInputElement ( ) . removeAttribute ( "disabled" ) ; a . removeClass ( "cke_disabled" ) } , isEnabled : function ( ) { return ! this . getElement ( ) . hasClass ( "cke_disabled" ) } , isVisible : function ( ) { return this . getInputElement ( ) . isVisible ( ) } ,
isFocusable : function ( ) { return ! this . isEnabled ( ) || ! this . isVisible ( ) ? ! 1 : ! 0 } } ; CKEDITOR . ui . dialog . hbox . prototype = CKEDITOR . tools . extend ( new CKEDITOR . ui . dialog . uiElement , { getChild : function ( a ) { if ( 1 > arguments . length ) return this . _ . children . concat ( ) ; a . splice || ( a = [ a ] ) ; return 2 > a . length ? this . _ . children [ a [ 0 ] ] : this . _ . children [ a [ 0 ] ] && this . _ . children [ a [ 0 ] ] . getChild ? this . _ . children [ a [ 0 ] ] . getChild ( a . slice ( 1 , a . length ) ) : null } } , ! 0 ) ; CKEDITOR . ui . dialog . vbox . prototype = new CKEDITOR . ui . dialog . hbox ; ( function ( ) { var a = { build : function ( a ,
c , e ) { for ( var d = c . children , g , f = [ ] , k = [ ] , m = 0 ; m < d . length && ( g = d [ m ] ) ; m ++ ) { var j = [ ] ; f . push ( j ) ; k . push ( CKEDITOR . dialog . _ . uiElementBuilders [ g . type ] . build ( a , g , j ) ) } return new CKEDITOR . ui . dialog [ c . type ] ( a , k , f , e , c ) } } ; CKEDITOR . dialog . addUIElement ( "hbox" , a ) ; CKEDITOR . dialog . addUIElement ( "vbox" , a ) } ) ( ) ; CKEDITOR . dialogCommand = function ( a , b ) { this . dialogName = a ; CKEDITOR . tools . extend ( this , b , ! 0 ) } ; CKEDITOR . dialogCommand . prototype = { exec : function ( a ) { CKEDITOR . env . opera ? CKEDITOR . tools . setTimeout ( function ( ) { a . openDialog ( this . dialogName ) } ,
0 , this ) : a . openDialog ( this . dialogName ) } , canUndo : ! 1 , editorFocus : CKEDITOR . env . ie || CKEDITOR . env . webkit } ; ( function ( ) { var a = /^([a]|[^a])+$/ , b = /^\d*$/ , c = /^\d*(?:\.\d+)?$/ , e = /^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/ , d = /^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i , g = /^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/ ; CKEDITOR . VALIDATE _OR = 1 ; CKEDITOR . VALIDATE _AND = 2 ; CKEDITOR . dialog . validate = { functions : function ( ) { var a = arguments ; return function ( ) { var b = this && this . getValue ? this . getValue ( ) : a [ 0 ] , c = void 0 , d = CKEDITOR . VALIDATE _AND ,
e = [ ] , g ; for ( g = 0 ; g < a . length ; g ++ ) if ( "function" == typeof a [ g ] ) e . push ( a [ g ] ) ; else break ; g < a . length && "string" == typeof a [ g ] && ( c = a [ g ] , g ++ ) ; g < a . length && "number" == typeof a [ g ] && ( d = a [ g ] ) ; var i = d == CKEDITOR . VALIDATE _AND ? ! 0 : ! 1 ; for ( g = 0 ; g < e . length ; g ++ ) i = d == CKEDITOR . VALIDATE _AND ? i && e [ g ] ( b ) : i || e [ g ] ( b ) ; return ! i ? c : ! 0 } } , regex : function ( a , b ) { return function ( c ) { c = this && this . getValue ? this . getValue ( ) : c ; return ! a . test ( c ) ? b : ! 0 } } , notEmpty : function ( b ) { return this . regex ( a , b ) } , integer : function ( a ) { return this . regex ( b , a ) } , number : function ( a ) { return this . regex ( c ,
a ) } , cssLength : function ( a ) { return this . functions ( function ( a ) { return d . test ( CKEDITOR . tools . trim ( a ) ) } , a ) } , htmlLength : function ( a ) { return this . functions ( function ( a ) { return e . test ( CKEDITOR . tools . trim ( a ) ) } , a ) } , inlineStyle : function ( a ) { return this . functions ( function ( a ) { return g . test ( CKEDITOR . tools . trim ( a ) ) } , a ) } , equals : function ( a , b ) { return this . functions ( function ( b ) { return b == a } , b ) } , notEqual : function ( a , b ) { return this . functions ( function ( b ) { return b != a } , b ) } } ; CKEDITOR . on ( "instanceDestroyed" , function ( a ) { if ( CKEDITOR . tools . isEmpty ( CKEDITOR . instances ) ) { for ( var b ; b =
CKEDITOR . dialog . _ . currentTop ; ) b . hide ( ) ; for ( var c in w ) w [ c ] . remove ( ) ; w = { } } var a = a . editor . _ . storedDialogs , d ; for ( d in a ) a [ d ] . destroy ( ) } ) } ) ( ) ; CKEDITOR . tools . extend ( CKEDITOR . editor . prototype , { openDialog : function ( a , b ) { var c = null , e = CKEDITOR . dialog . _ . dialogDefinitions [ a ] ; null === CKEDITOR . dialog . _ . currentTop && J ( this ) ; if ( "function" == typeof e ) c = this . _ . storedDialogs || ( this . _ . storedDialogs = { } ) , c = c [ a ] || ( c [ a ] = new CKEDITOR . dialog ( this , a ) ) , b && b . call ( c , c ) , c . show ( ) ; else { if ( "failed" == e ) throw K ( this ) , Error ( '[CKEDITOR.dialog.openDialog] Dialog "' +
a + '" failed when loading definition.' ) ; "string" == typeof e && CKEDITOR . scriptLoader . load ( CKEDITOR . getUrl ( e ) , function ( ) { "function" != typeof CKEDITOR . dialog . _ . dialogDefinitions [ a ] && ( CKEDITOR . dialog . _ . dialogDefinitions [ a ] = "failed" ) ; this . openDialog ( a , b ) } , this , 0 , 1 ) } CKEDITOR . skin . loadPart ( "dialog" ) ; return c } } ) } ) ( ) ;
CKEDITOR . plugins . add ( "dialog" , { requires : "dialogui" , init : function ( p ) { p . on ( "contentDom" , function ( ) { var u = p . editable ( ) ; u . attachListener ( u , "dblclick" , function ( q ) { if ( p . readOnly ) return ! 1 ; q = { element : q . data . getTarget ( ) } ; p . fire ( "doubleclick" , q ) ; q . dialog && p . openDialog ( q . dialog ) ; return 1 } ) } ) } } ) ; CKEDITOR . plugins . add ( "about" , { requires : "dialog" , init : function ( a ) { var b = a . addCommand ( "about" , new CKEDITOR . dialogCommand ( "about" ) ) ; b . modes = { wysiwyg : 1 , source : 1 } ; b . canUndo = ! 1 ; b . readOnly = 1 ; a . ui . addButton && a . ui . addButton ( "About" , { label : a . lang . about . title , command : "about" , toolbar : "about" } ) ; CKEDITOR . dialog . add ( "about" , this . path + "dialogs/about.js" ) } } ) ; CKEDITOR . plugins . add ( "basicstyles" , { init : function ( c ) { var f = 0 , a = function ( a , d , b , e ) { e && ( e = new CKEDITOR . style ( e ) , c . attachStyleStateChange ( e , function ( a ) { ! c . readOnly && c . getCommand ( b ) . setState ( a ) } ) , c . addCommand ( b , new CKEDITOR . styleCommand ( e ) ) , c . ui . addButton && c . ui . addButton ( a , { label : d , command : b , toolbar : "basicstyles," + ( f += 10 ) } ) ) } , d = c . config , b = c . lang . basicstyles ; a ( "Bold" , b . bold , "bold" , d . coreStyles _bold ) ; a ( "Italic" , b . italic , "italic" , d . coreStyles _italic ) ; a ( "Underline" , b . underline , "underline" , d . coreStyles _underline ) ;
a ( "Strike" , b . strike , "strike" , d . coreStyles _strike ) ; a ( "Subscript" , b . subscript , "subscript" , d . coreStyles _subscript ) ; a ( "Superscript" , b . superscript , "superscript" , d . coreStyles _superscript ) ; c . setKeystroke ( [ [ CKEDITOR . CTRL + 66 , "bold" ] , [ CKEDITOR . CTRL + 73 , "italic" ] , [ CKEDITOR . CTRL + 85 , "underline" ] ] ) } } ) ; CKEDITOR . config . coreStyles _bold = { element : "strong" , overrides : "b" } ; CKEDITOR . config . coreStyles _italic = { element : "em" , overrides : "i" } ; CKEDITOR . config . coreStyles _underline = { element : "u" } ;
CKEDITOR . config . coreStyles _strike = { element : "strike" } ; CKEDITOR . config . coreStyles _subscript = { element : "sub" } ; CKEDITOR . config . coreStyles _superscript = { element : "sup" } ; ( function ( ) { function v ( b ) { function a ( ) { var e = b . editable ( ) ; e . on ( q , function ( b ) { ( ! CKEDITOR . env . ie || ! m ) && u ( b ) } ) ; CKEDITOR . env . ie && e . on ( "paste" , function ( e ) { r || ( f ( ) , e . data . preventDefault ( ) , u ( e ) , l ( "paste" ) || b . openDialog ( "paste" ) ) } ) ; CKEDITOR . env . ie && ( e . on ( "contextmenu" , h , null , null , 0 ) , e . on ( "beforepaste" , function ( b ) { b . data && ! b . data . $ . ctrlKey && h ( ) } , null , null , 0 ) ) ; e . on ( "beforecut" , function ( ) { ! m && j ( b ) } ) ; e . on ( "mouseup" , function ( ) { setTimeout ( function ( ) { s ( ) } , 0 ) } ) ; e . on ( "keyup" , s ) } function d ( e ) { return { type : e , canUndo : "cut" ==
e , startDisabled : ! 0 , exec : function ( ) { "cut" == this . type && j ( ) ; var e ; var a = this . type ; if ( CKEDITOR . env . ie ) e = l ( a ) ; else try { e = b . document . $ . execCommand ( a , ! 1 , null ) } catch ( c ) { e = ! 1 } e || alert ( b . lang . clipboard [ this . type + "Error" ] ) ; return e } } } function c ( ) { return { canUndo : ! 1 , async : ! 0 , exec : function ( b , a ) { var c = function ( a , c ) { a && g ( a . type , a . dataValue , ! ! c ) ; b . fire ( "afterCommandExec" , { name : "paste" , command : d , returnValue : ! ! a } ) } , d = this ; "string" == typeof a ? c ( { type : "auto" , dataValue : a } , 1 ) : b . getClipboardData ( c ) } } } function f ( ) { r = 1 ; setTimeout ( function ( ) { r =
0 } , 100 ) } function h ( ) { m = 1 ; setTimeout ( function ( ) { m = 0 } , 10 ) } function l ( e ) { var a = b . document , c = a . getBody ( ) , d = ! 1 , j = function ( ) { d = ! 0 } ; c . on ( e , j ) ; ( 7 < CKEDITOR . env . version ? a . $ : a . $ . selection . createRange ( ) ) . execCommand ( e ) ; c . removeListener ( e , j ) ; return d } function g ( e , a , c ) { e = { type : e } ; if ( c && ! b . fire ( "beforePaste" , e ) || ! a ) return ! 1 ; e . dataValue = a ; return b . fire ( "paste" , e ) } function j ( ) { if ( CKEDITOR . env . ie && ! CKEDITOR . env . quirks ) { var e = b . getSelection ( ) , a , c , d ; if ( e . getType ( ) == CKEDITOR . SELECTION _ELEMENT && ( a = e . getSelectedElement ( ) ) ) c =
e . getRanges ( ) [ 0 ] , d = b . document . createText ( "" ) , d . insertBefore ( a ) , c . setStartBefore ( d ) , c . setEndAfter ( a ) , e . selectRanges ( [ c ] ) , setTimeout ( function ( ) { a . getParent ( ) && ( d . remove ( ) , e . selectElement ( a ) ) } , 0 ) } } function k ( a , c ) { var d = b . document , j = b . editable ( ) , k = function ( b ) { b . cancel ( ) } , f = CKEDITOR . env . gecko && 10902 >= CKEDITOR . env . version ; if ( ! d . getById ( "cke_pastebin" ) ) { var h = b . getSelection ( ) , o = h . createBookmarks ( ) , i = new CKEDITOR . dom . element ( j . is ( "body" ) && ! CKEDITOR . env . ie && ! CKEDITOR . env . opera ? "body" : "div" , d ) ; i . setAttribute ( "id" ,
"cke_pastebin" ) ; CKEDITOR . env . opera && i . appendBogus ( ) ; var g = 0 , d = d . getWindow ( ) ; f ? ( i . insertAfter ( o [ 0 ] . startNode ) , i . setStyle ( "display" , "inline" ) ) : ( CKEDITOR . env . webkit ? ( j . append ( i ) , i . addClass ( "cke_editable" ) , g = ( j . is ( "body" ) ? j : CKEDITOR . dom . element . get ( i . $ . offsetParent ) ) . getDocumentPosition ( ) . y ) : j . getAscendant ( CKEDITOR . env . ie || CKEDITOR . env . opera ? "body" : "html" , 1 ) . append ( i ) , i . setStyles ( { position : "absolute" , top : d . getScrollPosition ( ) . y - g + 10 + "px" , width : "1px" , height : Math . max ( 1 , d . getViewPaneSize ( ) . height - 20 ) + "px" ,
overflow : "hidden" , margin : 0 , padding : 0 } ) ) ; ( f = i . getParent ( ) . isReadOnly ( ) ) ? ( i . setOpacity ( 0 ) , i . setAttribute ( "contenteditable" , ! 0 ) ) : i . setStyle ( "ltr" == b . config . contentsLangDirection ? "left" : "right" , "-1000px" ) ; b . on ( "selectionChange" , k , null , null , 0 ) ; f && i . focus ( ) ; f = new CKEDITOR . dom . range ( i ) ; f . selectNodeContents ( i ) ; var l = f . select ( ) ; if ( CKEDITOR . env . ie ) var m = j . once ( "blur" , function ( ) { b . lockSelection ( l ) } ) ; var n = CKEDITOR . document . getWindow ( ) . getScrollPosition ( ) . y ; setTimeout ( function ( ) { if ( CKEDITOR . env . webkit || CKEDITOR . env . opera ) CKEDITOR . document [ CKEDITOR . env . webkit ?
"getBody" : "getDocumentElement" ] ( ) . $ . scrollTop = n ; m && m . removeListener ( ) ; CKEDITOR . env . ie && j . focus ( ) ; h . selectBookmarks ( o ) ; i . remove ( ) ; var a ; if ( CKEDITOR . env . webkit && ( a = i . getFirst ( ) ) && a . is && a . hasClass ( "Apple-style-span" ) ) i = a ; b . removeListener ( "selectionChange" , k ) ; c ( i . getHtml ( ) ) } , 0 ) } } function o ( ) { if ( CKEDITOR . env . ie ) { b . focus ( ) ; f ( ) ; var a = b . focusManager ; a . lock ( ) ; if ( b . editable ( ) . fire ( q ) && ! l ( "paste" ) ) return a . unlock ( ) , ! 1 ; a . unlock ( ) } else try { if ( b . editable ( ) . fire ( q ) && ! b . document . $ . execCommand ( "Paste" , ! 1 , null ) ) throw 0 ;
} catch ( c ) { return ! 1 } return ! 0 } function p ( a ) { if ( "wysiwyg" == b . mode ) switch ( a . data . keyCode ) { case CKEDITOR . CTRL + 86 : case CKEDITOR . SHIFT + 45 : a = b . editable ( ) ; f ( ) ; ! CKEDITOR . env . ie && a . fire ( "beforepaste" ) ; ( CKEDITOR . env . opera || CKEDITOR . env . gecko && 10900 > CKEDITOR . env . version ) && a . fire ( "paste" ) ; break ; case CKEDITOR . CTRL + 88 : case CKEDITOR . SHIFT + 46 : b . fire ( "saveSnapshot" ) , setTimeout ( function ( ) { b . fire ( "saveSnapshot" ) } , 0 ) } } function u ( a ) { var c = { type : "auto" } , d = b . fire ( "beforePaste" , c ) ; k ( a , function ( b ) { b = b . replace ( /<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig ,
"" ) ; d && g ( c . type , b , 0 , 1 ) } ) } function s ( ) { if ( "wysiwyg" == b . mode ) { var a = n ( "Paste" ) ; b . getCommand ( "cut" ) . setState ( n ( "Cut" ) ) ; b . getCommand ( "copy" ) . setState ( n ( "Copy" ) ) ; b . getCommand ( "paste" ) . setState ( a ) ; b . fire ( "pasteState" , a ) } } function n ( a ) { var c ; if ( t && a in { Paste : 1 , Cut : 1 } ) return CKEDITOR . TRISTATE _DISABLED ; if ( "Paste" == a ) { CKEDITOR . env . ie && ( m = 1 ) ; try { c = b . document . $ . queryCommandEnabled ( a ) || CKEDITOR . env . webkit } catch ( d ) { } m = 0 } else a = b . getSelection ( ) , c = a . getRanges ( ) , c = a . type != CKEDITOR . SELECTION _NONE && ! ( 1 == c . length && c [ 0 ] . collapsed ) ;
return c ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED } var m = 0 , r = 0 , t = 0 , q = CKEDITOR . env . ie ? "beforepaste" : "paste" ; ( function ( ) { b . on ( "key" , p ) ; b . on ( "contentDom" , a ) ; b . on ( "selectionChange" , function ( b ) { t = b . data . selection . getRanges ( ) [ 0 ] . checkReadOnly ( ) ; s ( ) } ) ; b . contextMenu && b . contextMenu . addListener ( function ( b , a ) { t = a . getRanges ( ) [ 0 ] . checkReadOnly ( ) ; return { cut : n ( "Cut" ) , copy : n ( "Copy" ) , paste : n ( "Paste" ) } } ) } ) ( ) ; ( function ( ) { function a ( c , d , j , e , f ) { var k = b . lang . clipboard [ d ] ; b . addCommand ( d , j ) ; b . ui . addButton && b . ui . addButton ( c ,
{ label : k , command : d , toolbar : "clipboard," + e } ) ; b . addMenuItems && b . addMenuItem ( d , { label : k , command : d , group : "clipboard" , order : f } ) } a ( "Cut" , "cut" , d ( "cut" ) , 10 , 1 ) ; a ( "Copy" , "copy" , d ( "copy" ) , 20 , 4 ) ; a ( "Paste" , "paste" , c ( ) , 30 , 8 ) } ) ( ) ; b . getClipboardData = function ( a , c ) { function d ( a ) { a . removeListener ( ) ; a . cancel ( ) ; c ( a . data ) } function j ( a ) { a . removeListener ( ) ; a . cancel ( ) ; g = ! 0 ; c ( { type : h , dataValue : a . data } ) } function f ( ) { this . customTitle = a && a . title } var k = ! 1 , h = "auto" , g = ! 1 ; c || ( c = a , a = null ) ; b . on ( "paste" , d , null , null , 0 ) ; b . on ( "beforePaste" ,
function ( a ) { a . removeListener ( ) ; k = true ; h = a . data . type } , null , null , 1E3 ) ; ! 1 === o ( ) && ( b . removeListener ( "paste" , d ) , k && b . fire ( "pasteDialog" , f ) ? ( b . on ( "pasteDialogCommit" , j ) , b . on ( "dialogHide" , function ( a ) { a . removeListener ( ) ; a . data . removeListener ( "pasteDialogCommit" , j ) ; setTimeout ( function ( ) { g || c ( null ) } , 10 ) } ) ) : c ( null ) ) } } function w ( b ) { if ( CKEDITOR . env . webkit ) { if ( ! b . match ( /^[^<]*$/g ) && ! b . match ( /^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi ) ) return "html" } else if ( CKEDITOR . env . ie ) { if ( ! b . match ( /^([^<]|<br( ?\/)?>)*$/gi ) &&
! b . match ( /^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi ) ) return "html" } else if ( CKEDITOR . env . gecko || CKEDITOR . env . opera ) { if ( ! b . match ( /^([^<]|<br( ?\/)?>)*$/gi ) ) return "html" } else return "html" ; return "htmlifiedtext" } function x ( b , a ) { function d ( a ) { return CKEDITOR . tools . repeat ( "</p><p>" , ~ ~ ( a / 2 ) ) + ( 1 == a % 2 ? "<br>" : "" ) } a = a . replace ( /\s+/g , " " ) . replace ( /> +</g , "><" ) . replace ( /<br ?\/>/gi , "<br>" ) ; a = a . replace ( /<\/?[A-Z]+>/g , function ( a ) { return a . toLowerCase ( ) } ) ; if ( a . match ( /^[^<]$/ ) ) return a ; CKEDITOR . env . webkit && - 1 < a . indexOf ( "<div>" ) &&
( a = a . replace ( /^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g , "<br>" ) . replace ( /^(<div>(<br>|)<\/div>){2}(?!$)/g , "<div></div>" ) , a . match ( /<div>(<br>|)<\/div>/ ) && ( a = "<p>" + a . replace ( /(<div>(<br>|)<\/div>)+/g , function ( a ) { return d ( a . split ( "</div><div>" ) . length + 1 ) } ) + "</p>" ) , a = a . replace ( /<\/div><div>/g , "<br>" ) , a = a . replace ( /<\/?div>/g , "" ) ) ; if ( ( CKEDITOR . env . gecko || CKEDITOR . env . opera ) && b . enterMode != CKEDITOR . ENTER _BR ) CKEDITOR . env . gecko && ( a = a . replace ( /^<br><br>$/ , "<br>" ) ) , - 1 < a . indexOf ( "<br><br>" ) && ( a = "<p>" +
a . replace ( /(<br>){2,}/g , function ( a ) { return d ( a . length / 4 ) } ) + "</p>" ) ; return p ( b , a ) } function y ( ) { var b = new CKEDITOR . htmlParser . filter , a = { blockquote : 1 , dl : 1 , fieldset : 1 , h1 : 1 , h2 : 1 , h3 : 1 , h4 : 1 , h5 : 1 , h6 : 1 , ol : 1 , p : 1 , table : 1 , ul : 1 } , d = CKEDITOR . tools . extend ( { br : 0 } , CKEDITOR . dtd . $inline ) , c = { p : 1 , br : 1 , "cke:br" : 1 } , f = CKEDITOR . dtd , h = CKEDITOR . tools . extend ( { area : 1 , basefont : 1 , embed : 1 , iframe : 1 , map : 1 , object : 1 , param : 1 } , CKEDITOR . dtd . $nonBodyContent , CKEDITOR . dtd . $cdata ) , l = function ( a ) { delete a . name ; a . add ( new CKEDITOR . htmlParser . text ( " " ) ) } ,
g = function ( a ) { for ( var b = a , c ; ( b = b . next ) && b . name && b . name . match ( /^h\d$/ ) ; ) { c = new CKEDITOR . htmlParser . element ( "cke:br" ) ; c . isEmpty = ! 0 ; for ( a . add ( c ) ; c = b . children . shift ( ) ; ) a . add ( c ) } } ; b . addRules ( { elements : { h1 : g , h2 : g , h3 : g , h4 : g , h5 : g , h6 : g , img : function ( a ) { var a = CKEDITOR . tools . trim ( a . attributes . alt || "" ) , b = " " ; a && ! a . match ( /(^http|\.(jpe?g|gif|png))/i ) && ( b = " [" + a + "] " ) ; return new CKEDITOR . htmlParser . text ( b ) } , td : l , th : l , $ : function ( b ) { var k = b . name , g ; if ( h [ k ] ) return ! 1 ; delete b . attributes ; if ( "br" == k ) return b ; if ( a [ k ] ) b . name =
"p" ; else if ( d [ k ] ) delete b . name ; else if ( f [ k ] ) { g = new CKEDITOR . htmlParser . element ( "cke:br" ) ; g . isEmpty = ! 0 ; if ( CKEDITOR . dtd . $empty [ k ] ) return g ; b . add ( g , 0 ) ; g = g . clone ( ) ; g . isEmpty = ! 0 ; b . add ( g ) ; delete b . name } c [ b . name ] || delete b . name ; return b } } } ) ; return b } function z ( b , a , d ) { var a = new CKEDITOR . htmlParser . fragment . fromHtml ( a ) , c = new CKEDITOR . htmlParser . basicWriter ; a . writeHtml ( c , d ) ; var a = c . getHtml ( ) , a = a . replace ( /\s*(<\/?[a-z:]+ ?\/?>)\s*/g , "$1" ) . replace ( /(<cke:br \/>){2,}/g , "<cke:br />" ) . replace ( /(<cke:br \/>)(<\/?p>|<br \/>)/g ,
"$2" ) . replace ( /(<\/?p>|<br \/>)(<cke:br \/>)/g , "$1" ) . replace ( /<(cke:)?br( \/)?>/g , "<br>" ) . replace ( /<p><\/p>/g , "" ) , f = 0 , a = a . replace ( /<\/?p>/g , function ( a ) { if ( "<p>" == a ) { if ( 1 < ++ f ) return "</p><p>" } else if ( 0 < -- f ) return "</p><p>" ; return a } ) . replace ( /<p><\/p>/g , "" ) ; return p ( b , a ) } function p ( b , a ) { b . enterMode == CKEDITOR . ENTER _BR ? a = a . replace ( /(<\/p><p>)+/g , function ( a ) { return CKEDITOR . tools . repeat ( "<br>" , 2 * ( a . length / 7 ) ) } ) . replace ( /<\/?p>/g , "" ) : b . enterMode == CKEDITOR . ENTER _DIV && ( a = a . replace ( /<(\/)?p>/g , "<$1div>" ) ) ;
return a } CKEDITOR . plugins . add ( "clipboard" , { requires : "dialog" , init : function ( b ) { var a ; v ( b ) ; CKEDITOR . dialog . add ( "paste" , CKEDITOR . getUrl ( this . path + "dialogs/paste.js" ) ) ; b . on ( "paste" , function ( a ) { var b = a . data . dataValue , f = CKEDITOR . dtd . $block ; - 1 < b . indexOf ( "Apple-" ) && ( b = b . replace ( /<span class="Apple-converted-space"> <\/span>/gi , " " ) , "html" != a . data . type && ( b = b . replace ( /<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi , function ( a , b ) { return b . replace ( /\t/g , " " ) } ) ) , - 1 < b . indexOf ( '<br class="Apple-interchange-newline">' ) &&
( a . data . startsWithEOL = 1 , a . data . preSniffing = "html" , b = b . replace ( /<br class="Apple-interchange-newline">/ , "" ) ) , b = b . replace ( /(<[^>]+) class="Apple-[^"]*"/gi , "$1" ) ) ; if ( b . match ( /^<[^<]+cke_(editable|contents)/i ) ) { var h , l , g = new CKEDITOR . dom . element ( "div" ) ; for ( g . setHtml ( b ) ; 1 == g . getChildCount ( ) && ( h = g . getFirst ( ) ) && h . type == CKEDITOR . NODE _ELEMENT && ( h . hasClass ( "cke_editable" ) || h . hasClass ( "cke_contents" ) ) ; ) g = l = h ; l && ( b = l . getHtml ( ) . replace ( /<br>$/i , "" ) ) } CKEDITOR . env . ie ? b = b . replace ( /^ (?: |\r\n)?<(\w+)/g , function ( b ,
c ) { if ( c . toLowerCase ( ) in f ) { a . data . preSniffing = "html" ; return "<" + c } return b } ) : CKEDITOR . env . webkit ? b = b . replace ( /<\/(\w+)><div><br><\/div>$/ , function ( b , c ) { if ( c in f ) { a . data . endsWithEOL = 1 ; return "</" + c + ">" } return b } ) : CKEDITOR . env . gecko && ( b = b . replace ( /(\s)<br>$/ , "$1" ) ) ; a . data . dataValue = b } , null , null , 3 ) ; b . on ( "paste" , function ( d ) { var d = d . data , c = d . type , f = d . dataValue , h , l = b . config . clipboard _defaultContentType || "html" ; h = "html" == c || "html" == d . preSniffing ? "html" : w ( f ) ; "htmlifiedtext" == h ? f = x ( b . config , f ) : "text" == c && "html" ==
h && ( f = z ( b . config , f , a || ( a = y ( b ) ) ) ) ; d . startsWithEOL && ( f = '<br data-cke-eol="1">' + f ) ; d . endsWithEOL && ( f += '<br data-cke-eol="1">' ) ; "auto" == c && ( c = "html" == h || "html" == l ? "html" : "text" ) ; d . type = c ; d . dataValue = f ; delete d . preSniffing ; delete d . startsWithEOL ; delete d . endsWithEOL } , null , null , 6 ) ; b . on ( "paste" , function ( a ) { a = a . data ; b . insertHtml ( a . dataValue , a . type ) ; setTimeout ( function ( ) { b . fire ( "afterPaste" ) } , 0 ) } , null , null , 1E3 ) ; b . on ( "pasteDialog" , function ( a ) { setTimeout ( function ( ) { b . openDialog ( "paste" , a . data ) } , 0 ) } ) } } ) } ) ( ) ; ( function ( ) { var a = '<a id="{id}" class="cke_button cke_button__{name} cke_button_{state} {cls}"' + ( CKEDITOR . env . gecko && 10900 <= CKEDITOR . env . version && ! CKEDITOR . env . hc ? "" : '" href="javascript:void(\'{titleJs}\')"' ) + ' title="{title}" tabindex="-1" hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="{hasArrow}"' ; if ( CKEDITOR . env . opera || CKEDITOR . env . gecko && CKEDITOR . env . mac ) a += ' onkeypress="return false;"' ; CKEDITOR . env . gecko && ( a += ' onblur="this.style.cssText = this.style.cssText;"' ) ; var a =
a + ( ' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" onmousedown="return CKEDITOR.tools.callFunction({mousedownFn},event);" ' + ( CKEDITOR . env . ie ? 'onclick="return false;" onmouseup' : "onclick" ) + '="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span class="cke_button_icon cke_button__{iconName}_icon" style="{style}"' ) , a = a + '> </span><span id="{id}_label" class="cke_button_label cke_button__{name}_label">{label}</span>{arrowHtml}</a>' ,
m = CKEDITOR . addTemplate ( "buttonArrow" , '<span class="cke_button_arrow">' + ( CKEDITOR . env . hc ? "▼" : "" ) + "</span>" ) , n = CKEDITOR . addTemplate ( "button" , a ) ; CKEDITOR . plugins . add ( "button" , { beforeInit : function ( b ) { b . ui . addHandler ( CKEDITOR . UI _BUTTON , CKEDITOR . ui . button . handler ) } } ) ; CKEDITOR . UI _BUTTON = "button" ; CKEDITOR . ui . button = function ( b ) { CKEDITOR . tools . extend ( this , b , { title : b . label , click : b . click || function ( e ) { e . execCommand ( b . command ) } } ) ; this . _ = { } } ; CKEDITOR . ui . button . handler = { create : function ( b ) { return new CKEDITOR . ui . button ( b ) } } ;
CKEDITOR . ui . button . prototype = { render : function ( b , e ) { var a = CKEDITOR . env , i = this . _ . id = CKEDITOR . tools . getNextId ( ) , f = "" , d = this . command , l ; this . _ . editor = b ; var c = { id : i , button : this , editor : b , focus : function ( ) { CKEDITOR . document . getById ( i ) . focus ( ) } , execute : function ( ) { this . button . click ( b ) } , attach : function ( b ) { this . button . attach ( b ) } } , o = CKEDITOR . tools . addFunction ( function ( b ) { if ( c . onkey ) return b = new CKEDITOR . dom . event ( b ) , ! 1 !== c . onkey ( c , b . getKeystroke ( ) ) } ) , p = CKEDITOR . tools . addFunction ( function ( b ) { var a ; c . onfocus && ( a =
! 1 !== c . onfocus ( c , new CKEDITOR . dom . event ( b ) ) ) ; CKEDITOR . env . gecko && 10900 > CKEDITOR . env . version && b . preventBubble ( ) ; return a } ) , j = 0 , q = CKEDITOR . tools . addFunction ( function ( ) { if ( CKEDITOR . env . opera ) { var a = b . editable ( ) ; a . isInline ( ) && a . hasFocus && ( b . lockSelection ( ) , j = 1 ) } } ) ; c . clickFn = l = CKEDITOR . tools . addFunction ( function ( ) { j && ( b . unlockSelection ( 1 ) , j = 0 ) ; c . execute ( ) } ) ; if ( this . modes ) { var k = { } , g = function ( ) { var a = b . mode ; a && ( a = this . modes [ a ] ? void 0 != k [ a ] ? k [ a ] : CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , this . setState ( b . readOnly &&
! this . readOnly ? CKEDITOR . TRISTATE _DISABLED : a ) ) } ; b . on ( "beforeModeUnload" , function ( ) { b . mode && this . _ . state != CKEDITOR . TRISTATE _DISABLED && ( k [ b . mode ] = this . _ . state ) } , this ) ; b . on ( "mode" , g , this ) ; ! this . readOnly && b . on ( "readOnly" , g , this ) } else if ( d && ( d = b . getCommand ( d ) ) ) d . on ( "state" , function ( ) { this . setState ( d . state ) } , this ) , f += d . state == CKEDITOR . TRISTATE _ON ? "on" : d . state == CKEDITOR . TRISTATE _DISABLED ? "disabled" : "off" ; if ( this . directional ) b . on ( "contentDirChanged" , function ( a ) { var e = CKEDITOR . document . getById ( this . _ . id ) , c =
e . getFirst ( ) , a = a . data ; a != b . lang . dir ? e . addClass ( "cke_" + a ) : e . removeClass ( "cke_ltr" ) . removeClass ( "cke_rtl" ) ; c . setAttribute ( "style" , CKEDITOR . skin . getIconStyle ( h , "rtl" == a , this . icon , this . iconOffset ) ) } , this ) ; d || ( f += "off" ) ; var h = g = this . name || this . command ; this . icon && ! /\./ . test ( this . icon ) && ( h = this . icon , this . icon = null ) ; a = { id : i , name : g , iconName : h , label : this . label , cls : this . className || "" , state : f , title : this . title , titleJs : a . gecko && 10900 <= a . version && ! a . hc ? "" : ( this . title || "" ) . replace ( "'" , "" ) , hasArrow : this . hasArrow ?
"true" : "false" , keydownFn : o , mousedownFn : q , focusFn : p , clickFn : l , style : CKEDITOR . skin . getIconStyle ( h , "rtl" == b . lang . dir , this . icon , this . iconOffset ) , arrowHtml : this . hasArrow ? m . output ( ) : "" } ; n . output ( a , e ) ; if ( this . onRender ) this . onRender ( ) ; return c } , setState : function ( b ) { if ( this . _ . state == b ) return ! 1 ; this . _ . state = b ; var a = CKEDITOR . document . getById ( this . _ . id ) ; return a ? ( a . setState ( b , "cke_button" ) , b == CKEDITOR . TRISTATE _DISABLED ? a . setAttribute ( "aria-disabled" , ! 0 ) : a . removeAttribute ( "aria-disabled" ) , b == CKEDITOR . TRISTATE _ON ?
a . setAttribute ( "aria-pressed" , ! 0 ) : a . removeAttribute ( "aria-pressed" ) , ! 0 ) : ! 1 } } ; CKEDITOR . ui . prototype . addButton = function ( b , a ) { this . add ( b , CKEDITOR . UI _BUTTON , a ) } } ) ( ) ; ( function ( ) { function w ( a ) { function e ( ) { for ( var b = h ( ) , g = CKEDITOR . tools . clone ( a . config . toolbarGroups ) || o ( a ) , f = 0 ; f < g . length ; f ++ ) { var d = g [ f ] ; if ( "/" != d ) { "string" == typeof d && ( d = g [ f ] = { name : d } ) ; var e , n = d . groups ; if ( n ) for ( var l = 0 ; l < n . length ; l ++ ) e = n [ l ] , ( e = b [ e ] ) && c ( d , e ) ; ( e = b [ d . name ] ) && c ( d , e ) } } return g } function h ( ) { var b = { } , c , f , d ; for ( c in a . ui . items ) f = a . ui . items [ c ] , d = f . toolbar || "others" , d = d . split ( "," ) , f = d [ 0 ] , d = parseInt ( d [ 1 ] || - 1 , 10 ) , b [ f ] || ( b [ f ] = [ ] ) , b [ f ] . push ( { name : c , order : d } ) ; for ( f in b ) b [ f ] = b [ f ] . sort ( function ( a ,
b ) { return a . order == b . order ? 0 : 0 > b . order ? - 1 : 0 > a . order ? 1 : a . order < b . order ? - 1 : 1 } ) ; return b } function c ( a , c ) { if ( c . length ) { a . items ? a . items . push ( "-" ) : a . items = [ ] ; for ( var d ; d = c . shift ( ) ; ) a . items . push ( d . name ) } } var d = a . config . toolbar ; "string" == typeof d && ( d = a . config [ "toolbar_" + d ] ) ; return a . toolbar = d || e ( ) } function o ( a ) { return a . _ . toolbarGroups || ( a . _ . toolbarGroups = [ { name : "document" , groups : [ "mode" , "document" , "doctools" ] } , { name : "clipboard" , groups : [ "clipboard" , "undo" ] } , { name : "editing" , groups : [ "find" , "selection" , "spellchecker" ] } ,
{ name : "forms" } , "/" , { name : "basicstyles" , groups : [ "basicstyles" , "cleanup" ] } , { name : "paragraph" , groups : [ "list" , "indent" , "blocks" , "align" ] } , { name : "links" } , { name : "insert" } , "/" , { name : "styles" } , { name : "colors" } , { name : "tools" } , { name : "others" } , { name : "about" } ] ) } var t = function ( ) { this . toolbars = [ ] ; this . focusCommandExecuted = ! 1 } ; t . prototype . focus = function ( ) { for ( var a = 0 , e ; e = this . toolbars [ a ++ ] ; ) for ( var h = 0 , c ; c = e . items [ h ++ ] ; ) if ( c . focus ) { c . focus ( ) ; return } } ; var x = { modes : { wysiwyg : 1 , source : 1 } , readOnly : 1 , exec : function ( a ) { a . toolbox &&
( a . toolbox . focusCommandExecuted = ! 0 , CKEDITOR . env . ie || CKEDITOR . env . air ? setTimeout ( function ( ) { a . toolbox . focus ( ) } , 100 ) : a . toolbox . focus ( ) ) } } ; CKEDITOR . plugins . add ( "toolbar" , { requires : "button" , init : function ( a ) { var e , h = function ( c , d ) { var b , g = "rtl" == a . lang . dir , f = a . config . toolbarGroupCycling , f = void 0 === f || f ; switch ( d ) { case 9 : case CKEDITOR . SHIFT + 9 : for ( ; ! b || ! b . items . length ; ) if ( b = 9 == d ? ( b ? b . next : c . toolbar . next ) || a . toolbox . toolbars [ 0 ] : ( b ? b . previous : c . toolbar . previous ) || a . toolbox . toolbars [ a . toolbox . toolbars . length -
1 ] , b . items . length ) for ( c = b . items [ e ? b . items . length - 1 : 0 ] ; c && ! c . focus ; ) ( c = e ? c . previous : c . next ) || ( b = 0 ) ; c && c . focus ( ) ; return ! 1 ; case g ? 37 : 39 : case 40 : b = c ; do b = b . next , ! b && f && ( b = c . toolbar . items [ 0 ] ) ; while ( b && ! b . focus ) ; b ? b . focus ( ) : h ( c , 9 ) ; return ! 1 ; case g ? 39 : 37 : case 38 : b = c ; do b = b . previous , ! b && f && ( b = c . toolbar . items [ c . toolbar . items . length - 1 ] ) ; while ( b && ! b . focus ) ; b ? b . focus ( ) : ( e = 1 , h ( c , CKEDITOR . SHIFT + 9 ) , e = 0 ) ; return ! 1 ; case 27 : return a . focus ( ) , ! 1 ; case 13 : case 32 : return c . execute ( ) , ! 1 } return ! 0 } ; a . on ( "uiSpace" , function ( c ) { if ( c . data . space ==
a . config . toolbarLocation ) { a . toolbox = new t ; var d = CKEDITOR . tools . getNextId ( ) , b = a . config . removeButtons , b = b && b . split ( "," ) , g = [ '<span id="' , d , '" class="cke_voice_label">' , a . lang . toolbar . toolbars , "</span>" , '<span id="' + a . ui . spaceId ( "toolbox" ) + '" class="cke_toolbox" role="group" aria-labelledby="' , d , '" onmousedown="return false;">' ] , d = ! 1 !== a . config . toolbarStartupExpanded , f , e ; a . config . toolbarCanCollapse && a . elementMode != CKEDITOR . ELEMENT _MODE _INLINE && g . push ( '<span class="cke_toolbox_main"' + ( d ? ">" : ' style="display:none">' ) ) ;
for ( var o = a . toolbox . toolbars , n = w ( a ) , l = 0 ; l < n . length ; l ++ ) { var j , i = 0 , q , m = n [ l ] , r ; if ( m ) if ( f && ( g . push ( "</span>" ) , e = f = 0 ) , "/" === m ) g . push ( '<span class="cke_toolbar_break"></span>' ) ; else { r = m . items || m ; for ( var s = 0 ; s < r . length ; s ++ ) { var k ; k = r [ s ] ; var u ; if ( ! ( b && 0 <= CKEDITOR . tools . indexOf ( b , k ) ) && ( k = a . ui . create ( k ) ) ) if ( k . type == CKEDITOR . UI _SEPARATOR ) e = f && k ; else { u = ! 1 !== k . canGroup ; if ( ! i ) { j = CKEDITOR . tools . getNextId ( ) ; i = { id : j , items : [ ] } ; q = m . name && ( a . lang . toolbar . toolbarGroups [ m . name ] || m . name ) ; g . push ( '<span id="' , j , '" class="cke_toolbar"' ,
q ? ' aria-labelledby="' + j + '_label"' : "" , ' role="toolbar">' ) ; q && g . push ( '<span id="' , j , '_label" class="cke_voice_label">' , q , "</span>" ) ; g . push ( '<span class="cke_toolbar_start"></span>' ) ; var p = o . push ( i ) - 1 ; 0 < p && ( i . previous = o [ p - 1 ] , i . previous . next = i ) } u ? f || ( g . push ( '<span class="cke_toolgroup" role="presentation">' ) , f = 1 ) : f && ( g . push ( "</span>" ) , f = 0 ) ; j = function ( b ) { b = b . render ( a , g ) ; p = i . items . push ( b ) - 1 ; if ( p > 0 ) { b . previous = i . items [ p - 1 ] ; b . previous . next = b } b . toolbar = i ; b . onkey = h ; b . onfocus = function ( ) { a . toolbox . focusCommandExecuted ||
a . focus ( ) } } ; e && ( j ( e ) , e = 0 ) ; j ( k ) } } f && ( g . push ( "</span>" ) , e = f = 0 ) ; i && g . push ( '<span class="cke_toolbar_end"></span></span>' ) } } a . config . toolbarCanCollapse && g . push ( "</span>" ) ; if ( a . config . toolbarCanCollapse && a . elementMode != CKEDITOR . ELEMENT _MODE _INLINE ) { var v = CKEDITOR . tools . addFunction ( function ( ) { a . execCommand ( "toolbarCollapse" ) } ) ; a . on ( "destroy" , function ( ) { CKEDITOR . tools . removeFunction ( v ) } ) ; a . addCommand ( "toolbarCollapse" , { readOnly : 1 , exec : function ( a ) { var b = a . ui . space ( "toolbar_collapser" ) , c = b . getPrevious ( ) , d =
a . ui . space ( "contents" ) , e = c . getParent ( ) , f = parseInt ( d . $ . style . height , 10 ) , g = e . $ . offsetHeight , h = b . hasClass ( "cke_toolbox_collapser_min" ) ; h ? ( c . show ( ) , b . removeClass ( "cke_toolbox_collapser_min" ) , b . setAttribute ( "title" , a . lang . toolbar . toolbarCollapse ) ) : ( c . hide ( ) , b . addClass ( "cke_toolbox_collapser_min" ) , b . setAttribute ( "title" , a . lang . toolbar . toolbarExpand ) ) ; b . getFirst ( ) . setText ( h ? "▲" : "◀" ) ; d . setStyle ( "height" , f - ( e . $ . offsetHeight - g ) + "px" ) ; a . fire ( "resize" ) } , modes : { wysiwyg : 1 , source : 1 } } ) ; a . setKeystroke ( CKEDITOR . ALT +
( CKEDITOR . env . ie || CKEDITOR . env . webkit ? 189 : 109 ) , "toolbarCollapse" ) ; g . push ( '<a title="' + ( d ? a . lang . toolbar . toolbarCollapse : a . lang . toolbar . toolbarExpand ) + '" id="' + a . ui . spaceId ( "toolbar_collapser" ) + '" tabIndex="-1" class="cke_toolbox_collapser' ) ; d || g . push ( " cke_toolbox_collapser_min" ) ; g . push ( '" onclick="CKEDITOR.tools.callFunction(' + v + ')">' , '<span class="cke_arrow">▲</span>' , "</a>" ) } g . push ( "</span>" ) ; c . data . html += g . join ( "" ) } } ) ; a . on ( "destroy" , function ( ) { if ( this . toolbox ) { var a , d = 0 , b , e , f ; for ( a = this . toolbox . toolbars ; d <
a . length ; d ++ ) { e = a [ d ] . items ; for ( b = 0 ; b < e . length ; b ++ ) f = e [ b ] , f . clickFn && CKEDITOR . tools . removeFunction ( f . clickFn ) , f . keyDownFn && CKEDITOR . tools . removeFunction ( f . keyDownFn ) } } } ) ; a . on ( "uiReady" , function ( ) { var c = a . ui . space ( "toolbox" ) ; c && a . focusManager . add ( c , 1 ) } ) ; a . addCommand ( "toolbarFocus" , x ) ; a . setKeystroke ( CKEDITOR . ALT + 121 , "toolbarFocus" ) ; a . ui . add ( "-" , CKEDITOR . UI _SEPARATOR , { } ) ; a . ui . addHandler ( CKEDITOR . UI _SEPARATOR , { create : function ( ) { return { render : function ( a , d ) { d . push ( '<span class="cke_toolbar_separator" role="separator"></span>' ) ;
return { } } } } } ) } } ) ; CKEDITOR . ui . prototype . addToolbarGroup = function ( a , e , h ) { var c = o ( this . editor ) , d = 0 === e , b = { name : a } ; if ( h ) { if ( h = CKEDITOR . tools . search ( c , function ( a ) { return a . name == h } ) ) { ! h . groups && ( h . groups = [ ] ) ; if ( e && ( e = CKEDITOR . tools . indexOf ( h . groups , e ) , 0 <= e ) ) { h . groups . splice ( e + 1 , 0 , a ) ; return } d ? h . groups . splice ( 0 , 0 , a ) : h . groups . push ( a ) ; return } e = null } e && ( e = CKEDITOR . tools . indexOf ( c , function ( a ) { return a . name == e } ) ) ; d ? c . splice ( 0 , 0 , a ) : "number" == typeof e ? c . splice ( e + 1 , 0 , b ) : c . push ( a ) } } ) ( ) ; CKEDITOR . UI _SEPARATOR = "separator" ;
CKEDITOR . config . toolbarLocation = "top" ; ( function ( ) { function C ( c , j , f ) { function b ( b ) { if ( ( d = a [ b ? "getFirst" : "getLast" ] ( ) ) && ( ! d . is || ! d . isBlockBoundary ( ) ) && ( m = j . root [ b ? "getPrevious" : "getNext" ] ( CKEDITOR . dom . walker . invisible ( ! 0 ) ) ) && ( ! m . is || ! m . isBlockBoundary ( { br : 1 } ) ) ) c . document . createElement ( "br" ) [ b ? "insertBefore" : "insertAfter" ] ( d ) } for ( var i = CKEDITOR . plugins . list . listToArray ( j . root , f ) , e = [ ] , h = 0 ; h < j . contents . length ; h ++ ) { var g = j . contents [ h ] ; if ( ( g = g . getAscendant ( "li" , ! 0 ) ) && ! g . getCustomData ( "list_item_processed" ) ) e . push ( g ) , CKEDITOR . dom . element . setMarker ( f ,
g , "list_item_processed" , ! 0 ) } g = null ; for ( h = 0 ; h < e . length ; h ++ ) g = e [ h ] . getCustomData ( "listarray_index" ) , i [ g ] . indent = - 1 ; for ( h = g + 1 ; h < i . length ; h ++ ) if ( i [ h ] . indent > i [ h - 1 ] . indent + 1 ) { e = i [ h - 1 ] . indent + 1 - i [ h ] . indent ; for ( g = i [ h ] . indent ; i [ h ] && i [ h ] . indent >= g ; ) i [ h ] . indent += e , h ++ ; h -- } var a = CKEDITOR . plugins . list . arrayToList ( i , f , null , c . config . enterMode , j . root . getAttribute ( "dir" ) ) . listNode , d , m ; b ( ! 0 ) ; b ( ) ; a . replace ( j . root ) } function x ( c , j ) { this . name = c ; this . context = this . type = j } function y ( c , j , f , b ) { for ( var i , e ; i = c [ b ? "getLast" :
"getFirst" ] ( D ) ; ) ( e = i . getDirection ( 1 ) ) !== j . getDirection ( 1 ) && i . setAttribute ( "dir" , e ) , i . remove ( ) , f ? i [ b ? "insertBefore" : "insertAfter" ] ( f ) : j . append ( i , b ) } function A ( c ) { var j ; ( j = function ( f ) { var b = c [ f ? "getPrevious" : "getNext" ] ( q ) ; b && ( b . type == CKEDITOR . NODE _ELEMENT && b . is ( c . getName ( ) ) ) && ( y ( c , b , null , ! f ) , c . remove ( ) , c = b ) } ) ( ) ; j ( 1 ) } function B ( c ) { return c . type == CKEDITOR . NODE _ELEMENT && ( c . getName ( ) in CKEDITOR . dtd . $block || c . getName ( ) in CKEDITOR . dtd . $listItem ) && CKEDITOR . dtd [ c . getName ( ) ] [ "#" ] } function v ( c , j , f ) { c . fire ( "saveSnapshot" ) ;
f . enlarge ( CKEDITOR . ENLARGE _LIST _ITEM _CONTENTS ) ; var b = f . extractContents ( ) ; j . trim ( ! 1 , ! 0 ) ; var i = j . createBookmark ( ) , e = new CKEDITOR . dom . elementPath ( j . startContainer ) , h = e . block , e = e . lastElement . getAscendant ( "li" , 1 ) || h , g = new CKEDITOR . dom . elementPath ( f . startContainer ) , a = g . contains ( CKEDITOR . dtd . $listItem ) , g = g . contains ( CKEDITOR . dtd . $list ) ; h ? ( h = h . getBogus ( ) ) && h . remove ( ) : g && ( h = g . getPrevious ( q ) ) && u ( h ) && h . remove ( ) ; ( h = b . getLast ( ) ) && ( h . type == CKEDITOR . NODE _ELEMENT && h . is ( "br" ) ) && h . remove ( ) ; ( h = j . startContainer . getChild ( j . startOffset ) ) ?
b . insertBefore ( h ) : j . startContainer . append ( b ) ; if ( a && ( b = w ( a ) ) ) e . contains ( a ) ? ( y ( b , a . getParent ( ) , a ) , b . remove ( ) ) : e . append ( b ) ; for ( ; f . checkStartOfBlock ( ) && f . checkEndOfBlock ( ) ; ) g = f . startPath ( ) , b = g . block , b . is ( "li" ) && ( e = b . getParent ( ) , b . equals ( e . getLast ( q ) ) && b . equals ( e . getFirst ( q ) ) && ( b = e ) ) , f . moveToPosition ( b , CKEDITOR . POSITION _BEFORE _START ) , b . remove ( ) ; f = f . clone ( ) ; b = c . editable ( ) ; f . setEndAt ( b , CKEDITOR . POSITION _BEFORE _END ) ; f = new CKEDITOR . dom . walker ( f ) ; f . evaluator = function ( a ) { return q ( a ) && ! u ( a ) } ; ( f = f . next ( ) ) && ( f . type ==
CKEDITOR . NODE _ELEMENT && f . getName ( ) in CKEDITOR . dtd . $list ) && A ( f ) ; j . moveToBookmark ( i ) ; j . select ( ) ; c . fire ( "saveSnapshot" ) } function w ( c ) { return ( c = c . getLast ( q ) ) && c . type == CKEDITOR . NODE _ELEMENT && c . getName ( ) in r ? c : null } var r = { ol : 1 , ul : 1 } , E = CKEDITOR . dom . walker . whitespaces ( ) , F = CKEDITOR . dom . walker . bookmark ( ) , q = function ( c ) { return ! ( E ( c ) || F ( c ) ) } , u = CKEDITOR . dom . walker . bogus ( ) ; CKEDITOR . plugins . list = { listToArray : function ( c , j , f , b , i ) { if ( ! r [ c . getName ( ) ] ) return [ ] ; b || ( b = 0 ) ; f || ( f = [ ] ) ; for ( var e = 0 , h = c . getChildCount ( ) ; e < h ; e ++ ) { var g =
c . getChild ( e ) ; g . type == CKEDITOR . NODE _ELEMENT && g . getName ( ) in CKEDITOR . dtd . $list && CKEDITOR . plugins . list . listToArray ( g , j , f , b + 1 ) ; if ( "li" == g . $ . nodeName . toLowerCase ( ) ) { var a = { parent : c , indent : b , element : g , contents : [ ] } ; i ? a . grandparent = i : ( a . grandparent = c . getParent ( ) , a . grandparent && "li" == a . grandparent . $ . nodeName . toLowerCase ( ) && ( a . grandparent = a . grandparent . getParent ( ) ) ) ; j && CKEDITOR . dom . element . setMarker ( j , g , "listarray_index" , f . length ) ; f . push ( a ) ; for ( var d = 0 , m = g . getChildCount ( ) , k ; d < m ; d ++ ) k = g . getChild ( d ) , k . type ==
CKEDITOR . NODE _ELEMENT && r [ k . getName ( ) ] ? CKEDITOR . plugins . list . listToArray ( k , j , f , b + 1 , a . grandparent ) : a . contents . push ( k ) } } return f } , arrayToList : function ( c , j , f , b , i ) { f || ( f = 0 ) ; if ( ! c || c . length < f + 1 ) return null ; for ( var e , h = c [ f ] . parent . getDocument ( ) , g = new CKEDITOR . dom . documentFragment ( h ) , a = null , d = f , m = Math . max ( c [ f ] . indent , 0 ) , k = null , n , l , p = b == CKEDITOR . ENTER _P ? "p" : "div" ; ; ) { var o = c [ d ] ; e = o . grandparent ; n = o . element . getDirection ( 1 ) ; if ( o . indent == m ) { if ( ! a || c [ d ] . parent . getName ( ) != a . getName ( ) ) a = c [ d ] . parent . clone ( ! 1 , 1 ) , i &&
a . setAttribute ( "dir" , i ) , g . append ( a ) ; k = a . append ( o . element . clone ( 0 , 1 ) ) ; n != a . getDirection ( 1 ) && k . setAttribute ( "dir" , n ) ; for ( e = 0 ; e < o . contents . length ; e ++ ) k . append ( o . contents [ e ] . clone ( 1 , 1 ) ) ; d ++ } else if ( o . indent == Math . max ( m , 0 ) + 1 ) l = c [ d - 1 ] . element . getDirection ( 1 ) , d = CKEDITOR . plugins . list . arrayToList ( c , null , d , b , l != n ? n : null ) , ! k . getChildCount ( ) && ( CKEDITOR . env . ie && ! ( 7 < h . $ . documentMode ) ) && k . append ( h . createText ( " " ) ) , k . append ( d . listNode ) , d = d . nextIndex ; else if ( - 1 == o . indent && ! f && e ) { r [ e . getName ( ) ] ? ( k = o . element . clone ( ! 1 ,
! 0 ) , n != e . getDirection ( 1 ) && k . setAttribute ( "dir" , n ) ) : k = new CKEDITOR . dom . documentFragment ( h ) ; var a = e . getDirection ( 1 ) != n , s = o . element , z = s . getAttribute ( "class" ) , u = s . getAttribute ( "style" ) , w = k . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT && ( b != CKEDITOR . ENTER _BR || a || u || z ) , t , x = o . contents . length ; for ( e = 0 ; e < x ; e ++ ) { t = o . contents [ e ] ; if ( t . type == CKEDITOR . NODE _ELEMENT && t . isBlockBoundary ( ) ) { a && ! t . getDirection ( ) && t . setAttribute ( "dir" , n ) ; var v = t , y = s . getAttribute ( "style" ) ; y && v . setAttribute ( "style" , y . replace ( /([^;])$/ , "$1;" ) + ( v . getAttribute ( "style" ) ||
"" ) ) ; z && t . addClass ( z ) } else w && ( l || ( l = h . createElement ( p ) , a && l . setAttribute ( "dir" , n ) ) , u && l . setAttribute ( "style" , u ) , z && l . setAttribute ( "class" , z ) , l . append ( t . clone ( 1 , 1 ) ) ) ; k . append ( l || t . clone ( 1 , 1 ) ) } k . type == CKEDITOR . NODE _DOCUMENT _FRAGMENT && d != c . length - 1 && ( ( n = k . getLast ( ) ) && ( n . type == CKEDITOR . NODE _ELEMENT && "_moz" == n . getAttribute ( "type" ) ) && n . remove ( ) , ( ! k . getLast ( q ) || ! ( n . type == CKEDITOR . NODE _ELEMENT && n . getName ( ) in CKEDITOR . dtd . $block ) ) && k . append ( h . createElement ( "br" ) ) ) ; n = k . $ . nodeName . toLowerCase ( ) ; ! CKEDITOR . env . ie &&
( "div" == n || "p" == n ) && k . appendBogus ( ) ; g . append ( k ) ; a = null ; d ++ } else return null ; l = null ; if ( c . length <= d || Math . max ( c [ d ] . indent , 0 ) < m ) break } if ( j ) for ( c = g . getFirst ( ) ; c ; ) { if ( c . type == CKEDITOR . NODE _ELEMENT && ( CKEDITOR . dom . element . clearMarkers ( j , c ) , c . getName ( ) in CKEDITOR . dtd . $listItem && ( f = c , h = i = b = void 0 , b = f . getDirection ( ) ) ) ) { for ( i = f . getParent ( ) ; i && ! ( h = i . getDirection ( ) ) ; ) i = i . getParent ( ) ; b == h && f . removeAttribute ( "dir" ) } c = c . getNextSourceNode ( ) } return { listNode : g , nextIndex : d } } } ; var G = /^h[1-6]$/ , D = CKEDITOR . dom . walker . nodeType ( CKEDITOR . NODE _ELEMENT ) ;
x . prototype = { exec : function ( c ) { this . refresh ( c , c . elementPath ( ) ) ; var j = c . config , f = c . getSelection ( ) , b = f && f . getRanges ( ! 0 ) ; if ( this . state == CKEDITOR . TRISTATE _OFF ) { var i = c . editable ( ) ; if ( i . getFirst ( q ) ) { var e = 1 == b . length && b [ 0 ] ; ( j = e && e . getEnclosedNode ( ) ) && ( j . is && this . type == j . getName ( ) ) && this . setState ( CKEDITOR . TRISTATE _ON ) } else j . enterMode == CKEDITOR . ENTER _BR ? i . appendBogus ( ) : b [ 0 ] . fixBlock ( 1 , j . enterMode == CKEDITOR . ENTER _P ? "p" : "div" ) , f . selectRanges ( b ) } for ( var j = f . createBookmarks ( ! 0 ) , i = [ ] , h = { } , b = b . createIterator ( ) ,
g = 0 ; ( e = b . getNextRange ( ) ) && ++ g ; ) { var a = e . getBoundaryNodes ( ) , d = a . startNode , m = a . endNode ; d . type == CKEDITOR . NODE _ELEMENT && "td" == d . getName ( ) && e . setStartAt ( a . startNode , CKEDITOR . POSITION _AFTER _START ) ; m . type == CKEDITOR . NODE _ELEMENT && "td" == m . getName ( ) && e . setEndAt ( a . endNode , CKEDITOR . POSITION _BEFORE _END ) ; e = e . createIterator ( ) ; for ( e . forceBrBreak = this . state == CKEDITOR . TRISTATE _OFF ; a = e . getNextParagraph ( ) ; ) if ( ! a . getCustomData ( "list_block" ) ) { CKEDITOR . dom . element . setMarker ( h , a , "list_block" , 1 ) ; for ( var k = c . elementPath ( a ) ,
d = k . elements , m = 0 , k = k . blockLimit , n , l = d . length - 1 ; 0 <= l && ( n = d [ l ] ) ; l -- ) if ( r [ n . getName ( ) ] && k . contains ( n ) ) { k . removeCustomData ( "list_group_object_" + g ) ; ( d = n . getCustomData ( "list_group_object" ) ) ? d . contents . push ( a ) : ( d = { root : n , contents : [ a ] } , i . push ( d ) , CKEDITOR . dom . element . setMarker ( h , n , "list_group_object" , d ) ) ; m = 1 ; break } m || ( m = k , m . getCustomData ( "list_group_object_" + g ) ? m . getCustomData ( "list_group_object_" + g ) . contents . push ( a ) : ( d = { root : m , contents : [ a ] } , CKEDITOR . dom . element . setMarker ( h , m , "list_group_object_" + g , d ) , i . push ( d ) ) ) } } for ( n =
[ ] ; 0 < i . length ; ) if ( d = i . shift ( ) , this . state == CKEDITOR . TRISTATE _OFF ) if ( r [ d . root . getName ( ) ] ) { a = c ; b = d ; d = h ; g = n ; m = CKEDITOR . plugins . list . listToArray ( b . root , d ) ; k = [ ] ; for ( e = 0 ; e < b . contents . length ; e ++ ) if ( l = b . contents [ e ] , ( l = l . getAscendant ( "li" , ! 0 ) ) && ! l . getCustomData ( "list_item_processed" ) ) k . push ( l ) , CKEDITOR . dom . element . setMarker ( d , l , "list_item_processed" , ! 0 ) ; for ( var l = b . root . getDocument ( ) , p = void 0 , o = void 0 , e = 0 ; e < k . length ; e ++ ) { var s = k [ e ] . getCustomData ( "listarray_index" ) , p = m [ s ] . parent ; p . is ( this . type ) || ( o = l . createElement ( this . type ) ,
p . copyAttributes ( o , { start : 1 , type : 1 } ) , o . removeStyle ( "list-style-type" ) , m [ s ] . parent = o ) } a = CKEDITOR . plugins . list . arrayToList ( m , d , null , a . config . enterMode ) ; d = void 0 ; m = a . listNode . getChildCount ( ) ; for ( e = 0 ; e < m && ( d = a . listNode . getChild ( e ) ) ; e ++ ) d . getName ( ) == this . type && g . push ( d ) ; a . listNode . replace ( b . root ) } else { m = c ; a = d ; e = n ; k = a . contents ; b = a . root . getDocument ( ) ; g = [ ] ; 1 == k . length && k [ 0 ] . equals ( a . root ) && ( d = b . createElement ( "div" ) , k [ 0 ] . moveChildren && k [ 0 ] . moveChildren ( d ) , k [ 0 ] . append ( d ) , k [ 0 ] = d ) ; a = a . contents [ 0 ] . getParent ( ) ;
for ( l = 0 ; l < k . length ; l ++ ) a = a . getCommonAncestor ( k [ l ] . getParent ( ) ) ; p = m . config . useComputedState ; m = d = void 0 ; p = void 0 === p || p ; for ( l = 0 ; l < k . length ; l ++ ) for ( o = k [ l ] ; s = o . getParent ( ) ; ) { if ( s . equals ( a ) ) { g . push ( o ) ; ! m && o . getDirection ( ) && ( m = 1 ) ; o = o . getDirection ( p ) ; null !== d && ( d = d && d != o ? null : o ) ; break } o = s } if ( ! ( 1 > g . length ) ) { k = g [ g . length - 1 ] . getNext ( ) ; l = b . createElement ( this . type ) ; e . push ( l ) ; for ( p = e = void 0 ; g . length ; ) e = g . shift ( ) , p = b . createElement ( "li" ) , e . is ( "pre" ) || G . test ( e . getName ( ) ) ? e . appendTo ( p ) : ( e . copyAttributes ( p ) , d && e . getDirection ( ) &&
( p . removeStyle ( "direction" ) , p . removeAttribute ( "dir" ) ) , e . moveChildren ( p ) , e . remove ( ) ) , p . appendTo ( l ) ; d && m && l . setAttribute ( "dir" , d ) ; k ? l . insertBefore ( k ) : l . appendTo ( a ) } } else this . state == CKEDITOR . TRISTATE _ON && r [ d . root . getName ( ) ] && C . call ( this , c , d , h ) ; for ( l = 0 ; l < n . length ; l ++ ) A ( n [ l ] ) ; CKEDITOR . dom . element . clearAllMarkers ( h ) ; f . selectBookmarks ( j ) ; c . focus ( ) } , refresh : function ( c , j ) { var f = j . contains ( r , 1 ) , b = j . blockLimit || j . root ; f && b . contains ( f ) ? this . setState ( f . is ( this . type ) ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ) :
this . setState ( CKEDITOR . TRISTATE _OFF ) } } ; CKEDITOR . plugins . add ( "list" , { init : function ( c ) { c . blockless || ( c . addCommand ( "numberedlist" , new x ( "numberedlist" , "ol" ) ) , c . addCommand ( "bulletedlist" , new x ( "bulletedlist" , "ul" ) ) , c . ui . addButton && ( c . ui . addButton ( "NumberedList" , { label : c . lang . list . numberedlist , command : "numberedlist" , directional : ! 0 , toolbar : "list,10" } ) , c . ui . addButton ( "BulletedList" , { label : c . lang . list . bulletedlist , command : "bulletedlist" , directional : ! 0 , toolbar : "list,20" } ) ) , c . on ( "key" , function ( j ) { var f = j . data . keyCode ;
if ( c . mode == "wysiwyg" && f in { 8 : 1 , 46 : 1 } ) { var b = c . getSelection ( ) . getRanges ( ) [ 0 ] , i = b . startPath ( ) ; if ( b . collapsed ) { var i = new CKEDITOR . dom . elementPath ( b . startContainer ) , e = f == 8 , h = c . editable ( ) , g = new CKEDITOR . dom . walker ( b . clone ( ) ) ; g . evaluator = function ( a ) { return q ( a ) && ! u ( a ) } ; g . guard = function ( a , b ) { return ! ( b && a . type == CKEDITOR . NODE _ELEMENT && a . is ( "table" ) ) } ; f = b . clone ( ) ; if ( e ) { var a , d ; if ( ( a = i . contains ( r ) ) && b . checkBoundaryOfElement ( a , CKEDITOR . START ) && ( a = a . getParent ( ) ) && a . is ( "li" ) && ( a = w ( a ) ) ) { d = a ; a = a . getPrevious ( q ) ; f . moveToPosition ( a &&
u ( a ) ? a : d , CKEDITOR . POSITION _BEFORE _START ) } else { g . range . setStartAt ( h , CKEDITOR . POSITION _AFTER _START ) ; g . range . setEnd ( b . startContainer , b . startOffset ) ; if ( ( a = g . previous ( ) ) && a . type == CKEDITOR . NODE _ELEMENT && ( a . getName ( ) in r || a . is ( "li" ) ) ) { if ( ! a . is ( "li" ) ) { g . range . selectNodeContents ( a ) ; g . reset ( ) ; g . evaluator = B ; a = g . previous ( ) } d = a ; f . moveToElementEditEnd ( d ) } } if ( d ) { v ( c , f , b ) ; j . cancel ( ) } else if ( ( f = i . contains ( r ) ) && b . checkBoundaryOfElement ( f , CKEDITOR . START ) ) { d = f . getFirst ( q ) ; if ( b . checkBoundaryOfElement ( d , CKEDITOR . START ) ) { a =
f . getPrevious ( q ) ; if ( w ( d ) ) { if ( a ) { b . moveToElementEditEnd ( a ) ; b . select ( ) } } else c . execCommand ( "outdent" ) ; j . cancel ( ) } } } else if ( d = i . contains ( "li" ) ) { g . range . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) ; h = ( i = d . getLast ( q ) ) && B ( i ) ? i : d ; d = 0 ; if ( ( a = g . next ( ) ) && a . type == CKEDITOR . NODE _ELEMENT && a . getName ( ) in r && a . equals ( i ) ) { d = 1 ; a = g . next ( ) } else b . checkBoundaryOfElement ( h , CKEDITOR . END ) && ( d = 1 ) ; if ( d && a ) { b = b . clone ( ) ; b . moveToElementEditStart ( a ) ; v ( c , f , b ) ; j . cancel ( ) } } else { g . range . setEndAt ( h , CKEDITOR . POSITION _BEFORE _END ) ; if ( ( a = g . next ( ) ) &&
a . type == CKEDITOR . NODE _ELEMENT && a . is ( r ) ) { a = a . getFirst ( q ) ; if ( i . block && b . checkStartOfBlock ( ) && b . checkEndOfBlock ( ) ) { i . block . remove ( ) ; b . moveToElementEditStart ( a ) ; b . select ( ) } else if ( w ( a ) ) { b . moveToElementEditStart ( a ) ; b . select ( ) } else { b = b . clone ( ) ; b . moveToElementEditStart ( a ) ; v ( c , f , b ) } j . cancel ( ) } } setTimeout ( function ( ) { c . selectionChange ( 1 ) } ) } } } ) ) } } ) } ) ( ) ; ( function ( ) { function p ( d , i ) { this . name = i ; if ( this . useIndentClasses = d . config . indentClasses && 0 < d . config . indentClasses . length ) { this . classNameRegex = RegExp ( "(?:^|\\s+)(" + d . config . indentClasses . join ( "|" ) + ")(?=$|\\s)" ) ; this . indentClassMap = { } ; for ( var a = 0 ; a < d . config . indentClasses . length ; a ++ ) this . indentClassMap [ d . config . indentClasses [ a ] ] = a + 1 } this . startDisabled = "outdent" == i } function r ( d , i ) { return "ltr" == ( i || d . getComputedStyle ( "direction" ) ) ? "margin-left" : "margin-right" } function q ( d ) { return d . type == CKEDITOR . NODE _ELEMENT &&
d . is ( "li" ) } var m = { ol : 1 , ul : 1 } , t = CKEDITOR . dom . walker . whitespaces ( ! 0 ) , u = CKEDITOR . dom . walker . bookmark ( ! 1 , ! 0 ) ; p . prototype = { context : "p" , refresh : function ( d , i ) { var a = i && i . contains ( m ) , f = i . block || i . blockLimit ; a ? this . setState ( CKEDITOR . TRISTATE _OFF ) : ! this . useIndentClasses && "indent" == this . name ? this . setState ( CKEDITOR . TRISTATE _OFF ) : f ? this . useIndentClasses ? ( a = f . $ . className . match ( this . classNameRegex ) , f = 0 , a && ( a = a [ 1 ] , f = this . indentClassMap [ a ] ) , "outdent" == this . name && ! f || "indent" == this . name && f == d . config . indentClasses . length ?
this . setState ( CKEDITOR . TRISTATE _DISABLED ) : this . setState ( CKEDITOR . TRISTATE _OFF ) ) : ( a = parseInt ( f . getStyle ( r ( f ) ) , 10 ) , isNaN ( a ) && ( a = 0 ) , 0 >= a ? this . setState ( CKEDITOR . TRISTATE _DISABLED ) : this . setState ( CKEDITOR . TRISTATE _OFF ) ) : this . setState ( CKEDITOR . TRISTATE _DISABLED ) } , exec : function ( d ) { function i ( n ) { for ( var h = l . startContainer , b = l . endContainer ; h && ! h . getParent ( ) . equals ( n ) ; ) h = h . getParent ( ) ; for ( ; b && ! b . getParent ( ) . equals ( n ) ; ) b = b . getParent ( ) ; if ( h && b ) { for ( var c = h , h = [ ] , a = ! 1 ; ! a ; ) c . equals ( b ) && ( a = ! 0 ) , h . push ( c ) , c = c . getNext ( ) ;
if ( ! ( 1 > h . length ) ) { c = n . getParents ( ! 0 ) ; for ( b = 0 ; b < c . length ; b ++ ) if ( c [ b ] . getName && m [ c [ b ] . getName ( ) ] ) { n = c [ b ] ; break } for ( var c = "indent" == e . name ? 1 : - 1 , b = h [ 0 ] , h = h [ h . length - 1 ] , a = CKEDITOR . plugins . list . listToArray ( n , o ) , k = a [ h . getCustomData ( "listarray_index" ) ] . indent , b = b . getCustomData ( "listarray_index" ) ; b <= h . getCustomData ( "listarray_index" ) ; b ++ ) if ( a [ b ] . indent += c , 0 < c ) { var i = a [ b ] . parent ; a [ b ] . parent = new CKEDITOR . dom . element ( i . getName ( ) , i . getDocument ( ) ) } for ( b = h . getCustomData ( "listarray_index" ) + 1 ; b < a . length && a [ b ] . indent >
k ; b ++ ) a [ b ] . indent += c ; h = CKEDITOR . plugins . list . arrayToList ( a , o , null , d . config . enterMode , n . getDirection ( ) ) ; if ( "outdent" == e . name ) { var j ; if ( ( j = n . getParent ( ) ) && j . is ( "li" ) ) for ( var c = h . listNode . getChildren ( ) , f = [ ] , g , b = c . count ( ) - 1 ; 0 <= b ; b -- ) ( g = c . getItem ( b ) ) && ( g . is && g . is ( "li" ) ) && f . push ( g ) } h && h . listNode . replace ( n ) ; if ( f && f . length ) for ( b = 0 ; b < f . length ; b ++ ) { for ( g = n = f [ b ] ; ( g = g . getNext ( ) ) && g . is && g . getName ( ) in m ; ) CKEDITOR . env . ie && ! n . getFirst ( function ( b ) { return t ( b ) && u ( b ) } ) && n . append ( l . document . createText ( " " ) ) , n . append ( g ) ;
n . insertAfter ( j ) } } } } function a ( ) { var a = l . createIterator ( ) , e = d . config . enterMode ; a . enforceRealBlocks = ! 0 ; a . enlargeBr = e != CKEDITOR . ENTER _BR ; for ( var b ; b = a . getNextParagraph ( e == CKEDITOR . ENTER _P ? "p" : "div" ) ; ) f ( b ) } function f ( a , g ) { if ( a . getCustomData ( "indent_processed" ) ) return ! 1 ; if ( e . useIndentClasses ) { var b = a . $ . className . match ( e . classNameRegex ) , c = 0 ; b && ( b = b [ 1 ] , c = e . indentClassMap [ b ] ) ; "outdent" == e . name ? c -- : c ++ ; if ( 0 > c ) return ! 1 ; c = Math . min ( c , d . config . indentClasses . length ) ; c = Math . max ( c , 0 ) ; a . $ . className = CKEDITOR . tools . ltrim ( a . $ . className . replace ( e . classNameRegex ,
"" ) ) ; 0 < c && a . addClass ( d . config . indentClasses [ c - 1 ] ) } else { b = r ( a , g ) ; c = parseInt ( a . getStyle ( b ) , 10 ) ; isNaN ( c ) && ( c = 0 ) ; var f = d . config . indentOffset || 40 , c = c + ( "indent" == e . name ? 1 : - 1 ) * f ; if ( 0 > c ) return ! 1 ; c = Math . max ( c , 0 ) ; c = Math . ceil ( c / f ) * f ; a . setStyle ( b , c ? c + ( d . config . indentUnit || "px" ) : "" ) ; "" === a . getAttribute ( "style" ) && a . removeAttribute ( "style" ) } CKEDITOR . dom . element . setMarker ( o , a , "indent_processed" , 1 ) ; return ! 0 } for ( var e = this , o = { } , g = d . getSelection ( ) , v = g . createBookmarks ( 1 ) , l , p = ( g && g . getRanges ( 1 ) ) . createIterator ( ) ; l = p . getNextRange ( ) ; ) { for ( var j =
l . getCommonAncestor ( ) ; j && ! ( j . type == CKEDITOR . NODE _ELEMENT && m [ j . getName ( ) ] ) ; ) j = j . getParent ( ) ; if ( ! j ) { var k = l . getEnclosedNode ( ) ; k && ( k . type == CKEDITOR . NODE _ELEMENT && k . getName ( ) in m ) && ( l . setStartAt ( k , CKEDITOR . POSITION _AFTER _START ) , l . setEndAt ( k , CKEDITOR . POSITION _BEFORE _END ) , j = k ) } j && ( l . startContainer . type == CKEDITOR . NODE _ELEMENT && l . startContainer . getName ( ) in m ) && ( k = new CKEDITOR . dom . walker ( l ) , k . evaluator = q , l . startContainer = k . next ( ) ) ; j && ( l . endContainer . type == CKEDITOR . NODE _ELEMENT && l . endContainer . getName ( ) in m ) &&
( k = new CKEDITOR . dom . walker ( l ) , k . evaluator = q , l . endContainer = k . previous ( ) ) ; if ( j ) { var k = j . getFirst ( q ) , w = ! ! k . getNext ( q ) , s = l . startContainer ; ( ! k . equals ( s ) && ! k . contains ( s ) || ! ( "indent" == e . name || e . useIndentClasses || parseInt ( j . getStyle ( r ( j ) ) , 10 ) ) || ! f ( j , ! w && k . getDirection ( ) ) ) && i ( j ) } else a ( ) } CKEDITOR . dom . element . clearAllMarkers ( o ) ; d . forceNextSelectionCheck ( ) ; g . selectBookmarks ( v ) } } ; CKEDITOR . plugins . add ( "indent" , { requires : "list" , onLoad : function ( ) { ( CKEDITOR . env . ie6Compat || CKEDITOR . env . ie7Compat ) && CKEDITOR . addCss ( ".cke_editable ul,.cke_editable ol{\tmargin-left: 0px;\tpadding-left: 40px;}" ) } ,
init : function ( d ) { d . blockless || ( d . addCommand ( "indent" , new p ( d , "indent" ) ) , d . addCommand ( "outdent" , new p ( d , "outdent" ) ) , d . ui . addButton && ( d . ui . addButton ( "Indent" , { label : d . lang . indent . indent , command : "indent" , directional : ! 0 , toolbar : "indent,20" } ) , d . ui . addButton ( "Outdent" , { label : d . lang . indent . outdent , command : "outdent" , directional : ! 0 , toolbar : "indent,10" } ) ) , d . on ( "dirChanged" , function ( i ) { var a = d . createRange ( ) ; a . setStartBefore ( i . data . node ) ; a . setEndAfter ( i . data . node ) ; for ( var f = new CKEDITOR . dom . walker ( a ) , e ; e = f . next ( ) ; ) if ( e . type ==
CKEDITOR . NODE _ELEMENT ) if ( ! e . equals ( i . data . node ) && e . getDirection ( ) ) { a . setStartAfter ( e ) ; f = new CKEDITOR . dom . walker ( a ) } else { var o = d . config . indentClasses ; if ( o ) for ( var g = i . data . dir == "ltr" ? [ "_rtl" , "" ] : [ "" , "_rtl" ] , m = 0 ; m < o . length ; m ++ ) if ( e . hasClass ( o [ m ] + g [ 0 ] ) ) { e . removeClass ( o [ m ] + g [ 0 ] ) ; e . addClass ( o [ m ] + g [ 1 ] ) } o = e . getStyle ( "margin-right" ) ; g = e . getStyle ( "margin-left" ) ; o ? e . setStyle ( "margin-left" , o ) : e . removeStyle ( "margin-left" ) ; g ? e . setStyle ( "margin-right" , g ) : e . removeStyle ( "margin-right" ) } } ) ) } } ) } ) ( ) ; ( function ( ) { function m ( a , d , b ) { b = a . config . forceEnterMode || b ; if ( "wysiwyg" != a . mode ) return ! 1 ; d || ( d = a . config . enterMode ) ; a . elementPath ( ) . isContextFor ( "p" ) || ( d = CKEDITOR . ENTER _BR , b = 1 ) ; a . fire ( "saveSnapshot" ) ; d == CKEDITOR . ENTER _BR ? n ( a , d , null , b ) : o ( a , d , null , b ) ; a . fire ( "saveSnapshot" ) ; return ! 0 } function p ( a ) { for ( var a = a . getSelection ( ) . getRanges ( ! 0 ) , d = a . length - 1 ; 0 < d ; d -- ) a [ d ] . deleteContents ( ) ; return a [ 0 ] } CKEDITOR . plugins . add ( "enterkey" , { requires : "indent" , init : function ( a ) { a . addCommand ( "enter" , { modes : { wysiwyg : 1 } , editorFocus : ! 1 ,
exec : function ( a ) { m ( a ) } } ) ; a . addCommand ( "shiftEnter" , { modes : { wysiwyg : 1 } , editorFocus : ! 1 , exec : function ( a ) { "wysiwyg" == a . mode && m ( a , a . config . shiftEnterMode , 1 ) } } ) ; a . setKeystroke ( [ [ 13 , "enter" ] , [ CKEDITOR . SHIFT + 13 , "shiftEnter" ] ] ) } } ) ; var s = CKEDITOR . dom . walker . whitespaces ( ) , t = CKEDITOR . dom . walker . bookmark ( ) ; CKEDITOR . plugins . enterkey = { enterBlock : function ( a , d , b , i ) { if ( b = b || p ( a ) ) { var f = b . document , j = b . checkStartOfBlock ( ) , h = b . checkEndOfBlock ( ) , c = a . elementPath ( b . startContainer ) . block ; if ( j && h ) { if ( c && ( c . is ( "li" ) || c . getParent ( ) . is ( "li" ) ) ) { a . execCommand ( "outdent" ) ;
return } if ( c && c . getParent ( ) . is ( "blockquote" ) ) { c . breakParent ( c . getParent ( ) ) ; c . getPrevious ( ) . getFirst ( CKEDITOR . dom . walker . invisible ( 1 ) ) || c . getPrevious ( ) . remove ( ) ; c . getNext ( ) . getFirst ( CKEDITOR . dom . walker . invisible ( 1 ) ) || c . getNext ( ) . remove ( ) ; b . moveToElementEditStart ( c ) ; b . select ( ) ; return } } else if ( c && c . is ( "pre" ) && ! h ) { n ( a , d , b , i ) ; return } var c = d == CKEDITOR . ENTER _DIV ? "div" : "p" , l = b . splitBlock ( c ) ; if ( l ) { var d = l . previousBlock , a = l . nextBlock , j = l . wasStartOfBlock , h = l . wasEndOfBlock , g ; if ( a ) g = a . getParent ( ) , g . is ( "li" ) && ( a . breakParent ( g ) ,
a . move ( a . getNext ( ) , 1 ) ) ; else if ( d && ( g = d . getParent ( ) ) && g . is ( "li" ) ) d . breakParent ( g ) , g = d . getNext ( ) , b . moveToElementEditStart ( g ) , d . move ( d . getPrevious ( ) ) ; if ( ! j && ! h ) { if ( a . is ( "li" ) ) { var e = b . clone ( ) ; e . selectNodeContents ( a ) ; e = new CKEDITOR . dom . walker ( e ) ; e . evaluator = function ( a ) { return ! ( t ( a ) || s ( a ) || a . type == CKEDITOR . NODE _ELEMENT && a . getName ( ) in CKEDITOR . dtd . $inline && ! ( a . getName ( ) in CKEDITOR . dtd . $empty ) ) } ; ( g = e . next ( ) ) && ( g . type == CKEDITOR . NODE _ELEMENT && g . is ( "ul" , "ol" ) ) && ( CKEDITOR . env . ie ? f . createText ( " " ) : f . createElement ( "br" ) ) . insertBefore ( g ) } a &&
b . moveToElementEditStart ( a ) } else { var k ; if ( d ) { if ( d . is ( "li" ) || ! q . test ( d . getName ( ) ) && ! d . is ( "pre" ) ) e = d . clone ( ) } else a && ( e = a . clone ( ) ) ; e ? i && ! e . is ( "li" ) && e . renameNode ( c ) : g && g . is ( "li" ) ? e = g : ( e = f . createElement ( c ) , d && ( k = d . getDirection ( ) ) && e . setAttribute ( "dir" , k ) ) ; if ( f = l . elementPath ) { i = 0 ; for ( g = f . elements . length ; i < g ; i ++ ) { k = f . elements [ i ] ; if ( k . equals ( f . block ) || k . equals ( f . blockLimit ) ) break ; CKEDITOR . dtd . $removeEmpty [ k . getName ( ) ] && ( k = k . clone ( ) , e . moveChildren ( k ) , e . append ( k ) ) } } CKEDITOR . env . ie || e . appendBogus ( ) ; e . getParent ( ) ||
b . insertNode ( e ) ; e . is ( "li" ) && e . removeAttribute ( "value" ) ; if ( CKEDITOR . env . ie && j && ( ! h || ! d . getChildCount ( ) ) ) b . moveToElementEditStart ( h ? d : e ) , b . select ( ) ; b . moveToElementEditStart ( j && ! h ? a : e ) } b . select ( ) ; b . scrollIntoView ( ) } } } , enterBr : function ( a , d , b , i ) { if ( b = b || p ( a ) ) { var f = b . document , j = b . checkEndOfBlock ( ) , h = new CKEDITOR . dom . elementPath ( a . getSelection ( ) . getStartElement ( ) ) , c = h . block , h = c && h . block . getName ( ) ; ! i && "li" == h ? o ( a , d , b , i ) : ( ! i && j && q . test ( h ) ? ( j = c . getDirection ( ) ) ? ( f = f . createElement ( "div" ) , f . setAttribute ( "dir" ,
j ) , f . insertAfter ( c ) , b . setStart ( f , 0 ) ) : ( f . createElement ( "br" ) . insertAfter ( c ) , CKEDITOR . env . gecko && f . createText ( "" ) . insertAfter ( c ) , b . setStartAt ( c . getNext ( ) , CKEDITOR . env . ie ? CKEDITOR . POSITION _BEFORE _START : CKEDITOR . POSITION _AFTER _START ) ) : ( c = "pre" == h && CKEDITOR . env . ie && 8 > CKEDITOR . env . version ? f . createText ( "\r" ) : f . createElement ( "br" ) , b . deleteContents ( ) , b . insertNode ( c ) , CKEDITOR . env . ie ? b . setStartAt ( c , CKEDITOR . POSITION _AFTER _END ) : ( f . createText ( " " ) . insertAfter ( c ) , j && c . getParent ( ) . appendBogus ( ) , c . getNext ( ) . $ . nodeValue =
"" , b . setStartAt ( c . getNext ( ) , CKEDITOR . POSITION _AFTER _START ) ) ) , b . collapse ( ! 0 ) , b . select ( ) , b . scrollIntoView ( ) ) } } } ; var r = CKEDITOR . plugins . enterkey , n = r . enterBr , o = r . enterBlock , q = /^h[1-6]$/ } ) ( ) ; ( function ( ) { function j ( a , b ) { var d = { } , e = [ ] , f = { nbsp : " " , shy : " " , gt : ">" , lt : "<" , amp : "&" , apos : "'" , quot : '"' } , a = a . replace ( /\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g , function ( a , h ) { var c = b ? "&" + h + ";" : f [ h ] ; d [ c ] = b ? f [ h ] : "&" + h + ";" ; e . push ( c ) ; return "" } ) ; if ( ! b && a ) { var a = a . split ( "," ) , c = document . createElement ( "div" ) , g ; c . innerHTML = "&" + a . join ( ";&" ) + ";" ; g = c . innerHTML ; c = null ; for ( c = 0 ; c < g . length ; c ++ ) { var i = g . charAt ( c ) ; d [ i ] = "&" + a [ c ] + ";" ; e . push ( i ) } } d . regex = e . join ( b ? "|" : "" ) ; return d } CKEDITOR . plugins . add ( "entities" , { afterInit : function ( a ) { var b =
a . config ; if ( a = ( a = a . dataProcessor ) && a . htmlFilter ) { var d = [ ] ; ! 1 !== b . basicEntities && d . push ( "nbsp,gt,lt,amp" ) ; b . entities && ( d . length && d . push ( "quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro" ) ,
b . entities _latin && d . push ( "Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml" ) , b . entities _greek && d . push ( "Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv" ) ,
b . entities _additional && d . push ( b . entities _additional ) ) ; var e = j ( d . join ( "," ) ) , f = e . regex ? "[" + e . regex + "]" : "a^" ; delete e . regex ; b . entities && b . entities _processNumerical && ( f = "[^ -~]|" + f ) ; var f = RegExp ( f , "g" ) , c = function ( a ) { return b . entities _processNumerical == "force" || ! e [ a ] ? "&#" + a . charCodeAt ( 0 ) + ";" : e [ a ] } , g = j ( "nbsp,gt,lt,amp,shy" , ! 0 ) , i = RegExp ( g . regex , "g" ) , k = function ( a ) { return g [ a ] } ; a . addRules ( { text : function ( a ) { return a . replace ( i , k ) . replace ( f , c ) } } ) } } } ) } ) ( ) ; CKEDITOR . config . basicEntities = ! 0 ;
CKEDITOR . config . entities = ! 0 ; CKEDITOR . config . entities _latin = ! 0 ; CKEDITOR . config . entities _greek = ! 0 ; CKEDITOR . config . entities _additional = "#39" ; ( function ( ) { function t ( a ) { var e = "left" == a ? "pageXOffset" : "pageYOffset" ; return e in g . $ ? g . $ [ e ] : CKEDITOR . document . $ . documentElement [ "left" == a ? "scrollLeft" : "scrollTop" ] } function p ( a ) { var e , f = a . config , p = f . floatSpaceDockedOffsetX || 0 , o = f . floatSpaceDockedOffsetY || 0 , u = f . floatSpacePinnedOffsetX || 0 , q = f . floatSpacePinnedOffsetY || 0 , i = function ( c ) { function f ( a , c , b ) { d . setStyle ( c , s ( b ) ) ; d . setStyle ( "position" , a ) } function j ( a ) { var c = n . getDocumentPosition ( ) ; switch ( a ) { case "top" : f ( "absolute" , "top" , c . y - l - o ) ; break ; case "pin" : f ( "fixed" ,
"top" , q ) ; break ; case "bottom" : f ( "absolute" , "top" , c . y + ( b . height || b . bottom - b . top ) + o ) } e = a } "focus" == c . name && d . show ( ) ; d . removeStyle ( "left" ) ; d . removeStyle ( "right" ) ; var n = a . editable ( ) , k = d . getClientRect ( ) , b = n . getClientRect ( ) , l = k . height , r = t ( "left" ) ; if ( e ) { "top" == e && k . top < q ? j ( "pin" ) : "pin" == e ? b . top > o + l ? j ( "top" ) : b . bottom - k . bottom < l && j ( "bottom" ) : "bottom" == e && ( b . top > o + l ? j ( "top" ) : b . bottom > 2 * l + q && j ( "pin" ) ) ; var c = g . getViewPaneSize ( ) , h = c . width / 2 , h = 0 < b . left && b . right < c . width && b . width > k . width ? "rtl" == a . config . contentsLangDirection ?
"right" : "left" : h - b . left > b . right - h ? "left" : "right" , m ; k . width > c . width ? ( h = "left" , m = 0 ) : ( m = "left" == h ? 0 < b . left ? b . left : 0 : b . right < c . width ? c . width - b . right : 0 , m + k . width > c . width && ( h = "left" == h ? "right" : "left" , m = 0 ) ) ; d . setStyle ( h , s ( ( "pin" == e ? u : p ) + m + ( "pin" == e ? 0 : r ) ) ) } else e = "pin" , j ( "pin" ) , i ( c ) } , f = CKEDITOR . document . getBody ( ) , r = { id : a . id , name : a . name , langDir : a . lang . dir , langCode : a . langCode } , n = a . fire ( "uiSpace" , { space : "top" , html : "" } ) . html ; if ( n ) { var d = f . append ( CKEDITOR . dom . element . createFromHtml ( v . output ( CKEDITOR . tools . extend ( { topId : a . ui . spaceId ( "top" ) ,
content : n , style : "display:none;z-index:" + ( a . config . baseFloatZIndex - 1 ) } , r ) ) ) ) ; d . unselectable ( ) ; d . on ( "mousedown" , function ( a ) { a = a . data ; a . getTarget ( ) . hasAscendant ( "a" , 1 ) || a . preventDefault ( ) } ) ; a . on ( "focus" , function ( a ) { i ( a ) ; g . on ( "scroll" , i ) ; g . on ( "resize" , i ) } ) ; a . on ( "blur" , function ( ) { d . hide ( ) ; g . removeListener ( "scroll" , i ) ; g . removeListener ( "resize" , i ) } ) ; a . on ( "destroy" , function ( ) { g . removeListener ( "scroll" , i ) ; g . removeListener ( "resize" , i ) ; d . clearCustomData ( ) ; d . remove ( ) } ) ; a . focusManager . hasFocus && d . show ( ) ; a . focusManager . add ( d ,
1 ) } } var v = CKEDITOR . addTemplate ( "floatcontainer" , '<div id="cke_{name}" class="cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} ' + CKEDITOR . env . cssClass + '" dir="{langDir}" title="' + ( CKEDITOR . env . gecko ? " " : "" ) + '" lang="{langCode}" role="application" style="{style}"><div class="cke_inner"><div id="{topId}" class="cke_top" role="presentation">{content}</div></div></div>' ) ; CKEDITOR . plugins . add ( "floatingspace" , { init : function ( a ) { a . on ( "contentDom" , function ( ) { p ( a ) } ) } } ) ; var g = CKEDITOR . document . getWindow ( ) ,
s = CKEDITOR . tools . cssLength } ) ( ) ; ( function ( ) { function n ( a ) { var c = this . editor , d = a . document , b = d . body ; ( a = d . getElementById ( "cke_actscrpt" ) ) && a . parentNode . removeChild ( a ) ; ( a = d . getElementById ( "cke_shimscrpt" ) ) && a . parentNode . removeChild ( a ) ; CKEDITOR . env . gecko && ( b . contentEditable = ! 1 , 2E4 > CKEDITOR . env . version && ( b . innerHTML = b . innerHTML . replace ( /^.*<\!-- cke-content-start --\>/ , "" ) , setTimeout ( function ( ) { var a = new CKEDITOR . dom . range ( new CKEDITOR . dom . document ( d ) ) ; a . setStart ( new CKEDITOR . dom . node ( b ) , 0 ) ; c . getSelection ( ) . selectRanges ( [ a ] ) } , 0 ) ) ) ; b . contentEditable =
! 0 ; CKEDITOR . env . ie && ( b . hideFocus = ! 0 , b . disabled = ! 0 , b . removeAttribute ( "disabled" ) ) ; delete this . _ . isLoadingData ; this . $ = b ; d = new CKEDITOR . dom . document ( d ) ; this . setup ( ) ; CKEDITOR . env . ie && ( d . getDocumentElement ( ) . addClass ( d . $ . compatMode ) , c . config . enterMode != CKEDITOR . ENTER _P && d . on ( "selectionchange" , function ( ) { var a = d . getBody ( ) , b = c . getSelection ( ) , e = b && b . getRanges ( ) [ 0 ] ; e && ( a . getHtml ( ) . match ( /^<p> <\/p>$/i ) && e . startContainer . equals ( a ) ) && setTimeout ( function ( ) { e = c . getSelection ( ) . getRanges ( ) [ 0 ] ; if ( ! e . startContainer . equals ( "body" ) ) { a . getFirst ( ) . remove ( 1 ) ;
e . moveToElementEditEnd ( a ) ; e . select ( ) } } , 0 ) } ) ) ; CKEDITOR . env . gecko && CKEDITOR . tools . setTimeout ( o , 0 , this , c ) ; try { c . document . $ . execCommand ( "2D-position" , ! 1 , ! 0 ) } catch ( e ) { } try { c . document . $ . execCommand ( "enableInlineTableEditing" , ! 1 , ! c . config . disableNativeTableHandles ) } catch ( f ) { } if ( c . config . disableObjectResizing ) try { this . getDocument ( ) . $ . execCommand ( "enableObjectResizing" , ! 1 , ! 1 ) } catch ( g ) { this . attachListener ( this , CKEDITOR . env . ie ? "resizestart" : "resize" , function ( a ) { a . data . preventDefault ( ) } ) } ( CKEDITOR . env . gecko ||
CKEDITOR . env . ie && "CSS1Compat" == c . document . $ . compatMode ) && this . attachListener ( this , "keydown" , function ( a ) { var b = a . data . getKeystroke ( ) ; if ( b == 33 || b == 34 ) if ( CKEDITOR . env . ie ) setTimeout ( function ( ) { c . getSelection ( ) . scrollIntoView ( ) } , 0 ) ; else if ( c . window . $ . innerHeight > this . $ . offsetHeight ) { var d = c . createRange ( ) ; d [ b == 33 ? "moveToElementEditStart" : "moveToElementEditEnd" ] ( this ) ; d . select ( ) ; a . data . preventDefault ( ) } } ) ; CKEDITOR . env . ie && this . attachListener ( d , "blur" , function ( ) { try { d . $ . selection . empty ( ) } catch ( a ) { } } ) ; c . document . getElementsByTag ( "title" ) . getItem ( 0 ) . data ( "cke-title" ,
c . document . $ . title ) ; CKEDITOR . env . ie && ( c . document . $ . title = this . _ . docTitle ) ; CKEDITOR . tools . setTimeout ( function ( ) { c . fire ( "contentDom" ) ; if ( this . _ . isPendingFocus ) { c . focus ( ) ; this . _ . isPendingFocus = false } setTimeout ( function ( ) { c . fire ( "dataReady" ) } , 0 ) ; CKEDITOR . env . ie && setTimeout ( function ( ) { if ( c . document ) { var a = c . document . $ . body ; a . runtimeStyle . marginBottom = "0px" ; a . runtimeStyle . marginBottom = "" } } , 1E3 ) } , 0 , this ) } function p ( a ) { a . checkDirty ( ) || setTimeout ( function ( ) { a . resetDirty ( ) } , 0 ) } function o ( a ) { if ( ! a . readOnly ) { var c =
a . window , d = a . document , b = d . getBody ( ) , e = b . getFirst ( ) , f = b . getChildren ( ) . count ( ) ; if ( ! f || 1 == f && e . type == CKEDITOR . NODE _ELEMENT && e . hasAttribute ( "_moz_editor_bogus_node" ) ) { p ( a ) ; var e = CKEDITOR . document , g = e . getDocumentElement ( ) , h = g . $ . scrollTop , i = g . $ . scrollLeft , j = d . $ . createEvent ( "KeyEvents" ) ; j . initKeyEvent ( "keypress" , ! 0 , ! 0 , c . $ , ! 1 , ! 1 , ! 1 , ! 1 , 0 , 32 ) ; d . $ . dispatchEvent ( j ) ; ( h != g . $ . scrollTop || i != g . $ . scrollLeft ) && e . getWindow ( ) . $ . scrollTo ( i , h ) ; f && b . getFirst ( ) . remove ( ) ; d . getBody ( ) . appendBogus ( ) ; a = a . createRange ( ) ; a . setStartAt ( b ,
CKEDITOR . POSITION _AFTER _START ) ; a . select ( ) } } } function q ( ) { var a = [ ] ; if ( 8 <= CKEDITOR . document . $ . documentMode ) { a . push ( "html.CSS1Compat [contenteditable=false]{min-height:0 !important}" ) ; var c = [ ] , d ; for ( d in CKEDITOR . dtd . $removeEmpty ) c . push ( "html.CSS1Compat " + d + "[contenteditable=false]" ) ; a . push ( c . join ( "," ) + "{display:inline-block}" ) } else CKEDITOR . env . gecko && ( a . push ( "html{height:100% !important}" ) , a . push ( "img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}" ) ) ; a . push ( "html{cursor:text;*cursor:auto}" ) ;
a . push ( "img,input,textarea{cursor:default}" ) ; return a . join ( "\n" ) } CKEDITOR . plugins . add ( "wysiwygarea" , { init : function ( a ) { a . addMode ( "wysiwyg" , function ( c ) { function d ( d ) { d && d . removeListener ( ) ; a . editable ( new k ( a , b . $ . contentWindow . document . body ) ) ; a . setData ( a . getData ( 1 ) , c ) } var b = CKEDITOR . document . createElement ( "iframe" ) ; b . setStyles ( { width : "100%" , height : "100%" } ) ; b . addClass ( "cke_wysiwyg_frame cke_reset" ) ; var e = a . ui . space ( "contents" ) ; e . append ( b ) ; var f = "document.open();" + ( l ? 'document.domain="' + document . domain +
'";' : "" ) + "document.close();" , f = CKEDITOR . env . air ? "javascript:void(0)" : CKEDITOR . env . ie ? "javascript:void(function(){" + encodeURIComponent ( f ) + "}())" : "" , g = CKEDITOR . env . ie || CKEDITOR . env . gecko ; if ( g ) b . on ( "load" , d ) ; var h = [ a . lang . editor , a . name ] . join ( ) , i = a . lang . common . editorHelp ; CKEDITOR . env . ie && ( h += ", " + i ) ; var j = CKEDITOR . tools . getNextId ( ) , m = CKEDITOR . dom . element . createFromHtml ( '<span id="' + j + '" class="cke_voice_label">' + i + "</span>" ) ; e . append ( m , 1 ) ; a . on ( "beforeModeUnload" , function ( a ) { a . removeListener ( ) ; m . remove ( ) } ) ;
b . setAttributes ( { frameBorder : 0 , "aria-describedby" : j , title : h , src : f , tabIndex : a . tabIndex , allowTransparency : "true" } ) ; ! g && d ( ) ; CKEDITOR . env . webkit && ( f = function ( ) { e . setStyle ( "width" , "100%" ) ; b . hide ( ) ; b . setSize ( "width" , e . getSize ( "width" ) ) ; e . removeStyle ( "width" ) ; b . show ( ) } , b . setCustomData ( "onResize" , f ) , CKEDITOR . document . getWindow ( ) . on ( "resize" , f ) ) ; a . fire ( "ariaWidget" , b ) } ) } } ) ; var l = CKEDITOR . env . isCustomDomain ( ) , k = CKEDITOR . tools . createClass ( { $ : function ( a ) { this . base . apply ( this , arguments ) ; this . _ . frameLoadedHandler =
CKEDITOR . tools . addFunction ( function ( a ) { CKEDITOR . tools . setTimeout ( n , 0 , this , a ) } , this ) ; this . _ . docTitle = this . getWindow ( ) . getFrame ( ) . getAttribute ( "title" ) } , base : CKEDITOR . editable , proto : { setData : function ( a , c ) { var d = this . editor ; if ( c ) this . setHtml ( a ) ; else { this . _ . isLoadingData = ! 0 ; d . _ . dataStore = { id : 1 } ; var b = d . config , e = b . fullPage , f = b . docType , g = CKEDITOR . tools . buildStyleHtml ( q ( ) ) . replace ( /<style>/ , '<style data-cke-temp="1">' ) ; e || ( g += CKEDITOR . tools . buildStyleHtml ( d . config . contentsCss ) ) ; var h = b . baseHref ? '<base href="' +
b . baseHref + '" data-cke-temp="1" />' : "" ; e && ( a = a . replace ( /<!DOCTYPE[^>]*>/i , function ( a ) { d . docType = f = a ; return "" } ) . replace ( /<\?xml\s[^\?]*\?>/i , function ( a ) { d . xmlDeclaration = a ; return "" } ) ) ; d . dataProcessor && ( a = d . dataProcessor . toHtml ( a ) ) ; e ? ( /<body[\s|>]/ . test ( a ) || ( a = "<body>" + a ) , /<html[\s|>]/ . test ( a ) || ( a = "<html>" + a + "</html>" ) , /<head[\s|>]/ . test ( a ) ? /<title[\s|>]/ . test ( a ) || ( a = a . replace ( /<head[^>]*>/ , "$&<title></title>" ) ) : a = a . replace ( /<html[^>]*>/ , "$&<head><title></title></head>" ) , h && ( a = a . replace ( /<head>/ , "$&" +
h ) ) , a = a . replace ( /<\/head\s*>/ , g + "$&" ) , a = f + a ) : a = b . docType + '<html dir="' + b . contentsLangDirection + '" lang="' + ( b . contentsLanguage || d . langCode ) + '"><head><title>' + this . _ . docTitle + "</title>" + h + g + "</head><body" + ( b . bodyId ? ' id="' + b . bodyId + '"' : "" ) + ( b . bodyClass ? ' class="' + b . bodyClass + '"' : "" ) + ">" + a + "</body></html>" ; CKEDITOR . env . gecko && ( a = a . replace ( /<body/ , '<body contenteditable="true" ' ) , 2E4 > CKEDITOR . env . version && ( a = a . replace ( /<body[^>]*>/ , "$&<\!-- cke-content-start --\>" ) ) ) ; b = '<script id="cke_actscrpt" type="text/javascript"' +
( CKEDITOR . env . ie ? ' defer="defer" ' : "" ) + ">" + ( l ? 'document.domain="' + document . domain + '";' : "" ) + "var wasLoaded=0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction(" + this . _ . frameLoadedHandler + ",window);wasLoaded=1;}" + ( CKEDITOR . env . ie ? "onload();" : 'document.addEventListener("DOMContentLoaded", onload, false );' ) + "<\/script>" ; CKEDITOR . env . ie && 9 > CKEDITOR . env . version && ( b += '<script id="cke_shimscrpt">(function(){var e="abbr,article,aside,audio,bdi,canvas,data,datalist,details,figcaption,figure,footer,header,hgroup,mark,meter,nav,output,progress,section,summary,time,video".split(","),i=e.length;while(i--){document.createElement(e[i])}})()<\/script>' ) ;
a = a . replace ( /(?=\s*<\/(:?head)>)/ , b ) ; this . clearCustomData ( ) ; this . clearListeners ( ) ; d . fire ( "contentDomUnload" ) ; var i = this . getDocument ( ) ; try { i . write ( a ) } catch ( j ) { setTimeout ( function ( ) { i . write ( a ) } , 0 ) } } } , getData : function ( a ) { if ( a ) return this . getHtml ( ) ; var a = this . editor , c = a . config . fullPage , d = c && a . docType , b = c && a . xmlDeclaration , e = this . getDocument ( ) , c = c ? e . getDocumentElement ( ) . getOuterHtml ( ) : e . getBody ( ) . getHtml ( ) ; CKEDITOR . env . gecko && ( c = c . replace ( /<br>(?=\s*(:?$|<\/body>))/ , "" ) ) ; a . dataProcessor && ( c = a . dataProcessor . toDataFormat ( c ) ) ;
b && ( c = b + "\n" + c ) ; d && ( c = d + "\n" + c ) ; return c } , focus : function ( ) { this . _ . isLoadingData ? this . _ . isPendingFocus = ! 0 : k . baseProto . focus . call ( this ) } , detach : function ( ) { var a = this . editor , c = a . document , d = a . window . getFrame ( ) ; k . baseProto . detach . call ( this ) ; this . clearCustomData ( ) ; c . getDocumentElement ( ) . clearCustomData ( ) ; d . clearCustomData ( ) ; CKEDITOR . tools . removeFunction ( this . _ . frameLoadedHandler ) ; ( c = d . removeCustomData ( "onResize" ) ) && c . removeListener ( ) ; a . fire ( "contentDomUnload" ) ; d . remove ( ) } } } ) ; CKEDITOR . env . gecko && function ( ) { var a =
document . body ; if ( a ) { var c = a . getAttribute ( "onpageshow" ) ; a . setAttribute ( "onpageshow" , ( c ? c + ";" : "" ) + 'event.persisted&&(function(){var x=CKEDITOR.instances,d,i;for(i in x){d=x[i].document;if(d){d.$.designMode="off";d.$.designMode="on";}}})();' ) } else window . addEventListener ( "load" , arguments . callee , ! 1 ) } ( ) } ) ( ) ; CKEDITOR . config . disableObjectResizing = ! 1 ; CKEDITOR . config . disableNativeTableHandles = ! 0 ; CKEDITOR . config . disableNativeSpellChecker = ! 0 ; CKEDITOR . config . contentsCss = CKEDITOR . basePath + "contents.css" ; ( function ( ) { function g ( a , b ) { var c = j . exec ( a ) , d = j . exec ( b ) ; if ( c ) { if ( ! c [ 2 ] && "px" == d [ 2 ] ) return d [ 1 ] ; if ( "px" == c [ 2 ] && ! d [ 2 ] ) return d [ 1 ] + "px" } return b } var i = CKEDITOR . htmlParser . cssStyle , h = CKEDITOR . tools . cssLength , j = /^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i , l = { elements : { $ : function ( a ) { var b = a . attributes ; if ( ( b = ( b = ( b = b && b [ "data-cke-realelement" ] ) && new CKEDITOR . htmlParser . fragment . fromHtml ( decodeURIComponent ( b ) ) ) && b . children [ 0 ] ) && a . attributes [ "data-cke-resizable" ] ) { var c = ( new i ( a ) ) . rules , a = b . attributes , d = c . width , c =
c . height ; d && ( a . width = g ( a . width , d ) ) ; c && ( a . height = g ( a . height , c ) ) } return b } } } , k = CKEDITOR . plugins . add ( "fakeobjects" , { afterInit : function ( a ) { ( a = ( a = a . dataProcessor ) && a . htmlFilter ) && a . addRules ( l ) } } ) ; CKEDITOR . editor . prototype . createFakeElement = function ( a , b , c , d ) { var e = this . lang . fakeobjects , e = e [ c ] || e . unknown , b = { "class" : b , "data-cke-realelement" : encodeURIComponent ( a . getOuterHtml ( ) ) , "data-cke-real-node-type" : a . type , alt : e , title : e , align : a . getAttribute ( "align" ) || "" } ; CKEDITOR . env . hc || ( b . src = CKEDITOR . getUrl ( k . path +
"images/spacer.gif" ) ) ; c && ( b [ "data-cke-real-element-type" ] = c ) ; d && ( b [ "data-cke-resizable" ] = d , c = new i , d = a . getAttribute ( "width" ) , a = a . getAttribute ( "height" ) , d && ( c . rules . width = h ( d ) ) , a && ( c . rules . height = h ( a ) ) , c . populate ( b ) ) ; return this . document . createElement ( "img" , { attributes : b } ) } ; CKEDITOR . editor . prototype . createFakeParserElement = function ( a , b , c , d ) { var e = this . lang . fakeobjects , e = e [ c ] || e . unknown , f ; f = new CKEDITOR . htmlParser . basicWriter ; a . writeHtml ( f ) ; f = f . getHtml ( ) ; b = { "class" : b , "data-cke-realelement" : encodeURIComponent ( f ) ,
"data-cke-real-node-type" : a . type , alt : e , title : e , align : a . attributes . align || "" } ; CKEDITOR . env . hc || ( b . src = CKEDITOR . getUrl ( k . path + "images/spacer.gif" ) ) ; c && ( b [ "data-cke-real-element-type" ] = c ) ; d && ( b [ "data-cke-resizable" ] = d , d = a . attributes , a = new i , c = d . width , d = d . height , void 0 != c && ( a . rules . width = h ( c ) ) , void 0 != d && ( a . rules . height = h ( d ) ) , a . populate ( b ) ) ; return new CKEDITOR . htmlParser . element ( "img" , b ) } ; CKEDITOR . editor . prototype . restoreRealElement = function ( a ) { if ( a . data ( "cke-real-node-type" ) != CKEDITOR . NODE _ELEMENT ) return null ;
var b = CKEDITOR . dom . element . createFromHtml ( decodeURIComponent ( a . data ( "cke-realelement" ) ) , this . document ) ; if ( a . data ( "cke-resizable" ) ) { var c = a . getStyle ( "width" ) , a = a . getStyle ( "height" ) ; c && b . setAttribute ( "width" , g ( b . getAttribute ( "width" ) , c ) ) ; a && b . setAttribute ( "height" , g ( b . getAttribute ( "height" ) , a ) ) } return b } } ) ( ) ; CKEDITOR . plugins . add ( "link" , { requires : "dialog,fakeobjects" , onLoad : function ( ) { function b ( b ) { return c . replace ( /%1/g , "rtl" == b ? "right" : "left" ) . replace ( /%2/g , "cke_contents_" + b ) } var a = "background:url(" + CKEDITOR . getUrl ( this . path + "images/anchor.png" ) + ") no-repeat %1 center;border:1px dotted #00f;" , c = ".%2 a.cke_anchor,.%2 a.cke_anchor_empty,.cke_editable.%2 a[name],.cke_editable.%2 a[data-cke-saved-name]{" + a + "padding-%1:18px;cursor:auto;}" + ( CKEDITOR . env . ie ? "a.cke_anchor_empty{display:inline-block;}" : "" ) + ".%2 img.cke_anchor{" +
a + "width:16px;min-height:15px;height:1.15em;vertical-align:" + ( CKEDITOR . env . opera ? "middle" : "text-bottom" ) + ";}" ; CKEDITOR . addCss ( b ( "ltr" ) + b ( "rtl" ) ) } , init : function ( b ) { b . addCommand ( "link" , new CKEDITOR . dialogCommand ( "link" ) ) ; b . addCommand ( "anchor" , new CKEDITOR . dialogCommand ( "anchor" ) ) ; b . addCommand ( "unlink" , new CKEDITOR . unlinkCommand ) ; b . addCommand ( "removeAnchor" , new CKEDITOR . removeAnchorCommand ) ; b . setKeystroke ( CKEDITOR . CTRL + 76 , "link" ) ; b . ui . addButton && ( b . ui . addButton ( "Link" , { label : b . lang . link . toolbar , command : "link" ,
toolbar : "links,10" } ) , b . ui . addButton ( "Unlink" , { label : b . lang . link . unlink , command : "unlink" , toolbar : "links,20" } ) , b . ui . addButton ( "Anchor" , { label : b . lang . link . anchor . toolbar , command : "anchor" , toolbar : "links,30" } ) ) ; CKEDITOR . dialog . add ( "link" , this . path + "dialogs/link.js" ) ; CKEDITOR . dialog . add ( "anchor" , this . path + "dialogs/anchor.js" ) ; b . on ( "doubleclick" , function ( a ) { var c = CKEDITOR . plugins . link . getSelectedLink ( b ) || a . data . element ; if ( ! c . isReadOnly ( ) ) if ( c . is ( "a" ) ) { a . data . dialog = c . getAttribute ( "name" ) && ( ! c . getAttribute ( "href" ) ||
! c . getChildCount ( ) ) ? "anchor" : "link" ; b . getSelection ( ) . selectElement ( c ) } else if ( CKEDITOR . plugins . link . tryRestoreFakeAnchor ( b , c ) ) a . data . dialog = "anchor" } ) ; b . addMenuItems && b . addMenuItems ( { anchor : { label : b . lang . link . anchor . menu , command : "anchor" , group : "anchor" , order : 1 } , removeAnchor : { label : b . lang . link . anchor . remove , command : "removeAnchor" , group : "anchor" , order : 5 } , link : { label : b . lang . link . menu , command : "link" , group : "link" , order : 1 } , unlink : { label : b . lang . link . unlink , command : "unlink" , group : "link" , order : 5 } } ) ; b . contextMenu &&
b . contextMenu . addListener ( function ( a ) { if ( ! a || a . isReadOnly ( ) ) return null ; a = CKEDITOR . plugins . link . tryRestoreFakeAnchor ( b , a ) ; if ( ! a && ! ( a = CKEDITOR . plugins . link . getSelectedLink ( b ) ) ) return null ; var c = { } ; a . getAttribute ( "href" ) && a . getChildCount ( ) && ( c = { link : CKEDITOR . TRISTATE _OFF , unlink : CKEDITOR . TRISTATE _OFF } ) ; if ( a && a . hasAttribute ( "name" ) ) c . anchor = c . removeAnchor = CKEDITOR . TRISTATE _OFF ; return c } ) } , afterInit : function ( b ) { var a = b . dataProcessor , c = a && a . dataFilter , a = a && a . htmlFilter , d = b . _ . elementsPath && b . _ . elementsPath . filters ;
c && c . addRules ( { elements : { a : function ( a ) { var c = a . attributes ; if ( ! c . name ) return null ; var d = ! a . children . length ; if ( CKEDITOR . plugins . link . synAnchorSelector ) { var a = d ? "cke_anchor_empty" : "cke_anchor" , e = c [ "class" ] ; if ( c . name && ( ! e || 0 > e . indexOf ( a ) ) ) c [ "class" ] = ( e || "" ) + " " + a ; d && CKEDITOR . plugins . link . emptyAnchorFix && ( c . contenteditable = "false" , c [ "data-cke-editable" ] = 1 ) } else if ( CKEDITOR . plugins . link . fakeAnchor && d ) return b . createFakeParserElement ( a , "cke_anchor" , "anchor" ) ; return null } } } ) ; CKEDITOR . plugins . link . emptyAnchorFix &&
a && a . addRules ( { elements : { a : function ( a ) { delete a . attributes . contenteditable } } } ) ; d && d . push ( function ( a , c ) { if ( "a" == c && ( CKEDITOR . plugins . link . tryRestoreFakeAnchor ( b , a ) || a . getAttribute ( "name" ) && ( ! a . getAttribute ( "href" ) || ! a . getChildCount ( ) ) ) ) return "anchor" } ) } } ) ;
CKEDITOR . plugins . link = { getSelectedLink : function ( b ) { var a = b . getSelection ( ) , c = a . getSelectedElement ( ) ; return c && c . is ( "a" ) ? c : ( a = a . getRanges ( ! 0 ) [ 0 ] ) ? ( a . shrink ( CKEDITOR . SHRINK _TEXT ) , b . elementPath ( a . getCommonAncestor ( ) ) . contains ( "a" , 1 ) ) : null } , fakeAnchor : CKEDITOR . env . opera || CKEDITOR . env . webkit , synAnchorSelector : CKEDITOR . env . ie , emptyAnchorFix : CKEDITOR . env . ie && 8 > CKEDITOR . env . version , tryRestoreFakeAnchor : function ( b , a ) { if ( a && a . data ( "cke-real-element-type" ) && "anchor" == a . data ( "cke-real-element-type" ) ) { var c = b . restoreRealElement ( a ) ;
if ( c . data ( "cke-saved-name" ) ) return c } } } ; CKEDITOR . unlinkCommand = function ( ) { } ; CKEDITOR . unlinkCommand . prototype = { exec : function ( b ) { var a = new CKEDITOR . style ( { element : "a" , type : CKEDITOR . STYLE _INLINE , alwaysRemoveElement : 1 } ) ; b . removeStyle ( a ) } , refresh : function ( b , a ) { var c = a . lastElement && a . lastElement . getAscendant ( "a" , ! 0 ) ; c && "a" == c . getName ( ) && c . getAttribute ( "href" ) && c . getChildCount ( ) ? this . setState ( CKEDITOR . TRISTATE _OFF ) : this . setState ( CKEDITOR . TRISTATE _DISABLED ) } , contextSensitive : 1 , startDisabled : 1 } ;
CKEDITOR . removeAnchorCommand = function ( ) { } ; CKEDITOR . removeAnchorCommand . prototype = { exec : function ( b ) { var a = b . getSelection ( ) , c = a . createBookmarks ( ) , d ; if ( a && ( d = a . getSelectedElement ( ) ) && ( CKEDITOR . plugins . link . fakeAnchor && ! d . getChildCount ( ) ? CKEDITOR . plugins . link . tryRestoreFakeAnchor ( b , d ) : d . is ( "a" ) ) ) d . remove ( 1 ) ; else if ( d = CKEDITOR . plugins . link . getSelectedLink ( b ) ) d . hasAttribute ( "href" ) ? ( d . removeAttributes ( { name : 1 , "data-cke-saved-name" : 1 } ) , d . removeClass ( "cke_anchor" ) ) : d . remove ( 1 ) ; a . selectBookmarks ( c ) } } ;
CKEDITOR . tools . extend ( CKEDITOR . config , { linkShowAdvancedTab : ! 0 , linkShowTargetTab : ! 0 } ) ; ( function ( ) { var c = { canUndo : ! 1 , async : ! 0 , exec : function ( a ) { a . getClipboardData ( { title : a . lang . pastetext . title } , function ( b ) { b && a . fire ( "paste" , { type : "text" , dataValue : b . dataValue } ) ; a . fire ( "afterCommandExec" , { name : "pastetext" , command : c , returnValue : ! ! b } ) } ) } } ; CKEDITOR . plugins . add ( "pastetext" , { requires : "clipboard" , init : function ( a ) { a . addCommand ( "pastetext" , c ) ; a . ui . addButton && a . ui . addButton ( "PasteText" , { label : a . lang . pastetext . button , command : "pastetext" , toolbar : "clipboard,40" } ) ; if ( a . config . forcePasteAsPlainText ) a . on ( "beforePaste" ,
function ( a ) { "html" != a . data . type && ( a . data . type = "text" ) } ) ; a . on ( "pasteState" , function ( b ) { a . getCommand ( "pastetext" ) . setState ( b . data ) } ) } } ) } ) ( ) ; ( function ( ) { function h ( a ) { this . editor = a ; this . reset ( ) } CKEDITOR . plugins . add ( "undo" , { init : function ( a ) { function c ( a ) { b . enabled && ! 1 !== a . data . command . canUndo && b . save ( ) } var b = new h ( a ) , d = a . addCommand ( "undo" , { exec : function ( ) { b . undo ( ) && ( a . selectionChange ( ) , this . fire ( "afterUndo" ) ) } , state : CKEDITOR . TRISTATE _DISABLED , canUndo : ! 1 } ) , e = a . addCommand ( "redo" , { exec : function ( ) { b . redo ( ) && ( a . selectionChange ( ) , this . fire ( "afterRedo" ) ) } , state : CKEDITOR . TRISTATE _DISABLED , canUndo : ! 1 } ) ; a . setKeystroke ( [ [ CKEDITOR . CTRL + 90 , "undo" ] ,
[ CKEDITOR . CTRL + 89 , "redo" ] , [ CKEDITOR . CTRL + CKEDITOR . SHIFT + 90 , "redo" ] ] ) ; b . onChange = function ( ) { d . setState ( b . undoable ( ) ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) ; e . setState ( b . redoable ( ) ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) } ; a . on ( "beforeCommandExec" , c ) ; a . on ( "afterCommandExec" , c ) ; a . on ( "saveSnapshot" , function ( a ) { b . save ( a . data && a . data . contentOnly ) } ) ; a . on ( "contentDom" , function ( ) { a . editable ( ) . on ( "keydown" , function ( a ) { ! a . data . $ . ctrlKey && ! a . data . $ . metaKey && b . type ( a ) } ) } ) ; a . on ( "beforeModeUnload" ,
function ( ) { "wysiwyg" == a . mode && b . save ( ! 0 ) } ) ; a . on ( "mode" , function ( ) { b . enabled = a . readOnly ? ! 1 : "wysiwyg" == a . mode ; b . onChange ( ) } ) ; a . ui . addButton && ( a . ui . addButton ( "Undo" , { label : a . lang . undo . undo , command : "undo" , toolbar : "undo,10" } ) , a . ui . addButton ( "Redo" , { label : a . lang . undo . redo , command : "redo" , toolbar : "undo,20" } ) ) ; a . resetUndo = function ( ) { b . reset ( ) ; a . fire ( "saveSnapshot" ) } ; a . on ( "updateSnapshot" , function ( ) { b . currentImage && b . update ( ) } ) ; a . on ( "lockSnapshot" , b . lock , b ) ; a . on ( "unlockSnapshot" , b . unlock , b ) } } ) ; CKEDITOR . plugins . undo =
{ } ; var i = CKEDITOR . plugins . undo . Image = function ( a ) { this . editor = a ; a . fire ( "beforeUndoImage" ) ; var c = a . getSnapshot ( ) , b = c && a . getSelection ( ) ; CKEDITOR . env . ie && c && ( c = c . replace ( /\s+data-cke-expando=".*?"/g , "" ) ) ; this . contents = c ; this . bookmarks = b && b . createBookmarks2 ( ! 0 ) ; a . fire ( "afterUndoImage" ) } , j = /\b(?:href|src|name)="[^"]*?"/gi ; i . prototype = { equals : function ( a , c ) { var b = this . contents , d = a . contents ; if ( CKEDITOR . env . ie && ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) ) b = b . replace ( j , "" ) , d = d . replace ( j , "" ) ; if ( b != d ) return ! 1 ;
if ( c ) return ! 0 ; b = this . bookmarks ; d = a . bookmarks ; if ( b || d ) { if ( ! b || ! d || b . length != d . length ) return ! 1 ; for ( var e = 0 ; e < b . length ; e ++ ) { var g = b [ e ] , f = d [ e ] ; if ( g . startOffset != f . startOffset || g . endOffset != f . endOffset || ! CKEDITOR . tools . arrayCompare ( g . start , f . start ) || ! CKEDITOR . tools . arrayCompare ( g . end , f . end ) ) return ! 1 } } return ! 0 } } ; var k = { 8 : 1 , 46 : 1 } , m = { 16 : 1 , 17 : 1 , 18 : 1 } , l = { 37 : 1 , 38 : 1 , 39 : 1 , 40 : 1 } ; h . prototype = { type : function ( a ) { var a = a && a . data . getKey ( ) , c = a in k , b = this . lastKeystroke in k , d = c && a == this . lastKeystroke , e = a in l , g = this . lastKeystroke in
l ; if ( ! ( a in m || this . typing ) || ! c && ! e && ( b || g ) || c && ! d ) { var f = new i ( this . editor ) , h = this . snapshots . length ; CKEDITOR . tools . setTimeout ( function ( ) { var a = this . editor . getSnapshot ( ) ; CKEDITOR . env . ie && ( a = a . replace ( /\s+data-cke-expando=".*?"/g , "" ) ) ; f . contents != a && h == this . snapshots . length && ( this . typing = ! 0 , this . save ( ! 1 , f , ! 1 ) || this . snapshots . splice ( this . index + 1 , this . snapshots . length - this . index - 1 ) , this . hasUndo = ! 0 , this . hasRedo = ! 1 , this . modifiersCount = this . typesCount = 1 , this . onChange ( ) ) } , 0 , this ) } this . lastKeystroke = a ; c ?
( this . typesCount = 0 , this . modifiersCount ++ , 25 < this . modifiersCount && ( this . save ( ! 1 , null , ! 1 ) , this . modifiersCount = 1 ) ) : e || ( this . modifiersCount = 0 , this . typesCount ++ , 25 < this . typesCount && ( this . save ( ! 1 , null , ! 1 ) , this . typesCount = 1 ) ) } , reset : function ( ) { this . lastKeystroke = 0 ; this . snapshots = [ ] ; this . index = - 1 ; this . limit = this . editor . config . undoStackSize || 20 ; this . currentImage = null ; this . hasRedo = this . hasUndo = ! 1 ; this . locked = null ; this . resetType ( ) } , resetType : function ( ) { this . typing = ! 1 ; delete this . lastKeystroke ; this . modifiersCount =
this . typesCount = 0 } , fireChange : function ( ) { this . hasUndo = ! ! this . getNextImage ( ! 0 ) ; this . hasRedo = ! ! this . getNextImage ( ! 1 ) ; this . resetType ( ) ; this . onChange ( ) } , save : function ( a , c , b ) { if ( this . locked ) return ! 1 ; var d = this . snapshots ; c || ( c = new i ( this . editor ) ) ; if ( ! 1 === c . contents || this . currentImage && c . equals ( this . currentImage , a ) ) return ! 1 ; d . splice ( this . index + 1 , d . length - this . index - 1 ) ; d . length == this . limit && d . shift ( ) ; this . index = d . push ( c ) - 1 ; this . currentImage = c ; ! 1 !== b && this . fireChange ( ) ; return ! 0 } , restoreImage : function ( a ) { var c =
this . editor , b ; a . bookmarks && ( c . focus ( ) , b = c . getSelection ( ) ) ; this . locked = 1 ; this . editor . loadSnapshot ( a . contents ) ; a . bookmarks ? b . selectBookmarks ( a . bookmarks ) : CKEDITOR . env . ie && ( c = this . editor . document . getBody ( ) . $ . createTextRange ( ) , c . collapse ( ! 0 ) , c . select ( ) ) ; this . locked = 0 ; this . index = a . index ; this . update ( ) ; this . fireChange ( ) } , getNextImage : function ( a ) { var c = this . snapshots , b = this . currentImage , d ; if ( b ) if ( a ) for ( d = this . index - 1 ; 0 <= d ; d -- ) { if ( a = c [ d ] , ! b . equals ( a , ! 0 ) ) return a . index = d , a } else for ( d = this . index + 1 ; d < c . length ; d ++ ) if ( a =
c [ d ] , ! b . equals ( a , ! 0 ) ) return a . index = d , a ; return null } , redoable : function ( ) { return this . enabled && this . hasRedo } , undoable : function ( ) { return this . enabled && this . hasUndo } , undo : function ( ) { if ( this . undoable ( ) ) { this . save ( ! 0 ) ; var a = this . getNextImage ( ! 0 ) ; if ( a ) return this . restoreImage ( a ) , ! 0 } return ! 1 } , redo : function ( ) { if ( this . redoable ( ) && ( this . save ( ! 0 ) , this . redoable ( ) ) ) { var a = this . getNextImage ( ! 1 ) ; if ( a ) return this . restoreImage ( a ) , ! 0 } return ! 1 } , update : function ( ) { this . locked || this . snapshots . splice ( this . index , 1 , this . currentImage =
new i ( this . editor ) ) } , lock : function ( ) { if ( ! this . locked ) { var a = this . editor . getSnapshot ( ) ; this . locked = { update : this . currentImage && a == this . currentImage . contents ? a : null } } } , unlock : function ( ) { if ( this . locked ) { var a = this . locked . update , c = this . editor . getSnapshot ( ) ; this . locked = null ; "string" == typeof a && c != a && this . update ( ) } } } } ) ( ) ; CKEDITOR . plugins . add ( "panelbutton" , { requires : "button" , onLoad : function ( ) { function e ( c ) { var a = this . _ ; a . state != CKEDITOR . TRISTATE _DISABLED && ( this . createPanel ( c ) , a . on ? a . panel . hide ( ) : a . panel . showBlock ( this . _ . id , this . document . getById ( this . _ . id ) , 4 ) ) } CKEDITOR . ui . panelButton = CKEDITOR . tools . createClass ( { base : CKEDITOR . ui . button , $ : function ( c ) { var a = c . panel || { } ; delete c . panel ; this . base ( c ) ; this . document = a . parent && a . parent . getDocument ( ) || CKEDITOR . document ; a . block = { attributes : a . attributes } ; this . hasArrow = a . toolbarRelated =
! 0 ; this . click = e ; this . _ = { panelDefinition : a } } , statics : { handler : { create : function ( c ) { return new CKEDITOR . ui . panelButton ( c ) } } } , proto : { createPanel : function ( c ) { var a = this . _ ; if ( ! a . panel ) { var f = this . _ . panelDefinition , e = this . _ . panelDefinition . block , g = f . parent || CKEDITOR . document . getBody ( ) , d = this . _ . panel = new CKEDITOR . ui . floatPanel ( c , g , f ) , f = d . addBlock ( a . id , e ) , b = this ; d . onShow = function ( ) { b . className && this . element . addClass ( b . className + "_panel" ) ; b . setState ( CKEDITOR . TRISTATE _ON ) ; a . on = 1 ; b . editorFocus && c . focus ( ) ; if ( b . onOpen ) b . onOpen ( ) } ;
d . onHide = function ( d ) { b . className && this . element . getFirst ( ) . removeClass ( b . className + "_panel" ) ; b . setState ( b . modes && b . modes [ c . mode ] ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) ; a . on = 0 ; if ( ! d && b . onClose ) b . onClose ( ) } ; d . onEscape = function ( ) { d . hide ( 1 ) ; b . document . getById ( a . id ) . focus ( ) } ; if ( this . onBlock ) this . onBlock ( d , f ) ; f . onHide = function ( ) { a . on = 0 ; b . setState ( CKEDITOR . TRISTATE _OFF ) } } } } } ) } , beforeInit : function ( e ) { e . ui . addHandler ( CKEDITOR . UI _PANELBUTTON , CKEDITOR . ui . panelButton . handler ) } } ) ;
CKEDITOR . UI _PANELBUTTON = "panelbutton" ; ( function ( ) { CKEDITOR . plugins . add ( "panel" , { beforeInit : function ( a ) { a . ui . addHandler ( CKEDITOR . UI _PANEL , CKEDITOR . ui . panel . handler ) } } ) ; CKEDITOR . UI _PANEL = "panel" ; CKEDITOR . ui . panel = function ( a , b ) { b && CKEDITOR . tools . extend ( this , b ) ; CKEDITOR . tools . extend ( this , { className : "" , css : [ ] } ) ; this . id = CKEDITOR . tools . getNextId ( ) ; this . document = a ; this . isFramed = this . forceIFrame || this . css . length ; this . _ = { blocks : { } } } ; CKEDITOR . ui . panel . handler = { create : function ( a ) { return new CKEDITOR . ui . panel ( a ) } } ; var e = CKEDITOR . addTemplate ( "panel" ,
'<div lang="{langCode}" id="{id}" dir={dir} class="cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style="z-index:{z-index}" role="presentation">{frame}</div>' ) , f = CKEDITOR . addTemplate ( "panel-frame" , '<iframe id="{id}" class="cke_panel_frame" role="application" frameborder="0" src="{src}"></iframe>' ) , g = CKEDITOR . addTemplate ( "panel-frame-inner" , '<!DOCTYPE html><html class="cke_panel_container {env}" dir="{dir}" lang="{langCode}"><head>{css}</head><body class="cke_{dir}" style="margin:0;padding:0" onload="{onload}"></body></html>' ) ;
CKEDITOR . ui . panel . prototype = { render : function ( a , b ) { this . getHolderElement = function ( ) { var a = this . _ . holder ; if ( ! a ) { if ( this . isFramed ) { var a = this . document . getById ( this . id + "_frame" ) , b = a . getParent ( ) , a = a . getFrameDocument ( ) ; CKEDITOR . env . iOS && b . setStyles ( { overflow : "scroll" , "-webkit-overflow-scrolling" : "touch" } ) ; b = CKEDITOR . tools . addFunction ( CKEDITOR . tools . bind ( function ( ) { this . isLoaded = ! 0 ; if ( this . onLoad ) this . onLoad ( ) } , this ) ) ; a . write ( g . output ( CKEDITOR . tools . extend ( { css : CKEDITOR . tools . buildStyleHtml ( this . css ) , onload : "window.parent.CKEDITOR.tools.callFunction(" +
b + ");" } , c ) ) ) ; a . getWindow ( ) . $ . CKEDITOR = CKEDITOR ; a . on ( "key" + ( CKEDITOR . env . opera ? "press" : "down" ) , function ( a ) { var b = a . data . getKeystroke ( ) , c = this . document . getById ( this . id ) . getAttribute ( "dir" ) ; this . _ . onKeyDown && ! 1 === this . _ . onKeyDown ( b ) ? a . data . preventDefault ( ) : ( 27 == b || b == ( "rtl" == c ? 39 : 37 ) ) && this . onEscape && ! 1 === this . onEscape ( b ) && a . data . preventDefault ( ) } , this ) ; a = a . getBody ( ) ; a . unselectable ( ) ; CKEDITOR . env . air && CKEDITOR . tools . callFunction ( b ) } else a = this . document . getById ( this . id ) ; this . _ . holder = a } return a } ; var c =
{ editorId : a . id , id : this . id , langCode : a . langCode , dir : a . lang . dir , cls : this . className , frame : "" , env : CKEDITOR . env . cssClass , "z-index" : a . config . baseFloatZIndex + 1 } ; this . isFramed && ( c . frame = f . output ( { id : this . id + "_frame" , src : "javascript:void(document.open()," + ( CKEDITOR . env . isCustomDomain ( ) ? "document.domain='" + document . domain + "'," : "" ) + 'document.close())">' } ) ) ; var d = e . output ( c ) ; b && b . push ( d ) ; return d } , addBlock : function ( a , b ) { b = this . _ . blocks [ a ] = b instanceof CKEDITOR . ui . panel . block ? b : new CKEDITOR . ui . panel . block ( this . getHolderElement ( ) ,
b ) ; this . _ . currentBlock || this . showBlock ( a ) ; return b } , getBlock : function ( a ) { return this . _ . blocks [ a ] } , showBlock : function ( a ) { var a = this . _ . blocks [ a ] , b = this . _ . currentBlock , c = ! this . forceIFrame || CKEDITOR . env . ie ? this . _ . holder : this . document . getById ( this . id + "_frame" ) ; b && ( c . removeAttributes ( b . attributes ) , b . hide ( ) ) ; this . _ . currentBlock = a ; c . setAttributes ( a . attributes ) ; CKEDITOR . fire ( "ariaWidget" , c ) ; a . _ . focusIndex = - 1 ; this . _ . onKeyDown = a . onKeyDown && CKEDITOR . tools . bind ( a . onKeyDown , a ) ; a . show ( ) ; return a } , destroy : function ( ) { this . element &&
this . element . remove ( ) } } ; CKEDITOR . ui . panel . block = CKEDITOR . tools . createClass ( { $ : function ( a , b ) { this . element = a . append ( a . getDocument ( ) . createElement ( "div" , { attributes : { tabIndex : - 1 , "class" : "cke_panel_block" , role : "presentation" } , styles : { display : "none" } } ) ) ; b && CKEDITOR . tools . extend ( this , b ) ; this . attributes . title || ( this . attributes . title = this . attributes [ "aria-label" ] ) ; this . keys = { } ; this . _ . focusIndex = - 1 ; this . element . disableContextMenu ( ) } , _ : { markItem : function ( a ) { - 1 != a && ( a = this . element . getElementsByTag ( "a" ) . getItem ( this . _ . focusIndex =
a ) , ( CKEDITOR . env . webkit || CKEDITOR . env . opera ) && a . getDocument ( ) . getWindow ( ) . focus ( ) , a . focus ( ) , this . onMark && this . onMark ( a ) ) } } , proto : { show : function ( ) { this . element . setStyle ( "display" , "" ) } , hide : function ( ) { ( ! this . onHide || ! 0 !== this . onHide . call ( this ) ) && this . element . setStyle ( "display" , "none" ) } , onKeyDown : function ( a ) { var b = this . keys [ a ] ; switch ( b ) { case "next" : for ( var a = this . _ . focusIndex , b = this . element . getElementsByTag ( "a" ) , c ; c = b . getItem ( ++ a ) ; ) if ( c . getAttribute ( "_cke_focus" ) && c . $ . offsetWidth ) { this . _ . focusIndex =
a ; c . focus ( ) ; break } return ! 1 ; case "prev" : a = this . _ . focusIndex ; for ( b = this . element . getElementsByTag ( "a" ) ; 0 < a && ( c = b . getItem ( -- a ) ) ; ) if ( c . getAttribute ( "_cke_focus" ) && c . $ . offsetWidth ) { this . _ . focusIndex = a ; c . focus ( ) ; break } return ! 1 ; case "click" : case "mouseup" : return a = this . _ . focusIndex , ( c = 0 <= a && this . element . getElementsByTag ( "a" ) . getItem ( a ) ) && ( c . $ [ b ] ? c . $ [ b ] ( ) : c . $ [ "on" + b ] ( ) ) , ! 1 } return ! 0 } } } ) } ) ( ) ; CKEDITOR . plugins . add ( "floatpanel" , { requires : "panel" } ) ;
( function ( ) { function o ( a , b , c , h , g ) { var g = CKEDITOR . tools . genKey ( b . getUniqueId ( ) , c . getUniqueId ( ) , a . lang . dir , a . uiColor || "" , h . css || "" , g || "" ) , e = i [ g ] ; e || ( e = i [ g ] = new CKEDITOR . ui . panel ( b , h ) , e . element = c . append ( CKEDITOR . dom . element . createFromHtml ( e . render ( a ) , b ) ) , e . element . setStyles ( { display : "none" , position : "absolute" } ) ) ; return e } var i = { } ; CKEDITOR . ui . floatPanel = CKEDITOR . tools . createClass ( { $ : function ( a , b , c , h ) { function g ( ) { j . hide ( ) } c . forceIFrame = 1 ; c . toolbarRelated && a . elementMode == CKEDITOR . ELEMENT _MODE _INLINE &&
( b = CKEDITOR . document . getById ( "cke_" + a . name ) ) ; var e = b . getDocument ( ) , h = o ( a , e , b , c , h || 0 ) , k = h . element , d = k . getFirst ( ) , j = this ; k . disableContextMenu ( ) ; k . setAttribute ( "role" , "application" ) ; this . element = k ; this . _ = { editor : a , panel : h , parentElement : b , definition : c , document : e , iframe : d , children : [ ] , dir : a . lang . dir } ; a . on ( "mode" , g ) ; a . on ( "resize" , g ) ; e . getWindow ( ) . on ( "resize" , g ) } , proto : { addBlock : function ( a , b ) { return this . _ . panel . addBlock ( a , b ) } , addListBlock : function ( a , b ) { return this . _ . panel . addListBlock ( a , b ) } , getBlock : function ( a ) { return this . _ . panel . getBlock ( a ) } ,
showBlock : function ( a , b , c , h , g ) { var e = this . _ . panel , k = e . showBlock ( a ) ; this . allowBlur ( ! 1 ) ; a = this . _ . editor . editable ( ) ; this . _ . returnFocus = a . hasFocus ? a : new CKEDITOR . dom . element ( CKEDITOR . document . $ . activeElement ) ; var d = this . element , a = this . _ . iframe , a = CKEDITOR . env . ie ? a : new CKEDITOR . dom . window ( a . $ . contentWindow ) , j = d . getDocument ( ) , i = this . _ . parentElement . getPositionedAncestor ( ) , n = b . getDocumentPosition ( j ) , j = i ? i . getDocumentPosition ( j ) : { x : 0 , y : 0 } , m = "rtl" == this . _ . dir , f = n . x + ( h || 0 ) - j . x , l = n . y + ( g || 0 ) - j . y ; if ( m && ( 1 == c || 4 ==
c ) ) f += b . $ . offsetWidth ; else if ( ! m && ( 2 == c || 3 == c ) ) f += b . $ . offsetWidth - 1 ; if ( 3 == c || 4 == c ) l += b . $ . offsetHeight - 1 ; this . _ . panel . _ . offsetParentId = b . getId ( ) ; d . setStyles ( { top : l + "px" , left : 0 , display : "" } ) ; d . setOpacity ( 0 ) ; d . getFirst ( ) . removeStyle ( "width" ) ; this . _ . editor . focusManager . add ( a ) ; this . _ . blurSet || ( CKEDITOR . event . useCapture = ! 0 , a . on ( "blur" , function ( a ) { this . allowBlur ( ) && a . data . getPhase ( ) == CKEDITOR . EVENT _PHASE _AT _TARGET && ( this . visible && ! this . _ . activeChild ) && ( delete this . _ . returnFocus , this . hide ( ) ) } , this ) , a . on ( "focus" ,
function ( ) { this . _ . focused = ! 0 ; this . hideChild ( ) ; this . allowBlur ( ! 0 ) } , this ) , CKEDITOR . event . useCapture = ! 1 , this . _ . blurSet = 1 ) ; e . onEscape = CKEDITOR . tools . bind ( function ( a ) { if ( this . onEscape && this . onEscape ( a ) === false ) return false } , this ) ; CKEDITOR . tools . setTimeout ( function ( ) { var a = CKEDITOR . tools . bind ( function ( ) { d . removeStyle ( "width" ) ; if ( k . autoSize ) { var a = k . element . getDocument ( ) , a = ( CKEDITOR . env . webkit ? k . element : a . getBody ( ) ) . $ . scrollWidth ; CKEDITOR . env . ie && ( CKEDITOR . env . quirks && a > 0 ) && ( a = a + ( ( d . $ . offsetWidth || 0 ) - ( d . $ . clientWidth ||
0 ) + 3 ) ) ; d . setStyle ( "width" , a + 10 + "px" ) ; a = k . element . $ . scrollHeight ; CKEDITOR . env . ie && ( CKEDITOR . env . quirks && a > 0 ) && ( a = a + ( ( d . $ . offsetHeight || 0 ) - ( d . $ . clientHeight || 0 ) + 3 ) ) ; d . setStyle ( "height" , a + "px" ) ; e . _ . currentBlock . element . setStyle ( "display" , "none" ) . removeStyle ( "display" ) } else d . removeStyle ( "height" ) ; m && ( f = f - d . $ . offsetWidth ) ; d . setStyle ( "left" , f + "px" ) ; var b = e . element . getWindow ( ) , a = d . $ . getBoundingClientRect ( ) , b = b . getViewPaneSize ( ) , c = a . width || a . right - a . left , g = a . height || a . bottom - a . top , h = m ? a . right : b . width - a . left ,
i = m ? b . width - a . right : a . left ; m ? h < c && ( f = i > c ? f + c : b . width > c ? f - a . left : f - a . right + b . width ) : h < c && ( f = i > c ? f - c : b . width > c ? f - a . right + b . width : f - a . left ) ; c = a . top ; b . height - a . top < g && ( l = c > g ? l - g : b . height > g ? l - a . bottom + b . height : l - a . top ) ; if ( CKEDITOR . env . ie ) { b = a = new CKEDITOR . dom . element ( d . $ . offsetParent ) ; b . getName ( ) == "html" && ( b = b . getDocument ( ) . getBody ( ) ) ; b . getComputedStyle ( "direction" ) == "rtl" && ( f = CKEDITOR . env . ie8Compat ? f - d . getDocument ( ) . getDocumentElement ( ) . $ . scrollLeft * 2 : f - ( a . $ . scrollWidth - a . $ . clientWidth ) ) } var a = d . getFirst ( ) ,
j ; ( j = a . getCustomData ( "activePanel" ) ) && j . onHide && j . onHide . call ( this , 1 ) ; a . setCustomData ( "activePanel" , this ) ; d . setStyles ( { top : l + "px" , left : f + "px" } ) ; d . setOpacity ( 1 ) } , this ) ; e . isLoaded ? a ( ) : e . onLoad = a ; CKEDITOR . tools . setTimeout ( function ( ) { this . focus ( ) ; this . allowBlur ( true ) ; this . _ . editor . fire ( "panelShow" , this ) } , 0 , this ) } , CKEDITOR . env . air ? 200 : 0 , this ) ; this . visible = 1 ; this . onShow && this . onShow . call ( this ) } , focus : function ( ) { if ( CKEDITOR . env . webkit ) { var a = CKEDITOR . document . getActive ( ) ; ! a . equals ( this . _ . iframe ) && a . $ . blur ( ) } ( this . _ . lastFocused ||
this . _ . iframe . getFrameDocument ( ) . getWindow ( ) ) . focus ( ) } , blur : function ( ) { var a = this . _ . iframe . getFrameDocument ( ) . getActive ( ) ; a . is ( "a" ) && ( this . _ . lastFocused = a ) } , hide : function ( a ) { if ( this . visible && ( ! this . onHide || ! 0 !== this . onHide . call ( this ) ) ) { this . hideChild ( ) ; CKEDITOR . env . gecko && this . _ . iframe . getFrameDocument ( ) . $ . activeElement . blur ( ) ; this . element . setStyle ( "display" , "none" ) ; this . visible = 0 ; this . element . getFirst ( ) . removeCustomData ( "activePanel" ) ; if ( a = a && this . _ . returnFocus ) CKEDITOR . env . webkit && a . type && a . getWindow ( ) . $ . focus ( ) ,
a . focus ( ) ; delete this . _ . lastFocused ; this . _ . editor . fire ( "panelHide" , this ) } } , allowBlur : function ( a ) { var b = this . _ . panel ; void 0 != a && ( b . allowBlur = a ) ; return b . allowBlur } , showAsChild : function ( a , b , c , h , g , e ) { this . _ . activeChild == a && a . _ . panel . _ . offsetParentId == c . getId ( ) || ( this . hideChild ( ) , a . onHide = CKEDITOR . tools . bind ( function ( ) { CKEDITOR . tools . setTimeout ( function ( ) { this . _ . focused || this . hide ( ) } , 0 , this ) } , this ) , this . _ . activeChild = a , this . _ . focused = ! 1 , a . showBlock ( b , c , h , g , e ) , this . blur ( ) , ( CKEDITOR . env . ie7Compat || CKEDITOR . env . ie6Compat ) &&
setTimeout ( function ( ) { a . element . getChild ( 0 ) . $ . style . cssText += "" } , 100 ) ) } , hideChild : function ( a ) { var b = this . _ . activeChild ; b && ( delete b . onHide , delete this . _ . activeChild , b . hide ( ) , a && this . focus ( ) ) } } } ) ; CKEDITOR . on ( "instanceDestroyed" , function ( ) { var a = CKEDITOR . tools . isEmpty ( CKEDITOR . instances ) , b ; for ( b in i ) { var c = i [ b ] ; a ? c . destroy ( ) : c . element . hide ( ) } a && ( i = { } ) } ) } ) ( ) ; CKEDITOR . plugins . add ( "colorbutton" , { requires : "panelbutton,floatpanel" , init : function ( c ) { function j ( k , i , e , g ) { var h = CKEDITOR . tools . getNextId ( ) + "_colorBox" ; c . ui . add ( k , CKEDITOR . UI _PANELBUTTON , { label : e , title : e , modes : { wysiwyg : 1 } , editorFocus : 1 , toolbar : "colors," + g , panel : { css : CKEDITOR . skin . getPath ( "editor" ) , attributes : { role : "listbox" , "aria-label" : f . panelTitle } } , onBlock : function ( b , a ) { a . autoSize = ! 0 ; a . element . addClass ( "cke_colorblock" ) ; a . element . setHtml ( n ( b , i , h ) ) ; a . element . getDocument ( ) . getBody ( ) . setStyle ( "overflow" ,
"hidden" ) ; CKEDITOR . ui . fire ( "ready" , this ) ; var d = a . keys , e = "rtl" == c . lang . dir ; d [ e ? 37 : 39 ] = "next" ; d [ 40 ] = "next" ; d [ 9 ] = "next" ; d [ e ? 39 : 37 ] = "prev" ; d [ 38 ] = "prev" ; d [ CKEDITOR . SHIFT + 9 ] = "prev" ; d [ 32 ] = "click" } , onOpen : function ( ) { var b = c . getSelection ( ) , b = b && b . getStartElement ( ) , b = c . elementPath ( b ) , a , b = b . block || b . blockLimit || c . document . getBody ( ) ; do a = b && b . getComputedStyle ( "back" == i ? "background-color" : "color" ) || "transparent" ; while ( "back" == i && "transparent" == a && b && ( b = b . getParent ( ) ) ) ; if ( ! a || "transparent" == a ) a = "#ffffff" ; this . _ . panel . _ . iframe . getFrameDocument ( ) . getById ( h ) . setStyle ( "background-color" ,
a ) ; return a } } ) } function n ( k , i , e ) { var g = [ ] , j = h . colorButton _colors . split ( "," ) , b = CKEDITOR . tools . addFunction ( function ( a , b ) { if ( "?" == a ) { var e = arguments . callee , d = function ( a ) { this . removeListener ( "ok" , d ) ; this . removeListener ( "cancel" , d ) ; "ok" == a . name && e ( this . getContentElement ( "picker" , "selectedColor" ) . getValue ( ) , b ) } ; c . openDialog ( "colordialog" , function ( ) { this . on ( "ok" , d ) ; this . on ( "cancel" , d ) } ) } else { c . focus ( ) ; k . hide ( ) ; c . fire ( "saveSnapshot" ) ; c . removeStyle ( new CKEDITOR . style ( h [ "colorButton_" + b + "Style" ] , { color : "inherit" } ) ) ;
if ( a ) { var f = h [ "colorButton_" + b + "Style" ] ; f . childRule = "back" == b ? function ( a ) { return m ( a ) } : function ( a ) { return ! ( a . is ( "a" ) || a . getElementsByTag ( "a" ) . count ( ) ) || m ( a ) } ; c . applyStyle ( new CKEDITOR . style ( f , { color : a } ) ) } c . fire ( "saveSnapshot" ) } } ) ; g . push ( '<a class="cke_colorauto" _cke_focus=1 hidefocus=true title="' , f . auto , '" onclick="CKEDITOR.tools.callFunction(' , b , ",null,'" , i , "');return false;\" href=\"javascript:void('" , f . auto , '\')" role="option"><table role="presentation" cellspacing=0 cellpadding=0 width="100%"><tr><td><span class="cke_colorbox" id="' ,
e , '"></span></td><td colspan=7 align=center>' , f . auto , '</td></tr></table></a><table role="presentation" cellspacing=0 cellpadding=0 width="100%">' ) ; for ( e = 0 ; e < j . length ; e ++ ) { 0 === e % 8 && g . push ( "</tr><tr>" ) ; var a = j [ e ] . split ( "/" ) , d = a [ 0 ] , l = a [ 1 ] || d ; a [ 1 ] || ( d = "#" + d . replace ( /^(.)(.)(.)$/ , "$1$1$2$2$3$3" ) ) ; a = c . lang . colorbutton . colors [ l ] || l ; g . push ( '<td><a class="cke_colorbox" _cke_focus=1 hidefocus=true title="' , a , '" onclick="CKEDITOR.tools.callFunction(' , b , ",'" , d , "','" , i , "'); return false;\" href=\"javascript:void('" ,
a , '\')" role="option"><span class="cke_colorbox" style="background-color:#' , l , '"></span></a></td>' ) } ( c . plugins . colordialog && void 0 === h . colorButton _enableMore || h . colorButton _enableMore ) && g . push ( '</tr><tr><td colspan=8 align=center><a class="cke_colormore" _cke_focus=1 hidefocus=true title="' , f . more , '" onclick="CKEDITOR.tools.callFunction(' , b , ",'?','" , i , "');return false;\" href=\"javascript:void('" , f . more , "')\"" , ' role="option">' , f . more , "</a></td>" ) ; g . push ( "</tr></table>" ) ; return g . join ( "" ) } function m ( c ) { return "false" ==
c . getAttribute ( "contentEditable" ) || c . getAttribute ( "data-nostyle" ) } var h = c . config , f = c . lang . colorbutton ; CKEDITOR . env . hc || ( j ( "TextColor" , "fore" , f . textColorTitle , 10 ) , j ( "BGColor" , "back" , f . bgColorTitle , 20 ) ) } } ) ; CKEDITOR . config . colorButton _colors = "000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF" ;
CKEDITOR . config . colorButton _foreStyle = { element : "span" , styles : { color : "#(color)" } , overrides : [ { element : "font" , attributes : { color : null } } ] } ; CKEDITOR . config . colorButton _backStyle = { element : "span" , styles : { "background-color" : "#(color)" } } ; CKEDITOR . plugins . add ( "listblock" , { requires : "panel" , onLoad : function ( ) { var e = CKEDITOR . addTemplate ( "panel-list" , '<ul role="presentation" class="cke_panel_list">{items}</ul>' ) , f = CKEDITOR . addTemplate ( "panel-list-item" , '<li id="{id}" class="cke_panel_listItem" role=presentation><a id="{id}_option" _cke_focus=1 hidefocus=true title="{title}" href="javascript:void(\'{val}\')" {onclick}="CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role="option">{text}</a></li>' ) , g = CKEDITOR . addTemplate ( "panel-list-group" ,
'<h1 id="{id}" class="cke_panel_grouptitle" role="presentation" >{label}</h1>' ) ; CKEDITOR . ui . panel . prototype . addListBlock = function ( a , b ) { return this . addBlock ( a , new CKEDITOR . ui . listBlock ( this . getHolderElement ( ) , b ) ) } ; CKEDITOR . ui . listBlock = CKEDITOR . tools . createClass ( { base : CKEDITOR . ui . panel . block , $ : function ( a , b ) { var b = b || { } , c = b . attributes || ( b . attributes = { } ) ; ( this . multiSelect = ! ! b . multiSelect ) && ( c [ "aria-multiselectable" ] = ! 0 ) ; ! c . role && ( c . role = "listbox" ) ; this . base . apply ( this , arguments ) ; c = this . keys ; c [ 40 ] = "next" ;
c [ 9 ] = "next" ; c [ 38 ] = "prev" ; c [ CKEDITOR . SHIFT + 9 ] = "prev" ; c [ 32 ] = CKEDITOR . env . ie ? "mouseup" : "click" ; CKEDITOR . env . ie && ( c [ 13 ] = "mouseup" ) ; this . _ . pendingHtml = [ ] ; this . _ . pendingList = [ ] ; this . _ . items = { } ; this . _ . groups = { } } , _ : { close : function ( ) { if ( this . _ . started ) { var a = e . output ( { items : this . _ . pendingList . join ( "" ) } ) ; this . _ . pendingList = [ ] ; this . _ . pendingHtml . push ( a ) ; delete this . _ . started } } , getClick : function ( ) { this . _ . click || ( this . _ . click = CKEDITOR . tools . addFunction ( function ( a ) { var b = this . toggle ( a ) ; if ( this . onClick ) this . onClick ( a ,
b ) } , this ) ) ; return this . _ . click } } , proto : { add : function ( a , b , c ) { var d = CKEDITOR . tools . getNextId ( ) ; this . _ . started || ( this . _ . started = 1 , this . _ . size = this . _ . size || 0 ) ; this . _ . items [ a ] = d ; a = { id : d , val : a , onclick : CKEDITOR . env . ie ? 'onclick="return false;" onmouseup' : "onclick" , clickFn : this . _ . getClick ( ) , title : c || a , text : b || a } ; this . _ . pendingList . push ( f . output ( a ) ) } , startGroup : function ( a ) { this . _ . close ( ) ; var b = CKEDITOR . tools . getNextId ( ) ; this . _ . groups [ a ] = b ; this . _ . pendingHtml . push ( g . output ( { id : b , label : a } ) ) } , commit : function ( ) { this . _ . close ( ) ;
this . element . appendHtml ( this . _ . pendingHtml . join ( "" ) ) ; delete this . _ . size ; this . _ . pendingHtml = [ ] } , toggle : function ( a ) { var b = this . isMarked ( a ) ; b ? this . unmark ( a ) : this . mark ( a ) ; return ! b } , hideGroup : function ( a ) { var b = ( a = this . element . getDocument ( ) . getById ( this . _ . groups [ a ] ) ) && a . getNext ( ) ; a && ( a . setStyle ( "display" , "none" ) , b && "ul" == b . getName ( ) && b . setStyle ( "display" , "none" ) ) } , hideItem : function ( a ) { this . element . getDocument ( ) . getById ( this . _ . items [ a ] ) . setStyle ( "display" , "none" ) } , showAll : function ( ) { var a = this . _ . items , b =
this . _ . groups , c = this . element . getDocument ( ) , d ; for ( d in a ) c . getById ( a [ d ] ) . setStyle ( "display" , "" ) ; for ( var e in b ) a = c . getById ( b [ e ] ) , d = a . getNext ( ) , a . setStyle ( "display" , "" ) , d && "ul" == d . getName ( ) && d . setStyle ( "display" , "" ) } , mark : function ( a ) { this . multiSelect || this . unmarkAll ( ) ; var a = this . _ . items [ a ] , b = this . element . getDocument ( ) . getById ( a ) ; b . addClass ( "cke_selected" ) ; this . element . getDocument ( ) . getById ( a + "_option" ) . setAttribute ( "aria-selected" , ! 0 ) ; this . onMark && this . onMark ( b ) } , unmark : function ( a ) { var b = this . element . getDocument ( ) ,
a = this . _ . items [ a ] , c = b . getById ( a ) ; c . removeClass ( "cke_selected" ) ; b . getById ( a + "_option" ) . removeAttribute ( "aria-selected" ) ; this . onUnmark && this . onUnmark ( c ) } , unmarkAll : function ( ) { var a = this . _ . items , b = this . element . getDocument ( ) , c ; for ( c in a ) { var d = a [ c ] ; b . getById ( d ) . removeClass ( "cke_selected" ) ; b . getById ( d + "_option" ) . removeAttribute ( "aria-selected" ) } this . onUnmark && this . onUnmark ( ) } , isMarked : function ( a ) { return this . element . getDocument ( ) . getById ( this . _ . items [ a ] ) . hasClass ( "cke_selected" ) } , focus : function ( a ) { this . _ . focusIndex =
- 1 ; if ( a ) { for ( var b = this . element . getDocument ( ) . getById ( this . _ . items [ a ] ) . getFirst ( ) , a = this . element . getElementsByTag ( "a" ) , c , d = - 1 ; c = a . getItem ( ++ d ) ; ) if ( c . equals ( b ) ) { this . _ . focusIndex = d ; break } setTimeout ( function ( ) { b . focus ( ) } , 0 ) } } } } ) } } ) ; CKEDITOR . plugins . add ( "richcombo" , { requires : "floatpanel,listblock,button" , beforeInit : function ( c ) { c . ui . addHandler ( CKEDITOR . UI _RICHCOMBO , CKEDITOR . ui . richCombo . handler ) } } ) ;
( function ( ) { var c = '<span id="{id}" class="cke_combo cke_combo__{name} {cls}" role="presentation"><span id="{id}_label" class="cke_combo_label">{label}</span><a class="cke_combo_button" hidefocus=true title="{title}" tabindex="-1"' + ( CKEDITOR . env . gecko && 10900 <= CKEDITOR . env . version && ! CKEDITOR . env . hc ? "" : '" href="javascript:void(\'{titleJs}\')"' ) + ' hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="true"' ; if ( CKEDITOR . env . opera || CKEDITOR . env . gecko && CKEDITOR . env . mac ) c += ' onkeypress="return false;"' ;
CKEDITOR . env . gecko && ( c += ' onblur="this.style.cssText = this.style.cssText;"' ) ; var c = c + ( ' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event,this);" onmousedown="return CKEDITOR.tools.callFunction({mousedownFn},event);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" ' + ( CKEDITOR . env . ie ? 'onclick="return false;" onmouseup' : "onclick" ) + '="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span id="{id}_text" class="cke_combo_text cke_combo_inlinelabel">{label}</span><span class="cke_combo_open"><span class="cke_combo_arrow">' +
( CKEDITOR . env . hc ? "▼" : CKEDITOR . env . air ? " " : "" ) + "</span></span></a></span>" ) , h = CKEDITOR . addTemplate ( "combo" , c ) ; CKEDITOR . UI _RICHCOMBO = "richcombo" ; CKEDITOR . ui . richCombo = CKEDITOR . tools . createClass ( { $ : function ( a ) { CKEDITOR . tools . extend ( this , a , { canGroup : ! 1 , title : a . label , modes : { wysiwyg : 1 } , editorFocus : 1 } ) ; a = this . panel || { } ; delete this . panel ; this . id = CKEDITOR . tools . getNextNumber ( ) ; this . document = a . parent && a . parent . getDocument ( ) || CKEDITOR . document ; a . className = "cke_combopanel" ; a . block = { multiSelect : a . multiSelect ,
attributes : a . attributes } ; a . toolbarRelated = ! 0 ; this . _ = { panelDefinition : a , items : { } } } , proto : { renderHtml : function ( a ) { var b = [ ] ; this . render ( a , b ) ; return b . join ( "" ) } , render : function ( a , b ) { function j ( ) { var d = this . modes [ a . mode ] ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ; this . setState ( a . readOnly && ! this . readOnly ? CKEDITOR . TRISTATE _DISABLED : d ) ; this . setValue ( "" ) } var c = CKEDITOR . env , g = "cke_" + this . id , e = CKEDITOR . tools . addFunction ( function ( b ) { i && ( a . unlockSelection ( 1 ) , i = 0 ) ; d . execute ( b ) } , this ) , f = this , d = { id : g , combo : this ,
focus : function ( ) { CKEDITOR . document . getById ( g ) . getChild ( 1 ) . focus ( ) } , execute : function ( d ) { var b = f . _ ; if ( b . state != CKEDITOR . TRISTATE _DISABLED ) if ( f . createPanel ( a ) , b . on ) b . panel . hide ( ) ; else { f . commit ( ) ; var c = f . getValue ( ) ; c ? b . list . mark ( c ) : b . list . unmarkAll ( ) ; b . panel . showBlock ( f . id , new CKEDITOR . dom . element ( d ) , 4 ) } } , clickFn : e } ; a . on ( "mode" , j , this ) ; ! this . readOnly && a . on ( "readOnly" , j , this ) ; var k = CKEDITOR . tools . addFunction ( function ( a , b ) { var a = new CKEDITOR . dom . event ( a ) , c = a . getKeystroke ( ) ; switch ( c ) { case 13 : case 32 : case 40 : CKEDITOR . tools . callFunction ( e ,
b ) ; break ; default : d . onkey ( d , c ) } a . preventDefault ( ) } ) , l = CKEDITOR . tools . addFunction ( function ( ) { d . onfocus && d . onfocus ( ) } ) , i = 0 , m = CKEDITOR . tools . addFunction ( function ( ) { if ( CKEDITOR . env . opera ) { var b = a . editable ( ) ; b . isInline ( ) && b . hasFocus && ( a . lockSelection ( ) , i = 1 ) } } ) ; d . keyDownFn = k ; c = { id : g , name : this . name || this . command , label : this . label , title : this . title , cls : this . className || "" , titleJs : c . gecko && 10900 <= c . version && ! c . hc ? "" : ( this . title || "" ) . replace ( "'" , "" ) , keydownFn : k , mousedownFn : m , focusFn : l , clickFn : e } ; h . output ( c , b ) ;
if ( this . onRender ) this . onRender ( ) ; return d } , createPanel : function ( a ) { if ( ! this . _ . panel ) { var b = this . _ . panelDefinition , c = this . _ . panelDefinition . block , h = b . parent || CKEDITOR . document . getBody ( ) , g = "cke_combopanel__" + this . name , e = new CKEDITOR . ui . floatPanel ( a , h , b ) , f = e . addListBlock ( this . id , c ) , d = this ; e . onShow = function ( ) { this . element . addClass ( g ) ; d . setState ( CKEDITOR . TRISTATE _ON ) ; f . focus ( ! f . multiSelect && d . getValue ( ) ) ; d . _ . on = 1 ; d . editorFocus && a . focus ( ) ; if ( d . onOpen ) d . onOpen ( ) } ; e . onHide = function ( b ) { this . element . removeClass ( g ) ;
d . setState ( d . modes && d . modes [ a . mode ] ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) ; d . _ . on = 0 ; if ( ! b && d . onClose ) d . onClose ( ) } ; e . onEscape = function ( ) { e . hide ( 1 ) } ; f . onClick = function ( a , b ) { d . onClick && d . onClick . call ( d , a , b ) ; e . hide ( ) } ; this . _ . panel = e ; this . _ . list = f ; e . getBlock ( this . id ) . onHide = function ( ) { d . _ . on = 0 ; d . setState ( CKEDITOR . TRISTATE _OFF ) } ; this . init && this . init ( ) } } , setValue : function ( a , b ) { this . _ . value = a ; var c = this . document . getById ( "cke_" + this . id + "_text" ) ; c && ( ! a && ! b ? ( b = this . label , c . addClass ( "cke_combo_inlinelabel" ) ) :
c . removeClass ( "cke_combo_inlinelabel" ) , c . setText ( "undefined" != typeof b ? b : a ) ) } , getValue : function ( ) { return this . _ . value || "" } , unmarkAll : function ( ) { this . _ . list . unmarkAll ( ) } , mark : function ( a ) { this . _ . list . mark ( a ) } , hideItem : function ( a ) { this . _ . list . hideItem ( a ) } , hideGroup : function ( a ) { this . _ . list . hideGroup ( a ) } , showAll : function ( ) { this . _ . list . showAll ( ) } , add : function ( a , b , c ) { this . _ . items [ a ] = c || a ; this . _ . list . add ( a , b , c ) } , startGroup : function ( a ) { this . _ . list . startGroup ( a ) } , commit : function ( ) { this . _ . committed || ( this . _ . list . commit ( ) ,
this . _ . committed = 1 , CKEDITOR . ui . fire ( "ready" , this ) ) ; this . _ . committed = 1 } , setState : function ( a ) { if ( this . _ . state != a ) { var b = this . document . getById ( "cke_" + this . id ) ; b . setState ( a , "cke_combo" ) ; a == CKEDITOR . TRISTATE _DISABLED ? b . setAttribute ( "aria-disabled" , ! 0 ) : b . removeAttribute ( "aria-disabled" ) ; this . _ . state = a } } , enable : function ( ) { this . _ . state == CKEDITOR . TRISTATE _DISABLED && this . setState ( this . _ . lastState ) } , disable : function ( ) { this . _ . state != CKEDITOR . TRISTATE _DISABLED && ( this . _ . lastState = this . _ . state , this . setState ( CKEDITOR . TRISTATE _DISABLED ) ) } } ,
statics : { handler : { create : function ( a ) { return new CKEDITOR . ui . richCombo ( a ) } } } } ) ; CKEDITOR . ui . prototype . addRichCombo = function ( a , b ) { this . add ( a , CKEDITOR . UI _RICHCOMBO , b ) } } ) ( ) ; ( function ( ) { function g ( a , b , g , h , j , l , m , n ) { for ( var o = a . config , c = j . split ( ";" ) , j = [ ] , f = { } , d = 0 ; d < c . length ; d ++ ) { var e = c [ d ] ; if ( e ) { var e = e . split ( "/" ) , k = { } , i = c [ d ] = e [ 0 ] ; k [ g ] = j [ d ] = e [ 1 ] || i ; f [ i ] = new CKEDITOR . style ( m , k ) ; f [ i ] . _ . definition . name = i } else c . splice ( d -- , 1 ) } a . ui . addRichCombo ( b , { label : h . label , title : h . panelTitle , toolbar : "styles," + n , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) ] . concat ( o . contentsCss ) , multiSelect : ! 1 , attributes : { "aria-label" : h . panelTitle } } , init : function ( ) { this . startGroup ( h . panelTitle ) ; for ( var a =
0 ; a < c . length ; a ++ ) { var b = c [ a ] ; this . add ( b , f [ b ] . buildPreview ( ) , b ) } } , onClick : function ( b ) { a . focus ( ) ; a . fire ( "saveSnapshot" ) ; var c = f [ b ] ; a [ this . getValue ( ) == b ? "removeStyle" : "applyStyle" ] ( c ) ; a . fire ( "saveSnapshot" ) } , onRender : function ( ) { a . on ( "selectionChange" , function ( a ) { for ( var b = this . getValue ( ) , a = a . data . path . elements , c = 0 , d ; c < a . length ; c ++ ) { d = a [ c ] ; for ( var e in f ) if ( f [ e ] . checkElementMatch ( d , ! 0 ) ) { e != b && this . setValue ( e ) ; return } } this . setValue ( "" , l ) } , this ) } } ) } CKEDITOR . plugins . add ( "font" , { requires : "richcombo" , init : function ( a ) { var b =
a . config ; g ( a , "Font" , "family" , a . lang . font , b . font _names , b . font _defaultLabel , b . font _style , 30 ) ; g ( a , "FontSize" , "size" , a . lang . font . fontSize , b . fontSize _sizes , b . fontSize _defaultLabel , b . fontSize _style , 40 ) } } ) } ) ( ) ; CKEDITOR . config . font _names = "Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif" ;
CKEDITOR . config . font _defaultLabel = "" ; CKEDITOR . config . font _style = { element : "span" , styles : { "font-family" : "#(family)" } , overrides : [ { element : "font" , attributes : { face : null } } ] } ; CKEDITOR . config . fontSize _sizes = "8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px" ; CKEDITOR . config . fontSize _defaultLabel = "" ; CKEDITOR . config . fontSize _style = { element : "span" , styles : { "font-size" : "#(size)" } , overrides : [ { element : "font" , attributes : { size : null } } ] } ; ( function ( ) { function e ( b , a ) { a || ( a = b . getSelection ( ) . getSelectedElement ( ) ) ; if ( a && a . is ( "img" ) && ! a . data ( "cke-realelement" ) && ! a . isReadOnly ( ) ) return a } function f ( b ) { var a = b . getStyle ( "float" ) ; if ( "inherit" == a || "none" == a ) a = 0 ; a || ( a = b . getAttribute ( "align" ) ) ; return a } CKEDITOR . plugins . add ( "image" , { requires : "dialog" , init : function ( b ) { CKEDITOR . dialog . add ( "image" , this . path + "dialogs/image.js" ) ; b . addCommand ( "image" , new CKEDITOR . dialogCommand ( "image" ) ) ; b . ui . addButton && b . ui . addButton ( "Image" , { label : b . lang . common . image ,
command : "image" , toolbar : "insert,10" } ) ; b . on ( "doubleclick" , function ( a ) { var b = a . data . element ; b . is ( "img" ) && ( ! b . data ( "cke-realelement" ) && ! b . isReadOnly ( ) ) && ( a . data . dialog = "image" ) } ) ; b . addMenuItems && b . addMenuItems ( { image : { label : b . lang . image . menu , command : "image" , group : "image" } } ) ; b . contextMenu && b . contextMenu . addListener ( function ( a ) { if ( e ( b , a ) ) return { image : CKEDITOR . TRISTATE _OFF } } ) } , afterInit : function ( b ) { function a ( a ) { var d = b . getCommand ( "justify" + a ) ; if ( d ) { if ( "left" == a || "right" == a ) d . on ( "exec" , function ( d ) { var c =
e ( b ) , g ; c && ( g = f ( c ) , g == a ? ( c . removeStyle ( "float" ) , a == f ( c ) && c . removeAttribute ( "align" ) ) : c . setStyle ( "float" , a ) , d . cancel ( ) ) } ) ; d . on ( "refresh" , function ( d ) { var c = e ( b ) ; c && ( c = f ( c ) , this . setState ( c == a ? CKEDITOR . TRISTATE _ON : "right" == a || "left" == a ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED ) , d . cancel ( ) ) } ) } } a ( "left" ) ; a ( "right" ) ; a ( "center" ) ; a ( "block" ) } } ) } ) ( ) ; CKEDITOR . config . image _removeLinkByEmptyURL = ! 0 ; CKEDITOR . plugins . add ( "menu" , { requires : "floatpanel" , beforeInit : function ( k ) { for ( var g = k . config . menu _groups . split ( "," ) , m = k . _ . menuGroups = { } , l = k . _ . menuItems = { } , a = 0 ; a < g . length ; a ++ ) m [ g [ a ] ] = a + 1 ; k . addMenuGroup = function ( b , a ) { m [ b ] = a || 100 } ; k . addMenuItem = function ( a , c ) { m [ c . group ] && ( l [ a ] = new CKEDITOR . menuItem ( this , a , c ) ) } ; k . addMenuItems = function ( a ) { for ( var c in a ) this . addMenuItem ( c , a [ c ] ) } ; k . getMenuItem = function ( a ) { return l [ a ] } ; k . removeMenuItem = function ( a ) { delete l [ a ] } } } ) ;
( function ( ) { function k ( a ) { a . sort ( function ( a , c ) { return a . group < c . group ? - 1 : a . group > c . group ? 1 : a . order < c . order ? - 1 : a . order > c . order ? 1 : 0 } ) } var g = '<span class="cke_menuitem"><a id="{id}" class="cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href="{href}" title="{title}" tabindex="-1"_cke_focus=1 hidefocus="true" role="menuitem" aria-haspopup="{hasPopup}" aria-disabled="{disabled}" aria-pressed="{pressed}"' ; if ( CKEDITOR . env . opera || CKEDITOR . env . gecko && CKEDITOR . env . mac ) g += ' onkeypress="return false;"' ;
CKEDITOR . env . gecko && ( g += ' onblur="this.style.cssText = this.style.cssText;"' ) ; var g = g + ( ' onmouseover="CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout="CKEDITOR.tools.callFunction({moveOutFn},{index});" ' + ( CKEDITOR . env . ie ? 'onclick="return false;" onmouseup' : "onclick" ) + '="CKEDITOR.tools.callFunction({clickFn},{index}); return false;">' ) , m = CKEDITOR . addTemplate ( "menuItem" , g + '<span class="cke_menubutton_inner"><span class="cke_menubutton_icon"><span class="cke_button_icon cke_button__{iconName}_icon" style="{iconStyle}"></span></span><span class="cke_menubutton_label">{label}</span>{arrowHtml}</span></a></span>' ) ,
l = CKEDITOR . addTemplate ( "menuArrow" , '<span class="cke_menuarrow"><span>{label}</span></span>' ) ; CKEDITOR . menu = CKEDITOR . tools . createClass ( { $ : function ( a , b ) { b = this . _ . definition = b || { } ; this . id = CKEDITOR . tools . getNextId ( ) ; this . editor = a ; this . items = [ ] ; this . _ . listeners = [ ] ; this . _ . level = b . level || 1 ; var c = CKEDITOR . tools . extend ( { } , b . panel , { css : [ CKEDITOR . skin . getPath ( "editor" ) ] , level : this . _ . level - 1 , block : { } } ) , j = c . block . attributes = c . attributes || { } ; ! j . role && ( j . role = "menu" ) ; this . _ . panelDefinition = c } , _ : { onShow : function ( ) { var a =
this . editor . getSelection ( ) , b = a && a . getStartElement ( ) , c = this . editor . elementPath ( ) , j = this . _ . listeners ; this . removeAll ( ) ; for ( var e = 0 ; e < j . length ; e ++ ) { var i = j [ e ] ( b , a , c ) ; if ( i ) for ( var f in i ) { var h = this . editor . getMenuItem ( f ) ; if ( h && ( ! h . command || this . editor . getCommand ( h . command ) . state ) ) h . state = i [ f ] , this . add ( h ) } } } , onClick : function ( a ) { this . hide ( ) ; if ( a . onClick ) a . onClick ( ) ; else a . command && this . editor . execCommand ( a . command ) } , onEscape : function ( a ) { var b = this . parent ; b ? b . _ . panel . hideChild ( 1 ) : 27 == a && this . hide ( 1 ) ; return ! 1 } ,
onHide : function ( ) { this . onHide && this . onHide ( ) } , showSubMenu : function ( a ) { var b = this . _ . subMenu , c = this . items [ a ] ; if ( c = c . getItems && c . getItems ( ) ) { b ? b . removeAll ( ) : ( b = this . _ . subMenu = new CKEDITOR . menu ( this . editor , CKEDITOR . tools . extend ( { } , this . _ . definition , { level : this . _ . level + 1 } , ! 0 ) ) , b . parent = this , b . _ . onClick = CKEDITOR . tools . bind ( this . _ . onClick , this ) ) ; for ( var j in c ) { var e = this . editor . getMenuItem ( j ) ; e && ( e . state = c [ j ] , b . add ( e ) ) } var i = this . _ . panel . getBlock ( this . id ) . element . getDocument ( ) . getById ( this . id + ( "" + a ) ) ; setTimeout ( function ( ) { b . show ( i ,
2 ) } , 0 ) } else this . _ . panel . hideChild ( 1 ) } } , proto : { add : function ( a ) { a . order || ( a . order = this . items . length ) ; this . items . push ( a ) } , removeAll : function ( ) { this . items = [ ] } , show : function ( a , b , c , j ) { if ( ! this . parent && ( this . _ . onShow ( ) , ! this . items . length ) ) return ; var b = b || ( "rtl" == this . editor . lang . dir ? 2 : 1 ) , e = this . items , i = this . editor , f = this . _ . panel , h = this . _ . element ; if ( ! f ) { f = this . _ . panel = new CKEDITOR . ui . floatPanel ( this . editor , CKEDITOR . document . getBody ( ) , this . _ . panelDefinition , this . _ . level ) ; f . onEscape = CKEDITOR . tools . bind ( function ( a ) { if ( ! 1 ===
this . _ . onEscape ( a ) ) return ! 1 } , this ) ; f . onShow = function ( ) { f . _ . panel . getHolderElement ( ) . getParent ( ) . addClass ( "cke cke_reset_all" ) } ; f . onHide = CKEDITOR . tools . bind ( function ( ) { this . _ . onHide && this . _ . onHide ( ) } , this ) ; h = f . addBlock ( this . id , this . _ . panelDefinition . block ) ; h . autoSize = ! 0 ; var d = h . keys ; d [ 40 ] = "next" ; d [ 9 ] = "next" ; d [ 38 ] = "prev" ; d [ CKEDITOR . SHIFT + 9 ] = "prev" ; d [ "rtl" == i . lang . dir ? 37 : 39 ] = CKEDITOR . env . ie ? "mouseup" : "click" ; d [ 32 ] = CKEDITOR . env . ie ? "mouseup" : "click" ; CKEDITOR . env . ie && ( d [ 13 ] = "mouseup" ) ; h = this . _ . element =
h . element ; d = h . getDocument ( ) ; d . getBody ( ) . setStyle ( "overflow" , "hidden" ) ; d . getElementsByTag ( "html" ) . getItem ( 0 ) . setStyle ( "overflow" , "hidden" ) ; this . _ . itemOverFn = CKEDITOR . tools . addFunction ( function ( a ) { clearTimeout ( this . _ . showSubTimeout ) ; this . _ . showSubTimeout = CKEDITOR . tools . setTimeout ( this . _ . showSubMenu , i . config . menu _subMenuDelay || 400 , this , [ a ] ) } , this ) ; this . _ . itemOutFn = CKEDITOR . tools . addFunction ( function ( ) { clearTimeout ( this . _ . showSubTimeout ) } , this ) ; this . _ . itemClickFn = CKEDITOR . tools . addFunction ( function ( a ) { var b =
this . items [ a ] ; if ( b . state == CKEDITOR . TRISTATE _DISABLED ) this . hide ( 1 ) ; else if ( b . getItems ) this . _ . showSubMenu ( a ) ; else this . _ . onClick ( b ) } , this ) } k ( e ) ; for ( var d = i . elementPath ( ) , d = [ '<div class="cke_menu' + ( d && d . direction ( ) != i . lang . dir ? " cke_mixed_dir_content" : "" ) + '" role="presentation">' ] , g = e . length , m = g && e [ 0 ] . group , l = 0 ; l < g ; l ++ ) { var n = e [ l ] ; m != n . group && ( d . push ( '<div class="cke_menuseparator" role="separator"></div>' ) , m = n . group ) ; n . render ( this , l , d ) } d . push ( "</div>" ) ; h . setHtml ( d . join ( "" ) ) ; CKEDITOR . ui . fire ( "ready" ,
this ) ; this . parent ? this . parent . _ . panel . showAsChild ( f , this . id , a , b , c , j ) : f . showBlock ( this . id , a , b , c , j ) ; i . fire ( "menuShow" , [ f ] ) } , addListener : function ( a ) { this . _ . listeners . push ( a ) } , hide : function ( a ) { this . _ . onHide && this . _ . onHide ( ) ; this . _ . panel && this . _ . panel . hide ( a ) } } } ) ; CKEDITOR . menuItem = CKEDITOR . tools . createClass ( { $ : function ( a , b , c ) { CKEDITOR . tools . extend ( this , c , { order : 0 , className : "cke_menubutton__" + b } ) ; this . group = a . _ . menuGroups [ this . group ] ; this . editor = a ; this . name = b } , proto : { render : function ( a , b , c ) { var g = a . id + ( "" +
b ) , e = "undefined" == typeof this . state ? CKEDITOR . TRISTATE _OFF : this . state , i = e == CKEDITOR . TRISTATE _ON ? "on" : e == CKEDITOR . TRISTATE _DISABLED ? "disabled" : "off" , f = this . getItems , h = "&#" + ( "rtl" == this . editor . lang . dir ? "9668" : "9658" ) + ";" , d = this . name ; this . icon && ! /\./ . test ( this . icon ) && ( d = this . icon ) ; a = { id : g , name : this . name , iconName : d , label : this . label , cls : this . className || "" , state : i , hasPopup : f ? "true" : "false" , disabled : e == CKEDITOR . TRISTATE _DISABLED , pressed : e == CKEDITOR . TRISTATE _ON , title : this . label , href : "javascript:void('" + ( this . label ||
"" ) . replace ( "'" ) + "')" , hoverFn : a . _ . itemOverFn , moveOutFn : a . _ . itemOutFn , clickFn : a . _ . itemClickFn , index : b , iconStyle : CKEDITOR . skin . getIconStyle ( d , "rtl" == this . editor . lang . dir , d == this . icon ? null : this . icon , this . iconOffset ) , arrowHtml : f ? l . output ( { label : h } ) : "" } ; m . output ( a , c ) } } } ) } ) ( ) ; CKEDITOR . config . menu _groups = "clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div" ; CKEDITOR . plugins . add ( "menubutton" , { requires : "button,menu" , onLoad : function ( ) { var d = function ( a ) { var b = this . _ ; if ( b . state !== CKEDITOR . TRISTATE _DISABLED ) { b . previousState = b . state ; var c = b . menu ; c || ( c = b . menu = new CKEDITOR . menu ( a , { panel : { className : "cke_menu_panel" , attributes : { "aria-label" : a . lang . common . options } } } ) , c . onHide = CKEDITOR . tools . bind ( function ( ) { this . setState ( this . modes && this . modes [ a . mode ] ? b . previousState : CKEDITOR . TRISTATE _DISABLED ) } , this ) , this . onMenu && c . addListener ( this . onMenu ) ) ; b . on ? c . hide ( ) : ( this . setState ( CKEDITOR . TRISTATE _ON ) ,
setTimeout ( function ( ) { c . show ( CKEDITOR . document . getById ( b . id ) , 4 ) } , 0 ) ) } } ; CKEDITOR . ui . menuButton = CKEDITOR . tools . createClass ( { base : CKEDITOR . ui . button , $ : function ( a ) { delete a . panel ; this . base ( a ) ; this . hasArrow = ! 0 ; this . click = d } , statics : { handler : { create : function ( a ) { return new CKEDITOR . ui . menuButton ( a ) } } } } ) } , beforeInit : function ( d ) { d . ui . addHandler ( CKEDITOR . UI _MENUBUTTON , CKEDITOR . ui . menuButton . handler ) } } ) ; CKEDITOR . UI _MENUBUTTON = "menubutton" ; ( function ( ) { function k ( a , c ) { var b = 0 , d ; for ( d in c ) if ( c [ d ] == a ) { b = 1 ; break } return b } var i = "" , r = function ( ) { function a ( ) { b . once ( "focus" , f ) ; b . once ( "blur" , c ) } function c ( b ) { var b = b . editor , c = d . getScayt ( b ) , f = b . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ; c && ( d . setPaused ( b , ! c . disabled ) , d . setControlId ( b , c . id ) , c . destroy ( ! 0 ) , delete d . instances [ b . name ] , f && a ( ) ) } var b = this , f = function ( ) { if ( ! ( "undefined" != typeof d . instances [ b . name ] || null != d . instances [ b . name ] ) ) { var a = b . config , c = { } ; c . srcNodeRef = "BODY" == b . editable ( ) . $ . nodeName ?
b . document . getWindow ( ) . $ . frameElement : b . editable ( ) . $ ; c . assocApp = "CKEDITOR." + CKEDITOR . version + "@" + CKEDITOR . revision ; c . customerid = a . scayt _customerid || "1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2" ; c . customDictionaryIds = a . scayt _customDictionaryIds || "" ; c . userDictionaryName = a . scayt _userDictionaryName || "" ; c . sLang = a . scayt _sLang || "en_US" ; c . onLoad = function ( ) { CKEDITOR . env . ie && 8 > CKEDITOR . env . version || this . addStyle ( this . selectorCss ( ) , "padding-bottom: 2px !important;" ) ; b . editable ( ) . hasFocus &&
! d . isControlRestored ( b ) && this . focus ( ) } ; c . onBeforeChange = function ( ) { d . getScayt ( b ) && ! b . checkDirty ( ) && setTimeout ( function ( ) { b . resetDirty ( ) } , 0 ) } ; a = window . scayt _custom _params ; if ( "object" == typeof a ) for ( var f in a ) c [ f ] = a [ f ] ; d . getControlId ( b ) && ( c . id = d . getControlId ( b ) ) ; var o = new window . scayt ( c ) ; o . afterMarkupRemove . push ( function ( a ) { ( new CKEDITOR . dom . element ( a , o . document ) ) . mergeSiblings ( ) } ) ; if ( c = d . instances [ b . name ] ) o . sLang = c . sLang , o . option ( c . option ( ) ) , o . paused = c . paused ; d . instances [ b . name ] = o ; try { o . setDisabled ( ! 1 ===
d . isPaused ( b ) ) } catch ( e ) { } b . fire ( "showScaytState" ) } } ; b . elementMode == CKEDITOR . ELEMENT _MODE _INLINE ? a ( ) : b . on ( "contentDom" , f ) ; b . on ( "contentDomUnload" , function ( ) { for ( var a = CKEDITOR . document . getElementsByTag ( "script" ) , b = /^dojoIoScript(\d+)$/i , c = /^https?:\/\/svc\.webspellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i , d = 0 ; d < a . count ( ) ; d ++ ) { var f = a . getItem ( d ) , e = f . getId ( ) , h = f . getAttribute ( "src" ) ; e && ( h && e . match ( b ) && h . match ( c ) ) && f . remove ( ) } } ) ; b . on ( "beforeCommandExec" , function ( a ) { "source" == a . data . name && "source" ==
b . mode && d . markControlRestore ( b ) } ) ; b . on ( "afterCommandExec" , function ( a ) { d . isScaytEnabled ( b ) && "wysiwyg" == b . mode && ( "undo" == a . data . name || "redo" == a . data . name ) && window . setTimeout ( function ( ) { d . getScayt ( b ) . refresh ( ) } , 10 ) } ) ; b . on ( "destroy" , c ) ; b . on ( "setData" , c ) ; b . on ( "insertElement" , function ( ) { var a = d . getScayt ( b ) ; d . isScaytEnabled ( b ) && ( CKEDITOR . env . ie && b . getSelection ( ) . unlock ( ! 0 ) , window . setTimeout ( function ( ) { a . focus ( ) ; a . refresh ( ) } , 10 ) ) } , this , null , 50 ) ; b . on ( "insertHtml" , function ( ) { var a = d . getScayt ( b ) ; d . isScaytEnabled ( b ) &&
( CKEDITOR . env . ie && b . getSelection ( ) . unlock ( ! 0 ) , window . setTimeout ( function ( ) { a . focus ( ) ; a . refresh ( ) } , 10 ) ) } , this , null , 50 ) ; b . on ( "scaytDialog" , function ( a ) { a . data . djConfig = window . djConfig ; a . data . scayt _control = d . getScayt ( b ) ; a . data . tab = i ; a . data . scayt = window . scayt } ) ; var e = b . dataProcessor ; ( e = e && e . htmlFilter ) && e . addRules ( { elements : { span : function ( a ) { if ( a . attributes [ "data-scayt_word" ] && a . attributes [ "data-scaytid" ] ) return delete a . name , a } } } ) ; e = CKEDITOR . plugins . undo . Image . prototype ; e . equals = CKEDITOR . tools . override ( e . equals ,
function ( a ) { return function ( b ) { var c = this . contents , f = b . contents , e = d . getScayt ( this . editor ) ; e && d . isScaytReady ( this . editor ) && ( this . contents = e . reset ( c ) || "" , b . contents = e . reset ( f ) || "" ) ; e = a . apply ( this , arguments ) ; this . contents = c ; b . contents = f ; return e } } ) ; b . document && ( b . elementMode != CKEDITOR . ELEMENT _MODE _INLINE || b . focusManager . hasFocus ) && f ( ) } ; CKEDITOR . plugins . scayt = { engineLoaded : ! 1 , instances : { } , controlInfo : { } , setControlInfo : function ( a , c ) { a && ( a . name && "object" != typeof this . controlInfo [ a . name ] ) && ( this . controlInfo [ a . name ] =
{ } ) ; for ( var b in c ) this . controlInfo [ a . name ] [ b ] = c [ b ] } , isControlRestored : function ( a ) { return a && a . name && this . controlInfo [ a . name ] ? this . controlInfo [ a . name ] . restored : ! 1 } , markControlRestore : function ( a ) { this . setControlInfo ( a , { restored : ! 0 } ) } , setControlId : function ( a , c ) { this . setControlInfo ( a , { id : c } ) } , getControlId : function ( a ) { return a && a . name && this . controlInfo [ a . name ] && this . controlInfo [ a . name ] . id ? this . controlInfo [ a . name ] . id : null } , setPaused : function ( a , c ) { this . setControlInfo ( a , { paused : c } ) } , isPaused : function ( a ) { if ( a &&
a . name && this . controlInfo [ a . name ] ) return this . controlInfo [ a . name ] . paused } , getScayt : function ( a ) { return this . instances [ a . name ] } , isScaytReady : function ( a ) { return ! 0 === this . engineLoaded && "undefined" !== typeof window . scayt && this . getScayt ( a ) } , isScaytEnabled : function ( a ) { return ( a = this . getScayt ( a ) ) ? ! 1 === a . disabled : ! 1 } , getUiTabs : function ( a ) { var c = [ ] , b = a . config . scayt _uiTabs || "1,1,1" , b = b . split ( "," ) ; b [ 3 ] = "1" ; for ( var d = 0 ; 4 > d ; d ++ ) c [ d ] = "undefined" != typeof window . scayt && "undefined" != typeof window . scayt . uiTags ? parseInt ( b [ d ] ,
10 ) && window . scayt . uiTags [ d ] : parseInt ( b [ d ] , 10 ) ; "object" == typeof a . plugins . wsc ? c . push ( 1 ) : c . push ( 0 ) ; return c } , loadEngine : function ( a ) { if ( CKEDITOR . env . gecko && 10900 > CKEDITOR . env . version || CKEDITOR . env . opera || CKEDITOR . env . air ) return a . fire ( "showScaytState" ) ; if ( ! 0 === this . engineLoaded ) return r . apply ( a ) ; if ( - 1 == this . engineLoaded ) return CKEDITOR . on ( "scaytReady" , function ( ) { r . apply ( a ) } ) ; CKEDITOR . on ( "scaytReady" , r , a ) ; CKEDITOR . on ( "scaytReady" , function ( ) { this . engineLoaded = ! 0 } , this , null , 0 ) ; this . engineLoaded = - 1 ; var c =
document . location . protocol , c = - 1 != c . search ( /https?:/ ) ? c : "http:" , c = a . config . scayt _srcUrl || c + "//svc.webspellchecker.net/scayt26/loader__base.js" , b = d . parseUrl ( c ) . path + "/" ; void 0 == window . scayt ? ( CKEDITOR . _djScaytConfig = { baseUrl : b , addOnLoad : [ function ( ) { CKEDITOR . fireOnce ( "scaytReady" ) } ] , isDebug : ! 1 } , CKEDITOR . document . getHead ( ) . append ( CKEDITOR . document . createElement ( "script" , { attributes : { type : "text/javascript" , async : "true" , src : c } } ) ) ) : CKEDITOR . fireOnce ( "scaytReady" ) ; return null } , parseUrl : function ( a ) { var c ; return a . match &&
( c = a . match ( /(.*)[\/\\](.*?\.\w+)$/ ) ) ? { path : c [ 1 ] , file : c [ 2 ] } : a } } ; var d = CKEDITOR . plugins . scayt , s = function ( a , c , b , d , e , k , g ) { a . addCommand ( d , e ) ; a . addMenuItem ( d , { label : b , command : d , group : k , order : g } ) } , v = { preserveState : ! 0 , editorFocus : ! 1 , canUndo : ! 1 , exec : function ( a ) { if ( d . isScaytReady ( a ) ) { var c = d . isScaytEnabled ( a ) ; this . setState ( c ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _ON ) ; a = d . getScayt ( a ) ; a . focus ( ) ; a . setDisabled ( c ) } else ! a . config . scayt _autoStartup && 0 <= d . engineLoaded && ( a . focus ( ) , this . setState ( CKEDITOR . TRISTATE _DISABLED ) ,
d . loadEngine ( a ) ) } } ; CKEDITOR . plugins . add ( "scayt" , { requires : "menubutton,dialog" , beforeInit : function ( a ) { var c = a . config . scayt _contextMenuItemsOrder || "suggest|moresuggest|control" , b = "" ; if ( ( c = c . split ( "|" ) ) && c . length ) for ( var d = 0 ; d < c . length ; d ++ ) b += "scayt_" + c [ d ] + ( c . length != parseInt ( d , 10 ) + 1 ? "," : "" ) ; a . config . menu _groups = b + "," + a . config . menu _groups } , init : function ( a ) { var c = a . dataProcessor && a . dataProcessor . dataFilter , b = { elements : { span : function ( a ) { var b = a . attributes ; b && b [ "data-scaytid" ] && delete a . name } } } ; c && c . addRules ( b ) ;
var f = { } , e = { } , p = a . addCommand ( "scaytcheck" , v ) ; CKEDITOR . dialog . add ( "scaytcheck" , CKEDITOR . getUrl ( this . path + "dialogs/options.js" ) ) ; c = d . getUiTabs ( a ) ; a . addMenuGroup ( "scaytButton" ) ; a . addMenuGroup ( "scayt_suggest" , - 10 ) ; a . addMenuGroup ( "scayt_moresuggest" , - 9 ) ; a . addMenuGroup ( "scayt_control" , - 8 ) ; var b = { } , g = a . lang . scayt ; b . scaytToggle = { label : g . enable , command : "scaytcheck" , group : "scaytButton" } ; 1 == c [ 0 ] && ( b . scaytOptions = { label : g . options , group : "scaytButton" , onClick : function ( ) { i = "options" ; a . openDialog ( "scaytcheck" ) } } ) ;
1 == c [ 1 ] && ( b . scaytLangs = { label : g . langs , group : "scaytButton" , onClick : function ( ) { i = "langs" ; a . openDialog ( "scaytcheck" ) } } ) ; 1 == c [ 2 ] && ( b . scaytDict = { label : g . dictionariesTab , group : "scaytButton" , onClick : function ( ) { i = "dictionaries" ; a . openDialog ( "scaytcheck" ) } } ) ; b . scaytAbout = { label : a . lang . scayt . about , group : "scaytButton" , onClick : function ( ) { i = "about" ; a . openDialog ( "scaytcheck" ) } } ; 1 == c [ 4 ] && ( b . scaytWSC = { label : a . lang . wsc . toolbar , group : "scaytButton" , command : "checkspell" } ) ; a . addMenuItems ( b ) ; a . ui . add ( "Scayt" , CKEDITOR . UI _MENUBUTTON ,
{ label : g . title , title : CKEDITOR . env . opera ? g . opera _title : g . title , modes : { wysiwyg : 1 } , toolbar : "spellchecker,20" , onRender : function ( ) { p . on ( "state" , function ( ) { this . setState ( p . state ) } , this ) } , onMenu : function ( ) { var b = d . isScaytEnabled ( a ) ; a . getMenuItem ( "scaytToggle" ) . label = g [ b ? "disable" : "enable" ] ; var c = d . getUiTabs ( a ) ; return { scaytToggle : CKEDITOR . TRISTATE _OFF , scaytOptions : b && c [ 0 ] ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , scaytLangs : b && c [ 1 ] ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , scaytDict : b && c [ 2 ] ?
CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , scaytAbout : b && c [ 3 ] ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED , scaytWSC : c [ 4 ] ? CKEDITOR . TRISTATE _OFF : CKEDITOR . TRISTATE _DISABLED } } } ) ; a . contextMenu && a . addMenuItems && a . contextMenu . addListener ( function ( b , c ) { if ( ! d . isScaytEnabled ( a ) || c . getRanges ( ) [ 0 ] . checkReadOnly ( ) ) return null ; var l = d . getScayt ( a ) , q = l . getScaytNode ( ) ; if ( ! q ) return null ; var h = l . getWord ( q ) ; if ( ! h ) return null ; var i = l . getLang ( ) , m = a . config . scayt _contextCommands || "all" , h = window . scayt . getSuggestion ( h ,
i ) , m = m . split ( "|" ) , n ; for ( n in f ) { delete a . _ . menuItems [ n ] ; delete a . commands [ n ] } for ( n in e ) { delete a . _ . menuItems [ n ] ; delete a . commands [ n ] } if ( ! h || ! h . length ) { s ( a , "no_sugg" , g . noSuggestions , "scayt_no_sugg" , { exec : function ( ) { } } , "scayt_control" , 1 , true ) ; e . scayt _no _sugg = CKEDITOR . TRISTATE _OFF } else { f = { } ; e = { } ; n = a . config . scayt _moreSuggestions || "on" ; var i = false , u = a . config . scayt _maxSuggestions ; typeof u != "number" && ( u = 5 ) ; ! u && ( u = h . length ) ; for ( var j = 0 , p = h . length ; j < p ; j = j + 1 ) { var t = "scayt_suggestion_" + h [ j ] . replace ( " " , "_" ) ,
r = function ( a , b ) { return { exec : function ( ) { l . replace ( a , b ) } } } ( q , h [ j ] ) ; if ( j < u ) { s ( a , "button_" + t , h [ j ] , t , r , "scayt_suggest" , j + 1 ) ; e [ t ] = CKEDITOR . TRISTATE _OFF } else if ( n == "on" ) { s ( a , "button_" + t , h [ j ] , t , r , "scayt_moresuggest" , j + 1 ) ; f [ t ] = CKEDITOR . TRISTATE _OFF ; i = true } } if ( i ) { a . addMenuItem ( "scayt_moresuggest" , { label : g . moreSuggestions , group : "scayt_moresuggest" , order : 10 , getItems : function ( ) { return f } } ) ; e . scayt _moresuggest = CKEDITOR . TRISTATE _OFF } } if ( k ( "all" , m ) || k ( "ignore" , m ) ) { s ( a , "ignore" , g . ignore , "scayt_ignore" , { exec : function ( ) { l . ignore ( q ) } } ,
"scayt_control" , 2 ) ; e . scayt _ignore = CKEDITOR . TRISTATE _OFF } if ( k ( "all" , m ) || k ( "ignoreall" , m ) ) { s ( a , "ignore_all" , g . ignoreAll , "scayt_ignore_all" , { exec : function ( ) { l . ignoreAll ( q ) } } , "scayt_control" , 3 ) ; e . scayt _ignore _all = CKEDITOR . TRISTATE _OFF } if ( k ( "all" , m ) || k ( "add" , m ) ) { s ( a , "add_word" , g . addWord , "scayt_add_word" , { exec : function ( ) { window . scayt . addWordToUserDictionary ( q ) } } , "scayt_control" , 4 ) ; e . scayt _add _word = CKEDITOR . TRISTATE _OFF } l . fireOnContextMenu && l . fireOnContextMenu ( a ) ; return e } ) ; c = function ( b ) { b . removeListener ( ) ;
CKEDITOR . env . opera || CKEDITOR . env . air ? p . setState ( CKEDITOR . TRISTATE _DISABLED ) : p . setState ( d . isScaytEnabled ( a ) ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ) } ; a . on ( "showScaytState" , c ) ; a . on ( "instanceReady" , c ) ; if ( a . config . scayt _autoStartup ) a . on ( "instanceReady" , function ( ) { d . loadEngine ( a ) } ) } , afterInit : function ( a ) { var c , b = function ( a ) { if ( a . hasAttribute ( "data-scaytid" ) ) return ! 1 } ; a . _ . elementsPath && ( c = a . _ . elementsPath . filters ) && c . push ( b ) ; a . addRemoveFormatFilter && a . addRemoveFormatFilter ( b ) } } ) } ) ( ) ; CKEDITOR . plugins . add ( "format" , { requires : "richcombo" , init : function ( a ) { if ( ! a . blockless ) { for ( var g = a . config , c = a . lang . format , j = g . format _tags . split ( ";" ) , d = { } , h = 0 ; h < j . length ; h ++ ) { var i = j [ h ] ; d [ i ] = new CKEDITOR . style ( g [ "format_" + i ] ) ; d [ i ] . _ . enterMode = a . config . enterMode } a . ui . addRichCombo ( "Format" , { label : c . label , title : c . panelTitle , toolbar : "styles,20" , panel : { css : [ CKEDITOR . skin . getPath ( "editor" ) ] . concat ( g . contentsCss ) , multiSelect : ! 1 , attributes : { "aria-label" : c . panelTitle } } , init : function ( ) { this . startGroup ( c . panelTitle ) ;
for ( var a in d ) { var e = c [ "tag_" + a ] ; this . add ( a , d [ a ] . buildPreview ( e ) , e ) } } , onClick : function ( b ) { a . focus ( ) ; a . fire ( "saveSnapshot" ) ; var b = d [ b ] , e = a . elementPath ( ) ; a [ b . checkActive ( e ) ? "removeStyle" : "applyStyle" ] ( b ) ; setTimeout ( function ( ) { a . fire ( "saveSnapshot" ) } , 0 ) } , onRender : function ( ) { a . on ( "selectionChange" , function ( b ) { var e = this . getValue ( ) , b = b . data . path , c = ! a . readOnly && b . isContextFor ( "p" ) ; this [ c ? "enable" : "disable" ] ( ) ; if ( c ) { for ( var f in d ) if ( d [ f ] . checkActive ( b ) ) { f != e && this . setValue ( f , a . lang . format [ "tag_" + f ] ) ; return } this . setValue ( "" ) } } ,
this ) } } ) } } } ) ; CKEDITOR . config . format _tags = "p;h1;h2;h3;h4;h5;h6;pre;address;div" ; CKEDITOR . config . format _p = { element : "p" } ; CKEDITOR . config . format _div = { element : "div" } ; CKEDITOR . config . format _pre = { element : "pre" } ; CKEDITOR . config . format _address = { element : "address" } ; CKEDITOR . config . format _h1 = { element : "h1" } ; CKEDITOR . config . format _h2 = { element : "h2" } ; CKEDITOR . config . format _h3 = { element : "h3" } ; CKEDITOR . config . format _h4 = { element : "h4" } ; CKEDITOR . config . format _h5 = { element : "h5" } ; CKEDITOR . config . format _h6 = { element : "h6" } ; ( function ( ) { function l ( a , c ) { var c = void 0 === c || c , b ; if ( c ) b = a . getComputedStyle ( "text-align" ) ; else { for ( ; ! a . hasAttribute || ! a . hasAttribute ( "align" ) && ! a . getStyle ( "text-align" ) ; ) { b = a . getParent ( ) ; if ( ! b ) break ; a = b } b = a . getStyle ( "text-align" ) || a . getAttribute ( "align" ) || "" } b && ( b = b . replace ( /(?:-(?:moz|webkit)-)?(?:start|auto)/i , "" ) ) ; ! b && c && ( b = "rtl" == a . getComputedStyle ( "direction" ) ? "right" : "left" ) ; return b } function f ( a , c , b ) { this . editor = a ; this . name = c ; this . value = b ; this . context = "p" ; if ( a = a . config . justifyClasses ) { switch ( b ) { case "left" : this . cssClassName =
a [ 0 ] ; break ; case "center" : this . cssClassName = a [ 1 ] ; break ; case "right" : this . cssClassName = a [ 2 ] ; break ; case "justify" : this . cssClassName = a [ 3 ] } this . cssClassRegex = RegExp ( "(?:^|\\s+)(?:" + a . join ( "|" ) + ")(?=$|\\s)" ) } } function j ( a ) { var c = a . editor , b = c . createRange ( ) ; b . setStartBefore ( a . data . node ) ; b . setEndAfter ( a . data . node ) ; for ( var h = new CKEDITOR . dom . walker ( b ) , d ; d = h . next ( ) ; ) if ( d . type == CKEDITOR . NODE _ELEMENT ) if ( ! d . equals ( a . data . node ) && d . getDirection ( ) ) b . setStartAfter ( d ) , h = new CKEDITOR . dom . walker ( b ) ; else { var e = c . config . justifyClasses ;
e && ( d . hasClass ( e [ 0 ] ) ? ( d . removeClass ( e [ 0 ] ) , d . addClass ( e [ 2 ] ) ) : d . hasClass ( e [ 2 ] ) && ( d . removeClass ( e [ 2 ] ) , d . addClass ( e [ 0 ] ) ) ) ; e = d . getStyle ( "text-align" ) ; "left" == e ? d . setStyle ( "text-align" , "right" ) : "right" == e && d . setStyle ( "text-align" , "left" ) } } f . prototype = { exec : function ( a ) { var c = a . getSelection ( ) , b = a . config . enterMode ; if ( c ) { for ( var h = c . createBookmarks ( ) , d = c . getRanges ( ! 0 ) , e = this . cssClassName , f , g , i = a . config . useComputedState , i = void 0 === i || i , k = d . length - 1 ; 0 <= k ; k -- ) { f = d [ k ] . createIterator ( ) ; for ( f . enlargeBr = b != CKEDITOR . ENTER _BR ; g =
f . getNextParagraph ( b == CKEDITOR . ENTER _P ? "p" : "div" ) ; ) { g . removeAttribute ( "align" ) ; g . removeStyle ( "text-align" ) ; var j = e && ( g . $ . className = CKEDITOR . tools . ltrim ( g . $ . className . replace ( this . cssClassRegex , "" ) ) ) , m = this . state == CKEDITOR . TRISTATE _OFF && ( ! i || l ( g , ! 0 ) != this . value ) ; e ? m ? g . addClass ( e ) : j || g . removeAttribute ( "class" ) : m && g . setStyle ( "text-align" , this . value ) } } a . focus ( ) ; a . forceNextSelectionCheck ( ) ; c . selectBookmarks ( h ) } } , refresh : function ( a , c ) { var b = c . block || c . blockLimit ; this . setState ( "body" != b . getName ( ) && l ( b , this . editor . config . useComputedState ) ==
this . value ? CKEDITOR . TRISTATE _ON : CKEDITOR . TRISTATE _OFF ) } } ; CKEDITOR . plugins . add ( "justify" , { init : function ( a ) { if ( ! a . blockless ) { var c = new f ( a , "justifyleft" , "left" ) , b = new f ( a , "justifycenter" , "center" ) , h = new f ( a , "justifyright" , "right" ) , d = new f ( a , "justifyblock" , "justify" ) ; a . addCommand ( "justifyleft" , c ) ; a . addCommand ( "justifycenter" , b ) ; a . addCommand ( "justifyright" , h ) ; a . addCommand ( "justifyblock" , d ) ; a . ui . addButton && ( a . ui . addButton ( "JustifyLeft" , { label : a . lang . justify . left , command : "justifyleft" , toolbar : "align,10" } ) ,
a . ui . addButton ( "JustifyCenter" , { label : a . lang . justify . center , command : "justifycenter" , toolbar : "align,20" } ) , a . ui . addButton ( "JustifyRight" , { label : a . lang . justify . right , command : "justifyright" , toolbar : "align,30" } ) , a . ui . addButton ( "JustifyBlock" , { label : a . lang . justify . block , command : "justifyblock" , toolbar : "align,40" } ) ) ; a . on ( "dirChanged" , j ) } } } ) } ) ( ) ; CKEDITOR . plugins . add ( "wsc" , { requires : "dialog" , init : function ( a ) { a . addCommand ( "checkspell" , new CKEDITOR . dialogCommand ( "checkspell" ) ) . modes = { wysiwyg : ! CKEDITOR . env . opera && ! CKEDITOR . env . air && document . domain == window . location . hostname } ; "undefined" == typeof a . plugins . scayt && a . ui . addButton && a . ui . addButton ( "SpellChecker" , { label : a . lang . wsc . toolbar , command : "checkspell" , toolbar : "spellchecker,10" } ) ; CKEDITOR . dialog . add ( "checkspell" , this . path + "dialogs/wsc.js" ) } } ) ;
CKEDITOR . config . wsc _customerId = CKEDITOR . config . wsc _customerId || "1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk" ; CKEDITOR . config . wsc _customLoaderScript = CKEDITOR . config . wsc _customLoaderScript || null ; CKEDITOR . config . plugins = 'dialogui,dialog,about,basicstyles,clipboard,button,toolbar,list,indent,enterkey,entities,floatingspace,wysiwygarea,fakeobjects,link,pastetext,undo,panelbutton,panel,floatpanel,colorbutton,listblock,richcombo,font,image,menu,menubutton,scayt,format,justify,wsc' ; CKEDITOR . config . skin = 'moono' ; ( function ( ) { var icons = ( 'about,0,bold,32,italic,64,strike,96,subscript,128,superscript,160,underline,192,copy-rtl,224,copy,256,cut-rtl,288,cut,320,paste-rtl,352,paste,384,bulletedlist-rtl,416,bulletedlist,448,numberedlist-rtl,480,numberedlist,512,indent-rtl,544,indent,576,outdent-rtl,608,outdent,640,anchor-rtl,672,anchor,704,link,736,unlink,768,pastetext-rtl,800,pastetext,832,redo-rtl,864,redo,896,undo-rtl,928,undo,960,bgcolor,992,textcolor,1024,image,1056,scayt,1088,justifyblock,1120,justifycenter,1152,justifyleft,1184,justifyright,1216,spellchecker,1248' ) , path = CKEDITOR . getUrl ( 'plugins/icons.png' ) , icons = icons . split ( ',' ) ; for ( var i = 0 ; i < icons . length ; i ++ ) CKEDITOR . skin . icons [ icons [ i ] ] = { path : path , offset : - icons [ ++ i ] } ; } ) ( ) ; CKEDITOR . lang . languages = { "ca" : 1 , "cs" : 1 , "da" : 1 , "nl" : 1 , "en" : 1 , "fi" : 1 , "fr" : 1 , "de" : 1 , "hu" : 1 , "is" : 1 , "it" : 1 , "no" : 1 , "nb" : 1 , "pl" : 1 , "pt" : 1 , "ru" : 1 , "sk" : 1 , "es" : 1 , "sv" : 1 , "uk" : 1 , "cy" : 1 } ; } ( ) ) ;