| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675 | /******************************************************************************** KindEditor - WYSIWYG HTML Editor for Internet* Copyright (C) 2006-2012 kindsoft.net** @author Roddy <luolonghao@gmail.com>* @website http://www.kindsoft.net/* @licence http://www.kindsoft.net/license.php* @version 4.0.5 (2012-01-15)*******************************************************************************/(function (window, undefined) {	if (window.KindEditor) {		return;	}if (!window.console) {	window.console = {};}if (!console.log) {	console.log = function () {};}var _VERSION = '4.0.5 (2012-08-02)',	_ua = navigator.userAgent.toLowerCase(),	_IE = _ua.indexOf('msie') > -1 && _ua.indexOf('opera') == -1,	_GECKO = _ua.indexOf('gecko') > -1 && _ua.indexOf('khtml') == -1,	_WEBKIT = _ua.indexOf('applewebkit') > -1,	_OPERA = _ua.indexOf('opera') > -1,	_MOBILE = _ua.indexOf('mobile') > -1,	_IOS = /ipad|iphone|ipod/.test(_ua),	_QUIRKS = document.compatMode != 'CSS1Compat',	_matches = /(?:msie|firefox|webkit|opera)[\/:\s](\d+)/.exec(_ua),	_V = _matches ? _matches[1] : '0',	_TIME = new Date().getTime();function _isArray(val) {	if (!val) {		return false;	}	return Object.prototype.toString.call(val) === '[object Array]';}function _isFunction(val) {	if (!val) {		return false;	}	return Object.prototype.toString.call(val) === '[object Function]';}function _inArray(val, arr) {	for (var i = 0, len = arr.length; i < len; i++) {		if (val === arr[i]) {			return i;		}	}	return -1;}function _each(obj, fn) {	if (_isArray(obj)) {		for (var i = 0, len = obj.length; i < len; i++) {			if (fn.call(obj[i], i, obj[i]) === false) {				break;			}		}	} else {		for (var key in obj) {			if (obj.hasOwnProperty(key)) {				if (fn.call(obj[key], key, obj[key]) === false) {					break;				}			}		}	}}function _trim(str) {	return str.replace(/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g, '');}function _inString(val, str, delimiter) {	delimiter = delimiter === undefined ? ',' : delimiter;	return (delimiter + str + delimiter).indexOf(delimiter + val + delimiter) >= 0;}function _addUnit(val, unit) {	unit = unit || 'px';	return val && /^\d+$/.test(val) ? val + 'px' : val;}function _removeUnit(val) {	var match;	return val && (match = /(\d+)/.exec(val)) ? parseInt(match[1], 10) : 0;}function _escape(val) {	return val.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');}function _unescape(val) {	return val.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/&/g, '&');}function _toCamel(str) {	var arr = str.split('-');	str = '';	_each(arr, function(key, val) {		str += (key > 0) ? val.charAt(0).toUpperCase() + val.substr(1) : val;	});	return str;}function _toHex(val) {	function hex(d) {		var s = parseInt(d, 10).toString(16).toUpperCase();		return s.length > 1 ? s : '0' + s;	}	return val.replace(/rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/ig,		function($0, $1, $2, $3) {			return '#' + hex($1) + hex($2) + hex($3);		}	);}function _toMap(val, delimiter) {	delimiter = delimiter === undefined ? ',' : delimiter;	var map = {}, arr = _isArray(val) ? val : val.split(delimiter), match;	_each(arr, function(key, val) {		if ((match = /^(\d+)\.\.(\d+)$/.exec(val))) {			for (var i = parseInt(match[1], 10); i <= parseInt(match[2], 10); i++) {				map[i.toString()] = true;			}		} else {			map[val] = true;		}	});	return map;}function _toArray(obj, offset) {	return Array.prototype.slice.call(obj, offset || 0);}function _undef(val, defaultVal) {	return val === undefined ? defaultVal : val;}function _invalidUrl(url) {	return !url || /[<>"]/.test(url);}function _addParam(url, param) {	return url.indexOf('?') >= 0 ? url + '&' + param : url + '?' + param;}function _extend(child, parent, proto) {	if (!proto) {		proto = parent;		parent = null;	}	var childProto;	if (parent) {		var fn = function () {};		fn.prototype = parent.prototype;		childProto = new fn();		_each(proto, function(key, val) {			childProto[key] = val;		});	} else {		childProto = proto;	}	childProto.constructor = child;	child.prototype = childProto;	child.parent = parent ? parent.prototype : null;}function _json(text) {	var match;	if ((match = /\{[\s\S]*\}|\[[\s\S]*\]/.exec(text))) {		text = match[0];	}	var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;	cx.lastIndex = 0;	if (cx.test(text)) {		text = text.replace(cx, function (a) {			return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);		});	}	if (/^[\],:{}\s]*$/.	test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').	replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').	replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {		return eval('(' + text + ')');	}	throw 'JSON parse error';}var _round = Math.round;var K = {	DEBUG : false,	VERSION : _VERSION,	IE : _IE,	GECKO : _GECKO,	WEBKIT : _WEBKIT,	OPERA : _OPERA,	V : _V,	TIME : _TIME,	each : _each,	isArray : _isArray,	isFunction : _isFunction,	inArray : _inArray,	inString : _inString,	trim : _trim,	addUnit : _addUnit,	removeUnit : _removeUnit,	escape : _escape,	unescape : _unescape,	toCamel : _toCamel,	toHex : _toHex,	toMap : _toMap,	toArray : _toArray,	undef : _undef,	invalidUrl : _invalidUrl,	addParam : _addParam,	extend : _extend,	json : _json};var _INLINE_TAG_MAP = _toMap('a,abbr,acronym,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,img,input,ins,kbd,label,map,q,s,samp,select,small,span,strike,strong,sub,sup,textarea,tt,u,var'),	_BLOCK_TAG_MAP = _toMap('address,applet,blockquote,body,center,dd,dir,div,dl,dt,fieldset,form,frameset,h1,h2,h3,h4,h5,h6,head,hr,html,iframe,ins,isindex,li,map,menu,meta,noframes,noscript,object,ol,p,pre,script,style,table,tbody,td,tfoot,th,thead,title,tr,ul'),	_SINGLE_TAG_MAP = _toMap('area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed'),	_STYLE_TAG_MAP = _toMap('b,basefont,big,del,em,font,i,s,small,span,strike,strong,sub,sup,u'),	_CONTROL_TAG_MAP = _toMap('img,table,input,textarea,button'),	_PRE_TAG_MAP = _toMap('pre,style,script'),	_NOSPLIT_TAG_MAP = _toMap('html,head,body,td,tr,table,ol,ul,li'),	_AUTOCLOSE_TAG_MAP = _toMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr'),	_FILL_ATTR_MAP = _toMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected'),	_VALUE_TAG_MAP = _toMap('input,button,textarea,select');function _getBasePath() {	var els = document.getElementsByTagName('script'), src;	for (var i = 0, len = els.length; i < len; i++) {		src = els[i].src || '';		if (/kindeditor[\w\-\.]*\.js/.test(src)) {			return src.substring(0, src.lastIndexOf('/') + 1);		}	}	return '';}K.basePath = _getBasePath();K.options = {	designMode : true,	fullscreenMode : false,	filterMode : false,	wellFormatMode : true,	shadowMode : true,	loadStyleMode : true,	basePath : K.basePath,	themesPath : K.basePath + 'themes/',	langPath : K.basePath + 'lang/',	pluginsPath : K.basePath + 'plugins/',	themeType : 'default',	langType : 'zh_CN',	urlType : '',	newlineTag : 'p',	resizeType : 2,	syncType : 'form',	pasteType : 2,	dialogAlignType : 'page',	useContextmenu : true,	bodyClass : 'ke-content',	indentChar : '\t',	cssPath : '',	cssData : '',	minWidth : 650,	minHeight : 100,	minChangeSize : 5,	items : [		'source', '|', 'undo', 'redo', '|', 'preview', 'print', 'template', 'cut', 'copy', 'paste',		'plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright',		'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript',		'superscript', 'clearhtml', 'quickformat', 'selectall', '|', 'fullscreen', '/',		'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold',		'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image',		'flash', 'media', 'insertfile', 'table', 'hr', 'emoticons', 'map', 'code', 'pagebreak', 'anchor', 'link', 'unlink', '|', 'about'	],	noDisableItems : ['source', 'fullscreen'],	colorTable : [		['#E53333', '#E56600', '#FF9900', '#64451D', '#DFC5A4', '#FFE500'],		['#009900', '#006600', '#99BB00', '#B8D100', '#60D978', '#00D5FF'],		['#337FE5', '#003399', '#4C33E5', '#9933E5', '#CC33E5', '#EE33EE'],		['#FFFFFF', '#CCCCCC', '#999999', '#666666', '#333333', '#000000']	],	fontSizeTable : ['9px', '10px', '12px', '14px', '16px', '18px', '24px', '32px'],	htmlTags : {		font : ['color', 'size', 'face', '.background-color'],		span : [			'.color', '.background-color', '.font-size', '.font-family', '.background',			'.font-weight', '.font-style', '.text-decoration', '.vertical-align', '.line-height'		],		div : [			'align', '.border', '.margin', '.padding', '.text-align', '.color',			'.background-color', '.font-size', '.font-family', '.font-weight', '.background',			'.font-style', '.text-decoration', '.vertical-align', '.margin-left'		],		table: [			'border', 'cellspacing', 'cellpadding', 'width', 'height', 'align', 'bordercolor',			'.padding', '.margin', '.border', 'bgcolor', '.text-align', '.color', '.background-color',			'.font-size', '.font-family', '.font-weight', '.font-style', '.text-decoration', '.background',			'.width', '.height', '.border-collapse'		],		'td,th': [			'align', 'valign', 'width', 'height', 'colspan', 'rowspan', 'bgcolor',			'.text-align', '.color', '.background-color', '.font-size', '.font-family', '.font-weight',			'.font-style', '.text-decoration', '.vertical-align', '.background', '.border'		],		a : ['href', 'target', 'name'],		embed : ['src', 'width', 'height', 'type', 'loop', 'autostart', 'quality', '.width', '.height', 'align', 'allowscriptaccess'],		img : ['src', 'width', 'height', 'border', 'alt', 'title', 'align', '.width', '.height', '.border'],		'p,ol,ul,li,blockquote,h1,h2,h3,h4,h5,h6' : [			'align', '.text-align', '.color', '.background-color', '.font-size', '.font-family', '.background',			'.font-weight', '.font-style', '.text-decoration', '.vertical-align', '.text-indent', '.margin-left'		],		pre : ['class'],		hr : ['class', '.page-break-after'],		'br,tbody,tr,strong,b,sub,sup,em,i,u,strike,s,del' : []	},	layout : '<div class="container"><div class="toolbar"></div><div class="edit"></div><div class="statusbar"></div></div>'};var _useCapture = false;var _INPUT_KEY_MAP = _toMap('8,9,13,32,46,48..57,59,61,65..90,106,109..111,188,190..192,219..222');var _CURSORMOVE_KEY_MAP = _toMap('33..40');var _CHANGE_KEY_MAP = {};_each(_INPUT_KEY_MAP, function(key, val) {	_CHANGE_KEY_MAP[key] = val;});_each(_CURSORMOVE_KEY_MAP, function(key, val) {	_CHANGE_KEY_MAP[key] = val;});function _bindEvent(el, type, fn) {	if (el.addEventListener){		el.addEventListener(type, fn, _useCapture);	} else if (el.attachEvent){		el.attachEvent('on' + type, fn);	}}function _unbindEvent(el, type, fn) {	if (el.removeEventListener){		el.removeEventListener(type, fn, _useCapture);	} else if (el.detachEvent){		el.detachEvent('on' + type, fn);	}}var _EVENT_PROPS = ('altKey,attrChange,attrName,bubbles,button,cancelable,charCode,clientX,clientY,ctrlKey,currentTarget,' +	'data,detail,eventPhase,fromElement,handler,keyCode,metaKey,newValue,offsetX,offsetY,originalTarget,pageX,' +	'pageY,prevValue,relatedNode,relatedTarget,screenX,screenY,shiftKey,srcElement,target,toElement,view,wheelDelta,which').split(',');function KEvent(el, event) {	this.init(el, event);}_extend(KEvent, {	init : function(el, event) {		var self = this, doc = el.ownerDocument || el.document || el;		self.event = event;		_each(_EVENT_PROPS, function(key, val) {			self[val] = event[val];		});		if (!self.target) {			self.target = self.srcElement || doc;		}		if (self.target.nodeType === 3) {			self.target = self.target.parentNode;		}		if (!self.relatedTarget && self.fromElement) {			self.relatedTarget = self.fromElement === self.target ? self.toElement : self.fromElement;		}		if (self.pageX == null && self.clientX != null) {			var d = doc.documentElement, body = doc.body;			self.pageX = self.clientX + (d && d.scrollLeft || body && body.scrollLeft || 0) - (d && d.clientLeft || body && body.clientLeft || 0);			self.pageY = self.clientY + (d && d.scrollTop  || body && body.scrollTop  || 0) - (d && d.clientTop  || body && body.clientTop  || 0);		}		if (!self.which && ((self.charCode || self.charCode === 0) ? self.charCode : self.keyCode)) {			self.which = self.charCode || self.keyCode;		}		if (!self.metaKey && self.ctrlKey) {			self.metaKey = self.ctrlKey;		}		if (!self.which && self.button !== undefined) {			self.which = (self.button & 1 ? 1 : (self.button & 2 ? 3 : (self.button & 4 ? 2 : 0)));		}		switch (self.which) {		case 186 :			self.which = 59;			break;		case 187 :		case 107 :		case 43 :			self.which = 61;			break;		case 189 :		case 45 :			self.which = 109;			break;		case 42 :			self.which = 106;			break;		case 47 :			self.which = 111;			break;		case 78 :			self.which = 110;			break;		}		if (self.which >= 96 && self.which <= 105) {			self.which -= 48;		}	},	preventDefault : function() {		var ev = this.event;		if (ev.preventDefault) {			ev.preventDefault();		}		ev.returnValue = false;	},	stopPropagation : function() {		var ev = this.event;		if (ev.stopPropagation) {			ev.stopPropagation();		}		ev.cancelBubble = true;	},	stop : function() {		this.preventDefault();		this.stopPropagation();	}});var _eventExpendo = 'kindeditor_' + _TIME, _eventId = 0, _eventData = {};function _getId(el) {	return el[_eventExpendo] || null;}function _setId(el) {	el[_eventExpendo] = ++_eventId;	return _eventId;}function _removeId(el) {	try {		delete el[_eventExpendo];	} catch(e) {		if (el.removeAttribute) {			el.removeAttribute(_eventExpendo);		}	}}function _bind(el, type, fn) {	if (type.indexOf(',') >= 0) {		_each(type.split(','), function() {			_bind(el, this, fn);		});		return;	}	var id = _getId(el);	if (!id) {		id = _setId(el);	}	if (_eventData[id] === undefined) {		_eventData[id] = {};	}	var events = _eventData[id][type];	if (events && events.length > 0) {		_unbindEvent(el, type, events[0]);	} else {		_eventData[id][type] = [];		_eventData[id].el = el;	}	events = _eventData[id][type];	if (events.length === 0) {		events[0] = function(e) {			var kevent = e ? new KEvent(el, e) : undefined;			_each(events, function(i, event) {				if (i > 0 && event) {					event.call(el, kevent);				}			});		};	}	if (_inArray(fn, events) < 0) {		events.push(fn);	}	_bindEvent(el, type, events[0]);}function _unbind(el, type, fn) {	if (type && type.indexOf(',') >= 0) {		_each(type.split(','), function() {			_unbind(el, this, fn);		});		return;	}	var id = _getId(el);	if (!id) {		return;	}	if (type === undefined) {		if (id in _eventData) {			_each(_eventData[id], function(key, events) {				if (key != 'el' && events.length > 0) {					_unbindEvent(el, key, events[0]);				}			});			delete _eventData[id];			_removeId(el);		}		return;	}	if (!_eventData[id]) {		return;	}	var events = _eventData[id][type];	if (events && events.length > 0) {		if (fn === undefined) {			_unbindEvent(el, type, events[0]);			delete _eventData[id][type];		} else {			_each(events, function(i, event) {				if (i > 0 && event === fn) {					events.splice(i, 1);				}			});			if (events.length == 1) {				_unbindEvent(el, type, events[0]);				delete _eventData[id][type];			}		}		var count = 0;		_each(_eventData[id], function() {			count++;		});		if (count < 2) {			delete _eventData[id];			_removeId(el);		}	}}function _fire(el, type) {	if (type.indexOf(',') >= 0) {		_each(type.split(','), function() {			_fire(el, this);		});		return;	}	var id = _getId(el);	if (!id) {		return;	}	var events = _eventData[id][type];	if (_eventData[id] && events && events.length > 0) {		events[0]();	}}function _ctrl(el, key, fn) {	var self = this;	key = /^\d{2,}$/.test(key) ? key : key.toUpperCase().charCodeAt(0);	_bind(el, 'keydown', function(e) {		if (e.ctrlKey && e.which == key && !e.shiftKey && !e.altKey) {			fn.call(el);			e.stop();		}	});}function _ready(fn) {	var loaded = false;	function readyFunc() {		if (!loaded) {			loaded = true;			fn(KindEditor);		}	}	function ieReadyFunc() {		if (!loaded) {			try {				document.documentElement.doScroll('left');			} catch(e) {				setTimeout(ieReadyFunc, 100);				return;			}			readyFunc();		}	}	function ieReadyStateFunc() {		if (document.readyState === 'complete') {			readyFunc();		}	}	if (document.addEventListener) {		_bind(document, 'DOMContentLoaded', readyFunc);	} else if (document.attachEvent) {		_bind(document, 'readystatechange', ieReadyStateFunc);		if (document.documentElement.doScroll && window.frameElement === undefined) {			ieReadyFunc();		}	}	_bind(window, 'load', readyFunc);}if (_IE) {	window.attachEvent('onunload', function() {		_each(_eventData, function(key, events) {			if (events.el) {				_unbind(events.el);			}		});	});}K.ctrl = _ctrl;K.ready = _ready;function _getCssList(css) {	var list = {},		reg = /\s*([\w\-]+)\s*:([^;]*)(;|$)/g,		match;	while ((match = reg.exec(css))) {		var key = _trim(match[1].toLowerCase()),			val = _trim(_toHex(match[2]));		list[key] = val;	}	return list;}function _getAttrList(tag) {	var list = {},		reg = /\s+(?:([\w\-:]+)|(?:([\w\-:]+)=([^\s"'<>]+))|(?:([\w\-:"]+)="([^"]*)")|(?:([\w\-:"]+)='([^']*)'))(?=(?:\s|\/|>)+)/g,		match;	while ((match = reg.exec(tag))) {		var key = (match[1] || match[2] || match[4] || match[6]).toLowerCase(),			val = (match[2] ? match[3] : (match[4] ? match[5] : match[7])) || '';		list[key] = val;	}	return list;}function _addClassToTag(tag, className) {	if (/\s+class\s*=/.test(tag)) {		tag = tag.replace(/(\s+class=["']?)([^"']*)(["']?[\s>])/, function($0, $1, $2, $3) {			if ((' ' + $2 + ' ').indexOf(' ' + className + ' ') < 0) {				return $2 === '' ? $1 + className + $3 : $1 + $2 + ' ' + className + $3;			} else {				return $0;			}		});	} else {		tag = tag.substr(0, tag.length - 1) + ' class="' + className + '">';	}	return tag;}function _formatCss(css) {	var str = '';	_each(_getCssList(css), function(key, val) {		str += key + ':' + val + ';';	});	return str;}function _formatUrl(url, mode, host, pathname) {	mode = _undef(mode, '').toLowerCase();	if (_inArray(mode, ['absolute', 'relative', 'domain']) < 0) {		return url;	}	host = host || location.protocol + '//' + location.host;	if (pathname === undefined) {		var m = location.pathname.match(/^(\/.*)\//);		pathname = m ? m[1] : '';	}	var match;	if ((match = /^(\w+:\/\/[^\/]*)/.exec(url))) {		if (match[1] !== host) {			return url;		}	} else if (/^\w+:/.test(url)) {		return url;	}	function getRealPath(path) {		var parts = path.split('/'), paths = [];		for (var i = 0, len = parts.length; i < len; i++) {			var part = parts[i];			if (part == '..') {				if (paths.length > 0) {					paths.pop();				}			} else if (part !== '' && part != '.') {				paths.push(part);			}		}		return '/' + paths.join('/');	}	if (/^\//.test(url)) {		url = host + getRealPath(url.substr(1));	} else if (!/^\w+:\/\//.test(url)) {		url = host + getRealPath(pathname + '/' + url);	}	function getRelativePath(path, depth) {		if (url.substr(0, path.length) === path) {			var arr = [];			for (var i = 0; i < depth; i++) {				arr.push('..');			}			var prefix = '.';			if (arr.length > 0) {				prefix += '/' + arr.join('/');			}			if (pathname == '/') {				prefix += '/';			}			return prefix + url.substr(path.length);		} else {			if ((match = /^(.*)\//.exec(path))) {				return getRelativePath(match[1], ++depth);			}		}	}	if (mode === 'relative') {		url = getRelativePath(host + pathname, 0).substr(2);	} else if (mode === 'absolute') {		if (url.substr(0, host.length) === host) {			url = url.substr(host.length);		}	}	return url;}function _formatHtml(html, htmlTags, urlType, wellFormatted, indentChar) {	urlType = urlType || '';	wellFormatted = _undef(wellFormatted, false);	indentChar = _undef(indentChar, '\t');	var fontSizeList = 'xx-small,x-small,small,medium,large,x-large,xx-large'.split(',');	html = html.replace(/(<(?:pre|pre\s[^>]*)>)([\s\S]*?)(<\/pre>)/ig, function($0, $1, $2, $3) {		return $1 + $2.replace(/<(?:br|br\s[^>]*)>/ig, '\n') + $3;	});	html = html.replace(/<(?:br|br\s[^>]*)\s*\/?>\s*<\/p>/ig, '</p>');	html = html.replace(/(<(?:p|p\s[^>]*)>)\s*(<\/p>)/ig, '$1<br />$2');	html = html.replace(/\u200B/g, '');	var htmlTagMap = {};	if (htmlTags) {		_each(htmlTags, function(key, val) {			var arr = key.split(',');			for (var i = 0, len = arr.length; i < len; i++) {				htmlTagMap[arr[i]] = _toMap(val);			}		});		if (!htmlTagMap.script) {			html = html.replace(/(<(?:script|script\s[^>]*)>)([\s\S]*?)(<\/script>)/ig, '');		}		if (!htmlTagMap.style) {			html = html.replace(/(<(?:style|style\s[^>]*)>)([\s\S]*?)(<\/style>)/ig, '');		}	}	var re = /(\s*)<(\/)?([\w\-:]+)((?:\s+|(?:\s+[\w\-:]+)|(?:\s+[\w\-:]+=[^\s"'<>]+)|(?:\s+[\w\-:"]+="[^"]*")|(?:\s+[\w\-:"]+='[^']*'))*)(\/)?>(\s*)/g;	var tagStack = [];	html = html.replace(re, function($0, $1, $2, $3, $4, $5, $6) {		var full = $0,			startNewline = $1 || '',			startSlash = $2 || '',			tagName = $3.toLowerCase(),			attr = $4 || '',			endSlash = $5 ? ' ' + $5 : '',			endNewline = $6 || '';		if (htmlTags && !htmlTagMap[tagName]) {			return '';		}		if (endSlash === '' && _SINGLE_TAG_MAP[tagName]) {			endSlash = ' /';		}		if (_INLINE_TAG_MAP[tagName]) {			if (startNewline) {				startNewline = ' ';			}			if (endNewline) {				endNewline = ' ';			}		}		if (_PRE_TAG_MAP[tagName]) {			if (startSlash) {				endNewline = '\n';			} else {				startNewline = '\n';			}		}		if (wellFormatted && tagName == 'br') {			endNewline = '\n';		}		if (_BLOCK_TAG_MAP[tagName] && !_PRE_TAG_MAP[tagName]) {			if (wellFormatted) {				if (startSlash && tagStack.length > 0 && tagStack[tagStack.length - 1] === tagName) {					tagStack.pop();				} else {					tagStack.push(tagName);				}				startNewline = '\n';				endNewline = '\n';				for (var i = 0, len = startSlash ? tagStack.length : tagStack.length - 1; i < len; i++) {					startNewline += indentChar;					if (!startSlash) {						endNewline += indentChar;					}				}				if (endSlash) {					tagStack.pop();				} else if (!startSlash) {					endNewline += indentChar;				}			} else {				startNewline = endNewline = '';			}		}		if (attr !== '') {			var attrMap = _getAttrList(full);			if (tagName === 'font') {				var fontStyleMap = {}, fontStyle = '';				_each(attrMap, function(key, val) {					if (key === 'color') {						fontStyleMap.color = val;						delete attrMap[key];					}					if (key === 'size') {						fontStyleMap['font-size'] = fontSizeList[parseInt(val, 10) - 1] || '';						delete attrMap[key];					}					if (key === 'face') {						fontStyleMap['font-family'] = val;						delete attrMap[key];					}					if (key === 'style') {						fontStyle = val;					}				});				if (fontStyle && !/;$/.test(fontStyle)) {					fontStyle += ';';				}				_each(fontStyleMap, function(key, val) {					if (val === '') {						return;					}					if (/\s/.test(val)) {						val = "'" + val + "'";					}					fontStyle += key + ':' + val + ';';				});				attrMap.style = fontStyle;			}			_each(attrMap, function(key, val) {				if (_FILL_ATTR_MAP[key]) {					attrMap[key] = key;				}				if (_inArray(key, ['src', 'href']) >= 0) {					attrMap[key] = _formatUrl(val, urlType);				}				if (htmlTags && key !== 'style' && !htmlTagMap[tagName]['*'] && !htmlTagMap[tagName][key] ||					tagName === 'body' && key === 'contenteditable' ||					/^kindeditor_\d+$/.test(key)) {					delete attrMap[key];				}				if (key === 'style' && val !== '') {					var styleMap = _getCssList(val);					_each(styleMap, function(k, v) {						if (htmlTags && !htmlTagMap[tagName].style && !htmlTagMap[tagName]['.' + k]) {							delete styleMap[k];						}					});					var style = '';					_each(styleMap, function(k, v) {						style += k + ':' + v + ';';					});					attrMap.style = style;				}			});			attr = '';			_each(attrMap, function(key, val) {				if (key === 'style' && val === '') {					return;				}				val = val.replace(/"/g, '"');				attr += ' ' + key + '="' + val + '"';			});		}		if (tagName === 'font') {			tagName = 'span';		}		return startNewline + '<' + startSlash + tagName + attr + endSlash + '>' + endNewline;	});	html = html.replace(/(<(?:pre|pre\s[^>]*)>)([\s\S]*?)(<\/pre>)/ig, function($0, $1, $2, $3) {		return $1 + $2.replace(/\n/g, '<span id="__kindeditor_pre_newline__">\n') + $3;	});	html = html.replace(/\n\s*\n/g, '\n');	html = html.replace(/<span id="__kindeditor_pre_newline__">\n/g, '\n');	return _trim(html);}function _clearMsWord(html, htmlTags) {	html = html.replace(/<meta[\s\S]*?>/ig, '')		.replace(/<![\s\S]*?>/ig, '')		.replace(/<style[^>]*>[\s\S]*?<\/style>/ig, '')		.replace(/<script[^>]*>[\s\S]*?<\/script>/ig, '')		.replace(/<w:[^>]+>[\s\S]*?<\/w:[^>]+>/ig, '')		.replace(/<o:[^>]+>[\s\S]*?<\/o:[^>]+>/ig, '')		.replace(/<xml>[\s\S]*?<\/xml>/ig, '')		.replace(/<(?:table|td)[^>]*>/ig, function(full) {			return full.replace(/border-bottom:([#\w\s]+)/ig, 'border:$1');		});	return _formatHtml(html, htmlTags);}function _mediaType(src) {	if (/\.(rm|rmvb)(\?|$)/i.test(src)) {		return 'audio/x-pn-realaudio-plugin';	}	if (/\.(swf|flv)(\?|$)/i.test(src)) {		return 'application/x-shockwave-flash';	}	return 'video/x-ms-asf-plugin';}function _mediaClass(type) {	if (/realaudio/i.test(type)) {		return 'ke-rm';	}	if (/flash/i.test(type)) {		return 'ke-flash';	}	return 'ke-media';}function _mediaAttrs(srcTag) {	return _getAttrList(unescape(srcTag));}function _mediaEmbed(attrs) {	var html = '<embed ';	_each(attrs, function(key, val) {		html += key + '="' + val + '" ';	});	html += '/>';	return html;}function _mediaImg(blankPath, attrs) {	var width = attrs.width,		height = attrs.height,		type = attrs.type || _mediaType(attrs.src),		srcTag = _mediaEmbed(attrs),		style = '';	if (width > 0) {		style += 'width:' + width + 'px;';	}	if (height > 0) {		style += 'height:' + height + 'px;';	}	var html = '<img class="' + _mediaClass(type) + '" src="' + blankPath + '" ';	if (style !== '') {		html += 'style="' + style + '" ';	}	html += 'data-ke-tag="' + escape(srcTag) + '" alt="" />';	return html;}K.formatUrl = _formatUrl;K.formatHtml = _formatHtml;K.getCssList = _getCssList;K.getAttrList = _getAttrList;K.mediaType = _mediaType;K.mediaAttrs = _mediaAttrs;K.mediaEmbed = _mediaEmbed;K.mediaImg = _mediaImg;K.clearMsWord = _clearMsWord;function _contains(nodeA, nodeB) {	if (nodeA.nodeType == 9 && nodeB.nodeType != 9) {		return true;	}	while ((nodeB = nodeB.parentNode)) {		if (nodeB == nodeA) {			return true;		}	}	return false;}var _getSetAttrDiv = document.createElement('div');_getSetAttrDiv.setAttribute('className', 't');var _GET_SET_ATTRIBUTE = _getSetAttrDiv.className !== 't';function _getAttr(el, key) {	key = key.toLowerCase();	var val = null;	if (!_GET_SET_ATTRIBUTE && el.nodeName.toLowerCase() != 'script') {		var div = el.ownerDocument.createElement('div');		div.appendChild(el.cloneNode(false));		var list = _getAttrList(_unescape(div.innerHTML));		if (key in list) {			val = list[key];		}	} else {		try {			val = el.getAttribute(key, 2);		} catch(e) {			val = el.getAttribute(key, 1);		}	}	if (key === 'style' && val !== null) {		val = _formatCss(val);	}	return val;}function _queryAll(expr, root) {	var exprList = expr.split(',');	if (exprList.length > 1) {		var mergedResults = [];		_each(exprList, function() {			_each(_queryAll(this, root), function() {				if (_inArray(this, mergedResults) < 0) {					mergedResults.push(this);				}			});		});		return mergedResults;	}	root = root || document;	function escape(str) {		if (typeof str != 'string') {			return str;		}		return str.replace(/([^\w\-])/g, '\\$1');	}	function stripslashes(str) {		return str.replace(/\\/g, '');	}	function cmpTag(tagA, tagB) {		return tagA === '*' || tagA.toLowerCase() === escape(tagB.toLowerCase());	}	function byId(id, tag, root) {		var arr = [],			doc = root.ownerDocument || root,			el = doc.getElementById(stripslashes(id));		if (el) {			if (cmpTag(tag, el.nodeName) && _contains(root, el)) {				arr.push(el);			}		}		return arr;	}	function byClass(className, tag, root) {		var doc = root.ownerDocument || root, arr = [], els, i, len, el;		if (root.getElementsByClassName) {			els = root.getElementsByClassName(stripslashes(className));			for (i = 0, len = els.length; i < len; i++) {				el = els[i];				if (cmpTag(tag, el.nodeName)) {					arr.push(el);				}			}		} else if (doc.querySelectorAll) {			els = doc.querySelectorAll((root.nodeName !== '#document' ? root.nodeName + ' ' : '') + tag + '.' + className);			for (i = 0, len = els.length; i < len; i++) {				el = els[i];				if (_contains(root, el)) {					arr.push(el);				}			}		} else {			els = root.getElementsByTagName(tag);			className = ' ' + className + ' ';			for (i = 0, len = els.length; i < len; i++) {				el = els[i];				if (el.nodeType == 1) {					var cls = el.className;					if (cls && (' ' + cls + ' ').indexOf(className) > -1) {						arr.push(el);					}				}			}		}		return arr;	}	function byName(name, tag, root) {		var arr = [], doc = root.ownerDocument || root,			els = doc.getElementsByName(stripslashes(name)), el;		for (var i = 0, len = els.length; i < len; i++) {			el = els[i];			if (cmpTag(tag, el.nodeName) && _contains(root, el)) {				if (el.getAttributeNode('name')) {					arr.push(el);				}			}		}		return arr;	}	function byAttr(key, val, tag, root) {		var arr = [], els = root.getElementsByTagName(tag), el;		for (var i = 0, len = els.length; i < len; i++) {			el = els[i];			if (el.nodeType == 1) {				if (val === null) {					if (_getAttr(el, key) !== null) {						arr.push(el);					}				} else {					if (val === escape(_getAttr(el, key))) {						arr.push(el);					}				}			}		}		return arr;	}	function select(expr, root) {		var arr = [], matches;		matches = /^((?:\\.|[^.#\s\[<>])+)/.exec(expr);		var tag = matches ? matches[1] : '*';		if ((matches = /#((?:[\w\-]|\\.)+)$/.exec(expr))) {			arr = byId(matches[1], tag, root);		} else if ((matches = /\.((?:[\w\-]|\\.)+)$/.exec(expr))) {			arr = byClass(matches[1], tag, root);		} else if ((matches = /\[((?:[\w\-]|\\.)+)\]/.exec(expr))) {			arr = byAttr(matches[1].toLowerCase(), null, tag, root);		} else if ((matches = /\[((?:[\w\-]|\\.)+)\s*=\s*['"]?((?:\\.|[^'"]+)+)['"]?\]/.exec(expr))) {			var key = matches[1].toLowerCase(), val = matches[2];			if (key === 'id') {				arr = byId(val, tag, root);			} else if (key === 'class') {				arr = byClass(val, tag, root);			} else if (key === 'name') {				arr = byName(val, tag, root);			} else {				arr = byAttr(key, val, tag, root);			}		} else {			var els = root.getElementsByTagName(tag), el;			for (var i = 0, len = els.length; i < len; i++) {				el = els[i];				if (el.nodeType == 1) {					arr.push(el);				}			}		}		return arr;	}	var parts = [], arr, re = /((?:\\.|[^\s>])+|[\s>])/g;	while ((arr = re.exec(expr))) {		if (arr[1] !== ' ') {			parts.push(arr[1]);		}	}	var results = [];	if (parts.length == 1) {		return select(parts[0], root);	}	var isChild = false, part, els, subResults, val, v, i, j, k, length, len, l;	for (i = 0, lenth = parts.length; i < lenth; i++) {		part = parts[i];		if (part === '>') {			isChild = true;			continue;		}		if (i > 0) {			els = [];			for (j = 0, len = results.length; j < len; j++) {				val = results[j];				subResults = select(part, val);				for (k = 0, l = subResults.length; k < l; k++) {					v = subResults[k];					if (isChild) {						if (val === v.parentNode) {							els.push(v);						}					} else {						els.push(v);					}				}			}			results = els;		} else {			results = select(part, root);		}		if (results.length === 0) {			return [];		}	}	return results;}function _query(expr, root) {	var arr = _queryAll(expr, root);	return arr.length > 0 ? arr[0] : null;}K.query = _query;K.queryAll = _queryAll;function _get(val) {	return K(val)[0];}function _getDoc(node) {	if (!node) {		return document;	}	return node.ownerDocument || node.document || node;}function _getWin(node) {	if (!node) {		return window;	}	var doc = _getDoc(node);	return doc.parentWindow || doc.defaultView;}function _setHtml(el, html) {	if (el.nodeType != 1) {		return;	}	var doc = _getDoc(el);	try {		el.innerHTML = '<img id="__kindeditor_temp_tag__" width="0" height="0" style="display:none;" />' + html;		var temp = doc.getElementById('__kindeditor_temp_tag__');		temp.parentNode.removeChild(temp);	} catch(e) {		K(el).empty();		K('@' + html, doc).each(function() {			el.appendChild(this);		});	}}function _hasClass(el, cls) {	return _inString(cls, el.className, ' ');}function _setAttr(el, key, val) {	if (_IE && _V < 8 && key.toLowerCase() == 'class') {		key = 'className';	}	el.setAttribute(key, '' + val);}function _removeAttr(el, key) {	if (_IE && _V < 8 && key.toLowerCase() == 'class') {		key = 'className';	}	_setAttr(el, key, '');	el.removeAttribute(key);}function _getNodeName(node) {	if (!node || !node.nodeName) {		return '';	}	return node.nodeName.toLowerCase();}function _computedCss(el, key) {	var self = this, win = _getWin(el), camelKey = _toCamel(key), val = '';	if (win.getComputedStyle) {		var style = win.getComputedStyle(el, null);		val = style[camelKey] || style.getPropertyValue(key) || el.style[camelKey];	} else if (el.currentStyle) {		val = el.currentStyle[camelKey] || el.style[camelKey];	}	return val;}function _hasVal(node) {	return !!_VALUE_TAG_MAP[_getNodeName(node)];}function _docElement(doc) {	doc = doc || document;	return _QUIRKS ? doc.body : doc.documentElement;}function _docHeight(doc) {	var el = _docElement(doc);	return Math.max(el.scrollHeight, el.clientHeight);}function _docWidth(doc) {	var el = _docElement(doc);	return Math.max(el.scrollWidth, el.clientWidth);}function _getScrollPos(doc) {	doc = doc || document;	var x, y;	if (_IE || _OPERA) {		x = _docElement(doc).scrollLeft;		y = _docElement(doc).scrollTop;	} else {		x = _getWin(doc).scrollX;		y = _getWin(doc).scrollY;	}	return {x : x, y : y};}function KNode(node) {	this.init(node);}_extend(KNode, {	init : function(node) {		var self = this;		for (var i = 0, len = node.length; i < len; i++) {			self[i] = node[i].constructor === KNode ? node[i][0] : node[i];		}		self.length = node.length;		self.doc = _getDoc(self[0]);		self.name = _getNodeName(self[0]);		self.type = self.length > 0 ? self[0].nodeType : null;		self.win = _getWin(self[0]);		self._data = {};	},	each : function(fn) {		var self = this;		for (var i = 0; i < self.length; i++) {			if (fn.call(self[i], i, self[i]) === false) {				return self;			}		}		return self;	},	bind : function(type, fn) {		this.each(function() {			_bind(this, type, fn);		});		return this;	},	unbind : function(type, fn) {		this.each(function() {			_unbind(this, type, fn);		});		return this;	},	fire : function(type) {		if (this.length < 1) {			return this;		}		_fire(this[0], type);		return this;	},	hasAttr : function(key) {		if (this.length < 1) {			return false;		}		return !!_getAttr(this[0], key);	},	attr : function(key, val) {		var self = this;		if (key === undefined) {			return _getAttrList(self.outer());		}		if (typeof key === 'object') {			_each(key, function(k, v) {				self.attr(k, v);			});			return self;		}		if (val === undefined) {			val = self.length < 1 ? null : _getAttr(self[0], key);			return val === null ? '' : val;		}		self.each(function() {			_setAttr(this, key, val);		});		return self;	},	removeAttr : function(key) {		this.each(function() {			_removeAttr(this, key);		});		return this;	},	get : function(i) {		if (this.length < 1) {			return null;		}		return this[i || 0];	},	hasClass : function(cls) {		if (this.length < 1) {			return false;		}		return _hasClass(this[0], cls);	},	addClass : function(cls) {		this.each(function() {			if (!_hasClass(this, cls)) {				this.className = _trim(this.className + ' ' + cls);			}		});		return this;	},	removeClass : function(cls) {		this.each(function() {			if (_hasClass(this, cls)) {				this.className = _trim(this.className.replace(new RegExp('(^|\\s)' + cls + '(\\s|$)'), ' '));			}		});		return this;	},	html : function(val) {		var self = this;		if (val === undefined) {			if (self.length < 1 || self.type != 1) {				return '';			}			return _formatHtml(self[0].innerHTML);		}		self.each(function() {			_setHtml(this, val);		});		return self;	},	text : function() {		var self = this;		if (self.length < 1) {			return '';		}		return _IE ? self[0].innerText : self[0].textContent;	},	hasVal : function() {		if (this.length < 1) {			return false;		}		return _hasVal(this[0]);	},	val : function(val) {		var self = this;		if (val === undefined) {			if (self.length < 1) {				return '';			}			return self.hasVal() ? self[0].value : self.attr('value');		} else {			self.each(function() {				if (_hasVal(this)) {					this.value = val;				} else {					_setAttr(this, 'value' , val);				}			});			return self;		}	},	css : function(key, val) {		var self = this;		if (key === undefined) {			return _getCssList(self.attr('style'));		}		if (typeof key === 'object') {			_each(key, function(k, v) {				self.css(k, v);			});			return self;		}		if (val === undefined) {			if (self.length < 1) {				return '';			}			return self[0].style[_toCamel(key)] || _computedCss(self[0], key) || '';		}		self.each(function() {			this.style[_toCamel(key)] = val;		});		return self;	},	width : function(val) {		var self = this;		if (val === undefined) {			if (self.length < 1) {				return 0;			}			return self[0].offsetWidth;		}		return self.css('width', _addUnit(val));	},	height : function(val) {		var self = this;		if (val === undefined) {			if (self.length < 1) {				return 0;			}			return self[0].offsetHeight;		}		return self.css('height', _addUnit(val));	},	opacity : function(val) {		this.each(function() {			if (this.style.opacity === undefined) {				this.style.filter = val == 1 ? '' : 'alpha(opacity=' + (val * 100) + ')';			} else {				this.style.opacity = val == 1 ? '' : val;			}		});		return this;	},	data : function(key, val) {		var self = this;		if (val === undefined) {			return self._data[key];		}		self._data[key] = val;		return self;	},	pos : function() {		var self = this, node = self[0], x = 0, y = 0;		if (node) {			if (node.getBoundingClientRect) {				var box = node.getBoundingClientRect(),					pos = _getScrollPos(self.doc);				x = box.left + pos.x;				y = box.top + pos.y;			} else {				while (node) {					x += node.offsetLeft;					y += node.offsetTop;					node = node.offsetParent;				}			}		}		return {x : _round(x), y : _round(y)};	},	clone : function(bool) {		if (this.length < 1) {			return new KNode([]);		}		return new KNode([this[0].cloneNode(bool)]);	},	append : function(expr) {		this.each(function() {			if (this.appendChild) {				this.appendChild(_get(expr));			}		});		return this;	},	appendTo : function(expr) {		this.each(function() {			_get(expr).appendChild(this);		});		return this;	},	before : function(expr) {		this.each(function() {			this.parentNode.insertBefore(_get(expr), this);		});		return this;	},	after : function(expr) {		this.each(function() {			if (this.nextSibling) {				this.parentNode.insertBefore(_get(expr), this.nextSibling);			} else {				this.parentNode.appendChild(_get(expr));			}		});		return this;	},	replaceWith : function(expr) {		var nodes = [];		this.each(function(i, node) {			_unbind(node);			var newNode = _get(expr);			node.parentNode.replaceChild(newNode, node);			nodes.push(newNode);		});		return K(nodes);	},	empty : function() {		var self = this;		self.each(function(i, node) {			var child = node.firstChild;			while (child) {				if (!node.parentNode) {					return;				}				var next = child.nextSibling;				child.parentNode.removeChild(child);				child = next;			}		});		return self;	},	remove : function(keepChilds) {		var self = this;		self.each(function(i, node) {			if (!node.parentNode) {				return;			}			_unbind(node);			if (keepChilds) {				var child = node.firstChild;				while (child) {					var next = child.nextSibling;					node.parentNode.insertBefore(child, node);					child = next;				}			}			node.parentNode.removeChild(node);			delete self[i];		});		self.length = 0;		self._data = {};		return self;	},	show : function(val) {		return this.css('display', val === undefined ? 'block' : val);	},	hide : function() {		return this.css('display', 'none');	},	outer : function() {		var self = this;		if (self.length < 1) {			return '';		}		var div = self.doc.createElement('div'), html;		div.appendChild(self[0].cloneNode(true));		html = _formatHtml(div.innerHTML);		div = null;		return html;	},	isSingle : function() {		return !!_SINGLE_TAG_MAP[this.name];	},	isInline : function() {		return !!_INLINE_TAG_MAP[this.name];	},	isBlock : function() {		return !!_BLOCK_TAG_MAP[this.name];	},	isStyle : function() {		return !!_STYLE_TAG_MAP[this.name];	},	isControl : function() {		return !!_CONTROL_TAG_MAP[this.name];	},	contains : function(otherNode) {		if (this.length < 1) {			return false;		}		return _contains(this[0], _get(otherNode));	},	parent : function() {		if (this.length < 1) {			return null;		}		var node = this[0].parentNode;		return node ? new KNode([node]) : null;	},	children : function() {		if (this.length < 1) {			return [];		}		var list = [], child = this[0].firstChild;		while (child) {			if (child.nodeType != 3 || _trim(child.nodeValue) !== '') {				list.push(new KNode([child]));			}			child = child.nextSibling;		}		return list;	},	first : function() {		var list = this.children();		return list.length > 0 ? list[0] : null;	},	last : function() {		var list = this.children();		return list.length > 0 ? list[list.length - 1] : null;	},	index : function() {		if (this.length < 1) {			return -1;		}		var i = -1, sibling = this[0];		while (sibling) {			i++;			sibling = sibling.previousSibling;		}		return i;	},	prev : function() {		if (this.length < 1) {			return null;		}		var node = this[0].previousSibling;		return node ? new KNode([node]) : null;	},	next : function() {		if (this.length < 1) {			return null;		}		var node = this[0].nextSibling;		return node ? new KNode([node]) : null;	},	scan : function(fn, order) {		if (this.length < 1) {			return;		}		order = (order === undefined) ? true : order;		function walk(node) {			var n = order ? node.firstChild : node.lastChild;			while (n) {				var next = order ? n.nextSibling : n.previousSibling;				if (fn(n) === false) {					return false;				}				if (walk(n) === false) {					return false;				}				n = next;			}		}		walk(this[0]);		return this;	}});_each(('blur,focus,focusin,focusout,load,resize,scroll,unload,click,dblclick,' +	'mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,' +	'change,select,submit,keydown,keypress,keyup,error,contextmenu').split(','), function(i, type) {	KNode.prototype[type] = function(fn) {		return fn ? this.bind(type, fn) : this.fire(type);	};});var _K = K;K = function(expr, root) {	if (expr === undefined || expr === null) {		return;	}	function newNode(node) {		if (!node[0]) {			node = [];		}		return new KNode(node);	}	if (typeof expr === 'string') {		if (root) {			root = _get(root);		}		var length = expr.length;		if (expr.charAt(0) === '@') {			expr = expr.substr(1);		}		if (expr.length !== length || /<.+>/.test(expr)) {			var doc = root ? root.ownerDocument || root : document,				div = doc.createElement('div'), list = [];			div.innerHTML = '<img id="__kindeditor_temp_tag__" width="0" height="0" style="display:none;" />' + expr;			for (var i = 0, len = div.childNodes.length; i < len; i++) {				var child = div.childNodes[i];				if (child.id == '__kindeditor_temp_tag__') {					continue;				}				list.push(child);			}			return newNode(list);		}		return newNode(_queryAll(expr, root));	}	if (expr && expr.constructor === KNode) {		return expr;	}	if (_isArray(expr)) {		return newNode(expr);	}	return newNode(_toArray(arguments));};_each(_K, function(key, val) {	K[key] = val;});window.KindEditor = K;var _START_TO_START = 0,	_START_TO_END = 1,	_END_TO_END = 2,	_END_TO_START = 3,	_BOOKMARK_ID = 0;function _updateCollapsed(range) {	range.collapsed = (range.startContainer === range.endContainer && range.startOffset === range.endOffset);	return range;}function _copyAndDelete(range, isCopy, isDelete) {	var doc = range.doc, nodeList = [];	function splitTextNode(node, startOffset, endOffset) {		var length = node.nodeValue.length, centerNode;		if (isCopy) {			var cloneNode = node.cloneNode(true);			if (startOffset > 0) {				centerNode = cloneNode.splitText(startOffset);			} else {				centerNode = cloneNode;			}			if (endOffset < length) {				centerNode.splitText(endOffset - startOffset);			}		}		if (isDelete) {			var center = node;			if (startOffset > 0) {				center = node.splitText(startOffset);				range.setStart(node, startOffset);			}			if (endOffset < length) {				var right = center.splitText(endOffset - startOffset);				range.setEnd(right, 0);			}			nodeList.push(center);		}		return centerNode;	}	function removeNodes() {		if (isDelete) {			range.up().collapse(true);		}		for (var i = 0, len = nodeList.length; i < len; i++) {			var node = nodeList[i];			if (node.parentNode) {				node.parentNode.removeChild(node);			}		}	}	var copyRange = range.cloneRange().down();	var start = -1, incStart = -1, incEnd = -1, end = -1,		ancestor = range.commonAncestor(), frag = doc.createDocumentFragment();	if (ancestor.nodeType == 3) {		var textNode = splitTextNode(ancestor, range.startOffset, range.endOffset);		if (isCopy) {			frag.appendChild(textNode);		}		removeNodes();		return isCopy ? frag : range;	}	function extractNodes(parent, frag) {		var node = parent.firstChild, nextNode;		while (node) {			var testRange = new KRange(doc).selectNode(node);			start = testRange.compareBoundaryPoints(_START_TO_END, range);			if (start >= 0 && incStart <= 0) {				incStart = testRange.compareBoundaryPoints(_START_TO_START, range);			}			if (incStart >= 0 && incEnd <= 0) {				incEnd = testRange.compareBoundaryPoints(_END_TO_END, range);			}			if (incEnd >= 0 && end <= 0) {				end = testRange.compareBoundaryPoints(_END_TO_START, range);			}			if (end >= 0) {				return false;			}			nextNode = node.nextSibling;			if (start > 0) {				if (node.nodeType == 1) {					if (incStart >= 0 && incEnd <= 0) {						if (isCopy) {							frag.appendChild(node.cloneNode(true));						}						if (isDelete) {							nodeList.push(node);						}					} else {						var childFlag;						if (isCopy) {							childFlag = node.cloneNode(false);							frag.appendChild(childFlag);						}						if (extractNodes(node, childFlag) === false) {							return false;						}					}				} else if (node.nodeType == 3) {					var textNode;					if (node == copyRange.startContainer) {						textNode = splitTextNode(node, copyRange.startOffset, node.nodeValue.length);					} else if (node == copyRange.endContainer) {						textNode = splitTextNode(node, 0, copyRange.endOffset);					} else {						textNode = splitTextNode(node, 0, node.nodeValue.length);					}					if (isCopy) {						try {							frag.appendChild(textNode);						} catch(e) {}					}				}			}			node = nextNode;		}	}	extractNodes(ancestor, frag);	if (isDelete) {		range.up().collapse(true);	}	for (var i = 0, len = nodeList.length; i < len; i++) {		var node = nodeList[i];		if (node.parentNode) {			node.parentNode.removeChild(node);		}	}	return isCopy ? frag : range;}function _moveToElementText(range, el) {	var node = el;	while (node) {		var knode = K(node);		if (knode.name == 'marquee' || knode.name == 'select') {			return;		}		node = node.parentNode;	}	try {		range.moveToElementText(el);	} catch(e) {}}function _getStartEnd(rng, isStart) {	var doc = rng.parentElement().ownerDocument,		pointRange = rng.duplicate();	pointRange.collapse(isStart);	var parent = pointRange.parentElement(),		nodes = parent.childNodes;	if (nodes.length === 0) {		return {node: parent.parentNode, offset: K(parent).index()};	}	var startNode = doc, startPos = 0, cmp = -1;	var testRange = rng.duplicate();	_moveToElementText(testRange, parent);	for (var i = 0, len = nodes.length; i < len; i++) {		var node = nodes[i];		cmp = testRange.compareEndPoints('StartToStart', pointRange);		if (cmp === 0) {			return {node: node.parentNode, offset: i};		}		if (node.nodeType == 1) {			var nodeRange = rng.duplicate(), dummy, knode = K(node), newNode = node;			if (knode.isControl()) {				dummy = doc.createElement('span');				knode.after(dummy);				newNode = dummy;				startPos += knode.text().replace(/\r\n|\n|\r/g, '').length;			}			_moveToElementText(nodeRange, newNode);			testRange.setEndPoint('StartToEnd', nodeRange);			if (cmp > 0) {				startPos += nodeRange.text.replace(/\r\n|\n|\r/g, '').length;			} else {				startPos = 0;			}			if (dummy) {				K(dummy).remove();			}		} else if (node.nodeType == 3) {			testRange.moveStart('character', node.nodeValue.length);			startPos += node.nodeValue.length;		}		if (cmp < 0) {			startNode = node;		}	}	if (cmp < 0 && startNode.nodeType == 1) {		return {node: parent, offset: K(parent.lastChild).index() + 1};	}	if (cmp > 0) {		while (startNode.nextSibling && startNode.nodeType == 1) {			startNode = startNode.nextSibling;		}	}	testRange = rng.duplicate();	_moveToElementText(testRange, parent);	testRange.setEndPoint('StartToEnd', pointRange);	startPos -= testRange.text.replace(/\r\n|\n|\r/g, '').length;	if (cmp > 0 && startNode.nodeType == 3) {		var prevNode = startNode.previousSibling;		while (prevNode && prevNode.nodeType == 3) {			startPos -= prevNode.nodeValue.length;			prevNode = prevNode.previousSibling;		}	}	return {node: startNode, offset: startPos};}function _getEndRange(node, offset) {	var doc = node.ownerDocument || node,		range = doc.body.createTextRange();	if (doc == node) {		range.collapse(true);		return range;	}	if (node.nodeType == 1 && node.childNodes.length > 0) {		var children = node.childNodes, isStart, child;		if (offset === 0) {			child = children[0];			isStart = true;		} else {			child = children[offset - 1];			isStart = false;		}		if (!child) {			return range;		}		if (K(child).name === 'head') {			if (offset === 1) {				isStart = true;			}			if (offset === 2) {				isStart = false;			}			range.collapse(isStart);			return range;		}		if (child.nodeType == 1) {			var kchild = K(child), span;			if (kchild.isControl()) {				span = doc.createElement('span');				if (isStart) {					kchild.before(span);				} else {					kchild.after(span);				}				child = span;			}			_moveToElementText(range, child);			range.collapse(isStart);			if (span) {				K(span).remove();			}			return range;		}		node = child;		offset = isStart ? 0 : child.nodeValue.length;	}	var dummy = doc.createElement('span');	K(node).before(dummy);	_moveToElementText(range, dummy);	range.moveStart('character', offset);	K(dummy).remove();	return range;}function _toRange(rng) {	var doc, range;	function tr2td(start) {		if (K(start.node).name == 'tr') {			start.node = start.node.cells[start.offset];			start.offset = 0;		}	}	if (_IE) {		if (rng.item) {			doc = _getDoc(rng.item(0));			range = new KRange(doc);			range.selectNode(rng.item(0));			return range;		}		doc = rng.parentElement().ownerDocument;		var start = _getStartEnd(rng, true),			end = _getStartEnd(rng, false);		tr2td(start);		tr2td(end);		range = new KRange(doc);		range.setStart(start.node, start.offset);		range.setEnd(end.node, end.offset);		return range;	}	var startContainer = rng.startContainer;	doc = startContainer.ownerDocument || startContainer;	range = new KRange(doc);	range.setStart(startContainer, rng.startOffset);	range.setEnd(rng.endContainer, rng.endOffset);	return range;}function KRange(doc) {	this.init(doc);}_extend(KRange, {	init : function(doc) {		var self = this;		self.startContainer = doc;		self.startOffset = 0;		self.endContainer = doc;		self.endOffset = 0;		self.collapsed = true;		self.doc = doc;	},	commonAncestor : function() {		function getParents(node) {			var parents = [];			while (node) {				parents.push(node);				node = node.parentNode;			}			return parents;		}		var parentsA = getParents(this.startContainer),			parentsB = getParents(this.endContainer),			i = 0, lenA = parentsA.length, lenB = parentsB.length, parentA, parentB;		while (++i) {			parentA = parentsA[lenA - i];			parentB = parentsB[lenB - i];			if (!parentA || !parentB || parentA !== parentB) {				break;			}		}		return parentsA[lenA - i + 1];	},	setStart : function(node, offset) {		var self = this, doc = self.doc;		self.startContainer = node;		self.startOffset = offset;		if (self.endContainer === doc) {			self.endContainer = node;			self.endOffset = offset;		}		return _updateCollapsed(this);	},	setEnd : function(node, offset) {		var self = this, doc = self.doc;		self.endContainer = node;		self.endOffset = offset;		if (self.startContainer === doc) {			self.startContainer = node;			self.startOffset = offset;		}		return _updateCollapsed(this);	},	setStartBefore : function(node) {		return this.setStart(node.parentNode || this.doc, K(node).index());	},	setStartAfter : function(node) {		return this.setStart(node.parentNode || this.doc, K(node).index() + 1);	},	setEndBefore : function(node) {		return this.setEnd(node.parentNode || this.doc, K(node).index());	},	setEndAfter : function(node) {		return this.setEnd(node.parentNode || this.doc, K(node).index() + 1);	},	selectNode : function(node) {		return this.setStartBefore(node).setEndAfter(node);	},	selectNodeContents : function(node) {		var knode = K(node);		if (knode.type == 3 || knode.isSingle()) {			return this.selectNode(node);		}		var children = knode.children();		if (children.length > 0) {			return this.setStartBefore(children[0][0]).setEndAfter(children[children.length - 1][0]);		}		return this.setStart(node, 0).setEnd(node, 0);	},	collapse : function(toStart) {		if (toStart) {			return this.setEnd(this.startContainer, this.startOffset);		}		return this.setStart(this.endContainer, this.endOffset);	},	compareBoundaryPoints : function(how, range) {		var rangeA = this.get(), rangeB = range.get();		if (_IE) {			var arr = {};			arr[_START_TO_START] = 'StartToStart';			arr[_START_TO_END] = 'EndToStart';			arr[_END_TO_END] = 'EndToEnd';			arr[_END_TO_START] = 'StartToEnd';			var cmp = rangeA.compareEndPoints(arr[how], rangeB);			if (cmp !== 0) {				return cmp;			}			var nodeA, nodeB, nodeC, posA, posB;			if (how === _START_TO_START || how === _END_TO_START) {				nodeA = this.startContainer;				posA = this.startOffset;			}			if (how === _START_TO_END || how === _END_TO_END) {				nodeA = this.endContainer;				posA = this.endOffset;			}			if (how === _START_TO_START || how === _START_TO_END) {				nodeB = range.startContainer;				posB = range.startOffset;			}			if (how === _END_TO_END || how === _END_TO_START) {				nodeB = range.endContainer;				posB = range.endOffset;			}			if (nodeA === nodeB) {				var diff = posA - posB;				return diff > 0 ? 1 : (diff < 0 ? -1 : 0);			}			nodeC = nodeB;			while (nodeC && nodeC.parentNode !== nodeA) {				nodeC = nodeC.parentNode;			}			if (nodeC) {				return K(nodeC).index() >= posA ? -1 : 1;			}			nodeC = nodeA;			while (nodeC && nodeC.parentNode !== nodeB) {				nodeC = nodeC.parentNode;			}			if (nodeC) {				return K(nodeC).index() >= posB ? 1 : -1;			}			nodeC = K(nodeB).next();			if (nodeC && nodeC.contains(nodeA)) {				return 1;			}			nodeC = K(nodeA).next();			if (nodeC && nodeC.contains(nodeB)) {				return -1;			}		} else {			return rangeA.compareBoundaryPoints(how, rangeB);		}	},	cloneRange : function() {		return new KRange(this.doc).setStart(this.startContainer, this.startOffset).setEnd(this.endContainer, this.endOffset);	},	toString : function() {		var rng = this.get(), str = _IE ? rng.text : rng.toString();		return str.replace(/\r\n|\n|\r/g, '');	},	cloneContents : function() {		return _copyAndDelete(this, true, false);	},	deleteContents : function() {		return _copyAndDelete(this, false, true);	},	extractContents : function() {		return _copyAndDelete(this, true, true);	},	insertNode : function(node) {		var self = this,			sc = self.startContainer, so = self.startOffset,			ec = self.endContainer, eo = self.endOffset,			firstChild, lastChild, c, nodeCount = 1;		if (node.nodeName.toLowerCase() === '#document-fragment') {			firstChild = node.firstChild;			lastChild = node.lastChild;			nodeCount = node.childNodes.length;		}		if (sc.nodeType == 1) {			c = sc.childNodes[so];			if (c) {				sc.insertBefore(node, c);				if (sc === ec) {					eo += nodeCount;				}			} else {				sc.appendChild(node);			}		} else if (sc.nodeType == 3) {			if (so === 0) {				sc.parentNode.insertBefore(node, sc);				if (sc.parentNode === ec) {					eo += nodeCount;				}			} else if (so >= sc.nodeValue.length) {				if (sc.nextSibling) {					sc.parentNode.insertBefore(node, sc.nextSibling);				} else {					sc.parentNode.appendChild(node);				}			} else {				if (so > 0) {					c = sc.splitText(so);				} else {					c = sc;				}				sc.parentNode.insertBefore(node, c);				if (sc === ec) {					ec = c;					eo -= so;				}			}		}		if (firstChild) {			self.setStartBefore(firstChild).setEndAfter(lastChild);		} else {			self.selectNode(node);		}		if (self.compareBoundaryPoints(_END_TO_END, self.cloneRange().setEnd(ec, eo)) >= 1) {			return self;		}		return self.setEnd(ec, eo);	},	surroundContents : function(node) {		node.appendChild(this.extractContents());		return this.insertNode(node).selectNode(node);	},	isControl : function() {		var self = this,			sc = self.startContainer, so = self.startOffset,			ec = self.endContainer, eo = self.endOffset, rng;		return sc.nodeType == 1 && sc === ec && so + 1 === eo && K(sc.childNodes[so]).isControl();	},	get : function(hasControlRange) {		var self = this, doc = self.doc, node, rng;		if (!_IE) {			rng = doc.createRange();			try {				rng.setStart(self.startContainer, self.startOffset);				rng.setEnd(self.endContainer, self.endOffset);			} catch (e) {}			return rng;		}		if (hasControlRange && self.isControl()) {			rng = doc.body.createControlRange();			rng.addElement(self.startContainer.childNodes[self.startOffset]);			return rng;		}		var range = self.cloneRange().down();		rng = doc.body.createTextRange();		rng.setEndPoint('StartToStart', _getEndRange(range.startContainer, range.startOffset));		rng.setEndPoint('EndToStart', _getEndRange(range.endContainer, range.endOffset));		return rng;	},	html : function() {		return K(this.cloneContents()).outer();	},	down : function() {		var self = this;		function downPos(node, pos, isStart) {			if (node.nodeType != 1) {				return;			}			var children = K(node).children();			if (children.length === 0) {				return;			}			var left, right, child, offset;			if (pos > 0) {				left = children[pos - 1];			}			if (pos < children.length) {				right = children[pos];			}			if (left && left.type == 3) {				child = left[0];				offset = child.nodeValue.length;			}			if (right && right.type == 3) {				child = right[0];				offset = 0;			}			if (!child) {				return;			}			if (isStart) {				self.setStart(child, offset);			} else {				self.setEnd(child, offset);			}		}		downPos(self.startContainer, self.startOffset, true);		downPos(self.endContainer, self.endOffset, false);		return self;	},	up : function() {		var self = this;		function upPos(node, pos, isStart) {			if (node.nodeType != 3) {				return;			}			if (pos === 0) {				if (isStart) {					self.setStartBefore(node);				} else {					self.setEndBefore(node);				}			} else if (pos == node.nodeValue.length) {				if (isStart) {					self.setStartAfter(node);				} else {					self.setEndAfter(node);				}			}		}		upPos(self.startContainer, self.startOffset, true);		upPos(self.endContainer, self.endOffset, false);		return self;	},	enlarge : function(toBlock) {		var self = this;		self.up();		function enlargePos(node, pos, isStart) {			var knode = K(node), parent;			if (knode.type == 3 || _NOSPLIT_TAG_MAP[knode.name] || !toBlock && knode.isBlock()) {				return;			}			if (pos === 0) {				while (!knode.prev()) {					parent = knode.parent();					if (!parent || _NOSPLIT_TAG_MAP[parent.name] || !toBlock && parent.isBlock()) {						break;					}					knode = parent;				}				if (isStart) {					self.setStartBefore(knode[0]);				} else {					self.setEndBefore(knode[0]);				}			} else if (pos == knode.children().length) {				while (!knode.next()) {					parent = knode.parent();					if (!parent || _NOSPLIT_TAG_MAP[parent.name] || !toBlock && parent.isBlock()) {						break;					}					knode = parent;				}				if (isStart) {					self.setStartAfter(knode[0]);				} else {					self.setEndAfter(knode[0]);				}			}		}		enlargePos(self.startContainer, self.startOffset, true);		enlargePos(self.endContainer, self.endOffset, false);		return self;	},	shrink : function() {		var self = this, child, collapsed = self.collapsed;		while (self.startContainer.nodeType == 1 && (child = self.startContainer.childNodes[self.startOffset]) && child.nodeType == 1 && !K(child).isSingle()) {			self.setStart(child, 0);		}		if (collapsed) {			return self.collapse(collapsed);		}		while (self.endContainer.nodeType == 1 && self.endOffset > 0 && (child = self.endContainer.childNodes[self.endOffset - 1]) && child.nodeType == 1 && !K(child).isSingle()) {			self.setEnd(child, child.childNodes.length);		}		return self;	},	createBookmark : function(serialize) {		var self = this, doc = self.doc, endNode,			startNode = K('<span style="display:none;"></span>', doc)[0];		startNode.id = '__kindeditor_bookmark_start_' + (_BOOKMARK_ID++) + '__';		if (!self.collapsed) {			endNode = startNode.cloneNode(true);			endNode.id = '__kindeditor_bookmark_end_' + (_BOOKMARK_ID++) + '__';		}		if (endNode) {			self.cloneRange().collapse(false).insertNode(endNode).setEndBefore(endNode);		}		self.insertNode(startNode).setStartAfter(startNode);		return {			start : serialize ? '#' + startNode.id : startNode,			end : endNode ? (serialize ? '#' + endNode.id : endNode) : null		};	},	moveToBookmark : function(bookmark) {		var self = this, doc = self.doc,			start = K(bookmark.start, doc), end = bookmark.end ? K(bookmark.end, doc) : null;		if (!start || start.length < 1) {			return self;		}		self.setStartBefore(start[0]);		start.remove();		if (end && end.length > 0) {			self.setEndBefore(end[0]);			end.remove();		} else {			self.collapse(true);		}		return self;	},	dump : function() {		console.log('--------------------');		console.log(this.startContainer.nodeType == 3 ? this.startContainer.nodeValue : this.startContainer, this.startOffset);		console.log(this.endContainer.nodeType == 3 ? this.endContainer.nodeValue : this.endContainer, this.endOffset);	}});function _range(mixed) {	if (!mixed.nodeName) {		return mixed.constructor === KRange ? mixed : _toRange(mixed);	}	return new KRange(mixed);}K.range = _range;K.START_TO_START = _START_TO_START;K.START_TO_END = _START_TO_END;K.END_TO_END = _END_TO_END;K.END_TO_START = _END_TO_START;function _nativeCommand(doc, key, val) {	try {		doc.execCommand(key, false, val);	} catch(e) {}}function _nativeCommandValue(doc, key) {	var val = '';	try {		val = doc.queryCommandValue(key);	} catch (e) {}	if (typeof val !== 'string') {		val = '';	}	return val;}function _getSel(doc) {	var win = _getWin(doc);	return doc.selection || win.getSelection();}function _getRng(doc) {	var sel = _getSel(doc), rng;	try {		if (sel.rangeCount > 0) {			rng = sel.getRangeAt(0);		} else {			rng = sel.createRange();		}	} catch(e) {}	if (_IE && (!rng || (!rng.item && rng.parentElement().ownerDocument !== doc))) {		return null;	}	return rng;}function _singleKeyMap(map) {	var newMap = {}, arr, v;	_each(map, function(key, val) {		arr = key.split(',');		for (var i = 0, len = arr.length; i < len; i++) {			v = arr[i];			newMap[v] = val;		}	});	return newMap;}function _hasAttrOrCss(knode, map) {	return _hasAttrOrCssByKey(knode, map, '*') || _hasAttrOrCssByKey(knode, map);}function _hasAttrOrCssByKey(knode, map, mapKey) {	mapKey = mapKey || knode.name;	if (knode.type !== 1) {		return false;	}	var newMap = _singleKeyMap(map);	if (!newMap[mapKey]) {		return false;	}	var arr = newMap[mapKey].split(',');	for (var i = 0, len = arr.length; i < len; i++) {		var key = arr[i];		if (key === '*') {			return true;		}		var match = /^(\.?)([^=]+)(?:=([^=]*))?$/.exec(key);		var method = match[1] ? 'css' : 'attr';		key = match[2];		var val = match[3] || '';		if (val === '' && knode[method](key) !== '') {			return true;		}		if (val !== '' && knode[method](key) === val) {			return true;		}	}	return false;}function _removeAttrOrCss(knode, map) {	if (knode.type != 1) {		return;	}	_removeAttrOrCssByKey(knode, map, '*');	_removeAttrOrCssByKey(knode, map);}function _removeAttrOrCssByKey(knode, map, mapKey) {	mapKey = mapKey || knode.name;	if (knode.type !== 1) {		return;	}	var newMap = _singleKeyMap(map);	if (!newMap[mapKey]) {		return;	}	var arr = newMap[mapKey].split(','), allFlag = false;	for (var i = 0, len = arr.length; i < len; i++) {		var key = arr[i];		if (key === '*') {			allFlag = true;			break;		}		var match = /^(\.?)([^=]+)(?:=([^=]*))?$/.exec(key);		key = match[2];		if (match[1]) {			key = _toCamel(key);			if (knode[0].style[key]) {				knode[0].style[key] = '';			}		} else {			knode.removeAttr(key);		}	}	if (allFlag) {		knode.remove(true);	}}function _getInnerNode(knode) {	var inner = knode;	while (inner.first()) {		inner = inner.first();	}	return inner;}function _isEmptyNode(knode) {	return knode.type == 1 && knode.html().replace(/<[^>]+>/g, '') === '';}function _mergeWrapper(a, b) {	a = a.clone(true);	var lastA = _getInnerNode(a), childA = a, merged = false;	while (b) {		while (childA) {			if (childA.name === b.name) {				_mergeAttrs(childA, b.attr(), b.css());				merged = true;			}			childA = childA.first();		}		if (!merged) {			lastA.append(b.clone(false));		}		merged = false;		b = b.first();	}	return a;}function _wrapNode(knode, wrapper) {	wrapper = wrapper.clone(true);	if (knode.type == 3) {		_getInnerNode(wrapper).append(knode.clone(false));		knode.replaceWith(wrapper);		return wrapper;	}	var nodeWrapper = knode, child;	while ((child = knode.first()) && child.children().length == 1) {		knode = child;	}	child = knode.first();	var frag = knode.doc.createDocumentFragment();	while (child) {		frag.appendChild(child[0]);		child = child.next();	}	wrapper = _mergeWrapper(nodeWrapper, wrapper);	if (frag.firstChild) {		_getInnerNode(wrapper).append(frag);	}	nodeWrapper.replaceWith(wrapper);	return wrapper;}function _mergeAttrs(knode, attrs, styles) {	_each(attrs, function(key, val) {		if (key !== 'style') {			knode.attr(key, val);		}	});	_each(styles, function(key, val) {		knode.css(key, val);	});}function _inPreElement(knode) {	while (knode && knode.name != 'body') {		if (_PRE_TAG_MAP[knode.name] || knode.name == 'div' && knode.hasClass('ke-script')) {			return true;		}		knode = knode.parent();	}	return false;}function KCmd(range) {	this.init(range);}_extend(KCmd, {	init : function(range) {		var self = this, doc = range.doc;		self.doc = doc;		self.win = _getWin(doc);		self.sel = _getSel(doc);		self.range = range;	},	selection : function(forceReset) {		var self = this, doc = self.doc, rng = _getRng(doc);		self.sel = _getSel(doc);		if (rng) {			self.range = _range(rng);			if (K(self.range.startContainer).name == 'html') {				self.range.selectNodeContents(doc.body).collapse(false);			}			return self;		}		if (forceReset) {			self.range.selectNodeContents(doc.body).collapse(false);		}		return self;	},	select : function(hasDummy) {		hasDummy = _undef(hasDummy, true);		var self = this, sel = self.sel, range = self.range.cloneRange().shrink(),			sc = range.startContainer, so = range.startOffset,			ec = range.endContainer, eo = range.endOffset,			doc = _getDoc(sc), win = self.win, rng, hasU200b = false;		if (hasDummy && sc.nodeType == 1 && range.collapsed) {			if (_IE) {				var dummy = K('<span> </span>', doc);				range.insertNode(dummy[0]);				rng = doc.body.createTextRange();				try {					rng.moveToElementText(dummy[0]);				} catch(ex) {}				rng.collapse(false);				rng.select();				dummy.remove();				win.focus();				return self;			}			if (_WEBKIT) {				var children = sc.childNodes;				if (K(sc).isInline() || so > 0 && K(children[so - 1]).isInline() || children[so] && K(children[so]).isInline()) {					range.insertNode(doc.createTextNode('\u200B'));					hasU200b = true;				}			}		}		if (_IE) {			try {				rng = range.get(true);				rng.select();			} catch(e) {}		} else {			if (hasU200b) {				range.collapse(false);			}			rng = range.get(true);			sel.removeAllRanges();			sel.addRange(rng);		}		win.focus();		return self;	},	wrap : function(val) {		var self = this, doc = self.doc, range = self.range, wrapper;		wrapper = K(val, doc);		if (range.collapsed) {			range.shrink();			range.insertNode(wrapper[0]).selectNodeContents(wrapper[0]);			return self;		}		if (wrapper.isBlock()) {			var copyWrapper = wrapper.clone(true), child = copyWrapper;			while (child.first()) {				child = child.first();			}			child.append(range.extractContents());			range.insertNode(copyWrapper[0]).selectNode(copyWrapper[0]);			return self;		}		range.enlarge();		var bookmark = range.createBookmark(), ancestor = range.commonAncestor(), isStart = false;		K(ancestor).scan(function(node) {			if (!isStart && node == bookmark.start) {				isStart = true;				return;			}			if (isStart) {				if (node == bookmark.end) {					return false;				}				var knode = K(node);				if (_inPreElement(knode)) {					return;				}				if (knode.type == 3 && _trim(node.nodeValue).length > 0) {					var parent;					while ((parent = knode.parent()) && parent.isStyle() && parent.children().length == 1) {						knode = parent;					}					_wrapNode(knode, wrapper);				}			}		});		range.moveToBookmark(bookmark);		return self;	},	split : function(isStart, map) {		var range = this.range, doc = range.doc;		var tempRange = range.cloneRange().collapse(isStart);		var node = tempRange.startContainer, pos = tempRange.startOffset,			parent = node.nodeType == 3 ? node.parentNode : node,			needSplit = false, knode;		while (parent && parent.parentNode) {			knode = K(parent);			if (map) {				if (!knode.isStyle()) {					break;				}				if (!_hasAttrOrCss(knode, map)) {					break;				}			} else {				if (_NOSPLIT_TAG_MAP[knode.name]) {					break;				}			}			needSplit = true;			parent = parent.parentNode;		}		if (needSplit) {			var dummy = doc.createElement('span');			range.cloneRange().collapse(!isStart).insertNode(dummy);			if (isStart) {				tempRange.setStartBefore(parent.firstChild).setEnd(node, pos);			} else {				tempRange.setStart(node, pos).setEndAfter(parent.lastChild);			}			var frag = tempRange.extractContents(),				first = frag.firstChild, last = frag.lastChild;			if (isStart) {				tempRange.insertNode(frag);				range.setStartAfter(last).setEndBefore(dummy);			} else {				parent.appendChild(frag);				range.setStartBefore(dummy).setEndBefore(first);			}			var dummyParent = dummy.parentNode;			if (dummyParent == range.endContainer) {				var prev = K(dummy).prev(), next = K(dummy).next();				if (prev && next && prev.type == 3 && next.type == 3) {					range.setEnd(prev[0], prev[0].nodeValue.length);				} else if (!isStart) {					range.setEnd(range.endContainer, range.endOffset - 1);				}			}			dummyParent.removeChild(dummy);		}		return this;	},	remove : function(map) {		var self = this, doc = self.doc, range = self.range;		range.enlarge();		if (range.startOffset === 0) {			var ksc = K(range.startContainer), parent;			while ((parent = ksc.parent()) && parent.isStyle() && parent.children().length == 1) {				ksc = parent;			}			range.setStart(ksc[0], 0);			ksc = K(range.startContainer);			if (ksc.isBlock()) {				_removeAttrOrCss(ksc, map);			}			var kscp = ksc.parent();			if (kscp && kscp.isBlock()) {				_removeAttrOrCss(kscp, map);			}		}		var sc, so;		if (range.collapsed) {			self.split(true, map);			sc = range.startContainer;			so = range.startOffset;			if (so > 0) {				var sb = K(sc.childNodes[so - 1]);				if (sb && _isEmptyNode(sb)) {					sb.remove();					range.setStart(sc, so - 1);				}			}			var sa = K(sc.childNodes[so]);			if (sa && _isEmptyNode(sa)) {				sa.remove();			}			if (_isEmptyNode(sc)) {				range.startBefore(sc);				sc.remove();			}			range.collapse(true);			return self;		}		self.split(true, map);		self.split(false, map);		var startDummy = doc.createElement('span'), endDummy = doc.createElement('span');		range.cloneRange().collapse(false).insertNode(endDummy);		range.cloneRange().collapse(true).insertNode(startDummy);		var nodeList = [], cmpStart = false;		K(range.commonAncestor()).scan(function(node) {			if (!cmpStart && node == startDummy) {				cmpStart = true;				return;			}			if (node == endDummy) {				return false;			}			if (cmpStart) {				nodeList.push(node);			}		});		K(startDummy).remove();		K(endDummy).remove();		sc = range.startContainer;		so = range.startOffset;		var ec = range.endContainer, eo = range.endOffset;		if (so > 0) {			var startBefore = K(sc.childNodes[so - 1]);			if (startBefore && _isEmptyNode(startBefore)) {				startBefore.remove();				range.setStart(sc, so - 1);				if (sc == ec) {					range.setEnd(ec, eo - 1);				}			}			var startAfter = K(sc.childNodes[so]);			if (startAfter && _isEmptyNode(startAfter)) {				startAfter.remove();				if (sc == ec) {					range.setEnd(ec, eo - 1);				}			}		}		var endAfter = K(ec.childNodes[range.endOffset]);		if (endAfter && _isEmptyNode(endAfter)) {			endAfter.remove();		}		var bookmark = range.createBookmark(true);		_each(nodeList, function(i, node) {			_removeAttrOrCss(K(node), map);		});		range.moveToBookmark(bookmark);		return self;	},	commonNode : function(map) {		var range = this.range;		var ec = range.endContainer, eo = range.endOffset,			node = (ec.nodeType == 3 || eo === 0) ? ec : ec.childNodes[eo - 1];		function find(node) {			var child = node, parent = node;			while (parent) {				if (_hasAttrOrCss(K(parent), map)) {					return K(parent);				}				parent = parent.parentNode;			}			while (child && (child = child.lastChild)) {				if (_hasAttrOrCss(K(child), map)) {					return K(child);				}			}			return null;		}		var cNode = find(node);		if (cNode) {			return cNode;		}		if (node.nodeType == 1 || (ec.nodeType == 3 && eo === 0)) {			var prev = K(node).prev();			if (prev) {				return find(prev);			}		}		return null;	},	commonAncestor : function(tagName) {		var range = this.range,			sc = range.startContainer, so = range.startOffset,			ec = range.endContainer, eo = range.endOffset,			startNode = (sc.nodeType == 3 || so === 0) ? sc : sc.childNodes[so - 1],			endNode = (ec.nodeType == 3 || eo === 0) ? ec : ec.childNodes[eo - 1];		function find(node) {			while (node) {				if (node.nodeType == 1) {					if (node.tagName.toLowerCase() === tagName) {						return node;					}				}				node = node.parentNode;			}			return null;		}		var start = find(startNode), end = find(endNode);		if (start && end && start === end) {			return K(start);		}		return null;	},	state : function(key) {		var self = this, doc = self.doc, bool = false;		try {			bool = doc.queryCommandState(key);		} catch (e) {}		return bool;	},	val : function(key) {		var self = this, doc = self.doc, range = self.range;		function lc(val) {			return val.toLowerCase();		}		key = lc(key);		var val = '', knode;		if (key === 'fontfamily' || key === 'fontname') {			val = _nativeCommandValue(doc, 'fontname');			val = val.replace(/['"]/g, '');			return lc(val);		}		if (key === 'formatblock') {			val = _nativeCommandValue(doc, key);			if (val === '') {				knode = self.commonNode({'h1,h2,h3,h4,h5,h6,p,div,pre,address' : '*'});				if (knode) {					val = knode.name;				}			}			if (val === 'Normal') {				val = 'p';			}			return lc(val);		}		if (key === 'fontsize') {			knode = self.commonNode({'*' : '.font-size'});			if (knode) {				val = knode.css('font-size');			}			return lc(val);		}		if (key === 'forecolor') {			knode = self.commonNode({'*' : '.color'});			if (knode) {				val = knode.css('color');			}			val = _toHex(val);			if (val === '') {				val = 'default';			}			return lc(val);		}		if (key === 'hilitecolor') {			knode = self.commonNode({'*' : '.background-color'});			if (knode) {				val = knode.css('background-color');			}			val = _toHex(val);			if (val === '') {				val = 'default';			}			return lc(val);		}		return val;	},	toggle : function(wrapper, map) {		var self = this;		if (self.commonNode(map)) {			self.remove(map);		} else {			self.wrap(wrapper);		}		return self.select();	},	bold : function() {		return this.toggle('<strong></strong>', {			span : '.font-weight=bold',			strong : '*',			b : '*'		});	},	italic : function() {		return this.toggle('<em></em>', {			span : '.font-style=italic',			em : '*',			i : '*'		});	},	underline : function() {		return this.toggle('<u></u>', {			span : '.text-decoration=underline',			u : '*'		});	},	strikethrough : function() {		return this.toggle('<s></s>', {			span : '.text-decoration=line-through',			s : '*'		});	},	forecolor : function(val) {		return this.toggle('<span style="color:' + val + ';"></span>', {			span : '.color=' + val,			font : 'color'		});	},	hilitecolor : function(val) {		return this.toggle('<span style="background-color:' + val + ';"></span>', {			span : '.background-color=' + val		});	},	fontsize : function(val) {		return this.toggle('<span style="font-size:' + val + ';"></span>', {			span : '.font-size=' + val,			font : 'size'		});	},	fontname : function(val) {		return this.fontfamily(val);	},	fontfamily : function(val) {		return this.toggle('<span style="font-family:' + val + ';"></span>', {			span : '.font-family=' + val,			font : 'face'		});	},	removeformat : function() {		var map = {			'*' : '.font-weight,.font-style,.text-decoration,.color,.background-color,.font-size,.font-family,.text-indent'		},		tags = _STYLE_TAG_MAP;		_each(tags, function(key, val) {			map[key] = '*';		});		this.remove(map);		return this.select();	},	inserthtml : function(val) {		var self = this, range = self.range;		if (val === '') {			return self;		}		if (_inPreElement(K(range.startContainer))) {			return self;		}		function pasteHtml(range, val) {			val = '<img id="__kindeditor_temp_tag__" width="0" height="0" style="display:none;" />' + val;			var rng = range.get();			if (rng.item) {				rng.item(0).outerHTML = val;			} else {				rng.pasteHTML(val);			}			var temp = range.doc.getElementById('__kindeditor_temp_tag__');			temp.parentNode.removeChild(temp);			var newRange = _toRange(rng);			range.setEnd(newRange.endContainer, newRange.endOffset);			range.collapse(false);			self.select(false);		}		function insertHtml(range, val) {			var doc = range.doc,				frag = doc.createDocumentFragment();			K('@' + val, doc).each(function() {				frag.appendChild(this);			});			range.deleteContents();			range.insertNode(frag);			range.collapse(false);			self.select(false);		}		if (_IE) {			try {				pasteHtml(range, val);			} catch(e) {				insertHtml(range, val);			}			return self;		}		insertHtml(range, val);		return self;	},	hr : function() {		return this.inserthtml('<hr />');	},	print : function() {		this.win.print();		return this;	},	insertimage : function(url, title, width, height, border, align) {		title = _undef(title, '');		border = _undef(border, 0);		var html = '<img src="' + _escape(url) + '" data-ke-src="' + _escape(url) + '" ';		if (width) {			html += 'width="' + _escape(width) + '" ';		}		if (height) {			html += 'height="' + _escape(height) + '" ';		}		if (title) {			html += 'title="' + _escape(title) + '" ';		}		if (align) {			html += 'align="' + _escape(align) + '" ';		}		html += 'alt="' + _escape(title) + '" ';		html += '/>';		return this.inserthtml(html);	},	createlink : function(url, type) {		var self = this, doc = self.doc, range = self.range;		self.select();		var a = self.commonNode({ a : '*' });		if (a && !range.isControl()) {			range.selectNode(a.get());			self.select();		}		var html = '<a href="' + _escape(url) + '" data-ke-src="' + _escape(url) + '" ';		if (type) {			html += ' target="' + _escape(type) + '"';		}		if (range.collapsed) {			html += '>' + _escape(url) + '</a>';			return self.inserthtml(html);		}		if (range.isControl()) {			var node = K(range.startContainer.childNodes[range.startOffset]);			html += '></a>';			node.after(K(html, doc));			node.next().append(node);			range.selectNode(node[0]);			return self.select();		}		_nativeCommand(doc, 'createlink', '__kindeditor_temp_url__');		K('a[href="__kindeditor_temp_url__"]', doc).each(function() {			K(this).attr('href', url).attr('data-ke-src', url);			if (type) {				K(this).attr('target', type);			} else {				K(this).removeAttr('target');			}		});		return self;	},	unlink : function() {		var self = this, doc = self.doc, range = self.range;		self.select();		if (range.collapsed) {			var a = self.commonNode({ a : '*' });			if (a) {				range.selectNode(a.get());				self.select();			}			_nativeCommand(doc, 'unlink', null);			if (_WEBKIT && K(range.startContainer).name === 'img') {				var parent = K(range.startContainer).parent();				if (parent.name === 'a') {					parent.remove(true);				}			}		} else {			_nativeCommand(doc, 'unlink', null);		}		return self;	}});_each(('formatblock,selectall,justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,' +	'insertunorderedlist,indent,outdent,subscript,superscript').split(','), function(i, name) {	KCmd.prototype[name] = function(val) {		var self = this;		self.select();		_nativeCommand(self.doc, name, val);		if (!_IE || _inArray(name, 'formatblock,selectall,insertorderedlist,insertunorderedlist'.split(',')) >= 0) {			self.selection();		}		return self;	};});_each('cut,copy,paste'.split(','), function(i, name) {	KCmd.prototype[name] = function() {		var self = this;		if (!self.doc.queryCommandSupported(name)) {			throw 'not supported';		}		self.select();		_nativeCommand(self.doc, name, null);		return self;	};});function _cmd(mixed) {	if (mixed.nodeName) {		var doc = _getDoc(mixed);		mixed = _range(doc).selectNodeContents(doc.body).collapse(false);	}	return new KCmd(mixed);}K.cmd = _cmd;function _drag(options) {	var moveEl = options.moveEl,		moveFn = options.moveFn,		clickEl = options.clickEl || moveEl,		beforeDrag = options.beforeDrag,		iframeFix = options.iframeFix === undefined ? true : options.iframeFix;	var docs = [document],		poss = [{ x : 0, y : 0}],		listeners = [];	if (iframeFix) {		K('iframe').each(function() {			var doc;			try {				doc = _iframeDoc(this);				K(doc);			} catch(e) {				doc = null;			}			if (doc) {				docs.push(doc);				poss.push(K(this).pos());			}		});	}	clickEl.mousedown(function(e) {		var self = clickEl.get(),			x = _removeUnit(moveEl.css('left')),			y = _removeUnit(moveEl.css('top')),			width = moveEl.width(),			height = moveEl.height(),			pageX = e.pageX,			pageY = e.pageY,			dragging = true;		if (beforeDrag) {			beforeDrag();		}		_each(docs, function(i, doc) {			function moveListener(e) {				if (dragging) {					var diffX = _round(poss[i].x + e.pageX - pageX),						diffY = _round(poss[i].y + e.pageY - pageY);					moveFn.call(clickEl, x, y, width, height, diffX, diffY);				}				e.stop();			}			function selectListener(e) {				e.stop();			}			function upListener(e) {				dragging = false;				if (self.releaseCapture) {					self.releaseCapture();				}				_each(listeners, function() {					K(this.doc).unbind('mousemove', this.move)						.unbind('mouseup', this.up)						.unbind('selectstart', this.select);				});				e.stop();			}			K(doc).mousemove(moveListener)				.mouseup(upListener)				.bind('selectstart', selectListener);			listeners.push({				doc : doc,				move : moveListener,				up : upListener,				select : selectListener			});		});		if (self.setCapture) {			self.setCapture();		}		e.stop();	});}function KWidget(options) {	this.init(options);}_extend(KWidget, {	init : function(options) {		var self = this;		self.name = options.name || '';		self.doc = options.doc || document;		self.win = _getWin(self.doc);		self.x = _addUnit(options.x);		self.y = _addUnit(options.y);		self.z = options.z;		self.width = _addUnit(options.width);		self.height = _addUnit(options.height);		self.div = K('<div style="display:block;"></div>');		self.options = options;		self._alignEl = options.alignEl;		if (self.width) {			self.div.css('width', self.width);		}		if (self.height) {			self.div.css('height', self.height);		}		if (self.z) {			self.div.css({				position : 'absolute',				left : self.x,				top : self.y,				'z-index' : self.z			});		}		if (self.z && (self.x === undefined || self.y === undefined)) {			self.autoPos(self.width, self.height);		}		if (options.cls) {			self.div.addClass(options.cls);		}		if (options.shadowMode) {			self.div.addClass('ke-shadow');		}		if (options.css) {			self.div.css(options.css);		}		if (options.src) {			K(options.src).replaceWith(self.div);		} else {			K(self.doc.body).append(self.div);		}		if (options.html) {			self.div.html(options.html);		}		if (options.autoScroll) {			if (_IE && _V < 7 || _QUIRKS) {				var scrollPos = _getScrollPos();				K(self.win).bind('scroll', function(e) {					var pos = _getScrollPos(),						diffX = pos.x - scrollPos.x,						diffY = pos.y - scrollPos.y;					self.pos(_removeUnit(self.x) + diffX, _removeUnit(self.y) + diffY, false);				});			} else {				self.div.css('position', 'fixed');			}		}	},	pos : function(x, y, updateProp) {		var self = this;		updateProp = _undef(updateProp, true);		if (x !== null) {			x = x < 0 ? 0 : _addUnit(x);			self.div.css('left', x);			if (updateProp) {				self.x = x;			}		}		if (y !== null) {			y = y < 0 ? 0 : _addUnit(y);			self.div.css('top', y);			if (updateProp) {				self.y = y;			}		}		return self;	},	autoPos : function(width, height) {		var self = this,			w = _removeUnit(width) || 0,			h = _removeUnit(height) || 0,			scrollPos = _getScrollPos();		if (self._alignEl) {			var knode = K(self._alignEl),				pos = knode.pos(),				diffX = _round(knode[0].clientWidth / 2 - w / 2),				diffY = _round(knode[0].clientHeight / 2 - h / 2);			x = diffX < 0 ? pos.x : pos.x + diffX;			y = diffY < 0 ? pos.y : pos.y + diffY;		} else {			var docEl = _docElement(self.doc);			x = _round(scrollPos.x + (docEl.clientWidth - w) / 2);			y = _round(scrollPos.y + (docEl.clientHeight - h) / 2);		}		if (!(_IE && _V < 7 || _QUIRKS)) {			x -= scrollPos.x;			y -= scrollPos.y;		}		return self.pos(x, y);	},	remove : function() {		var self = this;		if (_IE && _V < 7) {			K(self.win).unbind('scroll');		}		self.div.remove();		_each(self, function(i) {			self[i] = null;		});		return this;	},	show : function() {		this.div.show();		return this;	},	hide : function() {		this.div.hide();		return this;	},	draggable : function(options) {		var self = this;		options = options || {};		options.moveEl = self.div;		options.moveFn = function(x, y, width, height, diffX, diffY) {			if ((x = x + diffX) < 0) {				x = 0;			}			if ((y = y + diffY) < 0) {				y = 0;			}			self.pos(x, y);		};		_drag(options);		return self;	}});function _widget(options) {	return new KWidget(options);}K.WidgetClass = KWidget;K.widget = _widget;function _iframeDoc(iframe) {	iframe = _get(iframe);	return iframe.contentDocument || iframe.contentWindow.document;}function _getInitHtml(themesPath, bodyClass, cssPath, cssData) {	var arr = [		'<html><head><meta charset="utf-8" /><title>KindEditor</title>',		'<style>',		'html {margin:0;padding:0;}',		'body {margin:0;padding:5px;}',		'body, td {font:12px/1.5 "sans serif",tahoma,verdana,helvetica;}',		'body, p, div {word-wrap: break-word;}',		'p {margin:5px 0;}',		'table {border-collapse:collapse;}',		'img {border:0;}',		'table.ke-zeroborder td {border:1px dotted #AAA;}',		'img.ke-flash {',		'	border:1px solid #AAA;',		'	background-image:url(' + themesPath + 'common/flash.gif);',		'	background-position:center center;',		'	background-repeat:no-repeat;',		'	width:100px;',		'	height:100px;',		'}',		'img.ke-rm {',		'	border:1px solid #AAA;',		'	background-image:url(' + themesPath + 'common/rm.gif);',		'	background-position:center center;',		'	background-repeat:no-repeat;',		'	width:100px;',		'	height:100px;',		'}',		'img.ke-media {',		'	border:1px solid #AAA;',		'	background-image:url(' + themesPath + 'common/media.gif);',		'	background-position:center center;',		'	background-repeat:no-repeat;',		'	width:100px;',		'	height:100px;',		'}',		'img.ke-anchor {',		'	border:1px dashed #666;',		'	width:16px;',		'	height:16px;',		'}',		'.ke-script {',		'	display:none;',		'	font-size:0;',		'	width:0;',		'	height:0;',		'}',		'.ke-pagebreak {',		'	border:1px dotted #AAA;',		'	font-size:0;',		'	height:2px;',		'}',		'</style>'	];	if (!_isArray(cssPath)) {		cssPath = [cssPath];	}	_each(cssPath, function(i, path) {		if (path) {			arr.push('<link href="' + path + '" rel="stylesheet" />');		}	});	if (cssData) {		arr.push('<style>' + cssData + '</style>');	}	arr.push('</head><body ' + (bodyClass ? 'class="' + bodyClass + '"' : '') + '></body></html>');	return arr.join('\n');}function _elementVal(knode, val) {	return knode.hasVal() ? knode.val(val) : knode.html(val);}function KEdit(options) {	this.init(options);}_extend(KEdit, KWidget, {	init : function(options) {		var self = this;		KEdit.parent.init.call(self, options);		self.srcElement = K(options.srcElement);		self.div.addClass('ke-edit');		self.designMode = _undef(options.designMode, true);		self.beforeGetHtml = options.beforeGetHtml;		self.beforeSetHtml = options.beforeSetHtml;		self.afterSetHtml = options.afterSetHtml;		var themesPath = _undef(options.themesPath, ''),			bodyClass = options.bodyClass,			cssPath = options.cssPath,			cssData = options.cssData,			isDocumentDomain = location.host.replace(/:\d+/, '') !== document.domain,			srcScript = ('document.open();' +				(isDocumentDomain ? 'document.domain="' + document.domain + '";' : '') +				'document.close();'),			iframeSrc = _IE ? ' src="javascript:void(function(){' + encodeURIComponent(srcScript) + '}())"' : '';		self.iframe = K('<iframe class="ke-edit-iframe" hidefocus="true" frameborder="0"' + iframeSrc + '></iframe>').css('width', '100%');		self.textarea = K('<textarea class="ke-edit-textarea" hidefocus="true"></textarea>').css('width', '100%');		if (self.width) {			self.setWidth(self.width);		}		if (self.height) {			self.setHeight(self.height);		}		if (self.designMode) {			self.textarea.hide();		} else {			self.iframe.hide();		}		function ready() {			var doc = _iframeDoc(self.iframe);			doc.open();			if (isDocumentDomain) {				doc.domain = document.domain;			}			doc.write(_getInitHtml(themesPath, bodyClass, cssPath, cssData));			doc.close();			self.win = self.iframe[0].contentWindow;			self.doc = doc;			var cmd = _cmd(doc);			self.afterChange(function(e) {				cmd.selection();			});			if (_WEBKIT) {				K(doc).click(function(e) {					if (K(e.target).name === 'img') {						cmd.selection(true);						cmd.range.selectNode(e.target);						cmd.select();					}				});			}			if (_IE) {				K(doc).keydown(function(e) {					if (e.which == 8) {						cmd.selection();						var rng = cmd.range;						if (rng.isControl()) {							rng.collapse(true);							K(rng.startContainer.childNodes[rng.startOffset]).remove();							e.preventDefault();						}					}				});			}			self.cmd = cmd;			self.html(_elementVal(self.srcElement));			if (_IE) {				doc.body.disabled = true;				doc.body.contentEditable = true;				doc.body.removeAttribute('disabled');			} else {				doc.designMode = 'on';			}			if (options.afterCreate) {				options.afterCreate.call(self);			}		}		if (isDocumentDomain) {			self.iframe.bind('load', function(e) {				self.iframe.unbind('load');				if (_IE) {					ready();				} else {					setTimeout(ready, 0);				}			});		}		self.div.append(self.iframe);		self.div.append(self.textarea);		self.srcElement.hide();		!isDocumentDomain && ready();	},	setWidth : function(val) {		this.div.css('width', _addUnit(val));		return this;	},	setHeight : function(val) {		var self = this;		val = _addUnit(val);		self.div.css('height', val);		self.iframe.css('height', val);		if ((_IE && _V < 8) || _QUIRKS) {			val = _addUnit(_removeUnit(val) - 2);		}		self.textarea.css('height', val);		return self;	},	remove : function() {		var self = this, doc = self.doc;		K(doc.body).unbind();		K(doc).unbind();		K(self.win).unbind();		_elementVal(self.srcElement, self.html());		self.srcElement.show();		doc.write('');		self.iframe.unbind();		self.textarea.unbind();		KEdit.parent.remove.call(self);	},	html : function(val, isFull) {		var self = this, doc = self.doc;		if (self.designMode) {			var body = doc.body;			if (val === undefined) {				if (isFull) {					val = '<!doctype html><html>' + body.parentNode.innerHTML + '</html>';				} else {					val = body.innerHTML;				}				if (self.beforeGetHtml) {					val = self.beforeGetHtml(val);				}				if (_GECKO && val == '<br />') {					val = '';				}				return val;			}			if (self.beforeSetHtml) {				val = self.beforeSetHtml(val);			}			K(body).html(val);			if (self.afterSetHtml) {				self.afterSetHtml();			}			return self;		}		if (val === undefined) {			return self.textarea.val();		}		self.textarea.val(val);		return self;	},	design : function(bool) {		var self = this, val;		if (bool === undefined ? !self.designMode : bool) {			if (!self.designMode) {				val = self.html();				self.designMode = true;				self.html(val);				self.textarea.hide();				self.iframe.show();			}		} else {			if (self.designMode) {				val = self.html();				self.designMode = false;				self.html(val);				self.iframe.hide();				self.textarea.show();			}		}		return self.focus();	},	focus : function() {		var self = this;		self.designMode ? self.win.focus() : self.textarea[0].focus();		return self;	},	blur : function() {		var self = this;		if (_IE) {			var input = K('<input type="text" style="float:left;width:0;height:0;padding:0;margin:0;border:0;" value="" />', self.div);			self.div.append(input);			input[0].focus();			input.remove();		} else {			self.designMode ? self.win.blur() : self.textarea[0].blur();		}		return self;	},	afterChange : function(fn) {		var self = this, doc = self.doc, body = doc.body;		K(doc).keyup(function(e) {			if (!e.ctrlKey && !e.altKey && _CHANGE_KEY_MAP[e.which]) {				fn(e);			}		});		K(doc).mouseup(fn).contextmenu(fn);		K(self.win).blur(fn);		function timeoutHandler(e) {			setTimeout(function() {				fn(e);			}, 1);		}		K(body).bind('paste', timeoutHandler);		K(body).bind('cut', timeoutHandler);		return self;	}});function _edit(options) {	return new KEdit(options);}K.edit = _edit;K.iframeDoc = _iframeDoc;function _selectToolbar(name, fn) {	var self = this,		knode = self.get(name);	if (knode) {		if (knode.hasClass('ke-disabled')) {			return;		}		fn(knode);	}}function KToolbar(options) {	this.init(options);}_extend(KToolbar, KWidget, {	init : function(options) {		var self = this;		KToolbar.parent.init.call(self, options);		self.disableMode = _undef(options.disableMode, false);		self.noDisableItemMap = _toMap(_undef(options.noDisableItems, []));		self._itemMap = {};		self.div.addClass('ke-toolbar').bind('contextmenu,mousedown,mousemove', function(e) {			e.preventDefault();		}).attr('unselectable', 'on');		function find(target) {			var knode = K(target);			if (knode.hasClass('ke-outline')) {				return knode;			}			if (knode.hasClass('ke-toolbar-icon')) {				return knode.parent();			}		}		function hover(e, method) {			var knode = find(e.target);			if (knode) {				if (knode.hasClass('ke-disabled')) {					return;				}				if (knode.hasClass('ke-selected')) {					return;				}				knode[method]('ke-on');			}		}		self.div.mouseover(function(e) {			hover(e, 'addClass');		})		.mouseout(function(e) {			hover(e, 'removeClass');		})		.click(function(e) {			var knode = find(e.target);			if (knode) {				if (knode.hasClass('ke-disabled')) {					return;				}				self.options.click.call(this, e, knode.attr('data-name'));			}		});	},	get : function(name) {		if (this._itemMap[name]) {			return this._itemMap[name];		}		return (this._itemMap[name] = K('span.ke-icon-' + name, this.div).parent());	},	select : function(name) {		_selectToolbar.call(this, name, function(knode) {			knode.addClass('ke-selected');		});		return self;	},	unselect : function(name) {		_selectToolbar.call(this, name, function(knode) {			knode.removeClass('ke-selected').removeClass('ke-on');		});		return self;	},	enable : function(name) {		var self = this,			knode = name.get ? name : self.get(name);		if (knode) {			knode.removeClass('ke-disabled');			knode.opacity(1);		}		return self;	},	disable : function(name) {		var self = this,			knode = name.get ? name : self.get(name);		if (knode) {			knode.removeClass('ke-selected').addClass('ke-disabled');			knode.opacity(0.5);		}		return self;	},	disableAll : function(bool, noDisableItems) {		var self = this, map = self.noDisableItemMap, item;		if (noDisableItems) {			map = _toMap(noDisableItems);		}		if (bool === undefined ? !self.disableMode : bool) {			K('span.ke-outline', self.div).each(function() {				var knode = K(this),					name = knode[0].getAttribute('data-name', 2);				if (!map[name]) {					self.disable(knode);				}			});			self.disableMode = true;		} else {			K('span.ke-outline', self.div).each(function() {				var knode = K(this),					name = knode[0].getAttribute('data-name', 2);				if (!map[name]) {					self.enable(knode);				}			});			self.disableMode = false;		}		return self;	}});function _toolbar(options) {	return new KToolbar(options);}K.toolbar = _toolbar;function KMenu(options) {	this.init(options);}_extend(KMenu, KWidget, {	init : function(options) {		var self = this;		options.z = options.z || 811213;		KMenu.parent.init.call(self, options);		self.centerLineMode = _undef(options.centerLineMode, true);		self.div.addClass('ke-menu').bind('click,mousedown', function(e){			e.stopPropagation();		}).attr('unselectable', 'on');	},	addItem : function(item) {		var self = this;		if (item.title === '-') {			self.div.append(K('<div class="ke-menu-separator"></div>'));			return;		}		var itemDiv = K('<div class="ke-menu-item" unselectable="on"></div>'),			leftDiv = K('<div class="ke-inline-block ke-menu-item-left"></div>'),			rightDiv = K('<div class="ke-inline-block ke-menu-item-right"></div>'),			height = _addUnit(item.height),			iconClass = _undef(item.iconClass, '');		self.div.append(itemDiv);		if (height) {			itemDiv.css('height', height);			rightDiv.css('line-height', height);		}		var centerDiv;		if (self.centerLineMode) {			centerDiv = K('<div class="ke-inline-block ke-menu-item-center"></div>');			if (height) {				centerDiv.css('height', height);			}		}		itemDiv.mouseover(function(e) {			K(this).addClass('ke-menu-item-on');			if (centerDiv) {				centerDiv.addClass('ke-menu-item-center-on');			}		})		.mouseout(function(e) {			K(this).removeClass('ke-menu-item-on');			if (centerDiv) {				centerDiv.removeClass('ke-menu-item-center-on');			}		})		.click(function(e) {			item.click.call(K(this));			e.stopPropagation();		})		.append(leftDiv);		if (centerDiv) {			itemDiv.append(centerDiv);		}		itemDiv.append(rightDiv);		if (item.checked) {			iconClass = 'ke-icon-checked';		}		if (iconClass !== '') {			leftDiv.html('<span class="ke-inline-block ke-toolbar-icon ke-toolbar-icon-url ' + iconClass + '"></span>');		}		rightDiv.html(item.title);		return self;	},	remove : function() {		var self = this;		if (self.options.beforeRemove) {			self.options.beforeRemove.call(self);		}		K('.ke-menu-item', self.div[0]).unbind();		KMenu.parent.remove.call(self);		return self;	}});function _menu(options) {	return new KMenu(options);}K.menu = _menu;function KColorPicker(options) {	this.init(options);}_extend(KColorPicker, KWidget, {	init : function(options) {		var self = this;		options.z = options.z || 811213;		KColorPicker.parent.init.call(self, options);		var colors = options.colors || [			['#E53333', '#E56600', '#FF9900', '#64451D', '#DFC5A4', '#FFE500'],			['#009900', '#006600', '#99BB00', '#B8D100', '#60D978', '#00D5FF'],			['#337FE5', '#003399', '#4C33E5', '#9933E5', '#CC33E5', '#EE33EE'],			['#FFFFFF', '#CCCCCC', '#999999', '#666666', '#333333', '#000000']		];		self.selectedColor = (options.selectedColor || '').toLowerCase();		self._cells = [];		self.div.addClass('ke-colorpicker').bind('click,mousedown', function(e){			e.stopPropagation();		}).attr('unselectable', 'on');		var table = self.doc.createElement('table');		self.div.append(table);		table.className = 'ke-colorpicker-table';		table.cellPadding = 0;		table.cellSpacing = 0;		table.border = 0;		var row = table.insertRow(0), cell = row.insertCell(0);		cell.colSpan = colors[0].length;		self._addAttr(cell, '', 'ke-colorpicker-cell-top');		for (var i = 0; i < colors.length; i++) {			row = table.insertRow(i + 1);			for (var j = 0; j < colors[i].length; j++) {				cell = row.insertCell(j);				self._addAttr(cell, colors[i][j], 'ke-colorpicker-cell');			}		}	},	_addAttr : function(cell, color, cls) {		var self = this;		cell = K(cell).addClass(cls);		if (self.selectedColor === color.toLowerCase()) {			cell.addClass('ke-colorpicker-cell-selected');		}		cell.attr('title', color || self.options.noColor);		cell.mouseover(function(e) {			K(this).addClass('ke-colorpicker-cell-on');		});		cell.mouseout(function(e) {			K(this).removeClass('ke-colorpicker-cell-on');		});		cell.click(function(e) {			e.stop();			self.options.click.call(K(this), color);		});		if (color) {			cell.append(K('<div class="ke-colorpicker-cell-color" unselectable="on"></div>').css('background-color', color));		} else {			cell.html(self.options.noColor);		}		K(cell).attr('unselectable', 'on');		self._cells.push(cell);	},	remove : function() {		var self = this;		_each(self._cells, function() {			this.unbind();		});		KColorPicker.parent.remove.call(self);		return self;	}});function _colorpicker(options) {	return new KColorPicker(options);}K.colorpicker = _colorpicker;function KUploadButton(options) {	this.init(options);}_extend(KUploadButton, {	init : function(options) {		var self = this,			button = K(options.button),			fieldName = options.fieldName || 'file',			url = options.url || '',			title = button.val(),			cls = button[0].className || '',			target = 'kindeditor_upload_iframe_' + new Date().getTime();		options.afterError = options.afterError || function(str) {			alert(str);		};		var html = [			'<div class="ke-inline-block ' + cls + '">',			'<iframe name="' + target + '" style="display:none;"></iframe>',			'<form class="ke-upload-area ke-form" method="post" enctype="multipart/form-data" target="' + target + '" action="' + url + '">',			'<span class="ke-button-common">',			'<input type="button" class="ke-button-common ke-button" value="' + title + '" />',			'</span>',			'<input type="file" class="ke-upload-file" name="' + fieldName + '" tabindex="-1" />',			'</form></div>'].join('');		var div = K(html, button.doc);		button.hide();		button.before(div);		self.div = div;		self.button = button;		self.iframe = K('iframe', div);		self.form = K('form', div);		self.fileBox = K('.ke-upload-file', div).width(K('.ke-button-common').width());		self.options = options;	},	submit : function() {		var self = this,			iframe = self.iframe;		iframe.bind('load', function() {			iframe.unbind();			var doc = K.iframeDoc(iframe),				pre = doc.getElementsByTagName('pre')[0],				str = '', data;			if (pre) {				str = pre.innerHTML;			} else {				str = doc.body.innerHTML;			}			try {				data = K.json(str);			} catch (e) {				self.options.afterError.call(self, '<!doctype html><html>' + doc.body.parentNode.innerHTML + '</html>');			}			if (data) {				self.options.afterUpload.call(self, data);			}		});		self.form[0].submit();		var tempForm = document.createElement('form');		self.fileBox.before(tempForm);		K(tempForm).append(self.fileBox);		tempForm.reset();		K(tempForm).remove(true);		return self;	},	remove : function() {		var self = this;		if (self.fileBox) {			self.fileBox.unbind();		}		self.div.remove();		self.button.show();		return self;	}});function _uploadbutton(options) {	return new KUploadButton(options);}K.uploadbutton = _uploadbutton;function _createButton(arg) {	arg = arg || {};	var name = arg.name || '',		span = K('<span class="ke-button-common ke-button-outer" title="' + name + '"></span>'),		btn = K('<input class="ke-button-common ke-button" type="button" value="' + name + '" />');	if (arg.click) {		btn.click(arg.click);	}	span.append(btn);	return span;}function KDialog(options) {	this.init(options);}_extend(KDialog, KWidget, {	init : function(options) {		var self = this;		var shadowMode = _undef(options.shadowMode, true);		options.z = options.z || 811213;		options.shadowMode = false;		KDialog.parent.init.call(self, options);		var title = options.title,			body = K(options.body, self.doc),			previewBtn = options.previewBtn,			yesBtn = options.yesBtn,			noBtn = options.noBtn,			closeBtn = options.closeBtn,			showMask = _undef(options.showMask, true);		self.div.addClass('ke-dialog').bind('click,mousedown', function(e){			e.stopPropagation();		});		var contentDiv = K('<div class="ke-dialog-content"></div>').appendTo(self.div);		if (_IE && _V < 7) {			self.iframeMask = K('<iframe src="about:blank" class="ke-dialog-shadow"></iframe>').appendTo(self.div);		} else if (shadowMode) {			K('<div class="ke-dialog-shadow"></div>').appendTo(self.div);		}		var headerDiv = K('<div class="ke-dialog-header"></div>');		contentDiv.append(headerDiv);		headerDiv.html(title);		self.closeIcon = K('<span class="ke-dialog-icon-close" title="' + closeBtn.name + '"></span>').click(closeBtn.click);		headerDiv.append(self.closeIcon);		self.draggable({			clickEl : headerDiv,			beforeDrag : options.beforeDrag		});		var bodyDiv = K('<div class="ke-dialog-body"></div>');		contentDiv.append(bodyDiv);		bodyDiv.append(body);		var footerDiv = K('<div class="ke-dialog-footer"></div>');		if (previewBtn || yesBtn || noBtn) {			contentDiv.append(footerDiv);		}		_each([			{ btn : previewBtn, name : 'preview' },			{ btn : yesBtn, name : 'yes' },			{ btn : noBtn, name : 'no' }		], function() {			if (this.btn) {				var button = _createButton(this.btn);				button.addClass('ke-dialog-' + this.name);				footerDiv.append(button);			}		});		if (self.height) {			bodyDiv.height(_removeUnit(self.height) - headerDiv.height() - footerDiv.height());		}		self.div.width(self.div.width());		self.div.height(self.div.height());		self.mask = null;		if (showMask) {			var docEl = _docElement(self.doc),				docWidth = Math.max(docEl.scrollWidth, docEl.clientWidth),				docHeight = Math.max(docEl.scrollHeight, docEl.clientHeight);			self.mask = _widget({				x : 0,				y : 0,				z : self.z - 1,				cls : 'ke-dialog-mask',				width : docWidth,				height : docHeight			});		}		self.autoPos(self.div.width(), self.div.height());		self.footerDiv = footerDiv;		self.bodyDiv = bodyDiv;		self.headerDiv = headerDiv;	},	setMaskIndex : function(z) {		var self = this;		self.mask.div.css('z-index', z);	},	showLoading : function(msg) {		msg = _undef(msg, '');		var self = this, body = self.bodyDiv;		self.loading = K('<div class="ke-dialog-loading"><div class="ke-inline-block ke-dialog-loading-content" style="margin-top:' + Math.round(body.height() / 3) + 'px;">' + msg + '</div></div>')			.width(body.width()).height(body.height())			.css('top', self.headerDiv.height() + 'px');		body.css('visibility', 'hidden').after(self.loading);		return self;	},	hideLoading : function() {		this.loading && this.loading.remove();		this.bodyDiv.css('visibility', 'visible');		return this;	},	remove : function() {		var self = this;		if (self.options.beforeRemove) {			self.options.beforeRemove.call(self);		}		self.mask && self.mask.remove();		self.iframeMask && self.iframeMask.remove();		self.closeIcon.unbind();		K('input', self.div).unbind();		self.footerDiv.unbind();		self.bodyDiv.unbind();		self.headerDiv.unbind();		KDialog.parent.remove.call(self);		return self;	}});function _dialog(options) {	return new KDialog(options);}K.dialog = _dialog;function _tabs(options) {	var self = _widget(options),		remove = self.remove,		afterSelect = options.afterSelect,		div = self.div,		liList = [];	div.addClass('ke-tabs')		.bind('contextmenu,mousedown,mousemove', function(e) {			e.preventDefault();		});	var ul = K('<ul class="ke-tabs-ul ke-clearfix"></ul>');	div.append(ul);	self.add = function(tab) {		var li = K('<li class="ke-tabs-li">' + tab.title + '</li>');		li.data('tab', tab);		liList.push(li);		ul.append(li);	};	self.selectedIndex = 0;	self.select = function(index) {		self.selectedIndex = index;		_each(liList, function(i, li) {			li.unbind();			if (i === index) {				li.addClass('ke-tabs-li-selected');				K(li.data('tab').panel).show('');			} else {				li.removeClass('ke-tabs-li-selected').removeClass('ke-tabs-li-on')				.mouseover(function() {					K(this).addClass('ke-tabs-li-on');				})				.mouseout(function() {					K(this).removeClass('ke-tabs-li-on');				})				.click(function() {					self.select(i);				});				K(li.data('tab').panel).hide();			}		});		if (afterSelect) {			afterSelect.call(self, index);		}	};	self.remove = function() {		_each(liList, function() {			this.remove();		});		ul.remove();		remove.call(self);	};	return self;}K.tabs = _tabs;function _loadScript(url, fn) {	var head = document.getElementsByTagName('head')[0] || (_QUIRKS ? document.body : document.documentElement),		script = document.createElement('script');	head.appendChild(script);	script.src = url;	script.charset = 'utf-8';	script.onload = script.onreadystatechange = function() {		if (!this.readyState || this.readyState === 'loaded') {			if (fn) {				fn();			}			script.onload = script.onreadystatechange = null;			head.removeChild(script);		}	};}function _loadStyle(url) {	var head = document.getElementsByTagName('head')[0] || (_QUIRKS ? document.body : document.documentElement),		link = document.createElement('link'),		absoluteUrl = _formatUrl(url, 'absolute');	var links = K('link[rel="stylesheet"]', head);	for (var i = 0, len = links.length; i < len; i++) {		if (_formatUrl(links[i].href, 'absolute') === absoluteUrl) {			return;		}	}	head.appendChild(link);	link.href = url;	link.rel = 'stylesheet';}function _ajax(url, fn, method, param, dataType) {	method = method || 'GET';	dataType = dataType || 'json';	var xhr = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');	xhr.open(method, url, true);	xhr.onreadystatechange = function () {		if (xhr.readyState == 4 && xhr.status == 200) {			if (fn) {				var data = _trim(xhr.responseText);				if (dataType == 'json') {					data = _json(data);				}				fn(data);			}		}	};	if (method == 'POST') {		var params = [];		_each(param, function(key, val) {			params.push(encodeURIComponent(key) + '=' + encodeURIComponent(val));		});		try {			xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');		} catch (e) {}		xhr.send(params.join('&'));	} else {		xhr.send(null);	}}K.loadScript = _loadScript;K.loadStyle = _loadStyle;K.ajax = _ajax;var _plugins = {};function _plugin(name, fn) {	if (!fn) {		return _plugins[name];	}	_plugins[name] = fn;}var _language = {};function _parseLangKey(key) {	var match, ns = 'core';	if ((match = /^(\w+)\.(\w+)$/.exec(key))) {		ns = match[1];		key = match[2];	}	return { ns : ns, key : key };}function _lang(mixed, langType) {	langType = langType === undefined ? K.options.langType : langType;	if (typeof mixed === 'string') {		if (!_language[langType]) {			return 'no language';		}		var pos = mixed.length - 1;		if (mixed.substr(pos) === '.') {			return _language[langType][mixed.substr(0, pos)];		}		var obj = _parseLangKey(mixed);		return _language[langType][obj.ns][obj.key];	}	_each(mixed, function(key, val) {		var obj = _parseLangKey(key);		if (!_language[langType]) {			_language[langType] = {};		}		if (!_language[langType][obj.ns]) {			_language[langType][obj.ns] = {};		}		_language[langType][obj.ns][obj.key] = val;	});}function _getImageFromRange(range, fn) {	if (range.collapsed) {		return;	}	range = range.cloneRange().up();	var sc = range.startContainer, so = range.startOffset;	if (!_WEBKIT && !range.isControl()) {		return;	}	var img = K(sc.childNodes[so]);	if (!img || img.name != 'img') {		return;	}	if (fn(img)) {		return img;	}}function _bindContextmenuEvent() {	var self = this, doc = self.edit.doc;	K(doc).contextmenu(function(e) {		if (self.menu) {			self.hideMenu();		}		if (!self.useContextmenu) {			e.preventDefault();			return;		}		if (self._contextmenus.length === 0) {			return;		}		var maxWidth = 0, items = [];		_each(self._contextmenus, function() {			if (this.title == '-') {				items.push(this);				return;			}			if (this.cond && this.cond()) {				items.push(this);				if (this.width && this.width > maxWidth) {					maxWidth = this.width;				}			}		});		while (items.length > 0 && items[0].title == '-') {			items.shift();		}		while (items.length > 0 && items[items.length - 1].title == '-') {			items.pop();		}		var prevItem = null;		_each(items, function(i) {			if (this.title == '-' && prevItem.title == '-') {				delete items[i];			}			prevItem = this;		});		if (items.length > 0) {			e.preventDefault();			var pos = K(self.edit.iframe).pos(),				menu = _menu({					x : pos.x + e.clientX,					y : pos.y + e.clientY,					width : maxWidth,					css : { visibility: 'hidden' },					shadowMode : self.shadowMode				});			_each(items, function() {				if (this.title) {					menu.addItem(this);				}			});			var docEl = _docElement(menu.doc),				menuHeight = menu.div.height();			if (e.clientY + menuHeight >= docEl.clientHeight - 100) {				menu.pos(menu.x, _removeUnit(menu.y) - menuHeight);			}			menu.div.css('visibility', 'visible');			self.menu = menu;		}	});}function _bindNewlineEvent() {	var self = this, doc = self.edit.doc, newlineTag = self.newlineTag;	if (_IE && newlineTag !== 'br') {		return;	}	if (_GECKO && _V < 3 && newlineTag !== 'p') {		return;	}	if (_OPERA) {		return;	}	var brSkipTagMap = _toMap('h1,h2,h3,h4,h5,h6,pre,li'),		pSkipTagMap = _toMap('p,h1,h2,h3,h4,h5,h6,pre,li,blockquote');	function getAncestorTagName(range) {		var ancestor = K(range.commonAncestor());		while (ancestor) {			if (ancestor.type == 1 && !ancestor.isStyle()) {				break;			}			ancestor = ancestor.parent();		}		return ancestor.name;	}	K(doc).keydown(function(e) {		if (e.which != 13 || e.shiftKey || e.ctrlKey || e.altKey) {			return;		}		self.cmd.selection();		var tagName = getAncestorTagName(self.cmd.range);		if (tagName == 'marquee' || tagName == 'select') {			return;		}		if (newlineTag === 'br' && !brSkipTagMap[tagName]) {			e.preventDefault();			self.insertHtml('<br />');			return;		}		if (!pSkipTagMap[tagName]) {			_nativeCommand(doc, 'formatblock', '<p>');		}	});	K(doc).keyup(function(e) {		if (e.which != 13 || e.shiftKey || e.ctrlKey || e.altKey) {			return;		}		if (newlineTag == 'br') {			return;		}		self.cmd.selection();		var tagName = getAncestorTagName(self.cmd.range);		if (tagName == 'marquee' || tagName == 'select') {			return;		}		if (!pSkipTagMap[tagName]) {			_nativeCommand(doc, 'formatblock', '<p>');		}		var div = self.cmd.commonAncestor('div');		if (div) {			var p = K('<p></p>'),				child = div[0].firstChild;			while (child) {				var next = child.nextSibling;				p.append(child);				child = next;			}			div.before(p);			div.remove();			self.cmd.range.selectNodeContents(p[0]);			self.cmd.select();		}	});}function _bindTabEvent() {	var self = this, doc = self.edit.doc;	K(doc).keydown(function(e) {		if (e.which == 9) {			e.preventDefault();			if (self.afterTab) {				self.afterTab.call(self, e);				return;			}			var cmd = self.cmd, range = cmd.range;			range.shrink();			if (range.collapsed && range.startContainer.nodeType == 1) {				range.insertNode(K('@ ', doc)[0]);				cmd.select();			}			self.insertHtml('    ');		}	});}function _bindFocusEvent() {	var self = this;	K(self.edit.textarea[0], self.edit.win).focus(function(e) {		if (self.afterFocus) {			self.afterFocus.call(self, e);		}	}).blur(function(e) {		if (self.afterBlur) {			self.afterBlur.call(self, e);		}	});}function _removeBookmarkTag(html) {	return _trim(html.replace(/<span [^>]*id="?__kindeditor_bookmark_\w+_\d+__"?[^>]*><\/span>/ig, ''));}function _removeTempTag(html) {	return html.replace(/<div[^>]+class="?__kindeditor_paste__"?[^>]*>[\s\S]*?<\/div>/ig, '');}function _addBookmarkToStack(stack, bookmark) {	if (stack.length === 0) {		stack.push(bookmark);		return;	}	var prev = stack[stack.length - 1];	if (_removeBookmarkTag(bookmark.html) !== _removeBookmarkTag(prev.html)) {		stack.push(bookmark);	}}function _undoToRedo(fromStack, toStack) {	var self = this, edit = self.edit,		body = edit.doc.body,		range, bookmark;	if (fromStack.length === 0) {		return self;	}	if (edit.designMode) {		range = self.cmd.range;		bookmark = range.createBookmark(true);		bookmark.html = body.innerHTML;	} else {		bookmark = {			html : body.innerHTML		};	}	_addBookmarkToStack(toStack, bookmark);	var prev = fromStack.pop();	if (_removeBookmarkTag(bookmark.html) === _removeBookmarkTag(prev.html) && fromStack.length > 0) {		prev = fromStack.pop();	}	if (edit.designMode) {		edit.html(prev.html);		if (prev.start) {			range.moveToBookmark(prev);			self.select();		}	} else {		K(body).html(_removeBookmarkTag(prev.html));	}	return self;}function KEditor(options) {	var self = this;	self.options = {};	function setOption(key, val) {		if (KEditor.prototype[key] === undefined) {			self[key] = val;		}		self.options[key] = val;	}	_each(options, function(key, val) {		setOption(key, options[key]);	});	_each(K.options, function(key, val) {		if (self[key] === undefined) {			setOption(key, val);		}	});	setOption('width', _undef(self.width, self.minWidth));	setOption('height', _undef(self.height, self.minHeight));	setOption('width', _addUnit(self.width));	setOption('height', _addUnit(self.height));	if (_MOBILE && (!_IOS || _V < 534)) {		self.designMode = false;	}	var se = K(self.srcElement || '<textarea/>');	self.srcElement = se;	self.initContent = _elementVal(se);	self.plugin = {};	self.isCreated = false;	self.isLoading = false;	self._handlers = {};	self._contextmenus = [];	self._undoStack = [];	self._redoStack = [];	self._calledPlugins = {};	self._firstAddBookmark = true;	self.menu = self.contextmenu = null;	self.dialogs = [];}KEditor.prototype = {	lang : function(mixed) {		return _lang(mixed, this.langType);	},	loadPlugin : function(name, fn) {		var self = this;		if (_plugins[name]) {			if (self._calledPlugins[name]) {				if (fn) {					fn.call(self);				}				return self;			}			_plugins[name].call(self, KindEditor);			if (fn) {				fn.call(self);			}			self._calledPlugins[name] = true;			return self;		}		if (self.isLoading) {			return self;		}		self.isLoading = true;		_loadScript(self.pluginsPath + name + '/' + name + '.js?ver=' + encodeURIComponent(K.DEBUG ? _TIME : _VERSION), function() {			self.isLoading = false;			if (_plugins[name]) {				self.loadPlugin(name, fn);			}		});		return self;	},	handler : function(key, fn) {		var self = this;		if (!self._handlers[key]) {			self._handlers[key] = [];		}		if (_isFunction(fn)) {			self._handlers[key].push(fn);			return self;		}		_each(self._handlers[key], function() {			fn = this.call(self, fn);		});		return fn;	},	clickToolbar : function(name, fn) {		var self = this, key = 'clickToolbar' + name;		if (fn === undefined) {			if (self._handlers[key]) {				return self.handler(key);			}			self.loadPlugin(name, function() {				self.handler(key);			});			return self;		}		return self.handler(key, fn);	},	updateState : function() {		var self = this;		_each(('justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,insertunorderedlist,' +			'subscript,superscript,bold,italic,underline,strikethrough').split(','), function(i, name) {			self.cmd.state(name) ? self.toolbar.select(name) : self.toolbar.unselect(name);		});		return self;	},	addContextmenu : function(item) {		this._contextmenus.push(item);		return this;	},	afterCreate : function(fn) {		return this.handler('afterCreate', fn);	},	beforeRemove : function(fn) {		return this.handler('beforeRemove', fn);	},	beforeGetHtml : function(fn) {		return this.handler('beforeGetHtml', fn);	},	beforeSetHtml : function(fn) {		return this.handler('beforeSetHtml', fn);	},	afterSetHtml : function(fn) {		return this.handler('afterSetHtml', fn);	},	create : function() {		var self = this, fullscreenMode = self.fullscreenMode;		if (self.isCreated) {			return self;		}		if (fullscreenMode) {			_docElement().style.overflow = 'hidden';		} else {			_docElement().style.overflow = '';		}		var width = fullscreenMode ? _docElement().clientWidth + 'px' : self.width,			height = fullscreenMode ? _docElement().clientHeight + 'px' : self.height;		if ((_IE && _V < 8) || _QUIRKS) {			height = _addUnit(_removeUnit(height) + 2);		}		var container = self.container = K(self.layout);		if (fullscreenMode) {			K(document.body).append(container);		} else {			self.srcElement.before(container);		}		var toolbarDiv = K('.toolbar', container),			editDiv = K('.edit', container),			statusbar = self.statusbar = K('.statusbar', container);		container.removeClass('container')			.addClass('ke-container ke-container-' + self.themeType).css('width', width);		if (fullscreenMode) {			container.css({				position : 'absolute',				left : 0,				top : 0,				'z-index' : 811211			});			if (!_GECKO) {				self._scrollPos = _getScrollPos();			}			window.scrollTo(0, 0);			K(document.body).css({				'height' : '1px',				'overflow' : 'hidden'			});			K(document.body.parentNode).css('overflow', 'hidden');		} else {			if (self._scrollPos) {				K(document.body).css({					'height' : '',					'overflow' : ''				});				K(document.body.parentNode).css('overflow', '');				window.scrollTo(self._scrollPos.x, self._scrollPos.y);			}		}		var htmlList = [];		K.each(self.items, function(i, name) {			if (name == '|') {				htmlList.push('<span class="ke-inline-block ke-separator"></span>');			} else if (name == '/') {				htmlList.push('<div class="ke-hr"></div>');			} else {				htmlList.push('<span class="ke-outline" data-name="' + name + '" title="' + self.lang(name) + '" unselectable="on">');				htmlList.push('<span class="ke-toolbar-icon ke-toolbar-icon-url ke-icon-' + name + '" unselectable="on"></span></span>');			}		});		var toolbar = self.toolbar = _toolbar({			src : toolbarDiv,			html : htmlList.join(''),			noDisableItems : self.noDisableItems,			click : function(e, name) {				e.stop();				if (self.menu) {					var menuName = self.menu.name;					self.hideMenu();					if (menuName === name) {						return;					}				}				self.clickToolbar(name);			}		});		var editHeight = _removeUnit(height) - toolbar.div.height();		var edit = self.edit = _edit({			height : editHeight > 0 && _removeUnit(height) > self.minHeight ? editHeight : self.minHeight,			src : editDiv,			srcElement : self.srcElement,			designMode : self.designMode,			themesPath : self.themesPath,			bodyClass : self.bodyClass,			cssPath : self.cssPath,			cssData : self.cssData,			beforeGetHtml : function(html) {				html = self.beforeGetHtml(html);				return _formatHtml(html, self.filterMode ? self.htmlTags : null, self.urlType, self.wellFormatMode, self.indentChar);			},			beforeSetHtml : function(html) {				html = _formatHtml(html, self.filterMode ? self.htmlTags : null, '', false);				return self.beforeSetHtml(html);			},			afterSetHtml : function() {				self.edit = edit = this;				self.afterSetHtml();			},			afterCreate : function() {				self.edit = edit = this;				self.cmd = edit.cmd;				self._docMousedownFn = function(e) {					if (self.menu) {						self.hideMenu();					}				};				K(edit.doc, document).mousedown(self._docMousedownFn);				_bindContextmenuEvent.call(self);				_bindNewlineEvent.call(self);				_bindTabEvent.call(self);				_bindFocusEvent.call(self);				edit.afterChange(function(e) {					if (!edit.designMode) {						return;					}					self.updateState();					self.addBookmark();					if (self.options.afterChange) {						self.options.afterChange.call(self);					}				});				edit.textarea.keyup(function(e) {					if (!e.ctrlKey && !e.altKey && _INPUT_KEY_MAP[e.which]) {						if (self.options.afterChange) {							self.options.afterChange.call(self);						}					}				});				if (self.readonlyMode) {					self.readonly();				}				self.isCreated = true;				self.initContent = self.html();				self.afterCreate();				if (self.options.afterCreate) {					self.options.afterCreate.call(self);				}			}		});		statusbar.removeClass('statusbar').addClass('ke-statusbar')			.append('<span class="ke-inline-block ke-statusbar-center-icon"></span>')			.append('<span class="ke-inline-block ke-statusbar-right-icon"></span>');		K(window).unbind('resize');		function initResize() {			if (statusbar.height() === 0) {				setTimeout(initResize, 100);				return;			}			self.resize(width, height);		}		initResize();		function newResize(width, height, updateProp) {			updateProp = _undef(updateProp, true);			if (width && width >= self.minWidth) {				self.resize(width, null);				if (updateProp) {					self.width = _addUnit(width);				}			}			if (height && height >= self.minHeight) {				self.resize(null, height);				if (updateProp) {					self.height = _addUnit(height);				}			}		}		if (fullscreenMode) {			K(window).bind('resize', function(e) {				if (self.isCreated) {					newResize(_docElement().clientWidth, _docElement().clientHeight, false);				}			});			toolbar.select('fullscreen');			statusbar.first().css('visibility', 'hidden');			statusbar.last().css('visibility', 'hidden');		} else {			if (_GECKO) {				K(window).bind('scroll', function(e) {					self._scrollPos = _getScrollPos();				});			}			if (self.resizeType > 0) {				_drag({					moveEl : container,					clickEl : statusbar,					moveFn : function(x, y, width, height, diffX, diffY) {						height += diffY;						newResize(null, height);					}				});			} else {				statusbar.first().css('visibility', 'hidden');			}			if (self.resizeType === 2) {				_drag({					moveEl : container,					clickEl : statusbar.last(),					moveFn : function(x, y, width, height, diffX, diffY) {						width += diffX;						height += diffY;						newResize(width, height);					}				});			} else {				statusbar.last().css('visibility', 'hidden');			}		}		return self;	},	remove : function() {		var self = this;		if (!self.isCreated) {			return self;		}		self.beforeRemove();		if (self.menu) {			self.hideMenu();		}		_each(self.dialogs, function() {			self.hideDialog();		});		K(document).unbind('mousedown', self._docMousedownFn);		self.toolbar.remove();		self.edit.remove();		self.statusbar.last().unbind();		self.statusbar.unbind();		self.container.remove();		self.container = self.toolbar = self.edit = self.menu = null;		self.dialogs = [];		self.isCreated = false;		return self;	},	resize : function(width, height) {		var self = this;		if (width !== null) {			if (_removeUnit(width) > self.minWidth) {				self.container.css('width', _addUnit(width));			}		}		if (height !== null) {			height = _removeUnit(height) - self.toolbar.div.height() - self.statusbar.height();			if (height > 0 && _removeUnit(height) > self.minHeight) {				self.edit.setHeight(height);			}		}		return self;	},	select : function() {		this.isCreated && this.cmd.select();		return this;	},	html : function(val) {		var self = this;		if (val === undefined) {			return self.isCreated ? self.edit.html() : _elementVal(self.srcElement);		}		self.isCreated ? self.edit.html(val) : _elementVal(self.srcElement, val);		return self;	},	fullHtml : function() {		return this.isCreated ? this.edit.html(undefined, true) : '';	},	text : function(val) {		var self = this;		if (val === undefined) {			return _trim(self.html().replace(/<(?!img|embed).*?>/ig, '').replace(/ /ig, ' '));		} else {			return self.html(_escape(val));		}	},	isEmpty : function() {		return _trim(this.text().replace(/\r\n|\n|\r/, '')) === '';	},	isDirty : function() {		return _trim(this.initContent.replace(/\r\n|\n|\r|t/g, '')) !== _trim(this.html().replace(/\r\n|\n|\r|t/g, ''));	},	selectedHtml : function() {		return this.isCreated ? this.cmd.range.html() : '';	},	count : function(mode) {		var self = this;		mode = (mode || 'html').toLowerCase();		if (mode === 'html') {			return _removeBookmarkTag(_removeTempTag(self.html())).length;		}		if (mode === 'text') {			return self.text().replace(/<(?:img|embed).*?>/ig, 'K').replace(/\r\n|\n|\r/g, '').length;		}		return 0;	},	exec : function(key) {		key = key.toLowerCase();		var self = this, cmd = self.cmd,			changeFlag = _inArray(key, 'selectall,copy,paste,print'.split(',')) < 0;		if (changeFlag) {			self.addBookmark(false);		}		cmd[key].apply(cmd, _toArray(arguments, 1));		if (changeFlag) {			self.updateState();			self.addBookmark(false);			if (self.options.afterChange) {				self.options.afterChange.call(self);			}		}		return self;	},	insertHtml : function(val) {		if (!this.isCreated) {			return this;		}		val = this.beforeSetHtml(val);		this.exec('inserthtml', val);		return this;	},	appendHtml : function(val) {		this.html(this.html() + val);		if (this.isCreated) {			var cmd = this.cmd;			cmd.range.selectNodeContents(cmd.doc.body).collapse(false);			cmd.select();		}		return this;	},	sync : function() {		_elementVal(this.srcElement, this.html());		return this;	},	focus : function() {		this.isCreated ? this.edit.focus() : this.srcElement[0].focus();		return this;	},	blur : function() {		this.isCreated ? this.edit.blur() : this.srcElement[0].blur();		return this;	},	addBookmark : function(checkSize) {		checkSize = _undef(checkSize, true);		var self = this, edit = self.edit,			body = edit.doc.body,			html = _removeTempTag(body.innerHTML), bookmark;		if (checkSize && self._undoStack.length > 0) {			var prev = self._undoStack[self._undoStack.length - 1];			if (Math.abs(html.length -  _removeBookmarkTag(prev.html).length) < self.minChangeSize) {				return self;			}		}		if (edit.designMode && !self._firstAddBookmark) {			var range = self.cmd.range;			bookmark = range.createBookmark(true);			bookmark.html = _removeTempTag(body.innerHTML);			range.moveToBookmark(bookmark);		} else {			bookmark = {				html : html			};		}		self._firstAddBookmark = false;		_addBookmarkToStack(self._undoStack, bookmark);		return self;	},	undo : function() {		return _undoToRedo.call(this, this._undoStack, this._redoStack);	},	redo : function() {		return _undoToRedo.call(this, this._redoStack, this._undoStack);	},	fullscreen : function(bool) {		this.fullscreenMode = (bool === undefined ? !this.fullscreenMode : bool);		return this.remove().create();	},	readonly : function(isReadonly) {		isReadonly = _undef(isReadonly, true);		var self = this, edit = self.edit, doc = edit.doc;		if (self.designMode) {			self.toolbar.disableAll(isReadonly, []);		} else {			_each(self.noDisableItems, function() {				self.toolbar[isReadonly ? 'disable' : 'enable'](this);			});		}		if (_IE) {			doc.body.contentEditable = !isReadonly;		} else {			doc.designMode = isReadonly ? 'off' : 'on';		}		edit.textarea[0].disabled = isReadonly;	},	createMenu : function(options) {		var self = this,			name = options.name,			knode = self.toolbar.get(name),			pos = knode.pos();		options.x = pos.x;		options.y = pos.y + knode.height();		options.shadowMode = _undef(options.shadowMode, self.shadowMode);		if (options.selectedColor !== undefined) {			options.cls = 'ke-colorpicker-' + self.themeType;			options.noColor = self.lang('noColor');			self.menu = _colorpicker(options);		} else {			options.cls = 'ke-menu-' + self.themeType;			options.centerLineMode = false;			self.menu = _menu(options);		}		return self.menu;	},	hideMenu : function() {		this.menu.remove();		this.menu = null;		return this;	},	hideContextmenu : function() {		this.contextmenu.remove();		this.contextmenu = null;		return this;	},	createDialog : function(options) {		var self = this, name = options.name;		options.autoScroll = _undef(options.autoScroll, true);		options.shadowMode = _undef(options.shadowMode, self.shadowMode);		options.closeBtn = _undef(options.closeBtn, {			name : self.lang('close'),			click : function(e) {				self.hideDialog();				if (_IE && self.cmd) {					self.cmd.select();				}			}		});		options.noBtn = _undef(options.noBtn, {			name : self.lang(options.yesBtn ? 'no' : 'close'),			click : function(e) {				self.hideDialog();				if (_IE && self.cmd) {					self.cmd.select();				}			}		});		if (self.dialogAlignType != 'page') {			options.alignEl = self.container;		}		options.cls = 'ke-dialog-' + self.themeType;		if (self.dialogs.length > 0) {			var firstDialog = self.dialogs[0],				parentDialog = self.dialogs[self.dialogs.length - 1];			firstDialog.setMaskIndex(parentDialog.z + 2);			options.z = parentDialog.z + 3;			options.showMask = false;		}		var dialog = _dialog(options);		self.dialogs.push(dialog);		return dialog;	},	hideDialog : function() {		var self = this;		if (self.dialogs.length > 0) {			self.dialogs.pop().remove();		}		if (self.dialogs.length > 0) {			var firstDialog = self.dialogs[0],				parentDialog = self.dialogs[self.dialogs.length - 1];			firstDialog.setMaskIndex(parentDialog.z - 1);		}		return self;	},	errorDialog : function(html) {		var self = this;		var dialog = self.createDialog({			width : 750,			title : self.lang('uploadError'),			body : '<div style="padding:10px 20px;"><iframe frameborder="0" style="width:708px;height:400px;"></iframe></div>'		});		var iframe = K('iframe', dialog.div), doc = K.iframeDoc(iframe);		doc.open();		doc.write(html);		doc.close();		K(doc.body).css('background-color', '#FFF');		iframe[0].contentWindow.focus();		return self;	}};function _editor(options) {	return new KEditor(options);}function _create(expr, options) {	options = options || {};	options.basePath = _undef(options.basePath, K.basePath);	options.themesPath = _undef(options.themesPath, options.basePath + 'themes/');	options.langPath = _undef(options.langPath, options.basePath + 'lang/');	options.pluginsPath = _undef(options.pluginsPath, options.basePath + 'plugins/');	if (_undef(options.loadStyleMode, K.options.loadStyleMode)) {		var themeType = _undef(options.themeType, K.options.themeType);		_loadStyle(options.themesPath + 'default/default.css');		_loadStyle(options.themesPath + themeType + '/' + themeType + '.css');	}	function create(editor) {		_each(_plugins, function(name, fn) {			fn.call(editor, KindEditor);		});		return editor.create();	}	var knode = K(expr);	if (!knode) {		return;	}	options.srcElement = knode[0];	if (!options.width) {		options.width = knode[0].style.width || knode.width();	}	if (!options.height) {		options.height = knode[0].style.height || knode.height();	}	var editor = new KEditor(options);	if (_language[editor.langType]) {		return create(editor);	}	_loadScript(editor.langPath + editor.langType + '.js?ver=' + encodeURIComponent(K.DEBUG ? _TIME : _VERSION), function() {		return create(editor);	});	return editor;}if (_IE && _V < 7) {	_nativeCommand(document, 'BackgroundImageCache', true);}K.editor = _editor;K.create = _create;K.plugin = _plugin;K.lang = _lang;_plugin('core', function(K) {	var self = this,		shortcutKeys = {			undo : 'Z', redo : 'Y', bold : 'B', italic : 'I', underline : 'U', print : 'P', selectall : 'A'		};	self.afterSetHtml(function() {		if (self.options.afterChange) {			self.options.afterChange.call(self);		}	});	if (self.syncType == 'form') {		var el = K(self.srcElement), hasForm = false;		while ((el = el.parent())) {			if (el.name == 'form') {				hasForm = true;				break;			}		}		if (hasForm) {			el.bind('submit', function(e) {				self.sync();				self.edit.textarea.remove();			});			var resetBtn = K('[type="reset"]', el);			resetBtn.click(function() {				self.html(self.initContent);				self.cmd.selection();			});			self.beforeRemove(function() {				el.unbind();				resetBtn.unbind();			});		}	}	self.clickToolbar('source', function() {		if (self.edit.designMode) {			self.toolbar.disableAll(true);			self.edit.design(false);			self.toolbar.select('source');		} else {			self.toolbar.disableAll(false);			self.edit.design(true);			self.toolbar.unselect('source');		}		self.designMode = self.edit.designMode;	});	self.afterCreate(function() {		if (!self.designMode) {			self.toolbar.disableAll(true).select('source');		}	});	self.clickToolbar('fullscreen', function() {		self.fullscreen();	});	var loaded = false;	self.afterCreate(function() {		K(self.edit.doc, self.edit.textarea).keyup(function(e) {			if (e.which == 27) {				setTimeout(function() {					self.fullscreen();				}, 0);			}		});		if (loaded) {			if (_IE && !self.designMode) {				return;			}			self.focus();		}		if (!loaded) {			loaded = true;		}	});	_each('undo,redo'.split(','), function(i, name) {		if (shortcutKeys[name]) {			self.afterCreate(function() {				_ctrl(this.edit.doc, shortcutKeys[name], function() {					self.clickToolbar(name);				});			});		}		self.clickToolbar(name, function() {			self[name]();		});	});	self.clickToolbar('formatblock', function() {		var blocks = self.lang('formatblock.formatBlock'),			heights = {				h1 : 28,				h2 : 24,				h3 : 18,				H4 : 14,				p : 12			},			curVal = self.cmd.val('formatblock'),			menu = self.createMenu({				name : 'formatblock',				width : self.langType == 'en' ? 200 : 150			});		_each(blocks, function(key, val) {			var style = 'font-size:' + heights[key] + 'px;';			if (key.charAt(0) === 'h') {				style += 'font-weight:bold;';			}			menu.addItem({				title : '<span style="' + style + '" unselectable="on">' + val + '</span>',				height : heights[key] + 12,				checked : (curVal === key || curVal === val),				click : function() {					self.select().exec('formatblock', '<' + key + '>').hideMenu();				}			});		});	});	self.clickToolbar('fontname', function() {		var curVal = self.cmd.val('fontname'),			menu = self.createMenu({				name : 'fontname',				width : 150			});		_each(self.lang('fontname.fontName'), function(key, val) {			menu.addItem({				title : '<span style="font-family: ' + key + ';" unselectable="on">' + val + '</span>',				checked : (curVal === key.toLowerCase() || curVal === val.toLowerCase()),				click : function() {					self.exec('fontname', key).hideMenu();				}			});		});	});	self.clickToolbar('fontsize', function() {		var curVal = self.cmd.val('fontsize'),			menu = self.createMenu({				name : 'fontsize',				width : 150			});		_each(self.fontSizeTable, function(i, val) {			menu.addItem({				title : '<span style="font-size:' + val + ';" unselectable="on">' + val + '</span>',				height : _removeUnit(val) + 12,				checked : curVal === val,				click : function() {					self.exec('fontsize', val).hideMenu();				}			});		});	});	_each('forecolor,hilitecolor'.split(','), function(i, name) {		self.clickToolbar(name, function() {			self.createMenu({				name : name,				selectedColor : self.cmd.val(name) || 'default',				colors : self.colorTable,				click : function(color) {					self.exec(name, color).hideMenu();				}			});		});	});	_each(('cut,copy,paste').split(','), function(i, name) {		self.clickToolbar(name, function() {			self.focus();			try {				self.exec(name, null);			} catch(e) {				alert(self.lang(name + 'Error'));			}		});	});	self.clickToolbar('about', function() {		var html = '<div style="margin:20px;">' +			'<div>KindEditor ' + _VERSION + '</div>' +			'<div>Copyright © <a href="http://www.kindsoft.net/" target="_blank">kindsoft.net</a> All rights reserved.</div>' +			'</div>';		self.createDialog({			name : 'about',			width : 300,			title : self.lang('about'),			body : html		});	});	self.plugin.getSelectedLink = function() {		return self.cmd.commonAncestor('a');	};	self.plugin.getSelectedImage = function() {		return _getImageFromRange(self.edit.cmd.range, function(img) {			return !/^ke-\w+$/i.test(img[0].className);		});	};	self.plugin.getSelectedFlash = function() {		return _getImageFromRange(self.edit.cmd.range, function(img) {			return img[0].className == 'ke-flash';		});	};	self.plugin.getSelectedMedia = function() {		return _getImageFromRange(self.edit.cmd.range, function(img) {			return img[0].className == 'ke-media' || img[0].className == 'ke-rm';		});	};	self.plugin.getSelectedAnchor = function() {		return _getImageFromRange(self.edit.cmd.range, function(img) {			return img[0].className == 'ke-anchor';		});	};	_each('link,image,flash,media,anchor'.split(','), function(i, name) {		var uName = name.charAt(0).toUpperCase() + name.substr(1);		_each('edit,delete'.split(','), function(j, val) {			self.addContextmenu({				title : self.lang(val + uName),				click : function() {					self.loadPlugin(name, function() {						self.plugin[name][val]();						self.hideMenu();					});				},				cond : self.plugin['getSelected' + uName],				width : 150,				iconClass : val == 'edit' ? 'ke-icon-' + name : undefined			});		});		self.addContextmenu({ title : '-' });	});	self.plugin.getSelectedTable = function() {		return self.cmd.commonAncestor('table');	};	self.plugin.getSelectedRow = function() {		return self.cmd.commonAncestor('tr');	};	self.plugin.getSelectedCell = function() {		return self.cmd.commonAncestor('td');	};	_each(('prop,cellprop,colinsertleft,colinsertright,rowinsertabove,rowinsertbelow,rowmerge,colmerge,' +	'rowsplit,colsplit,coldelete,rowdelete,insert,delete').split(','), function(i, val) {		var cond = _inArray(val, ['prop', 'delete']) < 0 ? self.plugin.getSelectedCell : self.plugin.getSelectedTable;		self.addContextmenu({			title : self.lang('table' + val),			click : function() {				self.loadPlugin('table', function() {					self.plugin.table[val]();					self.hideMenu();				});			},			cond : cond,			width : 170,			iconClass : 'ke-icon-table' + val		});	});	self.addContextmenu({ title : '-' });	_each(('selectall,justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,' +		'insertunorderedlist,indent,outdent,subscript,superscript,hr,print,' +		'bold,italic,underline,strikethrough,removeformat,unlink').split(','), function(i, name) {		if (shortcutKeys[name]) {			self.afterCreate(function() {				_ctrl(this.edit.doc, shortcutKeys[name], function() {					self.cmd.selection();					self.clickToolbar(name);				});			});		}		self.clickToolbar(name, function() {			self.focus().exec(name, null);		});	});	self.afterCreate(function() {		var doc = self.edit.doc, cmd, bookmark, div,			cls = '__kindeditor_paste__', pasting = false;		function movePastedData() {			cmd.range.moveToBookmark(bookmark);			cmd.select();			if (_WEBKIT) {				K('div.' + cls, div).each(function() {					K(this).after('<br />').remove(true);				});				K('span.Apple-style-span', div).remove(true);				K('meta', div).remove();			}			var html = div[0].innerHTML;			div.remove();			if (html === '') {				return;			}			if (self.pasteType === 2) {				if (/schemas-microsoft-com|worddocument|mso-\w+/i.test(html)) {					html = _clearMsWord(html, self.filterMode ? self.htmlTags : K.options.htmlTags);				} else {					html = _formatHtml(html, self.filterMode ? self.htmlTags : null);					html = self.beforeSetHtml(html);				}			}			if (self.pasteType === 1) {				html = html.replace(/<br[^>]*>/ig, '\n');				html = html.replace(/<\/p><p[^>]*>/ig, '\n');				html = html.replace(/<[^>]+>/g, '');				html = html.replace(/ /ig, ' ');				html = html.replace(/\n\s*\n/g, '\n');				html = html.replace(/ {2}/g, '  ');				if (self.newlineTag == 'p') {					if (/\n/.test(html)) {						html = html.replace(/^/, '<p>').replace(/$/, '</p>').replace(/\n/g, '</p><p>');					}				} else {					html = html.replace(/\n/g, '<br />$&');				}			}			self.insertHtml(html);		}		K(doc.body).bind('paste', function(e){			if (self.pasteType === 0) {				e.stop();				return;			}			if (pasting) {				return;			}			pasting = true;			K('div.' + cls, doc).remove();			cmd = self.cmd.selection();			bookmark = cmd.range.createBookmark();			div = K('<div class="' + cls + '"></div>', doc).css({				position : 'absolute',				width : '1px',				height : '1px',				overflow : 'hidden',				left : '-1981px',				top : K(bookmark.start).pos().y + 'px',				'white-space' : 'nowrap'			});			K(doc.body).append(div);			if (_IE) {				var rng = cmd.range.get(true);				rng.moveToElementText(div[0]);				rng.select();				rng.execCommand('paste');				e.preventDefault();			} else {				cmd.range.selectNodeContents(div[0]);				cmd.select();			}			setTimeout(function() {				movePastedData();				pasting = false;			}, 0);		});	});	self.beforeGetHtml(function(html) {		return html.replace(/<img[^>]*class="?ke-(flash|rm|media)"?[^>]*>/ig, function(full) {			var imgAttrs = _getAttrList(full),				styles = _getCssList(imgAttrs.style || ''),				attrs = _mediaAttrs(imgAttrs['data-ke-tag']);			attrs.width = _undef(imgAttrs.width, _removeUnit(_undef(styles.width, '')));			attrs.height = _undef(imgAttrs.height, _removeUnit(_undef(styles.height, '')));			return _mediaEmbed(attrs);		})		.replace(/<img[^>]*class="?ke-anchor"?[^>]*>/ig, function(full) {			var imgAttrs = _getAttrList(full);			return '<a name="' + unescape(imgAttrs['data-ke-name']) + '"></a>';		})		.replace(/<div\s+[^>]*data-ke-script-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/ig, function(full, attr, code) {			return '<script' + unescape(attr) + '>' + unescape(code) + '</script>';		})		.replace(/(<[^>]*)data-ke-src="([^"]*)"([^>]*>)/ig, function(full, start, src, end) {			full = full.replace(/(\s+(?:href|src)=")[^"]*(")/i, '$1' + src + '$2');			full = full.replace(/\s+data-ke-src="[^"]*"/i, '');			return full;		})		.replace(/(<[^>]+\s)data-ke-(on\w+="[^"]*"[^>]*>)/ig, function(full, start, end) {			return start + end;		});	});	self.beforeSetHtml(function(html) {		return html.replace(/<embed[^>]*type="([^"]+)"[^>]*>(?:<\/embed>)?/ig, function(full) {			var attrs = _getAttrList(full);			attrs.src = _undef(attrs.src, '');			attrs.width = _undef(attrs.width, 0);			attrs.height = _undef(attrs.height, 0);			return _mediaImg(self.themesPath + 'common/blank.gif', attrs);		})		.replace(/<a[^>]*name="([^"]+)"[^>]*>(?:<\/a>)?/ig, function(full) {			var attrs = _getAttrList(full);			if (attrs.href !== undefined) {				return full;			}			return '<img class="ke-anchor" src="' + self.themesPath + 'common/anchor.gif" data-ke-name="' + escape(attrs.name) + '" />';		})		.replace(/<script([^>]*)>([\s\S]*?)<\/script>/ig, function(full, attr, code) {			return '<div class="ke-script" data-ke-script-attr="' + escape(attr) + '">' + escape(code) + '</div>';		})		.replace(/(<[^>]*)(href|src)="([^"]*)"([^>]*>)/ig, function(full, start, key, src, end) {			if (full.match(/\sdata-ke-src="[^"]*"/i)) {				return full;			}			full = start + key + '="' + src + '"' + ' data-ke-src="' + src + '"' + end;			return full;		})		.replace(/(<[^>]+\s)(on\w+="[^"]*"[^>]*>)/ig, function(full, start, end) {			return start + 'data-ke-' + end;		})		.replace(/<table[^>]*\s+border="0"[^>]*>/ig, function(full) {			if (full.indexOf('ke-zeroborder') >= 0) {				return full;			}			return _addClassToTag(full, 'ke-zeroborder');		});	});});})(window);
 |