{"id":256,"date":"2015-03-18T12:05:04","date_gmt":"2015-03-18T11:05:04","guid":{"rendered":"http:\/\/www.nazor.org\/?page_id=256"},"modified":"2015-03-25T15:50:13","modified_gmt":"2015-03-25T14:50:13","slug":"antikrist","status":"publish","type":"page","link":"https:\/\/www.nazor.org\/?page_id=256","title":{"rendered":"Antikrist"},"content":{"rendered":"<p><strong><span style=\"text-decoration: underline;\">Po\u010det\u00ed a zrozen\u00ed Antikrista dle sv. Hildegardy z Bingen<\/span><\/strong><\/p>\n<p><a href=\"https:\/\/gloria.tv\/user\/oSq3M1WQCVA\" target=\"_blank\"><strong><span style=\"text-decoration: underline;\">Libor Halik<\/span><\/strong><\/a> 19.2.2013 12:56<\/p>\n<p>Svat\u00e1 Hildegarda z Bingenu (1098-1179) &#8222;Po\u010det\u00ed a zrozen\u00ed Antikrista&#8220; (Hildegardina hlavn\u00ed d\u00edla se skl\u00e1daj\u00ed ze zjeven\u00ed. Ona sama p\u00ed\u0161e, \u017ee tyto vize p\u0159ijala a napsala, to znamen\u00e1 ulo\u017eila do textu. Je c\u00edrkevn\u00ed prorokyn\u00ed, kter\u00e1 prorocky vysv\u011btluje P\u00edsmo svat\u00e9. Dne 10.5.2012 pape\u017e Benedikt XVI. podepisuje dekret o kanonizaci Hildegardy z Bingenu a p\u0159ij\u00edm\u00e1 ji t\u00edmto do seznamu sv\u011btc\u016f v\u0161eobecn\u00e9 c\u00edrkve. K slavnostn\u00edmu prohl\u00e1\u0161en\u00ed svat\u00e9 Hildegardy za u\u010ditelku c\u00edrkve do\u0161lo 7.10.2012 u p\u0159\u00edle\u017eitosti zah\u00e1jen\u00ed Sv\u011btov\u00e9ho biskupsk\u00e9ho synodu k nov\u00e9 evangelizaci a zah\u00e1jen\u00ed Roku v\u00edry v \u0158\u00edm\u011b) <a href=\"http:\/\/www.maticecm.cz\/index.php?act=periodika&amp;per=1&amp;pact=4&amp;idpa=35c9b0edc6e9be208b5d2c2a33a9a1e\"><span style=\"text-decoration: underline;\">www.maticecm.cz\/index.php<\/span><\/a> V t\u00e9 dob\u011b jedna ne\u010dist\u00e1 \u017eena po\u010dne sv\u00e9ho ne\u010dist\u00e9ho syna; nebo\u0165 star\u00fd Had, kter\u00fd vys\u00e1l Adama, to u\u010din\u00ed spolu s cel\u00fdm jej\u00edm plemenem tak, \u017ee do n\u011bho nevstoup\u00ed v\u016fbec nic dobr\u00e9ho, a nic dobr\u00e9ho v n\u011bm nem\u016f\u017ee b\u00fdt. Bude vychov\u00e1v\u00e1n na odlehl\u00fdch a st\u0159\u00eddaj\u00edc\u00edch se m\u00edstech, aby ho lid\u00e9 nemohli v\u016fbec poznat. Bude zavle\u010den do v\u0161ech pekeln\u00fdch pustin a z\u016fstane a\u017e do sv\u00e9 pln\u00e9 dosp\u011blosti zcela skryt. Ne\u0159esti, kter\u00e9 jsou mu vlastn\u00ed, neuk\u00e1\u017ee ve\u0159ejn\u011b, dokud nezjev\u00ed, \u017ee je pln\u00fd ve\u0161ker\u00e9 nepravosti, kterou zcela opl\u00fdv\u00e1. Od po\u010d\u00e1tku jeho po\u010det\u00ed propukne mnoho vzpoury a odporu proti \u0159\u00e1dn\u00e9mu po\u0159\u00e1dku. Spravedlnost bude ve sv\u00e9 spr\u00e1vnosti zatemn\u011bna a l\u00e1ska v lidech vyhasne. Nastoup\u00ed v nich tak\u00e9 ho\u0159kost a tvrdost a vznikne mnoho bludn\u00fdch u\u010den\u00ed, tak\u017ee fale\u0161n\u00ed u\u010ditel\u00e9 budou hl\u00e1sat sv\u00e9 bludy zcela ve\u0159ejn\u011b a otev\u0159en\u011b (srov. 2 Sol 2,2n). V katolick\u00e9 v\u00ed\u0159e zavl\u00e1dne tak velk\u00e1 pochybnost a nejistota, \u017ee lid\u00e9 budou pochybovat, zda maj\u00ed v\u016fbec vz\u00fdvat Boha. Budou \u010detn\u00e1 znamen\u00ed na slunci, m\u011bs\u00edci a hv\u011bzd\u00e1ch i ve vod\u011b a na jin\u00fdch \u017eivlech a stvo\u0159en\u00edch (srov. Lk 21,25), jako by se t\u011bmito obrazy coby hr\u016fzyplnou p\u0159edzv\u011bst\u00ed ohla\u0161ovalo kone\u010dn\u00e9 ne\u0161t\u011bst\u00ed. Proto p\u0159epadne lidi v t\u00e9 dob\u011b takov\u00fd smutek, \u017ee budou smrt pokl\u00e1dat za nic. Ale ti, kte\u0159\u00ed jsou dob\u0159e zako\u0159en\u011bni v katolick\u00e9 v\u00ed\u0159e, budou v hlubok\u00e9 zkrou\u0161enosti o\u010dek\u00e1vat Bo\u017e\u00ed rozhoduj\u00edc\u00ed z\u00e1sah. Tyto hr\u016fzy budou trvat tak dlouho, dokud syn zk\u00e1zy neotev\u0159e sv\u00e1 \u00fasta k u\u010den\u00ed. Ale kdy\u017e bude pron\u00e1\u0161et sv\u00e1 fale\u0161n\u00e1 a zbloudil\u00e1 slova, bude se ot\u0159\u00e1sat nebe i zem\u011b. N\u00e1hrdeln\u00edk Spravedlnosti zachv\u00e1t\u00ed jakoby velk\u00fd z\u00e1van v\u011btru a uvede ho poprv\u00e9 do pohybu. Proto\u017ee a\u017e do t\u00e9 doby z\u016fst\u00e1val bez pohybu a bez oto\u010den\u00ed. Pavel dolo\u017eil svou nauku tolika z\u00e1zraky a tak mocn\u011b upevnil a vyzdobil slovy s hlubok\u00fdm v\u00fdznamem, aby vydr\u017eela a\u017e do konce sv\u011bta, jak ukazuje tento \u0159et\u011bz, kter\u00fd sah\u00e1 a\u017e k noh\u00e1m Spravedlnosti a sou\u010dasn\u011b a\u017e na konec sv\u011bta. On ve vytr\u017een\u00ed sv\u00e9ho ducha hovo\u0159il tak\u00e9 o druh\u00e9m p\u0159\u00edchodu Bo\u017e\u00edho Syna a o smrtonosn\u00e9m \u00fatoku syna zhouby, a podal tak v\u011b\u0159\u00edc\u00edm sv\u011bdectv\u00ed o p\u0159\u00edchodu Antikrista (2 Sol 2,2n): Nenechte si tak snadno popl\u00e9st hlavu, \u010di se dokonce polekat n\u011bjak\u00fdm proroctv\u00edm, (&#8230;) jako by ten den P\u00e1n\u011b u\u017e m\u011bl nastat. (&#8230;) Nap\u0159ed toti\u017e mus\u00ed nastat odpad a objevit se \u010dlov\u011bk h\u0159\u00ed\u0161n\u00fd, propadl\u00fd z\u00e1hub\u011b, protivn\u00edk, kter\u00fd se povy\u0161uje nade v\u0161echno, co nese jm\u00e9no Bo\u017e\u00ed nebo \u010demu se vzd\u00e1v\u00e1 n\u00e1bo\u017eensk\u00e1 \u00facta. Posad\u00ed se dokonce v Bo\u017e\u00edm chr\u00e1m\u011b a bude se prohla\u0161ovat za Boha. Smyslu t\u00e9to v\u00fdpov\u011bdi je t\u0159eba rozum\u011bt takto: Vy, kte\u0159\u00ed jste Bo\u017e\u00ed a v\u011b\u0159\u00edte v jeho slovo, st\u0159e\u017ete se toho, abyste se nedali ot\u0159\u00e1st n\u011bjakou hr\u016fzou nebo duchovn\u00edm m\u00e1men\u00edm nebo poku\u0161en\u00edm z mno\u017estv\u00ed slov a spis\u016f, jako by byly pravdiv\u00e9 a ur\u010den\u00e9 pro v\u00e1s, jako by zde ji\u017e byl ten den, kdy Stvo\u0159itel odhal\u00ed p\u0159ede v\u0161emi propasti srdce. St\u0159e\u017ete se tak\u00e9 toho, aby v\u00e1s nesvedl n\u011bkdo podvodn\u00fdmi ud\u00e1lostmi a nep\u0159ivedl v\u00e1s n\u011bjakou p\u0159\u00edle\u017eitost\u00ed do poku\u0161en\u00ed. Proto\u017ee teprve a\u017e nadejde ten \u010das, kdy bude zbo\u0159ena vzne\u0161enost c\u00edrkve a rozmet\u00e1na prav\u00e1 v\u00edra, \u010d\u00edm\u017e se rozum\u00ed odpad, tehdy nastoup\u00ed doba toho, kter\u00fd je synem h\u0159\u00edchu, proto\u017ee ji\u017e od sv\u00e9ho po\u010d\u00e1tku je zcela proniknut h\u0159\u00edchy, ten, kter\u00fd nezn\u00e1 svou matku v jej\u00ed ne\u010distot\u011b a nev\u00ed, kdo ho po\u010dal. Tehdy se otev\u0159en\u011b zjev\u00ed. Proto vystoup\u00ed jako h\u0159\u00ed\u0161n\u00edk a bude hl\u00e1sat halasn\u011b v\u0161echny h\u0159\u00edchy a bere je v\u0161echny zase na sebe. A jako syn stra\u0161n\u00e9 zk\u00e1zy setrv\u00e1 zcela v t\u00e9to zk\u00e1ze, proto\u017ee u\u010d\u00ed lidi to, co je proti Bohu. Rovn\u011b\u017e sv\u016fdce lidsk\u00e9ho rodu ho tak rozb\u011bsn\u00ed, jak byl s\u00e1m zb\u011bsil\u00fd na po\u010d\u00e1tku sv\u011bta, kdy\u017e se cht\u011bl rovnat Bohu. Proto tak\u00e9 bude utiskovat v\u0161echny ty, kte\u0159\u00ed Boha uct\u00edvaj\u00ed. Bude se povy\u0161ovat nade v\u0161echny tvory, bude se naz\u00fdvat bohem a porou\u010det, aby ho v\u0161ichni uct\u00edvali jako boha. Ale vy nesm\u00edte uv\u011b\u0159it tomu, \u017ee je ji\u017e zde den P\u00e1n\u011b, kdy B\u016fh p\u0159ijde soudit cel\u00fd okrsek zem\u011b. Nebo\u0165 op\u011bt svat\u00fd Pavel prav\u00ed: Tajemstv\u00ed nepravosti v\u0161ak u\u017e pracuje; nap\u0159ed ov\u0161em mus\u00ed ustoupit z cesty ten, kter\u00fd to dosud zdr\u017euje. (tamt. 2,7) Smysl: Skryt\u00e9 na\u0161ept\u00e1v\u00e1n\u00ed se objevuje ji\u017e v d\u00edlech bludn\u00fdch nauk, ve kter\u00fdch sv\u016fdce ke zlu p\u0159edes\u00edl\u00e1 sv\u00e9 \u0161\u00edpy, proto\u017ee chce potla\u010dit pravdu v\u00edry. Proto stoj\u00ed spr\u00e1vn\u00fd n\u00e1hled a dobr\u00e9 \u00fasil\u00ed v\u011b\u0159\u00edc\u00edch lid\u00ed ur\u010ditou n\u00e1mahu: kdo setrv\u00e1v\u00e1 v pravdiv\u00e9m a apo\u0161tolsk\u00e9m katolick\u00e9m u\u010den\u00ed, mus\u00ed si ho uchovat bez zfal\u0161ov\u00e1n\u00ed&#8230; Nebo\u0165 ve v\u0161ech dob\u00e1ch syna zhouby se v\u00edra odch\u00fdl\u00ed od sv\u00e9 s\u00edly, zm\u011bkne a ztrat\u00ed svou s\u00edlu, a proto\u017ee se ji\u017e pok\u0159ivila, je\u0161t\u011b v\u00edce zesl\u00e1bne. Pouze ten, kdo se pevn\u011b dr\u017e\u00ed vzne\u0161enosti c\u00edrkve a spr\u00e1vn\u00e9 v\u00edry, dr\u017e\u00ed se pevn\u011b n\u011b\u010deho velik\u00e9ho, proto\u017ee t\u00edm chce vstoupit do nebesk\u00e9ho kr\u00e1lovstv\u00ed. Av\u0161ak ten, kdo nem\u00e1 v\u00edru, nem\u00e1 \u017e\u00e1dnou oporu a propadne z\u00e1hub\u011b. Satansk\u00e9 sv\u00e1d\u011bn\u00ed Antikrista Star\u00fd Nep\u0159\u00edtel, kter\u00e9ho bo\u017esk\u00e1 s\u00edla svrhla do jezera pekeln\u00e9 propasti, cht\u011bl zlobu siln\u011b zd\u016fvodnit. Ale B\u016fh je spravedliv\u00fd a pravdiv\u00fd a nen\u00ed nikoho, kdo by se mu rovnal, proto\u017ee je od v\u011b\u010dnosti a je s\u00e1m ze sebe a v\u0161echno, co je, stvo\u0159il z ni\u010deho. Star\u00fd nep\u0159\u00edtel se v\u0161ak domn\u00edv\u00e1, \u017ee kdy\u017e p\u0159emohl prvn\u00edho \u010dlov\u011bka skrze jin\u00e9ho \u010dlov\u011bka, Antikrista, m\u016f\u017ee d\u00e1le prov\u00e1d\u011bt to, co za\u010dal, kdy\u017e se pokusil bojovat proti Bohu. Ovlivn\u011bn \u010f\u00e1blem v\u0161echno zni\u010d\u00ed, co B\u016fh stanovil ve Star\u00e9m a Nov\u00e9m z\u00e1kon\u011b, jakmile \u2013 jak je p\u0159edpov\u011bzeno \u2013 otev\u0159e sv\u00e1 \u00fasta ke zvr\u00e1cen\u00e9 nauce. Bude tvrdit, \u017ee krvesmilstvo a podobn\u00e9 zvrhlosti nejsou \u017e\u00e1dn\u00e9 h\u0159\u00edchy. Bude mluvit o tom, \u017ee v\u016fbec nen\u00ed h\u0159\u00edchem, kdy\u017e se t\u011blo t\u011blem vydr\u00e1\u017ed\u00ed, jako nen\u00ed h\u0159\u00edchem, kdy\u017e se \u010dlov\u011bk zah\u0159eje od ohn\u011b. Bude uji\u0161\u0165ovat, \u017ee p\u0159\u00edkazy o \u010distot\u011b vznikly z nev\u011bdomosti. Proto\u017ee kdy\u017e je n\u011bkdo tepl\u00fd a druh\u00fd studen\u00fd, mus\u00ed se navz\u00e1jem v teplot\u011b a chladu vyrovnat. D\u00e1le bude v\u011b\u0159\u00edc\u00edm \u0159\u00edkat: Va\u0161e z\u00e1kony proti zdr\u017eenlivosti jsou proti z\u00e1kon\u016fm p\u0159\u00edrody, toti\u017e \u017ee \u010dlov\u011bk nesm\u00ed b\u00fdt rozn\u00edcen\u00fd, kdy\u017e je v jeho dechu ohe\u0148 a cel\u00e9 jeho t\u011blo je jako ve v\u00fdhni. Jak m\u016f\u017ee b\u00fdt proti sv\u00e9 p\u0159irozenosti studen\u00fd? A z jak\u00e9ho d\u016fvodu by m\u011bl \u010dlov\u011bk p\u0159estat jin\u00e9 t\u011blo dr\u00e1\u017edit? Onen mu\u017e, o kter\u00e9m \u0159\u00edk\u00e1te, \u017ee je to v\u00e1\u0161 Mistr, dal v\u00e1m z\u00e1kony, kter\u00e9 p\u0159ekra\u010duj\u00ed meze, kdy\u017e v\u00e1m porou\u010d\u00ed, abyste tak \u017eili. J\u00e1 v\u00e1m v\u0161ak prav\u00edm: m\u00e1te \u017e\u00edt ob\u011bma zp\u016fsoby, v teple i v chladu a navz\u00e1jem se zah\u0159\u00edvat. Pochopte to, \u017ee ten doty\u010dn\u00fd \u010dlov\u011bk v\u00e1m dal nespr\u00e1vn\u00e1 p\u0159ik\u00e1z\u00e1n\u00ed. Proto\u017ee i kdy\u017e v\u00e1m p\u0159ikazuje, \u017ee lid\u00e9 se nemaj\u00ed navz\u00e1jem zah\u0159\u00edvat, p\u0159esto svoji p\u0159irozenost t\u011blesn\u011b \u0161lechtili. Sna\u017ete se, abyste se v budoucnosti nedali v\u00e9st fale\u0161n\u00fdmi na ukami, proto\u017ee j\u00e1 to dob\u0159e v\u00edm, co vy m\u016f\u017eete, a co ne. V\u00e1\u0161 Mistr v\u00e1m nedal spr\u00e1vn\u00e9 p\u0159edpisy, on cht\u011bl, abyste byli jako duchov\u00e9, kte\u0159\u00ed nejsou od\u011bni v t\u011ble, jako by zrozen\u00e9 lidsk\u00e9 t\u011blo, kter\u00e9 je vytvo\u0159eno z vlit\u00e9ho ohn\u011b, nebylo takto stvo\u0159eno. Proto\u017ee kdyby lidsk\u00e9 d\u011bti takto nep\u0159ich\u00e1zely na sv\u011bt, nem\u011bly by v\u016fbec mo\u017enost p\u016fsobit. Proto mus\u00edte v\u011bd\u011bt, \u010d\u00edm vlastn\u011b jste. Proto\u017ee ten, kter\u00fd v\u00e1s d\u0159\u00edve u\u010dil, v\u00e1s klamal a k ni\u010demu v\u00e1m neposlou\u017eil. J\u00e1 v\u0161ak v\u00e1m \u0159\u00edk\u00e1m, \u017ee mus\u00edte poznat sami sebe, \u010d\u00edm jste. Proto\u017ee j\u00e1 jsem v\u00e1s stvo\u0159il a jsem \u00fapln\u011b cel\u00fd ve v\u0161em. On v\u0161ak p\u0159ipsal sv\u00e1 d\u00edla n\u011bkomu jin\u00e9mu, proto\u017ee s\u00e1m ze sebe nic nedok\u00e1zal. J\u00e1 ale mluv\u00edm s\u00e1m ze sebe a v\u0161echno zn\u00e1m s\u00e1m od sebe. \u2014 Takov\u00fdmi a podobn\u00fdmi slovy bude tento ne\u0161\u0165astn\u00fd syn zk\u00e1zy sv\u00e1d\u011bt lidi, kdy\u017e je bude u\u010dit, aby \u017eili podle hork\u00e9 \u017e\u00e1dostivosti t\u011bla a vyplnili ka\u017ed\u00e9 p\u0159\u00e1n\u00ed t\u011bla, zat\u00edmco Star\u00fd i Nov\u00fd z\u00e1kon zve \u010dlov\u011bka k \u010distot\u011b, pr\u00e1v\u011b proto, \u017ee \u010distota nep\u0159ekra\u010duje va\u0161e meze. T\u00edm zp\u016fsobem bude Lucifer skrze Antikrista pop\u00edrat Bo\u017e\u00ed spravedlnost. Bude se domn\u00edvat, \u017ee m\u016f\u017ee prov\u00e9st v\u0161echno, co jen za\u010dal. Bude se domn\u00edvat, \u017ee mu Jord\u00e1n te\u010de do \u00fast (Job 40,23; \u017d 14,3\u20135), tak\u017ee k\u0159est u\u017e nad\u00e1le nep\u0159ich\u00e1z\u00ed v \u00favahu, n\u00fdbr\u017e \u017ee ho odvrhne, tak jak byl s\u00e1m k\u0159tem zavr\u017een. Proto se bude domn\u00edvat, \u017ee kdy\u017e tak panuje, m\u016f\u017ee si podmanit tak velk\u00fd po\u010det lid\u00ed, \u017ee ve srovn\u00e1n\u00ed s n\u00edm m\u00e1 Bo\u017e\u00ed Syn jen malou hrstku v\u011b\u0159\u00edc\u00edch. (Pokra\u010dov\u00e1n\u00ed) EWIG 11+12\/1999 P\u0159eklad -l\u0161- <strong><span style=\"text-decoration: underline;\">P\u0159\u00edvr\u017eenci Antikrista ve Star\u00e9m a Nov\u00e9m z\u00e1kon\u011b<\/span><\/strong> Tento d\u0159\u00edve zm\u00edn\u011bn\u00fd \u010dlov\u011bk je naz\u00fdv\u00e1n tak\u00e9 \u010dlov\u011bkem nepravosti, proto\u017ee prov\u00e1d\u00ed v\u0161echno zl\u00e9, nade v\u0161echno se vyvy\u0161uje (srov. 2 So12, 3 ), a je naz\u00fdv\u00e1n syn zhouby, proto\u017ee nad n\u00edm vl\u00e1dne smrt a z\u00e1huba a zvr\u00e1cen\u00fdm zp\u016fsobem bude sv\u00e1d\u011bt a t\u00e1hnout za sebou velk\u00e9 mno\u017estv\u00ed n\u00e1rod\u016f. Nech\u00e1 se uct\u00edvat jako b\u016fh, jak o tom mluv\u00ed Jan, kdy\u017e ho popisuje ve Zjeven\u00ed v obraze divok\u00e9 \u0161elmy: Budou se j\u00ed klan\u011bt v\u0161ichni obyvatel\u00e9 na zemi, jejich\u017e jm\u00e9no nen\u00ed zaps\u00e1no od stvo\u0159en\u00ed sv\u011bta v knize \u017eivota zabit\u00e9ho Ber\u00e1nka. (Zj 13,8) Smysl tohoto v\u00fdroku se vztahuje k dal\u0161\u00edmu textu takto: Se sklon\u011bn\u00fdm t\u011blem i duchem budou se klan\u011bt t\u00e9 \u0161elm\u011b zla ti, kte\u0159\u00ed p\u0159ipoutali p\u0159\u00edbytek sv\u00e9ho srdce k pozemsk\u00fdm statk\u016fm. Jejich jm\u00e9na nejsou poznamen\u00e1na na v\u011b\u010dnosti znamen\u00edm svatosti t\u011bch, v jejich\u017e \u00fastech nen\u00ed klamu. Proto upadne do z\u00e1huby ka\u017ed\u00fd, kdo bude obdivovat spisy tohoto zvr\u00e1cen\u00e9ho \u010dlov\u011bka a uct\u00edvat ho, proto\u017ee ponese ve sv\u00e9m srdci spisy Satana, kter\u00e9ho B\u016fh zavrhl, kdy\u017e cht\u011bl ze sebe d\u011blat Boha. Proto se tak\u00e9 naz\u00fdv\u00e1 Smrt, proto\u017ee prch\u00e1 p\u0159ed \u017divotem, ve kter\u00e9m nen\u00ed \u017e\u00e1dn\u00e1 smrtelnost, n\u00fdbr\u017e kter\u00fd v\u0161echno o\u017eivuje. A nikdo z t\u011bch, kte\u0159\u00ed n\u00e1le\u017e\u00ed k tomuto synu zhouby, proto\u017ee konaj\u00ed jeho skutky, nebude zaps\u00e1n v Ber\u00e1nkov\u011b knize \u017eivota (Z 69,29; Zj 13,8). Proto\u017ee tento Ber\u00e1nek je Slovo Bo\u017e\u00ed, skrze n\u011bho\u017e v\u0161echno bylo stvo\u0159eno. \u010e\u00e1bel m\u00e1 v\u0161ak ve Star\u00e9m i Nov\u00e9m z\u00e1kon\u011b ustavi\u010dn\u011b p\u0159\u00edvr\u017eence, ve Star\u00e9m z\u00e1kon\u011b je to Baal, v Nov\u00e9m saducejov\u00e9, kte\u0159\u00ed pro sv\u00e9 u\u010den\u00ed jsou v rozkolu. Nebo\u0165 oni ur\u00e1\u017eej\u00ed Bo\u017e\u00ed z\u00e1kon, kter\u00fd je ko\u0159enem spravedlnosti, ve kter\u00e9m se skr\u00fdvali patriarchov\u00e9 a proroci, poprv\u00e9 p\u0159i hanebnosti Baala. Ale m\u011bl tak\u00e9 spojence v Nov\u00e9m z\u00e1kon\u011b, kte\u0159\u00ed urazili spravedlnost a se saduceji pop\u00edrali zmrtv\u00fdchvst\u00e1n\u00ed. Proto\u017ee v\u00fdhonek z uveden\u00e9ho ko\u0159ene je evangelium a plody tohoto v\u00fdhonku jsou sv\u011bdectv\u00edm Krista, nebot on rozdrtil svou silou Baala a saduceje. P\u0159esto v\u0161ak z nich vze\u0161li bludn\u00ed u\u010ditel\u00e9, kte\u0159\u00ed odporuj\u00ed podm\u00ednk\u00e1m prvotn\u00edho vzniku \u017eivota. A jejich blud je hor\u0161\u00ed ne\u017e ten p\u016fvodn\u00ed (Mt 27,64), proto\u017ee zcela pop\u00edraj\u00ed Boha v jeho \u0159\u00e1du stvo\u0159en\u00ed a stvo\u0159en\u00ed \u017eiv\u00fdch du\u0161\u00ed. Ti v\u0161ichni jsou onou neblahou \u0161elmou, klan\u011bji se zvrhl\u00e9mu \u010dlov\u011bku, pop\u00edraj\u00ed v\u00edru ve v\u0161emohouc\u00edho Boha a tvrd\u00ed, \u017ee jim to v\u016fbec nevad\u00ed, kdy\u017e nedbaj\u00ed Bo\u017e\u00edch p\u0159ik\u00e1z\u00e1n\u00ed. <strong><span style=\"text-decoration: underline;\">Fale\u0161n\u00e9 divy Antikrista p\u0159i napodobov\u00e1n\u00ed Krista<\/span><\/strong> Tak stoup\u00e1 jej\u00edch nev\u00edra a\u017e k uveden\u00e9 zlat\u00e9 hlav\u011b leoparda, kter\u00fd se objevuje na n\u00e1hrdeln\u00edku. T\u00edm je ozna\u010den Antikrist, kter\u00fd si \u0159\u00edk\u00e1 B\u016fh a Zlat\u00e1 hlava. Jeho \u010f\u00e1belsk\u00fdmi kousky a znepokojov\u00e1n\u00edm \u017eivot\u016f vznikaj\u00ed stra\u0161n\u00e1 znamen\u00ed a hrozn\u00e9 bou\u0159e. B\u016fh dopou\u0161t\u00ed, \u017ee se tak d\u011bje, aby cel\u00e9 lidstvo poznalo p\u00e1d Antikrista. Proto\u017ee tak\u00e9 on bude p\u0159edst\u00edrat vykoupen\u00ed sv\u00e9ho lidu. Zem\u0159e vra\u017edou a znovu vstane z mrtv\u00fdch. Nap\u00ed\u0161e na \u010delo sv\u00fdch p\u0159\u00edvr\u017eenc\u016f znamen\u00ed, a t\u00edm na sebe strhne v\u0161echno zlo. Tak star\u00fd had oklamal lidstvo a rozn\u00edtil v n\u011bm smysln\u00e9 v\u00e1\u0161n\u011b, a tak ho pozd\u011bji dr\u017eel ve sv\u00e9 smy\u010dce. T\u00edmto znamen\u00edm na \u010dele ovlivn\u00ed lidi magick\u00fdm trikem proti k\u0159tu a ozna\u010den\u00ed za k\u0159estany, tak \u017ee u\u017e nebudou cht\u00edt se od n\u011bho odch\u00fdlit a v\u0161ichni se pojmenuj\u00ed po n\u011bm, jako jsou k\u0159estan\u00e9 pojmenov\u00e1ni podle Krista. Tento n\u00e1pis nosil Lucifer dlouho v sob\u011b, ani\u017e by to komukoliv z lid\u00ed odhalil, krom\u011b jedin\u00e9ho, kter\u00fd jej ponese pln\u011b ji\u017e v mat\u010din\u011b l\u016fn\u011b. Proto mu tak\u00e9 sv\u011b\u0159il, \u017ee m\u016f\u017ee skrze n\u011bho naplnit v\u0161echnu svou v\u016fli. Ale tento \u010dlov\u011bk nebude m\u00edt svou du\u0161i a to, \u010d\u00edm \u017eije, od \u010f\u00e1bla, n\u00fdbr\u017e od Boha, proto\u017ee i tento sl\u00eddi\u010d star\u00e9ho sv\u016fdce, kter\u00fd nen\u00e1vid\u00ed v\u0161echno dobr\u00e9, p\u0159ijal sv\u00e9 byt\u00ed od Boha. Nebo\u0165 jedin\u011b B\u016fh je \u017eivot a ka\u017ed\u00fd dech a v\u0161echno, co \u017eije, se h\u00fdb\u00e1 skrze N\u011bho, nebo\u0165 On je p\u016fvod bez po\u010d\u00e1tku. A tak jako Lucifer v nebi bojoval proti Bohu, tak tento zavr\u017een\u00fd \u010dlov\u011bk se bude pokou\u0161et bojovat na zemi proti lidstv\u00ed Bo\u017e\u00edho Syna. A bude to d\u011blat skrze n\u00e1pis, skrze kter\u00fd bude pop\u00edrat p\u0159edev\u0161\u00edm P\u00e1na a Stvo\u0159itele. Bude spol\u00e9hat na to, \u017ee opat\u0159\u00ed sv\u00fdm p\u0159\u00edvr\u017eenc\u016fm v\u00fdznamn\u011bj\u0161\u00ed dary, ne\u017e jak\u00e9 dal Kristus, Bo\u017e\u00ed Syn, t\u011bm, kte\u0159\u00ed v n\u011bho v\u011b\u0159\u00ed. Tento n\u00e1pis nebude nejd\u0159\u00edve ke spat\u0159en\u00ed v \u017e\u00e1dn\u00e9 \u0159e\u010di, proto\u017ee Lucifer jej nejd\u0159\u00edve vynalezl v sob\u011b. Dos\u00e1hne lst\u00ed toho, \u017ee svede lidi, aby neuzn\u00e1vali sv\u00e9ho Stvo\u0159itele. Tou lst\u00ed bude nev\u011b\u0159\u00edc\u00ed tak sv\u00e1d\u011bt, \u017ee nebudou cht\u00edt uct\u00edvat nic jin\u00e9ho, ne\u017e to, co se jim sam\u00fdm bude ve shod\u011b s jeho n\u00e1zory l\u00edbit. Syn zhouby toti\u017e \u0159ekne: \u201eTak jako na\u0159ezan\u00e9 d\u0159evo je uskladn\u011bno, a dokud je mal\u00ed\u0159 nesestav\u00ed a nepomaluje, aby mu v\u0161ichni v\u011bnovali pozornost, tak tak\u00e9 \u010dlov\u011bk, kter\u00fd se narod\u00ed, nem\u00e1 \u017e\u00e1dnou \u010dest, dokud nen\u00ed poct\u011bn t\u00edmto n\u00e1pisem, proto\u017ee v n\u011bm je v\u011bt\u0161\u00ed sp\u00e1sa a v\u011bt\u0161\u00ed s\u00edla ne\u017e ve stvo\u0159en\u00ed \u010dlov\u011bka.&#8220; Ale B\u016fh v\u0161echno poku\u0161en\u00ed i jeho p\u016fvodce zni\u010d\u00ed. Ale ten n\u00e1pis, kter\u00fd dal Duch Svat\u00fd, nepomine. Kdy\u017e za\u010dne Antikrist kolem sebe shroma\u017e\u010fovat lidi ze v\u0161ech pokolen\u00ed ozna\u010den\u00e9 jeho znamen\u00edm, budou svat\u00ed a spravedliv\u00ed ot\u0159eseni velikou b\u00e1zn\u00ed. <strong><span style=\"text-decoration: underline;\">Ozn\u00e1men\u00ed probuzen\u00ed Henocha a Eli\u00e1\u0161e k boji s Antikristem<\/span><\/strong> \u201eAle J\u00e1, ten, kter\u00fd Jsem, se rozpomenu, jak jsem stvo\u0159il prvn\u00edho \u010dlov\u011bka a jak jsem p\u0159edv\u00eddal v\u0161echno to, \u010d\u00edm Lucifer skrze \u010dlov\u011bka bude proti Mn\u011b bojovat, a jak jsem nasadil svat\u00e9 s\u00edly ctnosti do boje proti n\u011bmu. Ud\u011blal jsem to v Henochovi a v Eli\u00e1\u0161ovi, kter\u00e9 jsem vyvolil z t\u011bch lid\u00ed, kte\u0159\u00ed mi nejv\u00edce le\u017eeli \u043fa srdci. Na konci \u010das\u016f ozn\u00e1m\u00edm lidem, \u017ee tito dva maj\u00ed slo\u017eit sv\u011bdectv\u00ed d\u016fv\u011bry. Proto\u017ee j\u00e1 je pov\u011b\u0159uji ve sv\u00e9m tajemstv\u00ed a zjevuji jim skutky lid\u00ed. Proto budou o tom v\u011bd\u011bt, jako kdyby to \u017eiv\u011b vid\u011bli, a budou moud\u0159ej\u0161\u00ed ne\u017e spisy a \u0159e\u010di mudrc\u016f. T\u00edm toti\u017e, \u017ee budou zbaveni lidsk\u00e9ho t\u011bla, bude od nich od\u0148at v\u0161echen strach a t\u0159esen\u00ed, tak\u017ee budou sn\u00e1\u0161et v\u0161echno, co je obklopuje. P\u0159echov\u00e1v\u00e1m je bez poru\u0161en\u00ed jejich t\u011bla na skryt\u00e9m m\u00edst\u011b. A a\u017e vyplivne syn z\u00e1huby sv\u00e9 zvr\u00e1cen\u00e9 u\u010den\u00ed, budou stejnou silou, s jakou kdysi byli vy\u0148ati ze st\u0159edu lid\u00ed, a jako n\u00e1razem v\u011btru p\u0159ineseni zp\u011bt. A dokud budou p\u0159eb\u00fdvat mezi lidmi, budou ka\u017ed\u00fdch \u010dty\u0159icet dn\u00ed posiln\u011bni, tak jako m\u016fj Syn po\u017e\u00e1dal o pokrm po \u010dty\u0159iceti dnech (Mt 4,2). Tito siln\u00ed a moud\u0159\u00ed mu\u017ei p\u0159edstavuj\u00ed hlavu kozoro\u017ece v n\u00e1hrdeln\u00edku Spravedlnosti. Nebo\u0165 tak jako kozoro\u017eec je state\u010dn\u00fd a stoup\u00e1 do v\u00fd\u0161e, tak budou v m\u00e9 s\u00edle siln\u00ed a maj\u00ed b\u00fdt rychle povzneseni do v\u00fd\u0161e m\u00fdch z\u00e1zrak\u016f. Budou m\u00edt z m\u00e9ho divu tak velkou moc, \u017ee budou p\u016fsobit na obloze a na prvc\u00edch ostatn\u00edho stvo\u0159en\u00ed v\u011bt\u0161\u00ed z\u00e1zraky ne\u017e syn zhouby. Tak budou jeho podvodn\u00e1 znamen\u00ed jejich prav\u00fdmi znamen\u00edmi zesm\u011b\u0161n\u011bna.&#8220; Proto k nim budou pro obrovskou s\u00edlu jejich z\u00e1zrak\u016f ze v\u0161ech n\u00e1rod\u016f sp\u011bchat lid\u00e9, kte\u0159\u00ed uv\u011b\u0159\u00ed jejich slov\u016fm. Budou s horouc\u00ed v\u00edrou sp\u011bchat jako na hostinu vst\u0159\u00edc mu\u010dednictv\u00ed, kter\u00e9 jim p\u0159iprav\u00ed syn z\u00e1huby, tak\u017ee i jejich katani budou znechuceni po\u010d\u00edt\u00e1n\u00edm tak velk\u00e9ho po\u010dtu mrtv\u00fdch. Nebo\u0165 mno\u017estv\u00ed jejich krve pote\u010de jako potokem. Ale nakonec, kdy\u017e nebude syn z\u00e1huby schopen tyto vpravd\u011b svat\u00e9 mu\u017ee p\u0159esv\u011bd\u010dit ani lichocen\u00edm, ani hrozbami, ani zast\u00ednit jejich divy, rozk\u00e1\u017ee, aby byli zni\u010deni stra\u0161n\u00fdm mu\u010dednictv\u00edm a jejich pam\u00e1tka ze zem\u011b zcela zahlazena, aby se mu \u017e\u00e1dn\u00fd \u010dlov\u011bk na zemi nemohl stav\u011bt na odpor. Pak bude, jak bylo \u0159e\u010deno, doveden zlat\u00fd po\u010det mu\u010dedn\u00edk\u016f, kte\u0159\u00ed byli usmrceni v prvotn\u00ed c\u00edrkvi kv\u016fli prav\u00e9 v\u00ed\u0159e, t\u011bmito mu\u010dedn\u00edky z doby bludu ke sv\u00e9 plnosti a napln\u011bn\u00ed. Tuto dobu ozna\u010duje vlk z knihy Scivias. Proto\u017ee tak jako vlk ve sv\u00e9 dravosti poz\u0159e v\u0161echno, co m\u016f\u017ee, tak budou v t\u00e9 dob\u011b poz\u0159eni v\u011b\u0159\u00edc\u00ed, kte\u0159\u00ed v\u011b\u0159\u00ed v Boha. Pak promluv\u00ed op\u011bt Syn Bo\u017e\u00ed ke sv\u00e9mu Otci, jak bylo p\u0159edpov\u011bzeno. Sv\u011btlo, t\u00fdden\u00edk Matice cyrilometod\u011bjsk\u00e9 44\/2012 z 4.11.2012, str. 10-11 (Dokon\u010den\u00ed p\u0159\u00ed\u0161t\u011b) EWIG 11+12\/1999 P\u0159eklad -l\u0161 <strong><span style=\"text-decoration: underline;\">Prosba Bo\u017e\u00edho Syna k Otci, aby u\u0161et\u0159il lidi<\/span><\/strong> Mne, kter\u00fd jsem podle Tv\u00e9ho na\u0159\u00edzen\u00ed vzal na sebe \u0161at t\u011bla, tr\u00e1p\u00ed, \u017ee moje \u00fady, p\u0159edev\u0161\u00edm ty, kter\u00e9 byly se mnou spojeny k\u0159estn\u00ed koupel\u00ed, se m\u011b z\u0159\u00edkaj\u00ed a propadaj\u00ed v\u00fdsm\u011bchu \u010f\u00e1belsk\u00e9 pohany, kdy\u017e poslouchaj\u00ed a uct\u00edvaj\u00ed syna z\u00e1huby. J\u00e1 p\u0159esto op\u011bt vyj\u00edm\u00e1m z nich a p\u0159ij\u00edm\u00e1m k sob\u011b ty, kte\u0159\u00ed jen uklouzli; ale bu\u0159i\u010de a ty, kte\u0159\u00ed setrv\u00e1vaj\u00ed ve zl\u00e9m, zavrhuji. Ot\u010de, proto\u017ee jsem Tv\u016fj Syn, pohled&#8216; na M\u011b ve sv\u00e9 l\u00e1sce, s jakou jsi M\u011b poslal na sv\u011bt, uva\u017e moje r\u00e1ny, skrze kter\u00e9 jsem na tv\u016fj p\u0159\u00edkaz lidi vykoupil. Ukazuji Ti je, aby ses smiloval nad t\u011bmi, kter\u00e9 jsem vykoupil, nedopus\u0165, aby byli vymaz\u00e1ni z knihy \u017eivota. Pro Krev z m\u00fdch ran, p\u0159ived&#8217; je zp\u011bt k l\u00edtosti, aby ten, kter\u00fd pohrd\u00e1 m\u00fdm vt\u011blen\u00edm a m\u00fdm utrpen\u00edm, nepanoval nad nimi zk\u00e1zou. Proto nyn\u00ed, vy v\u0161ichni lid\u00e9, kte\u0159\u00ed tou\u017e\u00edte opustit Hada a vr\u00e1tit se ke sv\u00e9mu Stvo\u0159iteli, dejte pozor na to, \u017ee J\u00e1, Syn Boha a Syn \u010dlov\u011bka, ukazuji za v\u00e1s sv\u00e9mu Otci sv\u00e9 r\u00e1ny. Proto na kolena, kter\u00e1 jste skl\u00e1n\u011bli p\u0159ed p\u00fdchou malomocn\u00e9ho Odp\u016frce, padn\u011bte v \u010distot\u011b v\u00edry p\u0159ed sv\u00fdm Otcem, kter\u00fd v\u00e1s stvo\u0159il a vdechl do v\u00e1s dech \u017eivota (Gn 2,7). Vyznejte z cel\u00e9ho srdce v\u0161echny sv\u00e9 h\u0159\u00edchy, aby v\u00e1m, kte\u0159\u00ed jste v t\u011blesn\u00e9 \u010di du\u0161evn\u00ed tr\u00fdzni, podal svou silnou a nep\u0159emo\u017eitelnou ruku a vytrhl v\u00e1s od \u010f\u00e1bla a ode v\u0161eho zl\u00e9ho. Tak mluv\u00ed Syn k Otci a doporu\u010duje Mu sv\u00e9 \u00fady. Bere je v ochranu, aby skute\u010dn\u011b n\u00e1le\u017eeli ke sv\u00e9 Hlav\u011b a nepohltila je zhouba prvn\u00ed i posledn\u00ed zk\u00e1zy. Nebo\u0165 kdykoliv se probud\u00ed zl\u00fdmi skutky lid\u00ed Otc\u016fv hn\u011bv, ukazuje Mu Syn sv\u00e9 r\u00e1ny, aby kv\u016fli nim lidi u\u0161et\u0159il. On s\u00e1m neu\u0161et\u0159il Sv\u00e9 t\u011blo, aby ovce, kter\u00e9 se ztratily, byly skrze jeho krev p\u0159ivedeny zp\u011bt. Proto tak\u00e9 jeho r\u00e1ny z\u016fstanou tak dlouho otev\u0159en\u00e9, dokud bude sv\u011bt trvat a h\u0159e\u0161it. Proto tak\u00e9 Bo\u017e\u00ed Syn \u017e\u00e1d\u00e1 od lid\u00ed, aby padli na kolena p\u0159ed v\u0161emohouc\u00edm Otcem, kdykoliv zasluhuj\u00ed jeho ortel, aby vzhledem k ran\u00e1m, kter\u00e9 Syn utrp\u011bl na sv\u00e9m t\u011ble a na kter\u00e9 se Otec ustavi\u010dn\u011b d\u00edv\u00e1, byli osvobozeni ode v\u0161eho zl\u00e9ho. <strong><span style=\"text-decoration: underline;\">Probuzen\u00ed Henocha a Eli\u00e1\u0161e<\/span><\/strong> Av\u0161ak pot\u00e9, co Henoch a Eli\u00e1\u0161 utrp\u011bli skrze syna z\u00e1huby t\u011blesnou smrt, budou se, jeho p\u0159\u00edslu\u0161n\u00edci velice radovat, \u017ee zahynuli. Ale pak, kdy\u017e Duch \u017eivota oba op\u011bt vzk\u0159\u00eds\u00ed a povznese vzh\u016fru k oblak\u016fm, zm\u011bn\u00ed se jejich radost ve smutek a velk\u00e9 zd\u011b\u0161en\u00ed. Proto\u017ee skrze jejich vzk\u0159\u00ed\u0161en\u00ed a pov\u00fd\u0161en\u00ed J\u00e1, V\u0161emohouc\u00ed, dok\u00e1\u017eu, \u017ee vzk\u0159\u00ed\u0161en\u00ed a v\u011b\u010dn\u00fd \u017eivot nem\u016f\u017ee \u017e\u00e1dn\u00fd nev\u011b\u0159\u00edc\u00ed pop\u00edrat, nebo\u0165 v onen den, kdy v\u0161echny \u010diny, jimi\u017e lid\u00e9 h\u0159esili, budou o\u010di\u0161t\u011bny, tak\u00e9 lid\u00e9, kte\u0159\u00ed budou vzk\u0159\u00ed\u0161eni z mrtv\u00fdch, pro svou l\u00edtost, kter\u00e1 se Bohu nejv\u00edce l\u00edb\u00ed, budou povzneseni k v\u011bt\u0161\u00ed sl\u00e1v\u011b, ne\u017e k jak\u00e9 byli na po\u010d\u00e1tku stvo\u0159eni. Nebo\u0165 tak, jako je cel\u00fd organismus \u010dlov\u011bka l\u00edtost\u00ed ot\u0159esen, tak se zn\u011bj\u00edc\u00edm hlasem jeho l\u00edtosti pohybuje nebe a chv\u00e1l\u00ed Boha s cherub\u00edny a v\u0161emi jeho bytostmi. Pak bude star\u00fd Had skrze vzk\u0159\u00ed\u0161en\u00ed Henocha a Eli\u00e1\u0161e zachv\u00e1cen rostouc\u00edm hn\u011bvem. Pos\u00edl\u00ed zvrhl\u00e9ho \u010dlov\u011bka Antikrista v n\u00e1zoru, \u017ee se mus\u00ed znovu zmocnit tr\u016fnu, ze kter\u00e9ho byl svr\u017een, aby bylo zcela zahlazeno vzk\u0159\u00ed\u0161en\u00ed Henocha a Eli\u00e1\u0161e a vzpom\u00ednka na Bo\u017e\u00edho Syna. Bude mluvit s\u00e1m k sob\u011b a \u0159ekne si: \u201eV tomto sv\u00e9m synu svedu nyn\u00ed v\u011bt\u0161\u00ed boj, ne\u017e jak\u00fd jsem jednou podstoupil v nebi. Cel\u00e9 m\u00e9 v\u016fli nebude moci odporovat ani B\u016fh, ani lid\u00e9. J\u00e1 v\u00edm a jsem p\u0159esv\u011bd\u010den, \u017ee nemohu b\u00fdt pora\u017een. Tak budu tak\u00e9 ve v\u0161em v\u00edt\u011bzem.&#8220; Pak syn zhouby shrom\u00e1\u017ed\u00ed mno\u017estv\u00ed lid\u00ed, aby zjevn\u011b vid\u011bli jeho sl\u00e1vu, jak se bude pokou\u0161et vystoupit na nebe, aby t\u00edmto v\u00fdstupem zcela zahynulo to, co je dosud v katolick\u00e9 v\u00ed\u0159e neot\u0159eseno. Ale kdy\u017e v p\u0159\u00edtomnosti naslouchaj\u00edc\u00edho lidu bude \u017e\u00e1dat v\u0161echny s\u00edly; aby ho p\u0159i jeho v\u00fdstupu na nebe p\u0159ijaly, napln\u00ed se slova Pavla, m\u00e9ho v\u011brn\u00e9ho slu\u017eebn\u00edka, kter\u00fd hovo\u0159il o Duchu Svat\u00e9m: \u201eA pak se objev\u00ed ten bezbo\u017en\u00edk, ale P\u00e1n ho zahub\u00ed dechem sv\u00fdch \u00fast.&#8220; (2 So12,8) <strong><span style=\"text-decoration: underline;\">Odhalen\u00ed Antikrista a jeho zni\u010den\u00ed Kristem<\/span><\/strong> Tomuto v\u00fdroku je t\u0159eba rozum\u011bt takto: V t\u00e9 dob\u011b bude syn z\u00e1huby odhalen a bude zjevn\u00e9 v\u0161em lidem, \u017ee to byl lh\u00e1\u0159, kter\u00fd m\u011bl z\u00e1m\u011br vystoupit na nebesa. Nebo\u0165 P\u00e1n a Spasitel lidstva, Bo\u017e\u00ed Syn, ho v t\u00e9to jeho troufalosti usmrt\u00ed. U\u010din\u00ed tak stejnou silou, v jak\u00e9 On, Slovo Otcovo, bude soudit cel\u00fd okrsek zemsk\u00fd spravedliv\u00fdm soudem. Kdy\u017e se toti\u017e tento syn z\u00e1huby bude sv\u00fdm \u010f\u00e1belsk\u00fdm um\u011bn\u00edm pohybovat vzh\u016fru, bude bo\u017eskou silou svr\u017een a z\u00e1pach s\u00edry a smoly ho pojme, tak\u017ee ute\u010de na hory spolu s lidmi, kte\u0159\u00ed stoj\u00ed p\u0159i n\u011bm. Kdy\u017e to oni uvid\u00ed a usly\u0161\u00ed, pojme je takov\u00e1 hr\u016fza, \u017ee se z\u0159eknou \u010f\u00e1bla a jeho syna a vr\u00e1t\u00ed se k prav\u00e9 k\u0159estn\u00ed v\u00ed\u0159e. Proto bude star\u00fd Had zd\u011b\u0161en s\u00e1m sebou a \u0159ekne: \u201eNyn\u00ed jsme i my zmateni. Od nyn\u011bj\u0161ka nebudeme m\u00edt s\u00edlu, abychom si podrobili lidi, jak jsme to dosud d\u011blali.&#8220; <strong><span style=\"text-decoration: underline;\">Oslava Bo\u017e\u00edho Syna po svr\u017een\u00ed Antikrista<\/span><\/strong> Ale tak\u00e9 v\u0161ichni ti, kte\u0159\u00ed v\u011brn\u011b v\u011b\u0159\u00ed v Bo\u017e\u00edho Syna, budou nal\u00e9hav\u00fdmi hlasy oslavovat Boha, jak to napsal m\u016fj milovan\u00fd a prav\u00fd sv\u011bdek: \u201eOd nyn\u011bj\u0161ka pat\u0159\u00ed v\u00edt\u011bzstv\u00ed, moc a kr\u00e1lovsk\u00e1 vl\u00e1da na\u0161emu Bohu a panov\u00e1n\u00ed jeho Pomazan\u00e9mu, nebo\u0165 byl svr\u017een \u017ealobn\u00edk na\u0161ich brat\u0159\u00ed, kter\u00fd na n\u011b \u017ealoval p\u0159ed na\u0161\u00edm Bohem ve dne v noci. Oni nad n\u00edm zv\u00edt\u011bzili Ber\u00e1nkovou krv\u00ed a slovem sv\u00e9ho sv\u011bdectv\u00ed, proto\u017ee nemilovali sv\u016fj \u017eivot natolik, \u017ee by se zalekli smrti.&#8220; (Zj 12,10n) Smysl t\u011bchto slov je t\u0159eba ch\u00e1pat takto: Nyn\u00ed, kdy\u017e byl \u010f\u00e1bel pora\u017een a jeho syn Antikrist zni\u010den, p\u0159i\u0161la z Bo\u017e\u00edho na\u0159\u00edzen\u00ed sp\u00e1sa, kter\u00e1 se nemus\u00ed b\u00e1t \u017e\u00e1dn\u00fdch \u010f\u00e1belsk\u00fdch nebezpe\u010d\u00ed. P\u0159i\u0161la moc, kter\u00e1 je zcela zni\u010dila, a kr\u00e1lovstv\u00ed, kter\u00e9 nade v\u0161emi vl\u00e1dne, stoj\u00ed pod panstv\u00edm na\u0161eho Boha a plnou moc\u00ed neporaziteln\u00e9ho Krista, jeho Syna, kter\u00fd se jako prav\u00fd Velekn\u011bz zasadil za sp\u00e1su du\u0161\u00ed. Nebo\u0165 do v\u011b\u010dn\u00e9 z\u00e1huby byl svr\u017een tvrdo\u0161\u00edjn\u00fd \u017ealobce a ustavi\u010dn\u00fd pron\u00e1sledovatel t\u011bch, kte\u0159\u00ed jako my, Bo\u017e\u00ed d\u011bti, budou s n\u00e1mi vlastnit nebesk\u00e9 d\u011bdictv\u00ed. P\u0159ed tv\u00e1\u0159\u00ed nejvy\u0161\u0161\u00edho Stvo\u0159itele a Soudce \u017ealoval na ty, kte\u0159\u00ed souhlasili s jeho r\u016fzn\u00fdm na\u0161ept\u00e1v\u00e1n\u00edm. A d\u011blal to v ka\u017ed\u00e9 dob\u011b jak p\u0159i duchovn\u00edm, tak sv\u011btsk\u00e9m d\u011bn\u00ed, proto\u017ee \u010dlov\u011bk je v\u017edy h\u0159\u00ed\u0161n\u00fd. V prvn\u00edm boji ztracen\u00e9ho and\u011bla, ve kter\u00e9m cht\u011bl bojovat proti Bohu, proto\u017ee cht\u011bl b\u00fdt bohem, B\u016fh nad n\u00edm zv\u00edt\u011bzil. P\u0159edv\u00eddal tak\u00e9 kone\u010dn\u00fd boj, ve kter\u00e9m se m\u011bl s n\u00edm utkat, kdy\u017e jeho syna svrhl a nakonec definitivn\u011b zcela zni\u010dil. Tak\u00e9 ti, kte\u0159\u00ed Boha vpravd\u011b vyzn\u00e1vaj\u00ed, ho porazili, proto\u017ee s n\u00edm nesouhlasili kv\u016fli Ber\u00e1nkov\u011b krvi, skrze kterou byli vykoupeni a kv\u016fli kter\u00e9 sn\u00e1\u0161eli protivenstv\u00ed na sv\u00e9m t\u011ble a stali se v\u00edt\u011bzi. Porazili ho slovem, toti\u017e naukou, kterou jim dosv\u011bd\u010dil skrze katolickou v\u00edru, kter\u00e1 se tak\u00e9 roz\u0161\u00ed\u0159ila ze stejn\u00e9ho slova, z jak\u00e9ho vze\u0161lo v\u0161echno tvorstvo. A oni nemilovali sv\u00e9 du\u0161e tak, \u017ee by je dr\u017eeli ve sv\u00e9m t\u011ble, ale vydali sv\u00e1 t\u011bla a\u017e na smrt. Podrobili toti\u017e sv\u00e1 t\u011bla v mnoh\u00e9m utrpen\u00ed do\u010dasn\u00e9 smrti, \u010d\u00edm\u017e vr\u00e1tili sv\u00e9 du\u0161e v\u0161emohouc\u00edmu Bohu. Nebo\u0165 jako mu\u010dedn\u00edci \u0161li rad\u011bji na smrt, ne\u017e by zap\u0159eli Bo\u017e\u00edho Syna, rad\u011bji se podrobili utrpen\u00ed. Proto skl\u00e1daj\u00ed \u00c1bel, proroci a ostatn\u00ed mu\u010dedn\u00edci, kte\u0159\u00ed byli usmrceni a\u017e do soudn\u00e9ho dne, sv\u011bdectv\u00ed o Synu Bo\u017e\u00edm, \u017ee i On s\u00e1m podle v\u016fle Otce prolil svou krev. A tak skon\u010dil boj syna z\u00e1huby a u\u017e nikdy nebude uct\u00edv\u00e1n. Proto se radujte vy, kte\u0159\u00ed m\u00e1te p\u0159\u00edbytek v nebi i na zemi. Po p\u00e1du Antikrista se roz\u0161\u00ed\u0159\u00ed sl\u00e1va Bo\u017e\u00edho Syna. <strong><span style=\"text-decoration: underline;\">Pod\u011bkov\u00e1n\u00ed Hildegardy Bohu za d\u00edlo stvo\u0159en\u00ed a za jej\u00ed mal\u00e9 d\u00edlo<\/span><\/strong> Znovu jsem usly\u0161ela z nebe hlas, kter\u00fd m\u011b nau\u010dil t\u011bmto slov\u016fm: Nyn\u00ed bud&#8216; chv\u00e1la Bohu za jeho d\u00edlo \u010dlov\u011bka. Za jeho sp\u00e1su vedl na zemi t\u011b\u017ek\u00e9 boje. Zaslou\u017eil si, aby byl vyzdvi\u017een na nebesa, aby spolu s and\u011bly oslavil svou tv\u00e1\u0159 v t\u00e9\u017ee jednot\u011b, v jak\u00e9 je prav\u00fd B\u016fh a prav\u00fd \u010dlov\u011bk. On, v\u0161emohouc\u00ed B\u016fh, k\u00e9\u017e r\u00e1\u010d\u00ed tu ubohou \u017eenu, skrze kterou vydal tento spis, pomazat olejem sv\u00e9ho milosrdenstv\u00ed. Ona \u017eije bez v\u0161eho zaji\u0161t\u011bn\u00ed a nem\u00e1 ani to v\u011bd\u011bn\u00ed, aby si mohla zakl\u00e1dat na spisech, kter\u00e9 skrze vnuknut\u00ed Ducha Svat\u00e9ho zjevila C\u00edrkvi a kter\u00e9 jsou jako hradba velk\u00e9ho m\u011bsta. Ode dne sv\u00e9ho narozen\u00ed je toti\u017e zapletena do s\u00edt\u011b nemoc\u00ed a bolest\u00ed, tak\u017ee ve v\u0161ech \u017eil\u00e1ch, v morku kost\u00ed a ve sv\u00e9m t\u011ble je sou\u017eena trval\u00fdmi bolestmi. P\u0159esto se Bohu dosud zal\u00edbilo ji vysvobodit, nebot ona skrze kom\u016frku sv\u00e9 rozumem nadan\u00e9 du\u0161e naz\u00edr\u00e1 duchovn\u00edm zp\u016fsobem ur\u010dit\u00e1 Bo\u017e\u00ed tajemstv\u00ed. Zde p\u0159edlo\u017een\u00e9 vid\u011bn\u00ed v\u0161ak tak prostoupilo \u017e\u00edly t\u00e9to \u017eeny, \u017ee upadala kv\u016fli mim do hlubok\u00e9 vy\u010derpanosti a sn\u00e1ze pak pro vy\u010derpanost trp\u011bla ur\u010ditou nemoc\u00ed. Proto vedla zp\u016fsob \u017eivota, kter\u00fd se li\u0161\u00ed od zp\u016fsobu \u017eivota lid\u00ed, jako d\u00edt\u011b, jeho\u017e \u017e\u00edly je\u0161t\u011b nedozr\u00e1ly natolik, aby mohlo sn\u00e1\u0161et \u017eivotn\u00ed zp\u016fsob r\u016fzn\u00fdch lid\u00ed. Z inspirace Ducha Svat\u00e9ho je jej\u00ed podstatou slou\u017eit. M\u00e1 svou t\u011blesnou strukturu ze vzduchu, tak\u017ee je ze vzduchu, z de\u0161t\u011b, z v\u011btru a z ka\u017ed\u00e9 bou\u0159e tak st\u00edh\u00e1na nemocemi, \u017ee nem\u016f\u017ee m\u00edt v\u016fbec \u017e\u00e1dnou t\u011blesnou jistotu. Jinak by v n\u00ed nemohla p\u0159eb\u00fdvat inspirace Ducha Svat\u00e9ho. Ale Bo\u017e\u00ed Duch ji n\u011bkdy probudil velkou silou sv\u00e9 dobroty a osv\u011b\u017euj\u00edc\u00ed rosou probouz\u00ed z t\u00e9to nemoci jako ze smrti, aby mohla \u017e\u00edt na sv\u011bt\u011b ve slu\u017eb\u00e1ch inspirace Ducha Svat\u00e9ho. V\u0161emohouc\u00ed B\u016fh, kter\u00fd ka\u017edou vy\u010derpanost a utrpen\u00ed t\u00e9to \u017eeny skute\u010dn\u011b zaznamenal, r\u00e1\u010d\u00ed v n\u00ed dokon\u010dit svou milost tak, aby jeho dobrota byla d\u00e1le oslavov\u00e1na a jej\u00ed du\u0161e, a\u017e odejde z tohoto sv\u011bta, se mohla t\u011b\u0161it, \u017ee bude p\u0159ijata pro jeho dobrotivost do v\u011b\u010dn\u00e9 sl\u00e1vy a bude korunov\u00e1na. Ale knihu \u017eivota, kterou je slovo Bo\u017e\u00ed, skrze kterou se v\u0161echno stvo\u0159en\u00ed stalo zjevn\u00fdm, a \u017eivot ze sebe vydechlo p\u0159edev\u0161\u00edm podle v\u016fle v\u011b\u010dn\u00e9ho Otce, jak to p\u0159edem na\u0159\u00eddil, sd\u011blil tento spis obdivuhodn\u00fdm zp\u016fsobem nikoliv skrze vysp\u011blost v lidsk\u00e9m vzd\u011bl\u00e1n\u00ed, n\u00fdbr\u017e skrze prostou, nevzd\u011blanou \u017eenskou osobu, jak to byla jeho v\u016fle. Proto by nem\u011bl b\u00fdt \u017e\u00e1dn\u00fd z lid\u00ed tak sm\u011bl\u00fd, aby k n\u00ed roz\u0161i\u0159ov\u00e1n\u00edm n\u011bco p\u0159id\u00e1val nebo kr\u00e1cen\u00edm odn\u00edmal, aby nebyl vymaz\u00e1n z knihy \u017eivota a v\u0161\u00ed bla\u017eenosti, jak\u00e1 je pod sluncem, s v\u00fdjimkou, \u017ee se tak stane kv\u016fli vypadnut\u00ed slova nebo v\u00fdrazu, kter\u00e9 z inspirace Ducha Svat\u00e9ho mohou b\u00fdt vyj\u00e1d\u0159eny jednodu\u0161\u0161\u00edm zp\u016fsobem. Kdo si je jin\u00fdm zp\u016fsobem p\u0159izp\u016fsobuje, h\u0159e\u0161\u00ed proti Duchu Svat\u00e9mu, proto mu nebude odpu\u0161t\u011bno ani na tomto, ani v budouc\u00edm sv\u011bt\u011b. Nyn\u00ed bud&#8216; op\u011bt vzd\u00e1na chv\u00e1la v\u0161emohouc\u00edmu Bohu ve v\u0161ech jeho d\u00edlech p\u0159ed \u010dasem i v \u010dase, proto\u017ee On je Prvn\u00ed a Posledn\u00ed. Tato slova maj\u00ed p\u0159iv\u00e1d\u011bt v\u011b\u0159\u00edc\u00ed k oddanosti jejich srdce, proto\u017ee jsou hl\u00e1s\u00e1na k u\u017eitku v\u011b\u0159\u00edc\u00edch od toho, kter\u00fd je Prvn\u00ed a Posledn\u00ed. <strong><span style=\"text-decoration: underline;\">Konec<\/span><\/strong> Ewig 11+12\/1999 (P\u0159eklad -l\u0161-) Sv\u011btlo t\u00fdden\u00edk Matice cyrilometod\u011bjsk\u00e9 45\/2012, str. 8-9 Pozn\u00e1mka Mgr. Libora Seraf\u00edma Hal\u00edka PhD., kn\u011bze pravoslavn\u00e9 c\u00edrkve: Ne\u017e jsem \u010detl tento v\u00fdklad sv. Hildegardy, domn\u00edval jsem se, \u017ee pro ka\u017ed\u00e9ho jednotlivce, kter\u00fd se podd\u00e1 i jen jednou Antikristu, u\u017e nebude nikdy cesty zp\u011bt k pok\u00e1n\u00ed a odpu\u0161t\u011bn\u00ed. Zde d\u00e1v\u00e1 sv. Hildegarda n\u011bkter\u00fdm stoupenc\u016fm Antikrista, kte\u0159\u00ed p\u0159e\u017eij\u00ed \u0159adu Bo\u017e\u00edch smrteln\u00fdch trest\u016f nad t\u011bmi se zna\u010dkou Antikrista 666, nad\u011bji, \u017ee budou po por\u00e1\u017ece Antikrista \u010dinit pok\u00e1n\u00ed a B\u016fh jim odpust\u00ed. Ale pro ty, kte\u0159\u00ed se zna\u010dkou Antikrista 666 ve sv\u00e9m t\u011ble zem\u0159ou d\u0159\u00edve, ne\u017e bude Antikrist pora\u017een Kristem, je v\u0161ak ur\u010den jen v\u011b\u010dn\u00fd pekeln\u00fd ohe\u0148, jak to zapsal svat\u00fd apo\u0161tol Jan v knize Zjeven\u00ed. Spol\u00e9hat na to, \u017ee zrovna j\u00e1, i kdybych p\u0159ijal zna\u010dku Antikrista 666 (kter\u00e1 nen\u00ed v \u017e\u00e1dn\u00e9m lidsk\u00e9m mluven\u00e9m jazyce, ale je v \u010d\u00e1rkov\u00e9m po\u010d\u00edta\u010dov\u00e9m k\u00f3du), p\u0159e\u017eiji a\u017e do dne Antikristovy por\u00e1\u017eky, je velmi riskantn\u00ed a takov\u00fd p\u0159ehnan\u00fd optimismus m\u011b nejsp\u00ed\u0161e p\u0159ivede do v\u011b\u010dn\u00e9ho pekla. Proto bd\u011bme. Rusk\u00e1 m\u00edstn\u00ed svat\u00e1 Pelagie Rjaza\u0148sk\u00e1 prorokovala, \u017ee Antikrist se narod\u00ed po jej\u00ed smrti. Ona zem\u0159ela r.1966. Dle v\u00fdzkumu n\u00e1zor\u016f obyvatelstva v r.2010 p\u0159ibli\u017en\u011b 14% ob\u010dan\u016f USA v\u011b\u0159ilo, \u017ee Barack Obama m\u016f\u017ee b\u00fdt Antikristem z Bible. <a href=\"http:\/\/www.livescience.com\/8160-quarter-republicans-obama-anti-christ.html\"><span style=\"text-decoration: underline;\">www.livescience.com\/8160-quarter-republicans-obama-anti-christ.html<\/span><\/a> \u0160erif Arpaio a mnoz\u00ed dal\u0161\u00ed dok\u00e1zali, \u017ee Obam\u016fv rodn\u00fd list je zfal\u0161ovan\u00fdm. Krom\u011b toho Barack Obama s\u00e1m na sv\u00e9m osobn\u00edm internetov\u00e9m odkazu dlouho uv\u00e1d\u011bl jin\u00fd datum narozen\u00ed, ne\u017e na zve\u0159ejn\u011bn\u00e9m rodn\u00e9m list\u011b. V jednom p\u0159\u00edm\u00e9m televizn\u00edm p\u0159enosu Obama projevil neznalost data sv\u00e9ho narozen\u00ed. \u010cili je klidn\u011b mo\u017en\u00e9, \u017ee se ve skute\u010dnosti narodil r.1966 a \u017ee je budouc\u00edm Antikristem, kter\u00fd bude zabit a pak o\u017eije, aby na n\u011bm Satan napodobil zmrtv\u00fdchvst\u00e1n\u00ed Krista. \u010casto Obama sv\u00fdmi prsty, podobn\u011b jako d\u0159\u00edve Bush ukazuje satansk\u00e9 znaky. Dle ur\u010dit\u00e9ho rusk\u00e9ho proroctv\u00ed se m\u011bl Antikrist (1. \u0160elma ze Zjeven\u00ed) narodit v Rusku. Dle proroctv\u00ed z francouzsk\u00e9 La Salety m\u011bl Antikrista zplodit h\u0159e\u0161\u00edc\u00ed biskup a h\u0159\u00ed\u0161n\u00e1 hebrejsk\u00e1 mni\u0161ka, fale\u0161n\u00e1 panna. V sov\u011btsk\u00e9m Rusku \u017eilo i studovalo mnoho \u010dernoch\u016f z cel\u00e9ho sv\u011bta. Dne 29.9.1896 se narodila babka (babi\u010dka) Antikrista. Melanie z La Saletty si 30.z\u00e1\u0159\u00ed 1896 zapsala ve sv\u00e9m den\u00edku slova matky Bo\u017e\u00ed: \u201eV\u010dera se narodila babka Antikrista.\u201c Kdy\u017e byl Obama poprv\u00e9 zvolen USA prezidentem v listopadu 2008, tak ne\u010dekan\u011b pukl v kostele v La Salet\u011b pam\u00e1tn\u00fd k\u00e1men, na kter\u00e9m v minulosti st\u00e1la Panna Marie, kdy\u017e informovala o budouc\u00edm Antikristu. Ameri\u010dan Tom Fife informoval <a href=\"http:\/\/www.freerepublic.com\/focus\/f-bloggers\/2344042\/posts\"><span style=\"text-decoration: underline;\">www.freerepublic.com\/&#8230;\/posts<\/span><\/a>, \u017ee mu o budouc\u00edm USA \u010derno\u0161sk\u00e9m prezidentu jm\u00e9nem Barack v r.1992 \u0159ekla jist\u00e1 dob\u0159e postaven\u00e1 pan\u00ed v Rusku, \u017ee se stane tento komunista a \u010dernoch specieln\u011b vy\u0161kolen\u00fd v SSSR budouc\u00edm USA prezidentem. Vychrlila jeho kompletn\u00ed oficieln\u00ed \u017eivotopis: Je z Havaje, chodil do \u0161koly v Kalifornii, \u017eil v Chicagu. B\u00fdval\u00fd d\u016fstojn\u00edk KGB ned\u00e1vno informoval, \u017ee za SSSR se ob\u010das d\u011blaly v\u00fdm\u011bny agent\u016f dvojn\u00edk\u016f a to se mohlo st\u00e1t v p\u0159\u00edpad\u011b americk\u00e9ho Obamy v\u00fdm\u011bnou za \u201eObamu\u201c sov\u011btsk\u00e9ho. Je divn\u00e9, \u017ee na USA univerzit\u011b, kde \u00fadajn\u011b Obama studoval, ho nikdo z tehdej\u0161\u00edch spolu\u017e\u00e1k\u016f a zam\u011bstnanc\u016f univerzity nezn\u00e1. N\u011bkte\u0159\u00ed ru\u0161t\u00ed badatel\u00e9 informuj\u00ed, \u017ee Obama je z izraelsk\u00e9ho pokolen\u00ed Dan \u2013 jak to odhalili, nev\u00edm. Dle Bible se m\u00e1 z pokolen\u00ed Dan narodit Antikrist. Dle k\u0159es\u0165ansk\u00fdch proroctv\u00ed ze 7.stolet\u00ed po Kristu, znovunalezen\u00fdch pravoslavn\u00fdm sv. Kosmou Etolijsk\u00fdm, a vysv\u011btlen\u00fdch sv. Paisijem Athosk\u00fdm, zesnul\u00fdm starcem Josifem Vatopedsk\u00fdm a \u017eij\u00edc\u00edm starcem Efraimem Filofejsk\u00fdm-Arizonsk\u00fdm v\u0161ak Antikrist nenastoup\u00ed k sv\u011btovl\u00e1d\u011b z Jeruzal\u00e9ma hned po 3.sv\u011btov\u00e9 v\u00e1lce, a\u010d to \u017eidov\u0161t\u00ed a s nimi ne\u017eidov\u0161t\u00ed zedn\u00e1\u0159i ilumin\u00e1ti (satanisti, luciferi\u00e1ni) napl\u00e1novali. Do pr\u016fb\u011bhu v\u00e1lky dle nich zas\u00e1hne B\u016fh a tito tajn\u00ed nep\u0159\u00e1tel\u00e9 k\u0159es\u0165ansk\u00e9 c\u00edrkve se navz\u00e1jem vyvra\u017ed\u00ed. Starec Josif Vatopedsk\u00fd p\u0159edpov\u011bd\u011bl, \u017ee v bitv\u011b zahyne 700 milion\u016f voj\u00e1k\u016f a pak bude 30 a\u017e 40 let m\u00edru, kdy se c\u00edrkev bude p\u0159ipravovat na budouc\u00ed st\u0159et s Antikristem. Starec Efraim Filofejsk\u00fd p\u0159edpov\u011bd\u011bl 33 let m\u00edru pot\u00e9, co \u0158ekov\u00e9 dostanou zp\u011bt Konstantinopol. Mysl\u00edm si, \u017ee Obama je Antikrist z Danova pokolen\u00ed p\u0159edpov\u011bzen\u00fd v Bibli. V\u011b\u0159\u00edm, \u017ee tak jak je zaps\u00e1no v Apokalypse &#8211; Zjeven\u00ed sv. apo\u0161tola Jana (a tak\u00e9 u sv. Hildegardy z Bingen, kter\u00e1 byla na podzim 2012 prohl\u00e1\u0161ena Benediktem XVI. za u\u010ditelku c\u00edrkve), bude nejprve Antikrist zabit, a teprve a\u017e znovu o\u017eije, stane se sv\u011btovl\u00e1dcem (o Antikristov\u011b zabit\u00ed je v mnoha p\u0159ekladech Bible, ale ekumenick\u00fd p\u0159eklad to nem\u00e1). Nyn\u00ed je Obama jen USA prezidentem. Dle proroctv\u00ed n\u011bkter\u00fdch katolick\u00fdch a pravoslavn\u00fdch sv\u011btc\u016f dojde brzy k 3.sv\u011btov\u00e9 v\u00e1lce (za\u010dne v\u00e1lkou Rusko proti Turecku) dle pl\u00e1nu zedn\u00e1\u0159\u016f (slobodomur\u00e1rov). Av\u0161ak B\u016fh do t\u00e9 v\u00e1lky po ur\u010dit\u00e9m \u010dase, pro zedn\u00e1\u0159e a Antikrista ne\u010dekan\u011b, zas\u00e1hne a antikristovc\u016fm nedovol\u00ed zv\u00edt\u011bzit. Kv\u016fli neuv\u011b\u0159iteln\u00e9 chudob\u011b nebude v\u00e1lka d\u00e1l pokra\u010dovat. Lidstvo obdr\u017e\u00ed i z\u00e1zra\u010dn\u00e9 znamen\u00ed z nebe. Utrpen\u00ed v Evrop\u011b, dle poselstv\u00ed Panny Marie v Garabandalu z r.1962, za\u010dne pot\u00e9, a\u017e pape\u017e nav\u0161t\u00edv\u00ed Moskvu. B\u011bhem v\u00e1lky dle 3.fatimsk\u00e9ho tajemstv\u00ed i jin\u00fdch proroctv\u00ed bude asi pape\u017e zavra\u017ed\u011bn spolu s mnoha katolick\u00fdmi duchovn\u00edmi i laiky. Dle polsk\u00e9ho zakladatele \u0159ehole Michali\u00e1n\u016f blahoslaven\u00e9ho Bronis\u0142awa Markiewicza 1 n\u00e1rod na jihu Polska vyhyne za v\u00e1lky \u00fapln\u011b. Zda to bude n\u00e1rod \u010desk\u00fd, moravsk\u00fd, nebo slovensk\u00fd, nev\u00edm, ale 1 to bude. Tak zapsal kn\u011bz Bronis\u0142aw Markiewicz poselstv\u00ed and\u011bla z 3.5.1863, kdy na ji\u017en\u00ed hranici polsk\u00e9ho \u00fazem\u00ed \u017eili Slov\u00e1ci a na T\u011b\u0161\u00ednsku Morav\u00e1ci. \u010ce\u0161i tehdy hrani\u010dili se slezsk\u00fdm n\u011bmeck\u00fdm Pruskem, ne s polsk\u00fdm obyvatelstvem. N\u00e1zorov\u011b se v sou\u010dasnosti p\u0159ikl\u00e1n\u00edm sp\u00ed\u0161e k tomu, \u017ee asi Morava lehne CEL\u00c1 popelem, zrovna zde bydl\u00edm. Posledn\u00ed Bohem danou milost\u00ed bude r.2013 c\u00edrkv\u00ed a st\u00e1tem oslavovan\u00e1 p\u0159ipom\u00ednka misijn\u00ed \u010dinnosti svat\u00fdch Cyrila a Metod\u011bje pr\u00e1v\u011b na Morav\u011b. Dojde-li k zpovrchn\u011bn\u00ed i tohoto v\u00fdro\u010d\u00ed, bez pok\u00e1n\u00ed a bez n\u00e1vratu k z\u00e1kon\u016fm P\u00e1na Je\u017e\u00ed\u0161e Krista zejm\u00e9na v oblasti povinn\u00e9ho man\u017eelsk\u00e9ho plozen\u00ed d\u011bt\u00ed a sexu\u00e1ln\u00ed v\u011brnosti, pravd\u011bpodobn\u011b nebude odpu\u0161t\u011bn\u00ed. Morav\u00e1ci u\u017e v 9.stolet\u00ed promarnili obrovskou milost, kter\u00e1 jim byla d\u00e1na skrze p\u0159\u00edchod sv. Cyrila a Metod\u011bje. Nezastali se cyrilometod\u011bjsk\u00fdch \u017e\u00e1k\u016f proti kn\u00ed\u017eeti Svatoplukovi, kter\u00fd nejen ukradl kn\u00ed\u017eectv\u00ed Rostislavovi, ale kter\u00fd i prodal cyrilometod\u011bjsk\u00e9 biskupy, kn\u011bze, j\u00e1hny, kleriky tehdej\u0161\u00edm \u017eidovsk\u00fdm obchodn\u00edk\u016fm do otroctv\u00ed. Pro ten h\u0159\u00edch zaniklo velkomoravsk\u00e9 kn\u00ed\u017eectv\u00ed, ale Morav\u00e1ci je\u0161t\u011b p\u0159e\u017eili, snad d\u00edky pomoci \u010cech\u016f. Morav\u00e1ci p\u0159evzali jazyk \u010cech\u016f. Jazyk tehdej\u0161\u00ed Moravy &#8211; cyrilometod\u011bjsk\u00fd p\u0159e\u017eil jen u Rus\u00edn\u016f na nejv\u00fdchodn\u011bj\u0161\u00edm Slovensku, kde ho v\u0161ak i sloven\u0161t\u00ed biskupov\u00e9 nyn\u00ed odstra\u0148uj\u00ed. Dal jsem i na: <a href=\"https:\/\/gloria.tv\/media\/hnurquhgi5z\" target=\"_blank\"><span style=\"text-decoration: underline;\">Sv. Hildegarda z Bingen (1098-1179) Po\u010det\u00ed a zrozen\u00ed Antikrista<\/span><\/a> Tam m\u016f\u017eete st\u00e1hnout ve WORDU .doc a .pdf<\/p>\n<div id=\"evernote-post-clip-content\" class=\"evn-iexplorer9\" style=\"display: none;\">\n<div id=\"postClipContainer\" class=\"yui3-cssreset\">\n<div class=\"closeCross\"><\/div>\n<div class=\"evn-error-message\">\n<p class=\"evn-error-desc\">Cannot save clip<\/p>\n<p id=\"evn-show-logs\">View Crash Report<\/p>\n<\/div>\n<div class=\"clippedMessage\">Clipped to default notebook<\/div>\n<div class=\"noteTitle\">Untitled note<\/div>\n<div id=\"shareButtons\">\n<div id=\"linkedin\" class=\"shareButton\"><\/div>\n<div id=\"facebook\" class=\"shareButton\"><\/div>\n<div id=\"twitter\" class=\"shareButton\"><\/div>\n<div id=\"weibo\" class=\"shareButton\"><\/div>\n<div id=\"clipboard\" class=\"shareButton\"><\/div>\n<p><!--\n\n\n<div class=\"shareButton\" id=\"email\"><\/div>\n\n\n--><\/p>\n<\/div>\n<div id=\"evn-clipboardCopy-container\">\n<div class=\"evn-pcp-divider\"><\/div>\n<div class=\"evn-pcp-clipboard-message\">Source link<\/div>\n<p><input class=\"evn-pcp-clipboard-input\" readonly=\"readonly\" type=\"text\" \/><\/p>\n<div class=\"evn-pcp-clipboard-button bottom\">Copy to clipboard<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nif ( typeof Evernote == 'undefined' ) {\n    \/**\n     * Represents global evernote context (namespace).\n     * All objects should be a part of this namespace.\n     * @type {Object}\n     *\/\n    Evernote = {};\n}\nEvernote.inherit = function( childConstructor, parentClassOrObject, includeConstructorDefs ) {\n    if ( parentClassOrObject.constructor == Function ) {\n        \/\/ Normal Inheritance\n        childConstructor.prototype = new parentClassOrObject;\n        childConstructor.prototype.constructor = childConstructor;\n        childConstructor.prototype.parent = parentClassOrObject.prototype;\n        childConstructor.constructor.parent = parentClassOrObject;\n    }\n    else {\n        \/\/ Pure Virtual Inheritance\n        childConstructor.prototype = parentClassOrObject;\n        childConstructor.prototype.constructor = childConstructor;\n        childConstructor.prototype.parent = parentClassOrObject;\n        childConstructor.constructor.parent = parentClassOrObject;\n    }\n\n    if ( includeConstructorDefs ) {\n        for ( var i in parentClassOrObject.prototype.constructor ) {\n            if ( i != \"parent\" &#038;&#038; i != \"prototype\" &#038;&#038; parentClassOrObject.constructor[i] != parentClassOrObject.prototype.constructor[ i ]\n                &#038;&#038; typeof childConstructor.prototype.constructor[ i ] == 'undefined' ) {\n                childConstructor.prototype.constructor[ i ] = parentClassOrObject.prototype.constructor[ i ];\n            }\n        }\n    }\n\n    if ( typeof childConstructor.handleInheritance == 'function' ) {\n        childConstructor.handleInheritance.apply( childConstructor, arguments );\n    }\n\n    if ( typeof childConstructor.prototype.handleInheritance == 'function' ) {\n        childConstructor.prototype.handleInheritance.apply( childConstructor, arguments );\n    }\n\n    return childConstructor;\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.EnClipper = {\n\n    enClipperProcessId: -1,\n\n    init: function() {\n        Evernote.ResponseReceiver.subscribe(this);\n        Evernote.Addin.getProcessID(document);\n        Evernote.Addin.allowSetForegroundWindow(this.enClipperProcessId);\n    },\n\n    onDataReceived: function(data) {\n        if(data &#038;&#038; (data.type == \"process_id\")) {\n            Evernote.EnClipper.enClipperProcessId = data.data | 0;\n        }\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/**\n * Proxy object for Evernote ActiveX component\n * @type {Object}\n *\/\nEvernote.Addin = {\n    _addon : null,\n    isAuthenticated: true,\n\n    init : function(addin) {\n        this._addon = addin;\n    },\n\n    \/**\n     * Injects css specified by filename to specified document.\n     * @param fileName - path to css\n     * @param doc - document object\n     *\/\n    injectStyleSheet : function(doc, fileName) {\n        try {\n            this._addon.InjectStyleSheet(doc, fileName)\n        } catch (e) {\n            Evernote.Logger.error( \"Addin.InjectStyleSheet() failed \" + e );\n        }\n    },\n\n    \/**\n     * Injects script content to specified document\n     * @param doc - document object\n     * @param content - content of the script file\n     *\/\n    injectScript : function(doc, content) {\n        try {\n            this._addon.InjectScript( doc, content );\n        }\n        catch ( e ) {\n            Evernote.Logger.error( \"Addin.injectScript() failed \" + e );\n        }\n    },\n\n    \/**\n     * Loads file content from disk\n     * @param url - path to the file\n     *\/\n    loadFile : function(url) {\n        try {\n            return this._addon.LoadFile( url );\n        } catch (e) {\n            Evernote.Logger.error( \"Addin.loadFile() failed \" + e );\n        }\n    },\n\n    \/**\n     * Append message to log file with specified level.\n     * Supported levels:\n     *  0 - debug\n     *  1 - info\n     *  2 - warning\n     *  3 - error\n     *  4 - critical\n     * @param logLevel\n     * @param message\n     *\/\n    log : function(logLevel, message)\n    {\n        try {\n            this._addon.Log(logLevel, message)\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to log message '\" + message + \"' to the log file due to error: \" + e);\n        }\n    },\n\n    \/**\n     * Opens new note window.\n     *\/\n    openNewNote : function() {\n        try {\n            this._addon.CreateNewNote();\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to open new note window due to error: \" + e);\n        }\n    },\n\n    \/**\n     * Return path to directory on local filesystem for specified type.\n     * @param type - type of directory to return. Currently supported types:\n     *  options - directory, where options configuration is stored.\n     *  resources - directory, where resources are located (images, scripts, etc.)\n     *\/\n    getPath : function(type)\n    {\n        try {\n            return this._addon.GetAddinPath(type);\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to clip full page due to error \" + e);\n        }\n    },\n\n    \/**\n     * Returns localized message by code.\n     * @param code - number of message in resource file.\n     *\/\n    getLocalizedMessage : function(code) {\n        try {\n            return this._addon.GetLocalizedString(code) || 'l10n_error';\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to retrieve localized message due to error \" + e);\n        }\n    },\n\n    clipNote : function(content, options, sourceUrl, imageUrls, silent, doc ) {\n        var isSilentClip = silent ? 1 : 0;\n        var images = imageUrls;\n        if(!(images instanceof Array)) {\n            images = [imageUrls];\n        }\n        try {\n            var notebookUid = options.notebookUid | 0;\n            try {\n                notebookUid = options.notebookUid() | 0;\n            } catch(e) {\n                \/\/Notebook uid is not a function, but just an integer that we saved on previous step, ignore exception here\n            }\n            this.ensureAuthenticated();\n            Evernote.Logger.debug(\"Clip to \" + (notebookUid) + \" with tags: \" + options.tags.join(\",\") + \" ; comment: \" + options.comments);\n            return this._addon.ClipNote(options.title, content, sourceUrl, isSilentClip, images.join(\"#\") , notebookUid, options.tags.join(\",\"), \"\", doc,\"EvernoteGlobalReceiver\");\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to clipNote due to error \" + e);\n        }\n    },\n\n    getCursorXPosition : function() {\n        try {\n            return this._addon.GetCursorXPosition();\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to retrieve localized message due to error \" + e);\n            throw e;\n        }\n\n    },\n\n    \/**\n     * Call Addin to get all notebooks (global \"EvernoteGlobalReceiver\" function is called with response)\n     * @param document - document object\n     *\/\n    getNotebooks : function(document) {\n        this.ensureAuthenticated();\n        this._addon.GetNotebooks(document, \"EvernoteGlobalReceiver\", Evernote.NotebookTypes.PERSONAL);\n        this.ensureAuthenticated();\n        this._addon.GetNotebooks(document, \"EvernoteGlobalReceiver\", Evernote.NotebookTypes.BUSINESS);\n        this.ensureAuthenticated();\n        this._addon.GetNotebooks(document, \"EvernoteGlobalReceiver\", Evernote.NotebookTypes.LINKED);\n    },\n\n    \/**\n     * Call Addin to get all personal tags (global \"EvernoteGlobalReceiver\" function is called with response)\n     * @param document - document object\n     *\/\n    getTags : function(document) {\n        this.ensureAuthenticated();\n        this._addon.GetTags(document, \"EvernoteGlobalReceiver\");\n    },\n\n    \/**\n     * Call Addin to get linked notebook tags (global \"EvernoteGlobalReceiver\" function is called with response)\n     * @param document - document object\n     *\/\n    getLinkedTags : function(document, notebookUid) {\n        this.ensureAuthenticated();\n        this._addon.GetLinkedNotebooksTags(document, \"EvernoteGlobalReceiver\", notebookUid);\n    },\n\n    \/**\n     * Returns document location address\n     * @param document - DOM document\n     * @return {*}\n     *\/\n    getDocumentHref: function(document) {\n        return this._addon.GetDocumentHref(document);\n    },\n\n    allowSetForegroundWindow: function(id) {\n        this._addon.AllowSetForegroundWindow(id);\n    },\n\n    getProcessID: function(doc) {\n        this.ensureAuthenticated();\n        this._addon.GetProcessID(doc, \"EvernoteGlobalReceiver\");\n    },\n\n    resetAuthenticatedState: function() {\n        this.isAuthenticated = true;\n    },\n\n    \/\/This function should be called before every call to Addin that will establish connection with EvernoteClipper process.\n    ensureAuthenticated: function() {\n        if(!this.isAuthenticated) {\n            throw new Evernote.AuthenticatedException(\"User is not authorized\");\n        }\n    },\n\n    processError: function(error) {\n        if(error.code == Evernote.ErrorCodes.AUTHENTICATION_ERROR) {\n            this.isAuthenticated = false;\n        }\n        return false;\n    },\n\n    getEvernoteVersion: function(document) {\n        this._addon.GetEvernoteVersion(document, \"EvernoteGlobalReceiver\");\n    },\n\n    getServerLocation: function() {\n        try {\n            return this._addon.GetServerLocation();\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to get Evernote server location due to error: \" + e);\n        }\n    },\n\n    getEvernoteVersionAsync: function(callback) {\n        var requestID;\n        try\n        {\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            this._addon.GetEvernoteVersionAsync( Evernote.AsyncEngine.commonCallback, requestID );\n        } catch(e) {\n            Evernote.AsyncEngine.removeRequest(requestID);\n            Evernote.Logger.error(\"Failed to get Evernote version (async) due to error: \" + e);\n        }\n    },\n\n    getNotebooksAsync : function(callback) {\n        this.ensureAuthenticated();\n        var requestID;\n        try\n        {\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            this._addon.GetNotebooksAsync( Evernote.AsyncEngine.commonCallback, requestID, Evernote.NotebookTypes.PERSONAL);\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            this._addon.GetNotebooksAsync( Evernote.AsyncEngine.commonCallback, requestID, Evernote.NotebookTypes.BUSINESS);\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            this._addon.GetNotebooksAsync( Evernote.AsyncEngine.commonCallback, requestID, Evernote.NotebookTypes.LINKED);\n        } catch(e) {\n            Evernote.AsyncEngine.removeRequest(requestID);\n            Evernote.Logger.error(\"Failed to get notebooks (async) due to error: \" + e);\n        }\n    },\n\n    getTagsAsync : function(callback) {\n        this.ensureAuthenticated();\n        var requestID;\n        try\n        {\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            this._addon.GetTagsAsync( Evernote.AsyncEngine.commonCallback, requestID );\n        } catch(e) {\n            Evernote.AsyncEngine.removeRequest(requestID);\n            Evernote.Logger.error(\"Failed to get tags (async) due to error: \" + e);\n        }\n    },\n\n    getLinkedTagsAsync : function(callback, args, notebookUid) {\n        this.ensureAuthenticated();\n        var requestID;\n        try\n        {\n            requestID = Evernote.AsyncEngine.addRequest(callback, args);\n            this._addon.GetLinkedNotebooksTagsAsync( Evernote.AsyncEngine.commonCallback, requestID, notebookUid );\n        } catch(e) {\n            Evernote.AsyncEngine.removeRequest(requestID);\n            Evernote.Logger.error(\"Failed to get notebooks tags (async) due to error: \" + e);\n        }\n    },\n\n    clipNoteAsync : function(callback, content, options, sourceUrl, imageUrls, silent) {\n        var isSilentClip = silent ? 1 : 0;\n        var images = imageUrls;\n        if(!(images instanceof Array)) {\n            images = [imageUrls];\n        }\n        var requestID;\n        try {\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            var notebookUid = options.notebookUid | 0;\n            try {\n                notebookUid = options.notebookUid() | 0;\n            } catch(e) {\n\n            }\n            this.ensureAuthenticated();\n            Evernote.Logger.debug(\"Clip to \" + (notebookUid) + \" with tags: \" + options.tags.join(\",\") + \" ; comment: \" + options.comments);\n            this._addon.ClipNoteAsync(Evernote.AsyncEngine.commonCallback, requestID, options.title, content, sourceUrl, isSilentClip, images.join(\"#\") , notebookUid, options.tags.join(\",\"), \"\");\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to clipNote due to error \" + e);\n        }\n    },\n\n    \/**\n     * Performs security (HTTPS - Port: 443) asynchronous POST request. Example: https:\/\/www.evernote.com\/Login.action\n     * @param callback\n     * @param url Example: \"www.evernote.com\"\n     * @param urlNamedObject Example: \"Login.action\"\n     * @param data - data for \"POST\" request\n     * @constructor\n     *\/\n    asyncWebRequest : function(callback, url, urlNamedObject, data) {\n        var requestID;\n        try\n        {\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            this._addon.AsyncWebRequest( Evernote.AsyncEngine.commonCallback, requestID, url, urlNamedObject, data);\n        } catch(e) {\n            Evernote.AsyncEngine.removeRequest(requestID);\n            Evernote.Logger.error(\"Failed to exec async web request due to error: \" + e);\n        }\n    },\n\n    clipImageAsync : function(options, callback, url, imageBase64) {\n        var requestID;\n        try\n        {\n            requestID = Evernote.AsyncEngine.addRequest(callback);\n            var notebookUid = options.notebookUid | 0;\n            try {\n                notebookUid = options.notebookUid() | 0;\n            } catch(e) {\n            }\n            this._addon.ClipImageAsync(Evernote.AsyncEngine.commonCallback, requestID, notebookUid, options.title, url, options.tags.join(\",\"), options.comments, imageBase64);\n        } catch(e) {\n            Evernote.AsyncEngine.removeRequest(requestID);\n            Evernote.Logger.error(\"Failed to exec async web request due to error: \" + e);\n        }\n    },\n\n    getScreenshotBase64 : function(doc, coord) {\n        try {\n            return this._addon.GetScreenshotBase64Ex(doc, coord[0], coord[1], coord[2], coord[3]);\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to get screnshot due to error: \" + e);\n        }\n    },\n\n    openLocalFile : function(logPath, flags)\n    {\n        try {\n            if (!flags)\n                flags = 1;\n\n            this._addon.OpenLocalFile(document, logPath, flags);\n        } catch (e) {\n            Evernote.Logger.error(\"Failed to open local file due to error \" + e);\n        }\n    },\n\n    getLastLoginUser : function() {\n        try {\n            return this._addon.GetLastLoginUser();\n        } catch (e) {\n            Evernote.Logger.error( \"GetLastLoginUser failed \" + e );\n        }\n        return null;\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.FileLogger = {\n    _addin : Evernote.Addin,\n\n    _log : function(level, message) {\n        if(level >= this.level)\n            this._addin.log(level, \"JS: \" + message);\n    },\n\n    debug : function(message) {\n        try {\n            this._log(0, message);\n        } catch(e) {\n            if(this._next) {\n                this._next.debug(message);\n            }\n        }\n    },\n\n    info : function(message) {\n        try {\n            this._log(1, message);\n        } catch(e) {\n            if(this._next) {\n                this._next.info(message);\n            }\n        }\n    },\n\n    warn : function(message) {\n        try {\n            this._log(2, message);\n        } catch(e) {\n            if(this._next) {\n                this._next.warn(message);\n            }\n        }\n    },\n\n    error : function(message) {\n        try {\n            this._log(3, message);\n        } catch(e) {\n            if(this._next) {\n                this._next.error(message);\n            }\n        }\n    },\n\n    setNext : function(logger) {\n        this._next = logger;\n        this._next.setLevel(this.level);\n    },\n\n    setLevel : function(level) {\n        this.level = level;\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ConsoleLogger = {\n    debug : function(message) {\n        if(this.level >= Evernote.LoggerConfigurator.DEBUG) {\n            try {\n                console.info(message);\n            } catch(e) {\n                if(this._next) {\n                    this._next.debug(message);\n                }\n            }\n        }\n    },\n\n    info : function(message) {\n        if(this.level >= Evernote.LoggerConfigurator.INFO) {\n            try {\n                console.info(message);\n            } catch(e) {\n                if(this._next) {\n                    this._next.info(message);\n                }\n            }\n        }\n    },\n\n    warn : function(message) {\n        if(this.level >= Evernote.LoggerConfigurator.WARN) {\n            try {\n                console.warn(message);\n            } catch(e) {\n                if(this._next) {\n                    this._next.warn(message);\n                }\n            }\n        }\n    },\n\n    error : function(message) {\n        if(this.level >= Evernote.LoggerConfigurator.ERROR) {\n            try {\n                console.error(message);\n            } catch(e) {\n                if(this._next) {\n                    this._next.error(message);\n                }\n            }\n        }\n    },\n\n    setNext : function(logger) {\n        this._next = logger;\n    },\n\n    setLevel : function(level) {\n        this.level = level;\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.AlertLogger = {\n    debug : function(message) {\n        alert(\"Debug: \" + message);\n    },\n\n    info : function(message) {\n        alert(\"Info: \" + message);\n    },\n\n    warn : function(message) {\n        alert(\"Warn: \" + message);\n    },\n\n    error : function(message) {\n        alert(\"Error: \" + message);\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.LoggerConfigurator = {\n\n    DEBUG : 0,\n    INFO : 1,\n    WARN: 2,\n    ERROR: 3,\n\n    getLogger : function() {\n        var logger = Evernote.FileLogger;\n        if(logger) {\n            logger.setLevel(this.WARN);\n            Evernote.ConsoleLogger.setNext(Evernote.AlertLogger);\n            logger.setNext(Evernote.ConsoleLogger);\n            return logger;\n        }\n        return Evernote.ConsoleLogger;\n    }\n};\n\/\/ ]]><\/script><\/p>\n<p><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/*\n    http:\/\/www.JSON.org\/json2.js\n    2008-11-19\n\n    Public Domain.\n\n    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\n    See http:\/\/www.JSON.org\/js.html\n\n    This file creates a global JSON object containing two methods: stringify\n    and parse.\n\n        JSON.stringify(value, replacer, space)\n            value       any JavaScript value, usually an object or array.\n\n            replacer    an optional parameter that determines how object\n                        values are stringified for objects. It can be a\n                        function or an array of strings.\n\n            space       an optional parameter that specifies the indentation\n                        of nested structures. If it is omitted, the text will\n                        be packed without extra whitespace. If it is a number,\n                        it will specify the number of spaces to indent at each\n                        level. If it is a string (such as '\\t' or '&nbsp;'),\n                        it contains the characters used to indent at each level.\n\n            This method produces a JSON text from a JavaScript value.\n\n            When an object value is found, if the object contains a toJSON\n            method, its toJSON method will be called and the result will be\n            stringified. A toJSON method does not serialize: it returns the\n            value represented by the name\/value pair that should be serialized,\n            or undefined if nothing should be serialized. The toJSON method\n            will be passed the key associated with the value, and this will be\n            bound to the object holding the key.\n\n            For example, this would serialize Dates as ISO strings.\n\n                Date.prototype.toJSON = function (key) {\n                    function f(n) {\n                        \/\/ Format integers to have at least two digits.\n                        return n < 10 ? '0' + n : n;\n                    }\n\n                    return this.getUTCFullYear()   + '-' +\n                         f(this.getUTCMonth() + 1) + '-' +\n                         f(this.getUTCDate())      + 'T' +\n                         f(this.getUTCHours())     + ':' +\n                         f(this.getUTCMinutes())   + ':' +\n                         f(this.getUTCSeconds())   + 'Z';\n                };\n\n            You can provide an optional replacer method. It will be passed the\n            key and value of each member, with this bound to the containing\n            object. The value that is returned from your method will be\n            serialized. If your method returns undefined, then the member will\n            be excluded from the serialization.\n\n            If the replacer parameter is an array of strings, then it will be\n            used to select the members to be serialized. It filters the results\n            such that only members with keys listed in the replacer array are\n            stringified.\n\n            Values that do not have JSON representations, such as undefined or\n            functions, will not be serialized. Such values in objects will be\n            dropped; in arrays they will be replaced with null. You can use\n            a replacer function to replace those with JSON values.\n            JSON.stringify(undefined) returns undefined.\n\n            The optional space parameter produces a stringification of the\n            value that is filled with line breaks and indentation to make it\n            easier to read.\n\n            If the space parameter is a non-empty string, then that string will\n            be used for indentation. If the space parameter is a number, then\n            the indentation will be that many spaces.\n\n            Example:\n\n            text = JSON.stringify(['e', {pluribus: 'unum'}]);\n            \/\/ text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\\t');\n            \/\/ text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n            text = JSON.stringify([new Date()], function (key, value) {\n                return this[key] instanceof Date ?\n                    'Date(' + this[key] + ')' : value;\n            });\n            \/\/ text is '[\"Date(---current time---)\"]'\n\n        JSON.parse(text, reviver)\n            This method parses a JSON text to produce an object or array.\n            It can throw a SyntaxError exception.\n\n            The optional reviver parameter is a function that can filter and\n            transform the results. It receives each of the keys and values,\n            and its return value is used instead of the original value.\n            If it returns what it received, then the structure is not modified.\n            If it returns undefined then the member is deleted.\n\n            Example:\n\n            \/\/ Parse the text. Values that look like ISO date strings will\n            \/\/ be converted to Date objects.\n\n            myData = JSON.parse(text, function (key, value) {\n                var a;\n                if (typeof value === 'string') {\n                    a =\n\/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$\/.exec(value);\n                    if (a) {\n                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n                            +a[5], +a[6]));\n                    }\n                }\n                return value;\n            });\n\n            myData = JSON.parse('[\"Date(09\/09\/2001)\"]', function (key, value) {\n                var d;\n                if (typeof value === 'string' &#038;&#038;\n                        value.slice(0, 5) === 'Date(' &#038;&#038;\n                        value.slice(-1) === ')') {\n                    d = new Date(value.slice(5, -1));\n                    if (d) {\n                        return d;\n                    }\n                }\n                return value;\n            });\n\n    This is a reference implementation. You are free to copy, modify, or\n    redistribute.\n\n    This code should be minified before deployment.\n    See http:\/\/javascript.crockford.com\/jsmin.html\n\n    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n    NOT CONTROL.\n*\/\n\n\/*jslint evil: true *\/\n\n\/*global JSON *\/\n\n\/*members \"\", \"\\b\", \"\\t\", \"\\n\", \"\\f\", \"\\r\", \"\\\"\", JSON, \"\\\\\", apply,\n    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n    lastIndex, length, parse, prototype, push, replace, slice, stringify,\n    test, toJSON, toString, valueOf\n*\/\n\n\/\/ Create a JSON object only if one does not already exist. We create the\n\/\/ methods in a closure to avoid creating global variables.\n\nif (!this.JSON) {\n    JSON = {};\n}\n(function () {\n\n    function f(n) {\n        \/\/ Format integers to have at least two digits.\n        return n < 10 ? '0' + n : n;\n    }\n\n    if (typeof Date.prototype.toJSON !== 'function') {\n\n        Date.prototype.toJSON = function (key) {\n\n            return this.getUTCFullYear()   + '-' +\n                 f(this.getUTCMonth() + 1) + '-' +\n                 f(this.getUTCDate())      + 'T' +\n                 f(this.getUTCHours())     + ':' +\n                 f(this.getUTCMinutes())   + ':' +\n                 f(this.getUTCSeconds())   + 'Z';\n        };\n\n        String.prototype.toJSON =\n        Number.prototype.toJSON =\n        Boolean.prototype.toJSON = function (key) {\n            return this.valueOf();\n        };\n    }\n\n    var cx = \/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]\/g,\n        escapable = \/[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]\/g,\n        gap,\n        indent,\n        meta = {    \/\/ table of character substitutions\n            '\\b': '\\\\b',\n            '\\t': '\\\\t',\n            '\\n': '\\\\n',\n            '\\f': '\\\\f',\n            '\\r': '\\\\r',\n            '\"' : '\\\\\"',\n            '\\\\': '\\\\\\\\'\n        },\n        rep;\n\n    function quote(string) {\n\n\/\/ If the string contains no control characters, no quote characters, and no\n\/\/ backslash characters, then we can safely slap some quotes around it.\n\/\/ Otherwise we must also replace the offending characters with safe escape\n\/\/ sequences.\n\n        escapable.lastIndex = 0;\n        return escapable.test(string) ?\n            '\"' + string.replace(escapable, function (a) {\n                var c = meta[a];\n                return typeof c === 'string' ? c :\n                    '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n            }) + '\"' :\n            '\"' + string + '\"';\n    }\n\n    function str(key, holder) {\n\n\/\/ Produce a string from holder[key].\n\n        var i,          \/\/ The loop counter.\n            k,          \/\/ The member key.\n            v,          \/\/ The member value.\n            length,\n            mind = gap,\n            partial,\n            value = holder[key];\n\n\/\/ If the value has a toJSON method, call it to obtain a replacement value.\n\n        if (value &#038;&#038; typeof value === 'object' &#038;&#038;\n                typeof value.toJSON === 'function') {\n            value = value.toJSON(key);\n        }\n\n\/\/ If we were called with a replacer function, then call the replacer to\n\/\/ obtain a replacement value.\n\n        if (typeof rep === 'function') {\n            value = rep.call(holder, key, value);\n        }\n\n\/\/ What happens next depends on the value's type.\n\n        switch (typeof value) {\n        case 'string':\n            return quote(value);\n\n        case 'number':\n\n\/\/ JSON numbers must be finite. Encode non-finite numbers as null.\n\n            return isFinite(value) ? String(value) : 'null';\n\n        case 'boolean':\n        case 'null':\n\n\/\/ If the value is a boolean or null, convert it to a string. Note:\n\/\/ typeof null does not produce 'null'. The case is included here in\n\/\/ the remote chance that this gets fixed someday.\n\n            return String(value);\n\n\/\/ If the type is 'object', we might be dealing with an object or an array or\n\/\/ null.\n\n        case 'object':\n\n\/\/ Due to a specification blunder in ECMAScript, typeof null is 'object',\n\/\/ so watch out for that case.\n\n            if (!value) {\n                return 'null';\n            }\n\n\/\/ Make an array to hold the partial results of stringifying this object value.\n\n            gap += indent;\n            partial = [];\n\n\/\/ Is the value an array?\n\n            if (Object.prototype.toString.apply(value) === '[object Array]') {\n\n\/\/ The value is an array. Stringify every element. Use null as a placeholder\n\/\/ for non-JSON values.\n\n                length = value.length;\n                for (i = 0; i < length; i += 1) {\n                    partial[i] = str(i, value) || 'null';\n                }\n\n\/\/ Join all of the elements together, separated with commas, and wrap them in\n\/\/ brackets.\n\n                v = partial.length === 0 ? '[]' :\n                    gap ? '[\\n' + gap +\n                            partial.join(',\\n' + gap) + '\\n' +\n                                mind + ']' :\n                          '[' + partial.join(',') + ']';\n                gap = mind;\n                return v;\n            }\n\n\/\/ If the replacer is an array, use it to select the members to be stringified.\n\n            if (rep &#038;&#038; typeof rep === 'object') {\n                length = rep.length;\n                for (i = 0; i < length; i += 1) {\n                    k = rep[i];\n                    if (typeof k === 'string') {\n                        v = str(k, value);\n                        if (v) {\n                            partial.push(quote(k) + (gap ? ': ' : ':') + v);\n                        }\n                    }\n                }\n            } else {\n\n\/\/ Otherwise, iterate through all of the keys in the object.\n\n                for (k in value) {\n                    if (Object.hasOwnProperty.call(value, k)) {\n                        v = str(k, value);\n                        if (v) {\n                            partial.push(quote(k) + (gap ? ': ' : ':') + v);\n                        }\n                    }\n                }\n            }\n\n\/\/ Join all of the member texts together, separated with commas,\n\/\/ and wrap them in braces.\n\n            v = partial.length === 0 ? '{}' :\n                gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' +\n                        mind + '}' : '{' + partial.join(',') + '}';\n            gap = mind;\n            return v;\n        }\n    }\n\n\/\/ If the JSON object does not yet have a stringify method, give it one.\n\n    if (typeof JSON.stringify !== 'function') {\n        JSON.stringify = function (value, replacer, space) {\n\n\/\/ The stringify method takes a value and an optional replacer, and an optional\n\/\/ space parameter, and returns a JSON text. The replacer can be a function\n\/\/ that can replace values, or an array of strings that will select the keys.\n\/\/ A default replacer method can be provided. Use of the space parameter can\n\/\/ produce text that is more easily readable.\n\n            var i;\n            gap = '';\n            indent = '';\n\n\/\/ If the space parameter is a number, make an indent string containing that\n\/\/ many spaces.\n\n            if (typeof space === 'number') {\n                for (i = 0; i < space; i += 1) {\n                    indent += ' ';\n                }\n\n\/\/ If the space parameter is a string, it will be used as the indent string.\n\n            } else if (typeof space === 'string') {\n                indent = space;\n            }\n\n\/\/ If there is a replacer, it must be a function or an array.\n\/\/ Otherwise, throw an error.\n\n            rep = replacer;\n            if (replacer &#038;&#038; typeof replacer !== 'function' &#038;&#038;\n                    (typeof replacer !== 'object' ||\n                     typeof replacer.length !== 'number')) {\n                throw new Error('JSON.stringify');\n            }\n\n\/\/ Make a fake root object containing our value under the key of ''.\n\/\/ Return the result of stringifying the value.\n\n            return str('', {'': value});\n        };\n    }\n\n\/\/ If the JSON object does not yet have a parse method, give it one.\n\n    if (typeof JSON.parse !== 'function') {\n        JSON.parse = function (text, reviver) {\n\n\/\/ The parse method takes a text and an optional reviver function, and returns\n\/\/ a JavaScript value if the text is a valid JSON text.\n            var j;\n\n            function walk(holder, key) {\n\n\/\/ The walk method is used to recursively walk the resulting structure so\n\/\/ that modifications can be made.\n\n                var k, v, value = holder[key];\n                if (value &#038;&#038; typeof value === 'object') {\n                    for (k in value) {\n                        if (Object.hasOwnProperty.call(value, k)) {\n                            v = walk(value, k);\n                            if (v !== undefined) {\n                                value[k] = v;\n                            } else {\n                                delete value[k];\n                            }\n                        }\n                    }\n                }\n                return reviver.call(holder, key, value);\n            }\n\n\/\/ Parsing happens in four stages. In the first stage, we replace certain\n\/\/ Unicode characters with escape sequences. JavaScript handles many characters\n\/\/ incorrectly, either silently deleting them, or treating them as line endings.\n\n            cx.lastIndex = 0;\n            if (cx.test(text)) {\n                text = text.replace(cx, function (a) {\n                    return '\\\\u' +\n                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n                });\n            }\n\/\/ In the second stage, we run the text against regular expressions that look\n\/\/ for non-JSON patterns. We are especially concerned with '()' and 'new'\n\/\/ because they can cause invocation, and '=' because it can cause mutation.\n\/\/ But just to be safe, we want to reject all unexpected forms.\n\n\/\/ We split the second stage into 4 regexp operations in order to work around\n\/\/ crippling inefficiencies in IE's and Safari's regexp engines. First we\n\/\/ replace the JSON backslash pairs with '@' (a non-JSON character). Second, we\n\/\/ replace all simple value tokens with ']' characters. Third, we delete all\n\/\/ open brackets that follow a colon or comma or that begin the text. Finally,\n\/\/ we look to see that the remaining characters are only whitespace or ']' or\n\/\/ ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.\n            if (\/^[\\],:{}\\s]*$\/.\ntest(text.replace(\/\\\\(?:[\"\\\\\\\/bfnrt]|u[0-9a-fA-F]{4})\/g, '@').\nreplace(\/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?\/g, ']').\nreplace(\/(?:^|:|,)(?:\\s*\\[)+\/g, ''))) {\n\n\/\/ In the third stage we use the eval function to compile the text into a\n\/\/ JavaScript structure. The '{' operator is subject to a syntactic ambiguity\n\/\/ in JavaScript: it can begin a block or an object literal. We wrap the text\n\/\/ in parens to eliminate the ambiguity.\n                j = eval('(' + text + ')');\n\n\/\/ In the optional fourth stage, we recursively walk the new structure, passing\n\/\/ each name\/value pair to a reviver function for possible transformation.\n                return typeof reviver === 'function' ?\n                    walk({'': j}, '') : j;\n            }\n\n\/\/ If the text is not JSON parseable, then a SyntaxError is thrown.\n            throw new SyntaxError('JSON.parse');\n        };\n    }\n})();\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/\/ HTML5 placeholder plugin version 1.01\n\/\/ Copyright (c) 2010-The End of Time, Mike Taylor, http:\/\/miketaylr.com\n\/\/ MIT Licensed: http:\/\/www.opensource.org\/licenses\/mit-license.php\n\/\/\n\/\/ Enables cross-browser HTML5 placeholder for inputs, by first testing\n\/\/ for a native implementation before building one.\n\/\/\n\/\/\n\/\/ USAGE:\n\/\/$('input[placeholder]').placeholder();\n\n\/\/ <input type=\"text\" placeholder=\"username\">\n(function($){\n    \/\/feature detection\n    var hasPlaceholder = 'placeholder' in document.createElement('input');\n    var placeholderClass = 'evn-placeholder';\n\n    \/\/sniffy sniff sniff -- just to give extra left padding for the older\n    \/\/graphics for type=email and type=url\n    var isOldOpera = $.browser.opera &#038;&#038; $.browser.version < 10.5;\n\n    $.fn.placeholder = function(options) {\n        \/\/merge in passed in options, if any\n        var options = $.extend({}, $.fn.placeholder.defaults, options),\n        \/\/cache the original 'left' value, for use by Opera later\n            o_left = options.placeholderCSS.left;\n\n        \/\/first test for native placeholder support before continuing\n        \/\/feature detection inspired by ye olde jquery 1.4 hawtness, with paul irish\n        return (hasPlaceholder) ? this : this.each(function() {\n\n            \/\/local vars\n            var $this = $(this),\n                inputVal = $.trim($this.val()),\n                inputWidth = $this.width(),\n                inputHeight = $this.height(),\n\n            \/\/grab the inputs id for the <label @for>, or make a new one from the Date\n                inputId = (this.id) ? this.id : 'placeholder' + (+new Date()) + this.className.replace(' ',''),\n                placeholderText = options.placeholderText ? options.placeholderText : $this.attr('placeholder'),\n                placeholder = $('<label class=\"' + placeholderClass + '\" for=\\\"'+ inputId +'\\\">'+ placeholderText + '<\/label>');\n\n            \/\/stuff in some calculated values into the placeholderCSS object\n\/\/            options.placeholderCSS['width'] = inputWidth;\n            options.placeholderCSS['height'] = inputHeight;\n\n            \/\/ adjust position of placeholder\n            options.placeholderCSS.left = (isOldOpera &#038;&#038; (this.type == 'email' || this.type == 'url')) ?\n                '11%' : o_left;\n            placeholder.css(options.placeholderCSS);\n\n            \/\/place the placeholder if the input is empty\n\n            $this.wrap(options.inputWrapper);\n            $this.attr('id', inputId).after(placeholder);\n\n            if(inputVal) {\n                $this.next().hide();\n            }\n\n            \/\/hide placeholder on focus\n            $this.focus(function(){\n                $this.next().hide();\n            });\n\n            \/\/show placeholder if the input is empty\n            $this.blur(function(){\n                if (!$.trim($this.val())){\n                    $this.next().show();\n                };\n            });\n        });\n    };\n\n    \/\/expose defaults\n    $.fn.placeholder.defaults = {\n        \/\/you can pass in a custom wrapper\n        inputWrapper: '\n\n\n\n<div style=\"position:relative;\"><\/div>\n\n\n\n\n',\n        placeholderText: null,\n\n        \/\/more or less just emulating what webkit does here\n        \/\/tweak to your hearts content\n        placeholderCSS: {\n            'font':'0.75em sans-serif',\n            'color':'#bababa',\n            'position': 'absolute',\n            'left':'5px',\n            'top':'3px',\n            'overflow': 'hidden'\n        }\n    };\n})(jQuery);\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/*!\n *  ClearlyComponent__detect\n *  Evernote Clearly's content-detection algorithm as an embeddable component.\n *  Copyright 2013, Evernote Corporation\n *\n *  Usage:\n *  ======\n *\n *      \/\/ define\n *      window.ClearlyComponent__detect = {\n *          'callbacks': {\n *              'finished': someFunction(),\n *          },\n *          'window': window,\n *          'document': document,\n *          'jQuery': window.jQuery\n *      };\n *\n *      \/\/ init -- will return false, if something goes wrong\n *      window.ClearlyComponent__detect = initClearlyComponent__detect(window.ClearlyComponent__detect);\n *\n *      \/\/ call -- returns nothing; callbacks will be used\n *      window.ClearlyComponent__detect.start();\n *\n *      \/\/ publcly available\/overridable\n *      window.ClearlyComponent__detect.debug\n *      window.ClearlyComponent__detect.parseOptions\n *\n *\/\n\n\/*\n    changes:\n    ========\n        $R => $D\n        $R.win => $D.window\n        $R.parsingOptions => $D.parseOptions\n        $R.skipStuffFromDomains__links => $D.parseOptions._skip_link_from_domain\n        $R.skipStuffFromDomain__images => $D.parseOptions._skip_image_from_domain\n        $R.keepStuffFromDomain__video => $D.parseOptions._keep_video_from_domain\n        $R.getContent__processCandidates => $D.getContent__processCandidates__first\n        $R.getContent__computePointsForCandidate => $D.getContent__computePointsForCandidate__first\n        $R.getContent__computeDetailsForCandidate => $D.getContent__computeDetailsForCandidate__first\n        $R.getContent__processCandidatesSecond => $D.getContent__processCandidates__second\n        $R.getContent__computePointsForCandidateSecond => $D.getContent__computePointsForCandidate__second\n        $R.getContent__computeDetailsForCandidateSecond => $D.getContent__computeDetailsForCandidate__second\n        $R.getContent__computePointsForCandidateThird => $D.getContent__computePointsForCandidate__third\n        $R.getContent__computeDetailsForCandidateThird => $D.getContent__computeDetailsForCandidate__third\n\n    to do:\n    ======\n*\/\n\nfunction initClearlyComponent__detect(_paramInstance)\n{\n    \/\/  global instance reference {\n    \/\/  ===========================\n\n        \/\/  null; return\n        if (_paramInstance); else { return false; }\n\n        \/\/  shorthand\n        $D = _paramInstance;\n\n    \/\/  global instance reference }\n\n    \/\/  required vars {\n    \/\/  ===============\n\n        \/\/  the component instance object must already be created,\n        \/\/  when the init function is called. it must have these vars set:\n\n        switch (true)\n        {\n            case (!($D.callbacks)):\n            case (!($D.callbacks.finished)):\n\n            case (!($D.window)):\n            case (!($D.document)):\n            case (!($D.document.body)):\n\n            case (!($D.jQuery)):\n\n                if ($D.debug)\n                {\n                    console.log(!($D.callbacks));\n                    console.log(!($D.callbacks.finished));\n\n                    console.log(!($D.window));\n                    console.log(!($D.document));\n                    console.log(!($D.document.body));\n\n                    console.log(!($D.jQuery));\n                }\n\n                \/\/  something's wrong\n                return false;\n        }\n\n    \/\/  required vars }\n\n    \/\/  global vars {\n    \/\/  =============\n\n        $CJ = $D.jQuery;\n\n        $D.$window = $CJ($D.window);\n        $D.$document = $CJ($D.document);\n\n    \/\/  global vars }\n\n    \/\/  parse options {\n    \/\/  ===============   \n\n\t\t$D.parseOptions =\n\t\t{\n\t\t\t'_elements_ignore': \t\t\t        '|button|input|select|textarea|optgroup|command|datalist|--|frame|frameset|noframes|--|style|link|script|noscript|--|canvas|applet|map|--|marquee|area|base|',\n\t\t\t'_elements_ignore_id': \t\t\t\t\t'|evernote-content|evernote-attributes-content|evernote-share-content|evernoteErrorPopup|evernote-post-clip-content|',\n\t\t\t'_elements_ignore_tag': \t\t        '|form|fieldset|details|dir|--|center|font|span|',\n\n\t\t\t'_elements_container': \t\t\t        '|body|--|article|section|--|div|--|td|--|li|--|dd|dt|',\n            '_elements_self_closing': \t\t        '|br|hr|--|img|--|col|--|source|--|embed|param|--|iframe|',\n\n\t\t\t'_elements_visible': \t\t\t        '|article|section|--|ul|ol|li|dd|--|table|tr|td|--|div|--|p|--|h1|h2|h3|h4|h5|h6|--|span|',\n\t\t\t'_elements_too_much_content': \t        '|b|i|em|strong|--|h1|h2|h3|h4|h5|--|td|',\n\t\t\t'_elements_link_density':\t\t        '|div|--|table|ul|ol|--|section|aside|header|',\n\t\t\t'_elements_floating':\t\t\t        '|div|--|table|',\n\t\t\t'_elements_above_target_ignore':        '|br|--|ul|ol|dl|--|table|',\n\n            '_unskippable_attribute':               'clearly__unskippable_element',\n            '_unskippable_attribute_value':         'yes',\n\n            '_use_document_title_attribute':        'clearly__use_document_title_as_article_title',\n            '_use_document_title_attribute_value':  'yes',\n\n            '_elements_keep_attributes':\n\t\t\t{\n\t\t\t\t'a': \t\t['href', 'title', 'name'],\n\t\t\t\t'img': \t\t['src', 'width', 'height', 'alt', 'title'],\n\n\t\t\t\t'video': \t['src', 'width', 'height', 'poster', 'audio', 'preload', 'autoplay', 'loop', 'controls'],\n\t\t\t\t'audio': \t['src', 'preload', 'autoplay', 'loop', 'controls'],\t\t \n\t\t\t\t'source': \t['src', 'type'],\n\n\t\t\t\t'object': \t['data', 'type', 'width', 'height', 'classid', 'codebase', 'codetype'],\t\t\t\t\t\t\n\t\t\t\t'param': \t['name', 'value'],\n\t\t\t\t'embed': \t['src', 'type', 'width', 'height', 'flashvars', 'allowscriptaccess', 'allowfullscreen', 'bgcolor'],\n\n\t\t\t\t'iframe':\t['src', 'width', 'height', 'frameborder', 'scrolling'],\n\n\t\t\t\t'td':\t\t['colspan', 'rowspan'],\t\t\t\n\t\t\t\t'th':\t\t['colspan', 'rowspan']\n\t\t\t},\n\n\t\t\t'_skip_link_from_domain': [\n                \/* international *\/     'doubleclick.net', 'fastclick.net', 'adbrite.com', 'adbureau.net', 'admob.com', 'bannersxchange.com', 'buysellads.com', 'impact-ad.jp', 'atdmt.com', 'advertising.com', 'serving-sys.com',\n                \/* japan *\/             'itmedia.jp', 'microad.jp', 'adplan-ds.com'\n\t\t\t],\n\n\t\t\t'_skip_image_from_domain': [\n                \/* international *\/     'googlesyndication.com', 'fastclick.net', '.2mdn.net', 'de17a.com', 'content.aimatch.com', 'bannersxchange.com', 'buysellads.com', 'atdmt.com', 'advertising.com', 'serving-sys.com',\n                \/* japan *\/             'impact-ad.jp', 'itmedia.jp', 'microad.jp', 'adplan-ds.com'\n\t\t\t],\n\n\t\t\t'_keep_video_from_domain': [\n                \/* video *\/     'youtube.com', 'youtube-nocookie.com', 'vimeo.com', 'hulu.com', 'flickr.com',\n                \/* other *\/     'yahoo.com', 'newsnetz.ch'\n\t\t\t]\n\t\t};\n\n    \/\/  parse options }\n\n    \/\/  debug {\n    \/\/  =======\n\n        $D.debug = ($D.debug || false);\n\t\t$D.debugRemembered = {};\n        $D.debugTimers = [];\n\n\t\tif ($D.debug)\n\t\t{\n\t\t    \/\/  writeLog\n\t\t    \/\/  ========\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase (!(!($D.window.console &#038;&#038; $D.window.console.log))):    $D.writeLog = function (msg) { $D.window.console.log(msg); };       break;\n\t\t\t\t\tcase (!(!($D.window.opera &#038;&#038; $D.window.opera.postError))):  $D.writeLog = function (msg) { $D.window.opera.postError(msg); };   break;\n\t\t\t\t\tdefault:                                                    $D.writeLog = function (msg) {};                                    break;\n\t\t\t\t}\n\n            \/\/  log\n            \/\/  ===\n                $D.log = function ()\n                {\n                    if ($D.debug); else { return; }\n                    for (var i=0, il=arguments.length; i<il ; i++) { $D.writeLog(arguments[i]); }\n                    $D.writeLog('-----------------------------------------');\n                };\n\n            \/\/  remember\n            \/\/  ========\n                $D.debugRemember = function (_k, _v)\n                {\n                    $D.debugRemembered[_k] = _v;\n                };\n\n            \/\/  outline\n            \/\/  =======\n                $D.debugOutline = function (_element, _category, _reason)\n                {\n                    var _outline = '#ff5500', _background = 'rgba(255, 85, 0, 0.5)';\n\n                    switch (true)\n                    {\n                        case (!$D.debug):\n                        case (!(_element.nodeType === 1)):\n                        case (!(_element.tagName > '')):\n                        case (_element.tagName.toLowerCase() == 'onject'):\n                        case (_element.tagName.toLowerCase() == 'embed'):\n                            return;\n                    }\n\n                    switch (true)\n                    {\n                        case (_category == 'target' &#038;&#038; _reason == 'first'):                 _outline = '#00cc00'; _background = 'rgba(0, 255, 0, 0.5)';         break;\n                        case (_category == 'target' &#038;&#038; _reason == 'second'):                _outline = '#0000cc'; _background = 'rgba(0, 0, 255, 0.5)';         break;\n\n                        case (_category == 'target' &#038;&#038; _reason == 'next-page'):             _outline = '#FF80C0'; _background = 'rgba(255, 128, 192, 0.5)';     break;\n                        case (_category == 'target' &#038;&#038; _reason == 'add-above'):             _outline = '#804000'; _background = 'rgba(128, 64, 0, 0.5)';        break;\n\n                        case (_category == 'clean-before' &#038;&#038; _reason == 'floating'):        _outline = '#808080'; _background = 'rgba(128, 128, 128, 0.5)';     break;\n                        case (_category == 'clean-after' &#038;&#038; _reason == 'missing-density'):  _outline = '#C0C0C0'; _background = 'rgba(192, 192, 192, 0.5)';     break;\n                        case (_category == 'clean-after' || _category == 'clean-before'):   _outline = '#000000'; _background = 'rgba(0, 0, 0, 0.5)';           break;\n                    }\n\n                    \/\/  do\n                    $CJ(_element).attr('readable__outline', (_category + ': ' + _reason));\n                    $CJ(_element).css({ 'outline': '5px solid ' + _outline, 'background-color': '' + _background });\n                };\n\n\t\t\/\/\ttimers\n\t\t\/\/\t======\n\n\t\t\t$D.debugTimerStart = function (timerName)\n\t\t\t{\n\t\t\t\t$D.debugTimers.push({\n\t\t\t\t\t'name': timerName,\n\t\t\t\t\t'start': (new Date()).getTime()\n\t\t\t\t});\n\t\t\t};\n\n\t\t\t$D.debugTimerEnd = function ()\n\t\t\t{\n\t\t\t\tvar _t = $D.debugTimers.pop(), _time = ((new Date()).getTime() - _t.start);\n\t\t\t\t$D.log('TIMER \/ '+_t.name+': ' + _time);\n\t\t\t\treturn _time;\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n            $D.writeLog \t\t= function () { return false; };\n            $D.log \t\t\t\t= function () { return false; };\n            $D.debugRemember \t= function () { return false; };\n            $D.debugOutline \t= function () { return false; };\n            $D.debugTimerStart \t= function () { return false; };\n            $D.debugTimerEnd \t= function () { return false; };\n        }\n\n    \/\/  debug }\n\n    \/\/  language {\n    \/\/  ==========\n\n        \/\/  default\n        $D.language = 'general';\n\n        \/\/  text to test\n        \/\/  ============\n\n            \/\/  title\n            $D.textForlanguageDetection = $D.document.title;\n\n            \/\/  snippets\n            \/\/  ...\n\n        \/\/  check\n        \/\/  =====\n            switch (true)\n            {\n                case ($D.textForlanguageDetection.match(\/([\\u3000])\/gi) != null):\n                case ($D.textForlanguageDetection.match(\/([\\u3001])\/gi) != null):\n                case ($D.textForlanguageDetection.match(\/([\\u3002])\/gi) != null):\n                case ($D.textForlanguageDetection.match(\/([\\u301C])\/gi) != null):\n                    $D.language = 'cjk';\n                    break;\n            }\n\n    \/\/  language }\n\n    \/\/  rtl {\n    \/\/  =====\n\n        \/\/  flags\n        $D.rtl = false;\n        $D.maybeRTL = false;\n\n        \/\/  on\/off\n        $D.makeRTL = function () { $D.rtl = true; };\n        $D.makeNotRTL = function () { $D.rtl = false; };\n\n        \/\/\tdetect\n\t\t(function ()\n\t\t{\n\t\t\t\/\/\tdefinitely\n\t\t\t$D.$document.find('html, body').each(function (_i, _e)\n\t\t\t{\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase ($CJ(_e).attr('dir') == 'rtl'):\n\t\t\t\t\tcase ($CJ(_e).css('direction') == 'rtl'):\n\t\t\t\t\tcase ($CJ(_e).attr('lang') == 'he'):\n\t\t\t\t\tcase ($CJ(_e).attr('lang') == 'he-il'):\n\t\t\t\t\tcase ($CJ(_e).attr('lang') == 'ar'):\n\t\t\t\t\tcase ($CJ(_e).attr('lang') == 'ur'):\n\t\t\t\t\t\t$D.makeRTL();\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t\/\/\tmaybe?\n            if (true\n                &#038;&#038; (!$D.rtl) \n                &#038;&#038; ($D.$document.find(\"div[dir='rtl'], table[dir='rtl'], td[dir='rtl']\").length > 0)\n            ) { $D.maybeRTL = true; }\n\t\t}\n\t\t)();\n\n    \/\/  rtl }\n\n    \/\/  measure text {\n    \/\/  ==============\n\n        \/\/\tasian languages\n        \/\/\t===============\n        \/\/\t    http:\/\/msdn.microsoft.com\/en-us\/goglobal\/bb688158\n        \/\/\t    http:\/\/en.wikipedia.org\/wiki\/Japanese_punctuation\n        \/\/\t    http:\/\/en.wikipedia.org\/wiki\/Japanese_typographic_symbols\n        \/\/\t    http:\/\/unicode.org\/charts\/PDF\/U3000.pdf\n        \/\/\t    CJK: Chnese, Japanese, Korean -- HAN character set\n\n        \/\/\tlength\n        \/\/\t======\n            $D.measureText__getTextLength = function (_the_text)\n            {\n                var _text = _the_text;\n\n                    _text = _text.replace(\/[\\s\\n\\r]+\/gi, '');\n                    \/\/_text = _text.replace(\/\\d+\/, '');\n\n                return _text.length;\n            };\n\n        \/\/\tword count\n        \/\/\t==========\n            $D.measureText__getWordCount = function (_the_text)\n            {\n                var _text = _the_text;\n\n                \/\/\tdo stuff\n                \/\/\t========\n                    _text = _text.replace(\/[\\s\\n\\r]+\/gi, ' ');\n\n                    _text = _text.replace(\/([.,?!:;()\\[\\]'\"\"-])\/gi, ' $1 ');\n\n                    _text = _text.replace(\/([\\u3000])\/gi, \t\t\t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u3001])\/gi, \t\t\t\t'[=words(2)]');\n                    _text = _text.replace(\/([\\u3002])\/gi, \t\t\t\t'[=words(4)]');\n                    _text = _text.replace(\/([\\u301C])\/gi, \t\t\t\t'[=words(2)]');\n                    _text = _text.replace(\/([\\u2026|\\u2025])\/gi, \t\t'[=words(2)]');\n                    _text = _text.replace(\/([\\u30FB\\uFF65])\/gi, \t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u300C\\u300D])\/gi, \t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u300E\\u300F])\/gi,\t\t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u3014\\u3015])\/gi,\t\t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u3008\\u3009])\/gi,\t\t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u300A\\u300B])\/gi, \t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u3010\\u3011])\/gi, \t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u3016\\u3017])\/gi, \t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u3018\\u3019])\/gi, \t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u301A\\u301B])\/gi, \t\t'[=words(1)]');\n                    _text = _text.replace(\/([\\u301D\\u301E\\u301F])\/gi, \t'[=words(1)]');\n                    _text = _text.replace(\/([\\u30A0])\/gi, \t\t\t\t'[=words(1)]');\n\n                \/\/\tcount\n                \/\/\t=====\n                    var \n                        _count = 0,\n                        _words_match = _text.match(\/([^\\s\\d]{3,})\/gi)\n                    ;\t\n\n                    \/\/\tadd match\n                    _count += (_words_match != null ? _words_match.length : 0);\n\n                    \/\/\tadd manual count\n                    _text.replace(\/\\[=words\\((\\d)\\)\\]\/, function (_match, _plus) { _count += (5 * parseInt(_plus)); });\n\n                \/\/\treturn\n                \/\/\t======\n                    return _count;\n            };\n\n        \/\/\tlevenshtein\n        \/\/\t===========\t\n            $D.levenshteinDistance = function (str1, str2)\n            {\n                var l1 = str1.length, l2 = str2.length, i = 0, j = 0, d = [];\n\n                if (Math.min(l1, l2) === 0)\n                    { return Math.max(l1, l2); }\n\n                for (i = 0 ; i <= l1 ; i++)\n                    { d[i] = []; d[i][0] = i; }\n\n                for (j = 0 ; j <= l2 ; j++)\n                    { d[0][j] = j; }\n\n                for (i = 1 ; i <= l1 ; i++)\n                    { for (j = 1 ; j <= l2 ; j++) { d[i][j] = Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + (str1.charAt(i - 1) === str2.charAt(j - 1) ? 0 : 1)); } }\n\n                return d[l1][l2];\n            };\n\n        \/\/\tget first fragment\n        \/\/\t==================\n            $D.nextPage__getFirstFragment = function (_html)\n            {\n                \/\/  remove all tags\n                _html = _html.replace(\/<[^>]+?>\/gi, '');\n\n                \/\/  normalize spaces\n                _html = _html.replace(\/\\s+\/gi, ' ');\n\n                \/\/  return first 1000 characters\n                return _html.substr(0, 2000);\n            };\n\n    \/\/  measure text }\n\n    \/\/  hidden node {\n    \/\/  =============\n\n        $D.isNodeHidden = function (_node, _tag_name)\n        {\n            switch (true)\n            {\n                case (_node.offsetWidth > 0):\n                case (_node.offsetHeight > 0):\n                    break;\n\n                default:\n                    switch (true)\n                    {\n                        case (_node.offsetLeft > 0):\n                        case (_node.offsetTop > 0):\n                            break;\n\n                        default:\n                            \/\/  exclude inline DIVs -- which, stupidly, don't have a width\/height\n                            if (true\n                                &#038;&#038; (_tag_name == 'div') \n                                &#038;&#038; ((_node.style.display || $CJ.css( _node, \"display\" )) == 'inline')\n                            ) { break; }\n\n                            \/\/  it's hidden\n                            return true;\n                    }\n                    break;\n            }\n\n            \/\/  it's not hidden\n            return false;\n        };\n\n    \/\/  hidden node }\n\n    \/\/  compute points for candidate {\n    \/\/  ==============================\n\n        $D.getContent__computePointsForCandidate__do = function (_ratio_remaining, _power, _ratio, _points_history)\n        {\n            var \n                _points_remaining = (_points_history[0] * _ratio_remaining),\n                _points_to_compute = (_points_history[0] - _points_remaining)\n            ;\n\n            if (_ratio < 0)\n            {\n                \/\/_points_return = (0.75 * _points_remaining);\n                _points_return = _points_remaining;\n            }\n            else\n            {\n                _points_return = 0\n                    + _points_remaining\n                    + (_points_to_compute * Math.pow(_ratio, _power))\n                ;\n            }\n\n            \/\/\tadd\n            _points_history.unshift(_points_return);\n        };\n\n    \/\/  compute points for candidate }\n\n    \/\/  process candidates (first) {\n    \/\/  ============================\n\n        $D.getContent__computeDetailsForCandidate__first = function (_e, _main)\n        {\n            var _r = {};\n\n            \/\/\tbad candidate\n            \/\/\t=============\n                if (_e._is__bad) { return _r; }\n\n            \/\/\tparagraphs\n            \/\/\t==========\n                _r['_count__lines_of_65_characters'] = (_e._length__plain_text \/ 65);\n                _r['_count__paragraphs_of_3_lines'] =  (_r._count__lines_of_65_characters \/ 3);\n                _r['_count__paragraphs_of_5_lines'] =  (_r._count__lines_of_65_characters \/ 5);\n\n                _r['_count__paragraphs_of_50_words'] = (_e._count__plain_words \/ 50);\n                _r['_count__paragraphs_of_80_words'] = (_e._count__plain_words \/ 80);\n\n            \/\/\ttotal text\n            \/\/\t==========\n                _r['_ratio__length__plain_text_to_total_plain_text'] =  (_e._length__plain_text \/ _main._length__plain_text);\n                _r['_ratio__count__plain_words_to_total_plain_words'] = (_e._count__plain_words \/ _main._count__plain_words);\n\n            \/\/\tlinks\n            \/\/\t=====\n                _r['_ratio__length__links_text_to_plain_text'] =  (_e._length__links_text \/ _e._length__plain_text);\n                _r['_ratio__count__links_words_to_plain_words'] = (_e._count__links_words \/ _e._count__plain_words);\n\n                _r['_ratio__length__links_text_to_all_text'] =  (_e._length__links_text \/ _e._length__all_text);\n                _r['_ratio__count__links_words_to_all_words'] = (_e._count__links_words \/ _e._count__all_words);\n\n                _r['_ratio__length__links_text_to_total_links_text'] =  (_e._length__links_text \/ (_main._length__links_text + 1));\n                _r['_ratio__count__links_words_to_total_links_words'] = (_e._count__links_words \/ (_main._count__links_words + 1));\n\n                _r['_ratio__count__links_to_total_links'] = (_e._count__links \/ (_main._count__links + 1));\n                _r['_ratio__count__links_to_plain_words'] = ((_e._count__links * 2) \/ _e._count__plain_words);\n\n            \/\/\ttext above\n            \/\/\t==========\n                var \n                    _divide__candidates = Math.max(2, Math.ceil(_e._count__above_candidates * 0.5)),\n\n                    _above_text = ((0\n                        + (_e._length__above_plain_text * 1)\n                        + (_e._length__above_plain_text \/ _divide__candidates)\n                    ) \/ 2),\n\n                    _above_words = ((0\n                        + (_e._count__above_plain_words * 1)\n                        + (_e._count__above_plain_words \/ _divide__candidates)\n                    ) \/ 2)\n                ;\n\n                _r['_ratio__length__above_plain_text_to_total_plain_text'] =  (_above_text \/ _main._length__plain_text);\n                _r['_ratio__count__above_plain_words_to_total_plain_words'] = (_above_words \/ _main._count__plain_words);\n\n            \/\/\tcandidates\n            \/\/\t==========\n                _r['_ratio__count__candidates_to_total_candidates'] = (_e._count__candidates \/ (_main._count__candidates + 1));\n                _r['_ratio__count__containers_to_total_containers'] = (_e._count__containers \/ (_main._count__containers + 1));\n\n            \/\/\treturn\n            \/\/\t======\n                return _r;\n        };    \n\n        $D.getContent__computePointsForCandidate__first = function (_e, _main)\n        {\n            var \n                _details = _e.__candidate_details,\n                _points_history = [],\n                _really_big = ((_main._length__plain_text \/ 65) > 250)\n            ;\n\n            \/\/\tbad candidate\n            if (_e._is__bad) { return [0]; }\n\n            \/\/\tthe basics\n            \/\/\t==========\n                _points_history.unshift(((0\n                    + (_details._count__paragraphs_of_3_lines)\n                    + (_details._count__paragraphs_of_5_lines * 1.5)\n                    + (_details._count__paragraphs_of_50_words)\n                    + (_details._count__paragraphs_of_80_words * 1.5)\n                    + (_e._count__images_large * 3)\n                    - ((_e._count__images_skip + _e._count__images_small) * 0.5)\n                ) * 1000));\n\n                \/\/  negative\n                if (_points_history[0] < 0) { return [0]; }\n\n            \/\/  candidates, containers, pieces\n            \/\/  ==============================\n                var \n                    _divide__pieces =     Math.max(5,  Math.ceil(_e._count__pieces *     0.25)),\n                    _divide__candidates = Math.max(5,  Math.ceil(_e._count__candidates * 0.25)),\n                    _divide__containers = Math.max(10, Math.ceil(_e._count__containers * 0.25))\n                ;\n\n                _points_history.unshift(((0\n                    + (_points_history[0] * 3)\n                    + (_points_history[0] \/ _divide__pieces)\n                    + (_points_history[0] \/ _divide__candidates)\n                    + (_points_history[0] \/ _divide__containers)\n                ) \/ 6));\n\n            \/\/\ttotal text\n            \/\/\t==========\n                $D.getContent__computePointsForCandidate__do(0.10, 2, (1 - (1 - _details._ratio__length__plain_text_to_total_plain_text)), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 2, (1 - (1 - _details._ratio__count__plain_words_to_total_plain_words)), _points_history);\n\n                if (_really_big) {\n                $D.getContent__computePointsForCandidate__do(0.10, 4, (1 - (1 - _details._ratio__length__plain_text_to_total_plain_text)), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 4, (1 - (1 - _details._ratio__count__plain_words_to_total_plain_words)), _points_history);\n                }\n\n            \/\/\ttext above\n            \/\/\t==========\n                $D.getContent__computePointsForCandidate__do(0.10, 5, (1 - _details._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 5, (1 - _details._ratio__count__above_plain_words_to_total_plain_words), _points_history);\n\n                if (_really_big) {\n                $D.getContent__computePointsForCandidate__do(0.10, 10, (1 - _details._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 10, (1 - _details._ratio__count__above_plain_words_to_total_plain_words), _points_history);\n                }\n\n            \/\/\tlinks outer\n            \/\/\t===========\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__length__links_text_to_total_links_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__links_words_to_total_links_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__links_to_total_links), _points_history);\n\n            \/\/  links inner\n            \/\/  ===========\n                var __lr = ($D.language == 'cjk' ? 0.75 : 0.50);\n\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__length__links_text_to_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_words_to_plain_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__length__links_text_to_all_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_words_to_all_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_to_plain_words), _points_history);\n\n            \/\/\tcandidates, containers, pieces\n            \/\/\t==============================\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__candidates_to_total_candidates), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__containers_to_total_containers), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__pieces_to_total_pieces), _points_history);\n\n            \/\/\treturn -- will get [0] as the actual final points\n            \/\/\t======\n                return _points_history;\n        };    \n\n        $D.getContent__processCandidates__first = function (_candidatesToProcess)\n        {\n            \/\/\tprocess this var\n            \/\/\t================\n                var _candidates = _candidatesToProcess;\n\n            \/\/\tsort _candidates -- the lower in the dom, the closer to position 0\n            \/\/\t================\n                _candidates.sort(function (a, b)\n                {\n                    switch (true)\n                    {\n                        case (a.__index < b.__index): return -1;\n                        case (a.__index > b.__index): return 1;\n                        default: return 0;\n                    }\n                });\n\n            \/\/\tget first\n            \/\/\t=========\n                var\t_main = _candidates[0]\n                if ($D.debug) { $D.log('should be body', _main, _main.__node); }\n\n            \/\/\tpieces of text -- and points computation\n            \/\/\t==============\n                for (var i=0, _i=_candidates.length; i<_i; i++)\n                {\n                    \/\/\tpieces\n                    \/\/\t======\n                        var \n                            _count__pieces = 0,\n                            _array__pieces = []\n                        ;\n\n                        for (var k=i, _k=_candidates.length; k<_k; k++)\n                        {\n                            if (_candidates[k]._count__candidates > 0) { continue; }\n                            if ($CJ.contains(_candidates[i].__node, _candidates[k].__node)); else { continue; }\n\n                            \/\/\tstore piece, if in debug mode\n                            if ($D.debug) { _array__pieces.push(_candidates[k]); }\n\n                            \/\/\tincement pieces count\n                            _count__pieces++;\n                        }\n\n                    \/\/\tcandidate details\n                    \/\/\t=================\n                        _candidates[i]['__candidate_details'] = $D.getContent__computeDetailsForCandidate__first(_candidates[i], _main);\n\n                    \/\/\tpieces -- do this here because _main doesn't yet have a pieces count\n                    \/\/\t======\n\n                        \/\/\tset pieces\n                        _candidates[i]['_count__pieces'] = _count__pieces;\n                        _candidates[i]['_array__pieces'] = _array__pieces;\n\n                        \/\/\tpieces ratio\n                        _candidates[i]['__candidate_details']['_ratio__count__pieces_to_total_pieces'] = (_count__pieces \/ (_candidates[0]._count__pieces + 1));\n\n                    \/\/  check some more\n                    \/\/  ===============\n                    \/*    switch (true)\n                        {\n                            case (($D.language != 'cjk') &#038;&#038; (_candidates[i]['__candidate_details']['_ratio__length__links_text_to_plain_text'] > 1)):\n                            case (($D.language != 'cjk') &#038;&#038; (_candidates[i]['__candidate_details']['_ratio__count__links_words_to_plain_words'] > 1)):\n                                _candidates[i]._is__bad = true;\n                                break;\n                        }\n                    *\/\n\n                    \/\/\tpoints\n                    \/\/\t======\n                        _candidates[i].__points_history = $D.getContent__computePointsForCandidate__first(_candidates[i], _main);\n                        _candidates[i].__points = _candidates[i].__points_history[0];\n                }\n\n            \/\/\tsort _candidates -- the more points, the closer to position 0\n            \/\/\t================\n                _candidates.sort(function (a, b)\n                {\n                    switch (true)\n                    {\n                        case (a.__points > b.__points): return -1;\n                        case (a.__points < b.__points): return 1;\n                        default: return 0;\n                    }\n                });\n\n            \/\/\treturn\n            \/\/\t======\n                return _candidates;\t\n        };    \n\n    \/\/  process candidates (first) }\n\n    \/\/  process candidates (second) {\n    \/\/  =============================\n\n        $D.getContent__computePointsForCandidate__second = function (_e, _main)\n        {\n            var \n                _details = _e.__candidate_details,\n                _details_second = _e.__candidate_details_second,\n                _points_history = []\n            ;\n\n            \/\/\tbad candidate\n            if (_e._is__bad) { return [0]; }\n\n            \/\/\tget initial points\n            \/\/\t==================\n                _points_history.unshift(_e.__points_history[(_e.__points_history.length-1)]);\n\n            \/\/  candidates, containers, pieces\n            \/\/  ==============================\n                var \n                    _divide__pieces =     Math.max(5,  Math.ceil(_e._count__pieces *     0.25)),\n                    _divide__candidates = Math.max(5,  Math.ceil(_e._count__candidates * 0.25)),\n                    _divide__containers = Math.max(10, Math.ceil(_e._count__containers * 0.25))\n                ;\n\n                _points_history.unshift(((0\n                    + (_points_history[0] * 3)\n                    + ((_points_history[0] \/ _divide__pieces) * 2)\n                    + ((_points_history[0] \/ _divide__candidates) * 2)\n                    + ((_points_history[0] \/ _divide__containers) * 2)\n                ) \/ 9));\n\n            \/\/\ttotal text\n            \/\/\t==========\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - (1 - _details_second._ratio__length__plain_text_to_total_plain_text)), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - (1 - _details_second._ratio__count__plain_words_to_total_plain_words)), _points_history);\n\n            \/\/\ttext above\n            \/\/\t==========\n                var __ar = ($D.language == 'cjk' ? 0.50 : 0.10);\n\n                $D.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__count__above_plain_words_to_total_plain_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__length__above_plain_text_to_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__count__above_plain_words_to_plain_words), _points_history);\n\n            \/\/\tlinks outer\n            \/\/\t===========\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details_second._ratio__count__links_to_total_links), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details_second._ratio__length__links_text_to_total_links_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details_second._ratio__count__links_words_to_total_links_words), _points_history);\n\n            \/\/\tlinks inner\n            \/\/\t===========\n                var __lr = ($D.language == 'cjk' ? 0.75 : 0.50);\n\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__length__links_text_to_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_words_to_plain_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details_second._ratio__length__links_text_to_all_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details_second._ratio__count__links_words_to_all_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details_second._ratio__count__links_to_plain_words), _points_history);\n\n            \/\/\tcandidates, containers, pieces\n            \/\/\t==============================\n                $D.getContent__computePointsForCandidate__do(0.10, 2, (1 - _details_second._ratio__count__candidates_to_total_candidates), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 2, (1 - _details_second._ratio__count__containers_to_total_containers), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 2, (1 - _details_second._ratio__count__pieces_to_total_pieces), _points_history);\n\n            \/\/\treturn -- will get [0] as the actual final points\n            \/\/\t======\n                return _points_history;\n        };    \n\n        $D.getContent__computeDetailsForCandidate__second = function (_e, _main)\n        {\n            var _r = {};\n\n            \/\/\tbad candidate\n            \/\/\t=============\n                if (_e._is__bad) { return _r; }\n\n            \/\/\ttotal text\n            \/\/\t==========\n                _r['_ratio__length__plain_text_to_total_plain_text'] = \t(_e._length__plain_text \/ _main._length__plain_text);\n                _r['_ratio__count__plain_words_to_total_plain_words'] = (_e._count__plain_words \/ _main._count__plain_words);\n\n            \/\/\tlinks\n            \/\/\t=====\n                _r['_ratio__length__links_text_to_all_text'] =\t(_e._length__links_text \/ _e._length__all_text);\n                _r['_ratio__count__links_words_to_all_words'] = (_e._count__links_words \/ _e._count__all_words);\n\n                _r['_ratio__length__links_text_to_total_links_text'] = \t(_e._length__links_text \/ (_main._length__links_text + 1));\n                _r['_ratio__count__links_words_to_total_links_words'] = (_e._count__links_words \/ (_main._count__links_words + 1));\n\n                _r['_ratio__count__links_to_total_links'] = (_e._count__links \/ (_main._count__links + 1));\n                _r['_ratio__count__links_to_plain_words'] = ((_e._count__links * 2) \/ _e._count__plain_words);\n\n            \/\/\ttext above\n            \/\/\t==========\n                var \n                    _divide__candidates = Math.max(2, Math.ceil((_e._count__above_candidates - _main._count__above_candidates) * 0.5)),\n\n                    _above_text = ((0\n                        + (_e.__second_length__above_plain_text * 1)\n                        + (_e.__second_length__above_plain_text \/ _divide__candidates)\n                    ) \/ 2),\n\n                    _above_words = ((0\n                        + (_e.__second_count__above_plain_words * 1)\n                        + (_e.__second_count__above_plain_words \/ _divide__candidates)\n                    ) \/ 2)\n                ;\n\n                _r['_ratio__length__above_plain_text_to_total_plain_text'] =  (_above_text \/ _main._length__plain_text);\n                _r['_ratio__count__above_plain_words_to_total_plain_words'] = (_above_words \/ _main._count__plain_words);\n\n                _r['_ratio__length__above_plain_text_to_plain_text'] = \t(_above_text \/ _e._length__plain_text);\n                _r['_ratio__count__above_plain_words_to_plain_words'] = (_above_words \/ _e._count__plain_words);\n\n            \/\/\tcandidates\n            \/\/\t==========\n                _r['_ratio__count__candidates_to_total_candidates'] = (Math.max(0, (_e._count__candidates - (_main._count__candidates * 0.25))) \/ (_main._count__candidates + 1));\n                _r['_ratio__count__containers_to_total_containers'] = (Math.max(0, (_e._count__containers - (_main._count__containers * 0.25))) \/ (_main._count__containers + 1));\n                _r['_ratio__count__pieces_to_total_pieces'] =         (Math.max(0, (_e._count__pieces - (_main._count__pieces * 0.25))) \/ (_main._count__pieces + 1));\n\n            \/\/\treturn\n            \/\/\t======\n                return _r;\n        };    \n\n        $D.getContent__processCandidates__second = function (_processedCandidates)\n        {\n            var \n                _candidates = _processedCandidates,\n                _main = _candidates[0]\n            ;\n\n            \/\/\tonly get children of target\n            \/\/\t===========================\n                _candidates = $CJ.map(_candidates, function (_element, _index)\n                {\n                    switch (true)\n                    {\n                        case (!(_index > 0)):\n                        case (!($CJ.contains(_main.__node, _element.__node))):\n                            return null;\n\n                        default:\n                            return _element;\n                    }\n                });\n\n                \/\/  add main - to amke sure the result is never blank\n                _candidates.unshift(_main);\n\n            \/\/\tsort _candidates -- the lower in the dom, the closer to position 0\n            \/\/\t================\n                _candidates.sort(function (a, b)\n                {\n                    switch (true)\n                    {\n                        case (a.__index < b.__index): return -1;\n                        case (a.__index > b.__index): return 1;\n                        default: return 0;\n                    }\n                });\n\n            \/\/\tsecond candidate computation\n            \/\/\t============================\n                for (var i=0, _i=_candidates.length; i<_i; i++)\n                {\n                    \/\/\tadditional numbers\n                    \/\/\t==================\n                        _candidates[i].__second_length__above_plain_text = (_candidates[i]._length__above_plain_text - _main._length__above_plain_text);\n                        _candidates[i].__second_count__above_plain_words = (_candidates[i]._count__above_plain_words - _main._count__above_plain_words);\n\n                    \/\/\tcandidate details\n                    \/\/\t=================\n                        _candidates[i]['__candidate_details_second'] = $D.getContent__computeDetailsForCandidate__second(_candidates[i], _main);\n\n                    \/\/\tcheck some more\n                    \/\/\t===============\n                    \/*\tswitch (true)\n                        {\n                            case (!(_candidates[i]['__candidate_details_second']['_ratio__count__plain_words_to_total_plain_words'] > 0.05)):\n                            case (!(_candidates[i]['__candidate_details_second']['_ratio__length__plain_text_to_total_plain_text'] > 0.05)):\n\n                            \/\/case (!(_candidates[i]['__candidate_details_second']['_ratio__count__above_plain_words_to_total_plain_words'] < 0.1)):\n                            \/\/case (!(_candidates[i]['__candidate_details_second']['_ratio__length__above_plain_text_to_total_plain_text'] < 0.1)):\n\n                            \/\/case (_candidates[i]['__candidate_details_second']['_ratio__length__above_plain_text_to_plain_text'] > 1):\n                            \/\/case (_candidates[i]['__candidate_details_second']['_ratio__count__above_plain_words_to_plain_words'] > 1):\n\n                                _candidates[i]._is__bad = true;\n                                \/\/\twil set points to 0, in points computation function\n                                break;\n                        }\n                    *\/\n\n                    \/\/\tpoints\n                    \/\/\t======\n                        _candidates[i].__points_history_second = $D.getContent__computePointsForCandidate__second(_candidates[i], _main);\n                        _candidates[i].__points_second = _candidates[i].__points_history_second[0];\n                }\n\n            \/\/\tsort _candidates -- the more points, the closer to position 0\n            \/\/\t================\n                _candidates.sort(function (a, b)\n                {\n                    switch (true)\n                    {\n                        case (a.__points_second > b.__points_second): return -1;\n                        case (a.__points_second < b.__points_second): return 1;\n                        default: return 0;\n                    }\n                });\n\n            \/\/\treturn\n            \/\/\t======\n                return _candidates;\t\n        };    \n\n    \/\/  process candidates (second) }\n\n    \/\/  process candidates (third) {\n    \/\/  ============================\n\n        $D.getContent__computePointsForCandidate__third = function (_e, _main)\n        {\n            var \n                _details = _e.__candidate_details,\n                _details_second = _e.__candidate_details_second,\n                _points_history = []\n            ;\n\n            \/\/\tbad candidate\n            if (_e._is__bad) { return [0]; }\n\n            \/\/\tget initial points\n            \/\/\t==================\n                _points_history.unshift(_e.__points_history[(_e.__points_history.length-1)]);\n\n            \/\/  candidates, containers, pieces\n            \/\/  ==============================\n                var \n                    _divide__pieces =     Math.max(2, Math.ceil(_e._count__pieces *     0.25)),\n                    _divide__candidates = Math.max(2, Math.ceil(_e._count__candidates * 0.25)),\n                    _divide__containers = Math.max(4, Math.ceil(_e._count__containers * 0.25))\n                ;\n\n                _points_history.unshift(((0\n                    + (_points_history[0] * 3)\n                    + ((_points_history[0] \/ _divide__pieces) * 2)\n                    + ((_points_history[0] \/ _divide__candidates) * 2)\n                    + ((_points_history[0] \/ _divide__containers) * 2)\n                ) \/ 9));\n\n            \/\/  total text\n            \/\/  ==========\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - (1 - _details_second._ratio__length__plain_text_to_total_plain_text)), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.75, 1, (1 - (1 - _details_second._ratio__count__plain_words_to_total_plain_words)), _points_history);\n\n            \/\/\ttext above\n            \/\/\t==========\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__above_plain_words_to_total_plain_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__length__above_plain_text_to_total_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__count__above_plain_words_to_total_plain_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__length__above_plain_text_to_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__count__above_plain_words_to_plain_words), _points_history);\n\n            \/\/\tlinks inner\n            \/\/\t===========\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__length__links_text_to_all_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__links_words_to_all_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__length__links_text_to_plain_text), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__links_words_to_plain_words), _points_history);\n\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__links_to_plain_words), _points_history);\n\n            \/\/\tcandidates, containers, pieces\n            \/\/\t==============================\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__candidates_to_total_candidates), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__containers_to_total_containers), _points_history);\n                $D.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__pieces_to_total_pieces), _points_history);\n\n            \/\/\treturn -- will get [0] as the actual final points\n            \/\/\t======\n                return _points_history;\n        };\n\n    \/\/  process candidates (third) }\n\n    \/\/  explore node and get stuff {\n    \/\/  ============================\n\n        $D.getContent__exploreNodeAndGetStuff = function (_nodeToExplore, _justExploring)\n        {\n            var\t\n                _global__element_index = 0,\n\n                _global__inside_link = false,\n                _global__inside_link__element_index = 0,\n\n                _global__length__above_plain_text = 0,\n                _global__count__above_plain_words = 0,\n                _global__length__above_links_text = 0,\n                _global__count__above_links_words = 0,\n                _global__count__above_candidates = 0,\n                _global__count__above_containers = 0,\n                _global__above__plain_text = '',\n                _global__above__links_text = '',\n\n                _return__containers = [],\n                _return__candidates = [],\n                _return__links = []\n            ;\n\n            \/\/\trecursive function\n            \/\/\t==================\n                var _recursive = function (_node)\n                {\n                    \/\/\tincrement index\n                    \/\/\tstarts with 1\n                    _global__element_index++;\n\n                    var \n                        _tag_name = (_node.nodeType === 3 ? '#text' : ((_node.nodeType === 1 &#038;&#038; _node.tagName &#038;&#038; _node.tagName > '') ? _node.tagName.toLowerCase() : '#invalid')),\n\t\t\t\t\t\t_node_id = (_node.id),\n                        _result =\n                        {\n                            '__index': _global__element_index, \n                            '__node': _node, \n\n                            '_is__container': \t\t($D.parseOptions._elements_container.indexOf('|'+_tag_name+'|') > -1),\n                            '_is__candidate': \t\tfalse,\n                            '_is__text': \t\t\tfalse,\n                            '_is__link': \t\t\tfalse,\n                            '_is__link_skip': \t\tfalse,\n                            '_is__image_small': \tfalse,\n                            '_is__image_medium': \tfalse,\n                            '_is__image_large': \tfalse,\n                            '_is__image_skip': \t\tfalse,\n                            '_is__unskippable':     false,\n\n                            '_debug__above__plain_text': _global__above__plain_text,\n                            '_debug__above__links_text': _global__above__links_text,\n\n                            '_length__above_plain_text': _global__length__above_plain_text,\n                            '_count__above_plain_words': _global__count__above_plain_words,\n\n                            '_length__above_links_text': _global__length__above_links_text,\n                            '_count__above_links_words': _global__count__above_links_words,\n\n                            '_length__above_all_text': \t(_global__length__above_plain_text + _global__length__above_links_text),\n                            '_count__above_all_words': \t(_global__count__above_plain_words + _global__count__above_links_words),\n\n                            '_count__above_candidates': _global__count__above_candidates,\n                            '_count__above_containers': _global__count__above_containers,\n\n                            '_length__plain_text': 0,\n                            '_count__plain_words': 0,\n\n                            '_length__links_text': 0,\n                            '_count__links_words': 0,\n\n                            '_length__all_text': 0,\n                            '_count__all_words': 0,\n\n                            '_count__containers': 0,\n                            '_count__candidates': 0,\n\n                            '_count__links': 0,\n                            '_count__links_skip': 0,\n\n                            '_count__images_small': 0,\n                            '_count__images_medium': 0,\n                            '_count__images_large': 0,\n                            '_count__images_skip': 0\n                        };\n\n                    \/\/  unskippable\n                    \/\/  ===========\n                        if (false\n                            || (_result._is__container)\n                            || ($D.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1)\n                        ) {\n                            var _unskip = _node.getAttribute($D.parseOptions._unskippable_attribute);\n                            if (_unskip == $D.parseOptions._unskippable_attribute_value) { _result._is__unskippable = true; }\n                        }\n\n                    \/\/\tfast return\n                    \/\/\t===========\n                        switch (true)\n                        {\n                            case ((_tag_name == '#invalid')):\n                            case (($D.parseOptions._elements_ignore.indexOf('|'+_tag_name+'|') > -1)):\n                                return false;\n\t\t\t\t\t\t\tcase (($D.parseOptions._elements_ignore_id.indexOf('|'+_node_id+'|') > -1)):\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treturn false;\t\t\t\t\t\t\t\t\n                            case (($D.parseOptions._elements_visible.indexOf('|'+_tag_name+'|') > -1)):\n                                if ($D.isNodeHidden(_node, _tag_name)) { return false; }\n                                break;\n\n                            \/\/\tself-closing -- with some exceptions\n                            case ($D.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1):\n                                switch (true)\n                                {\n                                    case ((_tag_name == 'img')): break;\n                                    default: return false;\n                                }\n                                break;\n                        }\n\n                    \/\/\tdo stuff\n                    \/\/\t========\n                        switch (true)\n                        {\n                            \/\/\ttext node\n                            case ((_tag_name == '#text')):\n                                \/\/\tmark\n                                _result._is__text = true;\n\n                                \/\/\tget\n                                var _nodeText = _node.nodeValue;\n\n                                \/\/\tresult\n                                _result._length__plain_text = $D.measureText__getTextLength(_nodeText);\n                                _result._count__plain_words = $D.measureText__getWordCount(_nodeText);\n\n                                if (_global__inside_link)\n                                {\n                                    _global__length__above_links_text += _result._length__plain_text;\n                                    _global__count__above_links_words += _result._count__plain_words;\t\t\t\t\t\n                                    if (false &#038;&#038; $D.debug) { _global__above__links_text += ' ' + _nodeText; }\n                                }\n                                else\n                                {\n                                    _global__length__above_plain_text += _result._length__plain_text;\n                                    _global__count__above_plain_words += _result._count__plain_words;\t\t\t\t\t\n                                    if (false &#038;&#038; $D.debug) { _global__above__plain_text += ' ' + _nodeText; }\n                                }\n\n                                \/\/\treturn text\n                                return _result;\n\n                            \/\/\tlink\n                            case (_tag_name == 'a'):\n                                var _href = '';\n\n                                try {\n                                    _href = _node.href\n                                } catch (e) {\n                                    _href = $CJ.attr('href');\n                                }\n\n                                \/\/\tsanity\n                                if (_href > ''); else { break; }\n                                if (_href.indexOf); else { break; }\n\n                                _result._is__link = true;\n\n                                \/\/\tskip\n                                for (var i=0, _i=$D.parseOptions._skip_link_from_domain.length; i<_i; i++)\n                                {\n                                    if (_href.indexOf($D.parseOptions._skip_link_from_domain[i]) > -1)\n                                        { _result._is__link_skip = true; break; }\n                                }\n\n                                \/\/\tinside link\n                                if (_global__inside_link); else\n                                {\n                                    _global__inside_link = true;\n                                    _global__inside_link__element_index = _result.__index;\n                                }\n\n                                \/\/\tdone\n                                _return__links.push(_result);\n                                break;\n\n                            \/\/\timage\n                            case (_tag_name == 'img'):\n\n                                \/\/\tskip\n                                if (_node.src &#038;&#038; _node.src.indexOf)\n                                {\n                                    for (var i=0, _i=$D.parseOptions._skip_image_from_domain.length; i<_i; i++)\n                                    {\n                                        if (_node.src.indexOf($D.parseOptions._skip_image_from_domain[i]) > -1)\n                                            { _result._is__image_skip = true; break; }\n                                    }\n                                }\n\n                                \/\/\tsize\n                                var\t_width = $CJ(_node).width(), _height = $CJ(_node).height();\n                                switch (true)\n                                {\n                                    case ((_width * _height) >= 50000):\n                                    case ((_width >= 350) &#038;&#038; (_height >= 75)):\n                                        _result._is__image_large = true;\n                                        break;\n\n                                    case ((_width * _height) >= 20000):\n                                    case ((_width >= 150) &#038;&#038; (_height >= 150)):\n                                        _result._is__image_medium = true;\n                                        break;\n\n                                    case ((_width <= 5) &#038;&#038; (_height <= 5)):\n                                        _result._is__image_skip = true;\n                                        break;\n\n                                    default:\n                                        _result._is__image_small = true;\n                                        break;\n                                }\n\n                                break;\n                        }\n\n                    \/\/\tchild nodes\n                    \/\/\t===========\n                        for (var i=0, _i=_node.childNodes.length; i<_i; i++)\n                        {\n                            var \n                                _child = _node.childNodes[i],\n                                _child_result = _recursive(_child)\n                            ;\n\n                            \/\/\tif false, continue\n                            if (_child_result); else { continue; }\n\n                            \/\/\tadd to result\n                            _result._count__links += \t\t\t_child_result._count__links + \t\t\t(_child_result._is__link ? 1 : 0);\n                            _result._count__links_skip += \t\t_child_result._count__links_skip + \t\t(_child_result._is__link_skip ? 1 : 0);\n\n                            _result._count__images_small += \t_child_result._count__images_small + \t(_child_result._is__image_small ? 1 : 0);\n                            _result._count__images_medium += \t_child_result._count__images_medium + \t(_child_result._is__image_medium ? 1 : 0);\n                            _result._count__images_large += \t_child_result._count__images_large + \t(_child_result._is__image_large ? 1 : 0);\n                            _result._count__images_skip += \t\t_child_result._count__images_skip + \t(_child_result._is__image_skip ? 1 : 0);\n\n                            _result._count__containers += \t\t_child_result._count__containers + \t\t(_child_result._is__container ? 1 : 0);\n                            _result._count__candidates += \t\t_child_result._count__candidates + \t\t(_child_result._is__candidate ? 1 : 0);\n\n                            _result._length__all_text += \t\t_child_result._length__plain_text + \t_child_result._length__links_text;\n                            _result._count__all_words += \t\t_child_result._count__plain_words + \t_child_result._count__links_words;\n\n                            \/\/\tplain text \/ link text\n                            switch (true)\n                            {\n                                case (_child_result._is__link):\n                                    \/\/\tno text to add\n                                    _result._length__links_text += (_child_result._length__plain_text + _child_result._length__links_text);\n                                    _result._count__links_words += (_child_result._count__plain_words + _child_result._count__links_words);\n                                    break;\n\n                                default:\n                                    _result._length__plain_text += \t\t\t_child_result._length__plain_text;\n                                    _result._count__plain_words += \t\t\t_child_result._count__plain_words;\n                                    _result._length__links_text += \t\t\t_child_result._length__links_text;\n                                    _result._count__links_words += \t\t\t_child_result._count__links_words;\n                                    break;\n                            }\n                        }\n\n                    \/\/\tafter child nodes\n                    \/\/\t=================\n\n                        \/\/\tmark as not in link anymore\n                        if (true\n                            &#038;&#038; (_result._is__link) \n                            &#038;&#038; (_global__inside_link__element_index == _result.__index)\n                        ) {\n                            _global__inside_link = false;\n                            _global__inside_link__element_index = 0;\n                        }\n\n                    \/\/\tadd to containers\n                    \/\/\t=================\n                        if (_result._is__container || ((_result.__index == 1) &#038;&#038; (_justExploring == true)))\n                        {\n                            \/\/\tadd to containers\n                            _return__containers.push(_result);\n\n                            \/\/  increase above containers\n                            if (_result._is__container) { _global__count__above_containers++; }\n\n                            \/\/\tadd to candidates\n                            if (_justExploring); else\n                            {\n                                switch (true)\n                                {\n                                    case (($D.language != 'cjk') &#038;&#038; ((_result._count__links * 2) >= _result._count__plain_words)):  \/* link ratio *\/\n\n                                    case (($D.language != 'cjk') &#038;&#038; (_result._length__plain_text < (65 \/ 3))):  \/* text length *\/\n                                    case (($D.language != 'cjk') &#038;&#038; (_result._count__plain_words < 5)):\t\t\t\/* words *\/\n\n                                    case (($D.language == 'cjk') &#038;&#038; (_result._length__plain_text < 10)):\t    \/* text length *\/\n                                    case (($D.language == 'cjk') &#038;&#038; (_result._count__plain_words < 2)):\t\t\t\/* words *\/\n\n                                    \/\/case (_result._length__plain_text == 0):    \/* no text *\/\n                                    \/\/case (_result._count__plain_words == 0):    \/* no words *\/\n\n                                    \/\/case (($D.language == 'cjk') &#038;&#038; ((_result._length__plain_text \/ 65 \/ 3) < 0.1)):\t\t\t\t\/* paragrahs of 3 lines *\/\n                                    \/\/case (($D.language != 'cjk') &#038;&#038; ((_result._count__plain_words \/ 50) < 0.5)):\t\t\t\t\t\/* paragraphs of 50 words *\/\n\n                                        \/\/\tnot a valid candidate\n                                        \/\/if (_tag_name == 'div') { $D.log('bad candidate', _result.__node); }\n\n                                        break;\n\n                                    default:\n                                        \/\/\tgood candidate\n                                        _result._is__candidate = true;\n                                        _return__candidates.push(_result);\n\n                                        \/\/  increase above candidates\n                                        _global__count__above_candidates++;\n\n                                        break;\n                                }\n\n                                \/\/\tspecial case for body -- if it was just skipped\n                                \/\/\t=====================\n                                    if ((_result.__index == 1) &#038;&#038; !(_result._is__candidate))\n                                    {\n                                        _result._is__candidate = true;\n                                        _result._is__bad = true;\n                                        _return__candidates.push(_result);\n                                    }\n                            }\n                        }\n\n                    \/\/\treturn\n                    \/\/\t======\n                        return _result;\n                };\n\n            \/\/\tactually do it\n            \/\/\t==============\n                _recursive(_nodeToExplore);\n\n            \/\/\tjust exploring -- return first thing\n            \/\/\t==============\n                if (_justExploring) { return _return__containers.pop(); }\n\n            \/\/\treturn containers list\n            \/\/\t======================\n                return {\n                    '_containers': \t_return__containers,\n                    '_candidates': \t_return__candidates,\n                    '_links': \t\t_return__links\n                };\n        };\n\n    \/\/  explore node and get stuff }\n\n    \/\/  build html for node {\n    \/\/  =====================\n\n        $D.getContent__buildHTMLForNode = function (_nodeToBuildHTMLFor, _custom_mode)\n        {\n            var \n                _global__element_index = 0,\n                _global__the_html = '',\n                _global__exploreNodeToBuildHTMLFor = $D.getContent__exploreNodeAndGetStuff(_nodeToBuildHTMLFor, true)\n            ;\n\n            \/\/\tcustom\n                switch (_custom_mode)\n                {\n                    case 'above-the-target':\n                        _global__exploreNodeToBuildHTMLFor = false;\n                        break;\n                }\n\n            \/\/\trecursive function\n            \/\/\t==================\n                var _recursive = function (_node)\n                {\n                    \/\/\tincrement index -- starts with 1\n                    \/\/\t===============\n                        _global__element_index++;\n\n                    \/\/\tvars\n                    \/\/\t====\n                        var \n                            _explored = false,\n                            _tag_name = (_node.nodeType === 3 ? '#text' : ((_node.nodeType === 1 &#038;&#038; _node.tagName &#038;&#038; _node.tagName > '') ? _node.tagName.toLowerCase() : '#invalid')),\n\t\t\t\t\t\t\t_node_id = _node.id,\n                            _pos__start__before = 0,\n                            _pos__start__after = 0,\n                            _pos__end__before = 0,\n                            _pos__end__after = 0\n                        ;\n\n                    \/\/\tfast return\n                    \/\/\t===========\n                        switch (true)\n                        {\n                            case ((_tag_name == '#invalid')):\n                            case (($D.parseOptions._elements_ignore.indexOf('|'+_tag_name+'|') > -1)):\n                                return;\n\t\t\t\t\t\t\tcase (($D.parseOptions._elements_ignore_id.indexOf('|'+_node_id+'|') > -1)):\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treturn;\t\t\t\t\t\t\t\t\t\n\n                            case (_tag_name == '#text'):\n                                _global__the_html += _node.nodeValue\n                                    .replace(\/<\/gi, '&lt;')\n                                    .replace(\/>\/gi, '&gt;')\n                                ;\n                                return;\n                        }\n\n                    \/\/\thidden\n                    \/\/\t======\n                        if (true\n                            &#038;&#038; ($D.parseOptions._elements_visible.indexOf('|'+_tag_name+'|') > -1)\n                            &#038;&#038; $D.isNodeHidden(_node, _tag_name)\n                        ) { return; }\n\n                    \/\/\tclean -- before\n                    \/\/\t=====\n\n                        \/\/\tobjects, embeds, iframes\n                        \/\/\t========================\n                            switch (_tag_name)\n                            {\n                                case ('object'):\n                                case ('embed'):\n                                case ('iframe'):\n                                    var \n                                        _src = (_tag_name == 'object' ? $CJ(_node).find(\"param[name='movie']\").attr('value') : $CJ(_node).attr('src')),\n                                        _skip = ((_src > '') ? false : true)\n                                    ;\n\n                                    if (_skip); else\n                                    {\n                                        \/\/\tdefault skip\n                                        _skip = true;\n\n                                        \/\/\tloop\n                                        for (var i=0, _i=$D.parseOptions._keep_video_from_domain.length; i<_i; i++)\n                                            { if (_src.indexOf($D.parseOptions._keep_video_from_domain[i]) > -1) { _skip = false; break; } }\n                                    }\n\n                                    \/\/\tskip?\n                                    if (_skip)\n                                    {\n                                        _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                        if (_explored &#038;&#038; _explored._is__unskippable); else\n                                        {\n                                            $D.debugOutline(_node, 'clean-before', 'object-embed-iframe');\n                                            return;\n                                        }\n                                    }\n\n                                    break;\n                            }\n\n                        \/\/\tskipped link\n                        \/\/\t============\n                            if (_tag_name == 'a' || _tag_name == 'li')\n                            {\n                                _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                if (_explored &#038;&#038; _explored._is__unskippable); else\n                                {\n                                    switch (true)\n                                    {\n                                        case (_explored._is__link_skip):\n                                        case (((_explored._count__images_small + _explored._count__images_skip) > 0) &#038;&#038; (_explored._length__plain_text < 65)):\n                                            $D.debugOutline(_node, 'clean-before', 'skip-link');\n                                            return;\n                                    }\n                                }\n                            }\n\n                        \/\/\tlink density\n                        \/\/\t============\n                            if ($D.parseOptions._elements_link_density.indexOf('|'+_tag_name+'|') > -1)\n                            {\n                                _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                if (_explored &#038;&#038; _explored._is__unskippable); else\n                                {\n                                    switch (true)\n                                    {\n                                        case (_explored._length__plain_text > (65 * 3 * 2)):\n                                        case ($D.language == 'cjk' &#038;&#038; (_explored._length__plain_text > (65 * 3 * 1))):\n                                        case (!(_explored._count__links > 1)):\n                                        case (_global__exploreNodeToBuildHTMLFor &#038;&#038; (_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.5):\n                                        case (_global__exploreNodeToBuildHTMLFor &#038;&#038; (_explored._count__plain_words \/ _global__exploreNodeToBuildHTMLFor._count__plain_words) > 0.5):\n                                        case ((_explored._length__plain_text == 0) &#038;&#038; (_explored._count__links == 1) &#038;&#038; (_explored._length__links_text < 65)):\n                                        case ((_explored._length__plain_text < 25) &#038;&#038; ((_explored._count__images_large + _explored._count__images_medium) > 0)):\n                                            break;\n\n                                        case ((_explored._length__links_text \/ _explored._length__all_text) < 0.5):\n                                            if (_explored._count__links > 0); else { break; }\n                                            if (_explored._count__links_skip > 0); else { break; }\n                                            if (((_explored._count__links_skip \/ _explored._count__links) > 0.25) &#038;&#038; (_explored._length__links_text \/ _explored._length__all_text) < 0.05) { break; }\n\n                                        default:\n                                            $D.debugOutline(_node, 'clean-before', 'link-density');\n                                            return;\n                                    }\n                                }\n                            }\t\n\n                        \/\/\tfloating\n                        \/\/\t========\n                            if ($D.parseOptions._elements_floating.indexOf('|'+_tag_name+'|') > -1)\n                            {\n                                _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                if (_explored &#038;&#038; _explored._is__unskippable); else\n                                {\n                                    switch (true)\n                                    {\n                                        case (_explored._length__plain_text > (65 * 3 * 2)):\n                                        case ($D.language == 'cjk' &#038;&#038; (_explored._length__plain_text > (65 * 3 * 1))):\n                                        case (_global__exploreNodeToBuildHTMLFor &#038;&#038; (_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.25):\n                                        case (_global__exploreNodeToBuildHTMLFor &#038;&#038; (_explored._count__plain_words \/ _global__exploreNodeToBuildHTMLFor._count__plain_words) > 0.25):\n                                        case ((_explored._length__plain_text < 25) &#038;&#038; (_explored._length__links_text < 25) &#038;&#038; ((_explored._count__images_large + _explored._count__images_medium) > 0)):\n                                        case (_node.getElementsByTagName &#038;&#038; (_explored._length__plain_text < (65 * 3 * 1)) &#038;&#038; ((_node.getElementsByTagName('h1').length + _node.getElementsByTagName('h2').length + _node.getElementsByTagName('h3').length + _node.getElementsByTagName('h4').length) > 0)):\n                                            break;\n\n                                        default:\n                                            var _float = $CJ(_node).css('float');\n                                            if (_float == 'left' || _float == 'right'); else { break; }\n                                            if ((_explored._length__links_text == 0) &#038;&#038; ((_explored._count__images_large + _explored._count__images_medium) > 0)) { break; }\n\n                                            $D.debugOutline(_node, 'clean-before', 'floating');\n                                            return;\n                                    }\n                                }\n                            }\n\n                        \/\/\tabove target\n                        \/\/\t============\n                            if (_custom_mode == 'above-the-target')\n                            {\n                                \/\/  is ignored?\n                                if ($D.parseOptions._elements_above_target_ignore.indexOf('|'+_tag_name+'|') > -1)\n                                {\n                                    _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                    if (_explored &#038;&#038; _explored._is__unskippable); else\n                                    {\n                                        $D.debugOutline(_node, 'clean-before', 'above-target');\n                                        return;\n                                    }\n                                }\n\n                                \/\/  is image?\n                                if (_tag_name == 'img')\n                                {\n                                    _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                    if (_explored &#038;&#038; _explored._is__unskippable); else\n                                    {\n                                        if (_explored._is__image_large); else\n                                        {\n                                            $D.debugOutline(_node, 'clean-before', 'above-target');\n                                            return;\n                                        }\n                                    }\n                                }\n\n                                \/\/  has too many links?\n                                \/\/if (_node.getElementsByTagName &#038;&#038; _node.getElementsByTagName('a').length > 5)\n                                \/\/    { $D.debugOutline(_node, 'clean-before', 'above-target'); return; }\n                            }\n\n                        \/\/  headers that are images\n                        \/\/  =======================\n                            if (_tag_name.match(\/^h(1|2|3|4|5|6)$\/gi))\n                            {\n                                _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                if (_explored &#038;&#038; _explored._is__unskippable); else\n                                {\n                                    switch (true)\n                                    {\n                                        case ((_explored._length__plain_text < 10) &#038;&#038; ((_explored._count__images_small + _explored._count__images_medium + _explored._count__images_large + _explored._count__images_skip) > 0)):\n                                            $D.debugOutline(_node, 'clean-before', 'skip-heading');\n                                            return;\n                                    }\n                                }\n                            }\n\n                    \/\/\tstart tag\n                    \/\/\t=========\n                        if ($D.parseOptions._elements_ignore_tag.indexOf('|'+_tag_name+'|') > -1); else\n                        {\n                            \/* mark *\/\t_pos__start__before = _global__the_html.length;\n                            \/* add *\/\t_global__the_html += '<'+_tag_name;\n\n                            \/\/\tattributes\n                            \/\/\t==========\n\n                                \/\/\tallowed attributes\n                                if (_tag_name in $D.parseOptions._elements_keep_attributes)\n                                {\n                                    for (var i=0, _i=$D.parseOptions._elements_keep_attributes[_tag_name].length; i<_i; i++)\n                                    {\n                                        var \n                                            _attribute_name = $D.parseOptions._elements_keep_attributes[_tag_name][i],\n                                            _attribute_value = _node.getAttribute(_attribute_name)\n                                        ;\n\n                                        \/\/\tif present\n                                        if (_attribute_value > '')\n                                            { _global__the_html += ' '+_attribute_name+'=\"'+(_attribute_value)+'\"'; }\n                                    }\n                                }\n\n                                \/\/\tkeep ID for all elements\n                                var _id_attribute = _node.getAttribute('id');\n                                if (_id_attribute > '')\n                                    { _global__the_html += ' id=\"'+_id_attribute+'\"'; }\n\n                                \/\/\tlinks target NEW\n                                if (_tag_name == 'a')\n                                    { _global__the_html += ' target=\"_blank\"'; }\n\n                            \/\/\tclose start\n                            \/\/\t===========\n                                if ($D.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1) { _global__the_html += ' \/>'; }\n                                else { _global__the_html += '>';}\n\n                            \/* mark *\/ _pos__start__after = _global__the_html.length;\n                        }\n\n                    \/\/\tchild nodes\n                    \/\/\t===========\n                        if ($D.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1); else\n                        {\n                            for (var i=0, _i=_node.childNodes.length; i<_i; i++)\n                                { _recursive(_node.childNodes[i]); }\n                        }\n\n                    \/\/\tend tag\n                    \/\/\t=======\n                        switch (true)\n                        {\n                            case (($D.parseOptions._elements_ignore_tag.indexOf('|'+_tag_name+'|') > -1)):\n                                return;\n\n                            case (($D.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1)):\n                                \/* mark *\/ \t_pos__end__before = _global__the_html.length;\n                                \/* mark *\/ \t_pos__end__after = _global__the_html.length;\n                                break;\n\n                            default:\n                                \/* mark *\/ \t_pos__end__before = _global__the_html.length;\n                                \/* end *\/ \t_global__the_html += '<\/'+_tag_name+'>';\n                                \/* mark *\/ \t_pos__end__after = _global__the_html.length;\n                                break;\n                        }\n\n                    \/\/\tclean -- after\n                    \/\/\t=====\n\n                        \/\/\tlargeObject classes\n                        if (_tag_name == 'iframe' || _tag_name == 'embed' || _tag_name == 'object')\n                        {\n                            _global__the_html = ''\n                                + _global__the_html.substr(0, _pos__start__before)\n                                + '\n\n\n\n<div class=\"readableLargeObjectContainer\">'\n                                + \t_global__the_html.substr(_pos__start__before, (_pos__end__after - _pos__start__before))\n                                + '<\/div>\n\n\n\n\n'\n                            ;\n                            return;\n                        }\n\n                        \/\/\tadd image classes\n                        if (_tag_name == 'img')\n                        {\n                            _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                            if (_explored &#038;&#038; _explored._is__unskippable); else\n                            {\n                                switch (true)\n                                {\n                                    case (_explored._is__image_skip):\n                                        $D.debugOutline(_node, 'clean-after', 'skip-img');\n                                        _global__the_html = _global__the_html.substr(0, _pos__start__before);\n                                        return;\n\n                                    case (_explored._is__image_large):\n\n                                        \/\/  add float class -- for images too narrow\/tall\n                                        \/\/  remove width\/height -- only for large images\n\n                                        \/\/  http:\/\/www.wired.com\/threatlevel\/2011\/05\/gps-gallery\/?pid=89&#038;viewall=true\n                                        \/\/  http:\/\/david-smith.org\/blog\/2012\/03\/10\/ios-5-dot-1-upgrade-stats\/index.html\n                                        \/\/  http:\/\/www.turntablekitchen.com\/2012\/04\/dutch-baby-with-caramelized-vanilla-bean-pears-moving-through-the-decades\/\n\n                                        _global__the_html = ''\n                                            + _global__the_html.substr(0, _pos__start__before)\n                                            + '\n\n\n\n<div class=\"readableLargeImageContainer'\n                                            + \t(($CJ(_node).width() <= 250) &#038;&#038; ($CJ(_node).height() >= 250) ? ' float' : '')\n                                            + '\">'\n                                            + \t_global__the_html.substr(_pos__start__before, (_pos__end__after - _pos__start__before)).replace(\/width=\"([^=]+?)\"\/gi, '').replace(\/height=\"([^=]+?)\"\/gi, '')\n                                            + '<\/div>\n\n\n\n\n'\n                                        ;\n                                        return;\n                                }\n                            }\n                        }\n\n                        \/\/\tlarge images in links\n                        if (_tag_name == 'a')\n                        {\n                            _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                            switch (true)\n                            {\n                                case (_explored._count__images_large == 1):\n                                    _global__the_html = ''\n                                        + _global__the_html.substr(0, _pos__start__after-1)\n                                        + ' class=\"readableLinkWithLargeImage\">'\n                                        + \t_global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n                                        + '<\/a>'\n                                    ;\n                                    return;\n\n                                case (_explored._count__images_medium == 1):\n                                    _global__the_html = ''\n                                        + _global__the_html.substr(0, _pos__start__after-1)\n                                        + ' class=\"readableLinkWithMediumImage\">'\n                                        + \t_global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n                                        + '<\/a>'\n                                    ;\n                                    return;\n                            }\t\t\n                        }\n\n                        \/\/\ttoo much content\n                        if ($D.parseOptions._elements_too_much_content.indexOf('|'+_tag_name+'|') > -1)\n                        {\n                            _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                            if (_explored &#038;&#038; _explored._is__unskippable); else\n                            {\n                                switch (true)\n                                {\n                                    case (_tag_name == 'h1' &#038;&#038; (_explored._length__all_text > (65 * 2))):\n                                    case (_tag_name == 'h2' &#038;&#038; (_explored._length__all_text > (65 * 2 * 3))):\n                                    case ((_tag_name.match(\/^h(3|4|5|6)$\/) != null) &#038;&#038; (_explored._length__all_text > (65 * 2 * 5))):\n                                    case ((_tag_name.match(\/^(b|i|em|strong)$\/) != null) &#038;&#038; (_explored._length__all_text > (65 * 5 * 5))):\n                                        $D.debugOutline(_node, 'clean-after', 'too-much-content');\n                                        _global__the_html = ''\n                                            + _global__the_html.substr(0, _pos__start__before)\n                                            + _global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n                                        ;\n                                        return;\n                                }\n                            }\n                        }\t\t\n\n                        \/\/\tempty elements\n                        switch (true)\n                        {\n                            case (($D.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1)):\n                            case (($D.parseOptions._elements_ignore_tag.indexOf('|'+_tag_name+'|') > -1)):\n                            case (_tag_name == 'td'):\n                                break;\n\n                            default:\n                                var _contents = _global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after));\n                                    _contents = _contents.replace(\/(<br \\\/>)\/gi, '');\n                                    _contents = _contents.replace(\/(\n\n\n\n\n<hr \\\/>\n\n\n\n)\/gi, '');\n\n                                \/\/  for rows, clear empty cells\n                                if (_tag_name == 'tr')\n                                {\n                                    _contents = _contents.replace(\/\n<td[^>]*?>\/gi, '');\n                                    _contents = _contents.replace(\/<\\\/td>\/gi, '');\n                                }\n\n                                \/\/  for tables, clear empty rows\n                                if (_tag_name == 'table')\n                                {\n                                    _contents = _contents.replace(\/\n<tr[^>]*?>\/gi, '');\n                                    _contents = _contents.replace(\/<\\\/tr>\/gi, '');\n                                }\n\n                                var _contentsLength = $D.measureText__getTextLength(_contents);\n\n                                _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                                if (_explored &#038;&#038; _explored._is__unskippable); else\n                                {\n                                    switch (true)\n                                    {\n                                        case (_contentsLength == 0 &#038;&#038; _tag_name == 'p'):\n                                            _global__the_html = _global__the_html.substr(0, _pos__start__before) + '\n\n';\n                                            return;\n\n                                        case (_contentsLength == 0):\n                                        case ((_contentsLength < 5) &#038;&#038; ($D.parseOptions._elements_visible.indexOf('|'+_tag_name+'|') > -1)):\n                                            $D.debugOutline(_node, 'clean-after', 'blank');\n                                            _global__the_html = _global__the_html.substr(0, _pos__start__before);\n                                            return;\n                                    }\n                                }\n\n                                break;\n                        }\n\n                        \/\/\ttoo much missing\n                        if ($D.parseOptions._elements_link_density.indexOf('|'+_tag_name+'|') > -1)\n                        {\n                            _explored = (_explored || $D.getContent__exploreNodeAndGetStuff(_node, true));\n                            if (_explored &#038;&#038; _explored._is__unskippable); else\n                            {\n                                var\n                                    _contents = _global__the_html\n                                                .substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n                                                    .replace(\/(<([^>]+)>)\/gi, ''),\n                                    _contentsLength = $D.measureText__getTextLength(_contents),\n                                    _initialLength = 0\n                                        + _explored._length__all_text \n                                        + (_explored._count__images_small \t\t\t\t\t* 10)\n                                        + (_explored._count__images_skip \t\t\t\t\t* 10)\n                                        + (_node.getElementsByTagName('iframe').length \t\t* 10)\n                                        + (_node.getElementsByTagName('object').length \t\t* 10)\n                                        + (_node.getElementsByTagName('embed').length \t\t* 10)\n                                        + (_node.getElementsByTagName('button').length \t\t* 10)\n                                        + (_node.getElementsByTagName('input').length \t\t* 10)\n                                        + (_node.getElementsByTagName('select').length \t\t* 10)\n                                        + (_node.getElementsByTagName('textarea').length \t* 10)\n                                ;\n\n                                \/\/\ttoo much missing\n                                switch (true)\n                                {\n                                    case (!(_contentsLength > 0)):\n                                    case (!(_initialLength > 0)):\n                                    case (!((_contentsLength \/ _initialLength) < 0.5)):\n                                    case (!(($D.language == 'cjk') &#038;&#038; (_contentsLength \/ _initialLength) < 0.1)):\n                                    case ((_global__exploreNodeToBuildHTMLFor &#038;&#038; ((_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.25))):\n                                    case (($D.language == 'cjk') &#038;&#038; (_global__exploreNodeToBuildHTMLFor &#038;&#038; ((_explored._length__plain_text \/ _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.1))):\n                                        break;\n\n                                    default:\n                                        $D.debugOutline(_node, 'clean-after', 'missing-density');\n                                        _global__the_html = _global__the_html.substr(0, _pos__start__before);\n                                        return;\n                                }\n                            }\n                        }                \n\n                    \/\/\treturn\n                        return;\n                };\n\n            \/\/\tactually do it\n            _recursive(_nodeToBuildHTMLFor);\n\n            \/\/\treturn html\n            return _global__the_html;\n        };\n\n    \/\/  build html for node }\n\n    \/\/  isolate title in html {\n    \/\/  =======================\n\n        $D.articleTitleMarker__start = '\n\n\n\n<div id=\"articleHeader\">\n\n\n\n<h1>';\n        $D.articleTitleMarker__end = '<\/h1>\n\n\n\n<\/div>\n\n\n\n\n';\n\n        $D.getContent__find__hasIsolatedTitleInHTML = function (_html)\n        {\n            return (_html.substr(0, $D.articleTitleMarker__start.length) == $D.articleTitleMarker__start);\n        };\n\n        $D.getContent__find__getIsolatedTitleInHTML = function (_html)\n        {\n            \/\/  is it there?\n            if ($D.getContent__find__hasIsolatedTitleInHTML(_html)); else { return ''; }\n\n            \/\/  regex\n            var \n                _getTitleRegex = new RegExp($D.articleTitleMarker__start + '(.*?)' + $D.articleTitleMarker__end, 'i'),\n                _getTitleMatch = _html.match(_getTitleRegex)\n            ;\n\n            \/\/  match?\n            if (_getTitleMatch); else { return ''; }\n\n            \/\/  return\n            return _getTitleMatch[1];\n        };\n\n        $D.getContent__find__isolateTitleInHTML = function (_html, _document_title)\n        {\n            \/\/  use document title\n            if ($D.$document.find('body').attr($D.parseOptions._use_document_title_attribute) == $D.parseOptions._use_document_title_attribute_value)\n                { return _html; }\n\n            \/\/  can't just use (h1|h2|h3|etc)\n            \/\/      we want to try them in a certain order\n\n            var\n                _heading_pregs = [\n                    \/<(h1)[^>]*?>([\\s\\S]+?)<\\\/\\1>\/gi,\n                    \/<(h2)[^>]*?>([\\s\\S]+?)<\\\/\\1>\/gi,\n                    \/<(h3|h4|h5|h6)[^>]*?>([\\s\\S]+?)<\\\/\\1>\/gi\n                ],\n                _secondary_headings = '|h2|h3|h4|h5|h6|',\n                _search_document_title = ' ' + _document_title.replace(\/<[^>]+?>\/gi, '').replace(\/\\s+\/gi, ' ') + ' '\n            ;\n\n            \/\/  loop pregs\n            for (var i=0, _i=_heading_pregs.length; i<_i; i++)\n            {\n                \/\/  exec\n                var _match = _heading_pregs[i].exec(_html);\n\n                \/\/  return?\n                switch (true)\n                {\n                    case (!(_match)):\n                    case (!(_heading_pregs[i].lastIndex > -1)):\n                        \/\/  will continue loop\n                        break;\n\n                    default:\n\n                        \/\/  measurements\n                        var\n                            _heading_end_pos = _heading_pregs[i].lastIndex,\n                            _heading_start_pos = (_heading_end_pos - _match[0].length),\n\n                            _heading_type = _match[1],\n                            _heading_text = _match[2].replace(\/<\\s*br[^>]*>\/gi, '').replace(\/[\\n\\r]+\/gi, ''),\n                            _heading_text_plain = _heading_text.replace(\/<[^>]+?>\/gi, '').replace(\/\\s+\/gi, ' ');\n                            _heading_length = $D.measureText__getTextLength(_heading_text_plain),\n                            _heading_words = [],\n\n                            _to_heading_text = _html.substr(0, _heading_start_pos),\n                            _to_heading_length = $D.measureText__getTextLength(_to_heading_text.replace(\/<[^>]+?>\/gi, '').replace(\/\\s+\/gi, ' '))\n                        ;\n\n                        \/\/  return?\n                        switch (true)\n                        {\n                            case (!(_heading_length > 5)):\n                            case (!(_heading_length < (65 * 3))):\n                            case (!(_to_heading_length < (65 * 3 * 2))):\n                                \/\/  will continue for loop\n                                break;\n\n                            case ((_secondary_headings.indexOf('|' + _heading_type + '|') > -1)):\n                                \/\/  words in this heading\n                                _heading_words = _heading_text_plain.split(' ');\n\n                                \/\/  count words present in title\n                                for (var j=0, _j=_heading_words.length, _matched_words=''; j<_j; j++) {\n                                    if (_search_document_title.indexOf(' ' + _heading_words[j] + ' ') > -1) {\n                                        _matched_words += _heading_words[j] + ' ';\n                                    }\n                                }\n\n                                \/\/  break continues for loop\n                                \/\/      nothing goes to switch's default\n\n                                \/\/  no break?\n                                \/\/  =========\n                                    var _no_break = false;\n                                    switch (true)\n                                    {\n                                        \/\/  if it's big enough, and it's a substring of the title, it's good\n                                        case ((_heading_length > 20) &#038;&#038; (_search_document_title.indexOf(_heading_text_plain) > -1)):\n\n                                        \/\/  if it's slightly smaler, but is exactly at the begging or the end\n                                        case ((_heading_length > 10) &#038;&#038; ((_search_document_title.indexOf(_heading_text_plain) == 1) || (_search_document_title.indexOf(_heading_text_plain) == (_search_document_title.length - 1 - _heading_text_plain.length)))):\n\n                                            _no_break = true;\n                                            break;\n                                    }\n\n                                    \/\/  break?\n                                    \/\/  ======\n                                        var _break = false;\n                                        switch (true)\n                                        {\n                                            \/\/  no break?\n                                            case (_no_break):\n                                                break;\n\n                                            \/\/ heading too long? -- if not h2\n                                            case ((_heading_length > ((_search_document_title.length - 2) * 2)) &#038;&#038; (_heading_type != 'h2')):\n\n                                            \/\/  heading long enough?\n                                            case ((_heading_length < Math.ceil((_search_document_title.length - 2) * 0.50))):\n\n                                            \/\/  enough words matched?\n                                            case ((_heading_length < 25) &#038;&#038; (_matched_words.length < Math.ceil(_heading_length * 0.75))):\n                                            case ((_heading_length < 50) &#038;&#038; (_matched_words.length < Math.ceil(_heading_length * 0.65))):\n                                            case ((_matched_words.length < Math.ceil(_heading_length * 0.55))):\n\n                                                _break = true;\n                                                break;\n                                        }\n\n                                    \/\/  break?\n                                    \/\/  ======\n                                        if (_break) { break; }\n\n                            default:\n                                \/\/  this is the title -- do isolation; return\n                                return ''\n                                    + $D.articleTitleMarker__start\n                                    +   _heading_text \n                                    + $D.articleTitleMarker__end\n                                    + $D.getContent__find__isolateTitleInHTML__balanceDivsAtStart(_html.substr(_heading_end_pos))\n                                ;\n                        }\n\n                        break;\n                }\n            }\n\n            \/\/  return unmodified\n            return _html;\n        };\n\n        $D.getContent__find__isolateTitleInHTML__balanceDivsAtStart__substrCount = function (_haystack, _needle, _offset, _length)\n        {\n            \/\/ http:\/\/kevin.vanzonneveld.net\n            \/\/ +   original by: Kevin van Zonneveld (http:\/\/kevin.vanzonneveld.net)\n            \/\/ +   bugfixed by: Onno Marsman\n            \/\/ +   improved by: Brett Zamir (http:\/\/brett-zamir.me)\n            \/\/ +   improved by: Thomas\n            \/\/ *     example 1: substr_count('Kevin van Zonneveld', 'e');\n            \/\/ *     returns 1: 3\n            \/\/ *     example 2: substr_count('Kevin van Zonneveld', 'K', 1);\n            \/\/ *     returns 2: 0\n            \/\/ *     example 3: substr_count('Kevin van Zonneveld', 'Z', 0, 10);\n            \/\/ *     returns 3: false\n\n            var cnt = 0;\n\n            _haystack += '';\n            _needle += '';\n            if (isNaN(_offset)) { _offset = 0; }\n            if (isNaN(_length)) { _length = 0; }\n            if (_needle.length == 0) { return false; }\n\n            _offset--;\n\n            while ((_offset = _haystack.indexOf(_needle, _offset + 1)) != -1) {\n                if (_length > 0 &#038;&#038; (_offset + _needle.length) > _length) {\n                    return false;\n                }\n                cnt++;\n            }\n\n            return cnt;\n        };\n\n        $D.getContent__find__isolateTitleInHTML__balanceDivsAtStart = function (_html)\n        {\n            \/\/  easy; remove all <\/X> at begining\n            var \n                _h = _html.replace(\/^(\\s*<\\s*\\\/\\s*[^>]+>)+\/gi, ''),\n                _r = \/<\\s*\\\/\\s*([^\\s>]+?)[^>]*>\/gi,\n                _the_end_tag = '<\/div>\n\n\n\n\n',\n                _the_start_tag = '\n\n<div',\n                _end_tag_pos = -1,\n                _last_pos = 0\n            ;\n\n            \/\/  remove all unbalanced _end_tags\n            for (var _i=0; _i<100; _i++)\n            {\n                _end_tag_pos = _h.indexOf(_the_end_tag, _last_pos);\n                if (_end_tag_pos > -1); else { break; }\n\n                var \n                    _sub = _h.substr(0, _end_tag_pos),\n                    _start_tags = $D.getContent__find__isolateTitleInHTML__balanceDivsAtStart__substrCount(_sub, _the_start_tag, _last_pos),\n                    _end_tags = ((_start_tags > 0) ? (1 + $D.getContent__find__isolateTitleInHTML__balanceDivsAtStart__substrCount(_sub, _the_end_tag, _last_pos)) : false)\n                ;\n\n                if ((!(_start_tags > 0)) || (_start_tags < _end_tags))\n                {\n                    _h = ''\n                        + _h.substr(0, _end_tag_pos)\n                        + _h.substr(_end_tag_pos + _the_end_tag.length)\n                    ;\n\n                    _last_pos = _end_tag_pos;\n                }\n                else\n                {\n                    _last_pos = _end_tag_pos + 1;\n                }\n            }\n\n            $D.log(_h);\n\n            return _h;\n        };\n\n    \/\/  isolate title in html }\n\n    \/\/  find in page {\n    \/\/  ==============\n\n        $D.getContent__findInPage = function (_pageWindow)\n        {\n            \/\/\tcalculations\n            \/\/\t============\n\n                var\n                    _firstCandidate = false,\n                    _secondCandidate = false,\n                    _targetCandidate = false\n                ;\n\n                $D.debugTimerStart('ExploreAndGetStuff');\n                    var\t_stuff = $D.getContent__exploreNodeAndGetStuff(_pageWindow.document.body);\n                $D.debugRemember('ExploreAndGetStuff', $D.debugTimerEnd()+'ms');\n\n                $D.debugTimerStart('ProcessFirst');\n                    var _processedCandidates = $D.getContent__processCandidates__first(_stuff._candidates);\n                    _firstCandidate = _processedCandidates[0];\n                    _targetCandidate = _firstCandidate;\n                $D.debugRemember('ProcessFirst', $D.debugTimerEnd()+'ms');\n\n                \/\/  debug\n                if ($D.debug)\n                {\n                    \/\/  debug first candidates\n                    $D.log('First 5 Main Candidates:');\n                    for (var x in _processedCandidates)\n                    {\n                        if (x == 5) { break; }\n                        $D.log(_processedCandidates[x], _processedCandidates[x].__node);\n                    }\n\n                    \/\/  highlight first\n                    $D.debugOutline(_firstCandidate.__node, 'target', 'first');\n                }\n\n                \/\/  in case we stop\n                $D.debugRemember('Target', 'first');\n\n                \/\/  do second?\n                switch (true)\n                {\n                    case (!(_firstCandidate._count__containers > 0)):\n                    case (!(_firstCandidate._count__candidates > 0)):\n                    case (!(_firstCandidate._count__pieces > 0)):\n                    case (!(_firstCandidate._count__containers > 25)):\n                        break;\n\n                    default:\n\n                        $D.debugTimerStart('ProcessSecond');\n                            var _processedCandidatesSecond = $D.getContent__processCandidates__second(_processedCandidates);\n                            _secondCandidate = _processedCandidatesSecond[0];\n                        $D.debugRemember('ProcessSecond', $D.debugTimerEnd()+'ms');\n\n                        \/\/  they're the same\n                        if (_firstCandidate.__node == _secondCandidate.__node) { break; }\n\n                        \/\/  debug\n                        if ($D.debug)\n                        {\n                            \/\/  log second candidates\n                            $D.log('First 5 Second Candidates:');\n                            for (var x in _processedCandidatesSecond)\n                            {\n                                if (x == 5) { break; }\n                                $D.log(_processedCandidatesSecond[x], _processedCandidatesSecond[x].__node);\n                            }\n\n                            \/\/  highlight second\n                            $D.debugOutline(_secondCandidate.__node, 'target', 'second');\n                        }\n\n                        \/\/  compute again\n                        \/\/  =============\n                            _firstCandidate['__points_history_final'] = $D.getContent__computePointsForCandidate__third(_firstCandidate, _firstCandidate);\n                            _firstCandidate['__points_final'] = _firstCandidate.__points_history_final[0];\n\n                            _secondCandidate['__points_history_final'] = $D.getContent__computePointsForCandidate__third(_secondCandidate, _firstCandidate);\n                            _secondCandidate['__points_final'] = _secondCandidate.__points_history_final[0];\n\n                        \/\/  log results\n                        \/\/  ===========\n                            if ($D.debug)\n                            {\n                                $D.log('The 2 Candidates:');\n                                $D.log(_firstCandidate);\n                                $D.log(_secondCandidate);\n                            }\n\n                        \/\/  are we selecting _second?\n                        \/\/  =========================\n                            switch (true)\n                            {\n                                case ((_secondCandidate.__candidate_details._count__lines_of_65_characters < 20) &#038;&#038; (_secondCandidate.__points_final \/ _firstCandidate.__points_final) > 1):\n                                case ((_secondCandidate.__candidate_details._count__lines_of_65_characters > 20) &#038;&#038; (_secondCandidate.__points_final \/ _firstCandidate.__points_final) > 0.9):\n                                case ((_secondCandidate.__candidate_details._count__lines_of_65_characters > 50) &#038;&#038; (_secondCandidate.__points_final \/ _firstCandidate.__points_final) > 0.75):\n                                    _targetCandidate = _secondCandidate;\n                                    $D.debugRemember('Target', 'second');\n                                    break;\n                            }\n\n                        \/\/  print points\n                        \/\/  ============\n                            if ($D.debug)\n                            {\n                                $D.debugRemember('PointsFirst', _firstCandidate['__points_history_final'][0].toFixed(2));\n                                $D.debugRemember('PointsSecond', _secondCandidate['__points_history_final'][0].toFixed(2));\n                            }\n\n                        break;\n                }\n\n                \/\/  highlight target\n                \/\/  ================\n                    if ($D.debug)\n                    {\n                        $CJ(_targetCandidate.__node).css({\n                            'box-shadow': \n                                'inset 0px 0px 50px rgba(255, 255, 0, 0.95), 0px 0px 50px rgba(255, 255, 0, 0.95)'\n                        });\n                    }\n\n            \/\/\tget html\n            \/\/\t========\n                $D.debugTimerStart('BuildHTML');\n                    var _html = $D.getContent__buildHTMLForNode(_targetCandidate.__node, 'the-target');\n                        _html = _html.substr((_html.indexOf('>')+1))\n                        _html = _html.substr(0, _html.lastIndexOf('<'));\n                $D.debugRemember('BuildHTML', $D.debugTimerEnd()+'ms');\n\n                $D.debugTimerStart('BuildHTMLPregs');\n                    _html = _html.replace(\/<(blockquote|div|p|td|li)([^>]*)>(\\s*<br \\\/>)+\/gi, '<$1$2>');\n                    _html = _html.replace(\/(<br \\\/>\\s*)+<\\\/(blockquote|div|p|td|li)>\/gi, '<\/$2>');\n                    _html = _html.replace(\/(<br \\\/>\\s*)+<(blockquote|div|h\\d|ol|p|table|ul|li)([^>]*)>\/gi, '<$2$3>');\n                    _html = _html.replace(\/<\\\/(blockquote|div|h\\d|ol|p|table|ul|li)>(\\s*<br \\\/>)+\/gi, '<\/$1>');\n                    _html = _html.replace(\/(\n\n\n\n\n<hr \\\/>\n\n\n\n\\s*\n\n\n\n\n<hr \\\/>\n\n\n\n\\s*)+\/gi, '\n\n\n\n\n<hr \/>\n\n\n\n\n\n');\n                    _html = _html.replace(\/(<br \\\/>\\s*<br \\\/>\\s*)+\/gi, '\n\n');\n                $D.debugRemember('BuildHTMLPregs', $D.debugTimerEnd()+'ms');\n\n            \/\/\treturn\n            \/\/\t======\n                return {\n                    '_html': _html,\n                    '_links': _stuff._links,\n                    '_targetCandidate': _targetCandidate,\n                    '_firstCandidate': _firstCandidate\n                };\n        };\n\n    \/\/  find in page }\n\n    \/\/  start {\n    \/\/  =======\n\n        $D.start = function ()\n        {\n            \/\/\tget content\n            \/\/\t===========\n                var \n                    _found = $D.getContent__findInPage($D.window),\n                    _found_links = _found._links,\n                    _targetNode = _found._targetCandidate.__node,\n                    _$targetNode = $CJ(_targetNode),\n                    _aboveNodes = []\n                ;\n\n            \/\/\tRTL\n            \/\/\t===\n                switch (true)\n                {\n                    case (_$targetNode.attr('dir') == 'rtl'):\n                    case (_$targetNode.css('direction') == 'rtl'):\n                        $D.makeRTL();\n                        break;\n                }\n\n            \/\/  get html\n            \/\/  ========\n                var \n                    _foundHTML = _found._html,\n                    _firstFragmentBeforeProcessing = $D.nextPage__getFirstFragment(_foundHTML),\n                    _documentTitle = ($D.document.title > '' ? $D.document.title : '')\n                ;\n\n            \/\/  get title\n            \/\/  =========\n\n                \/\/  has title already?\n                _foundHTML = $D.getContent__find__isolateTitleInHTML(_foundHTML, _documentTitle);\n                $D.articleTitle = $D.getContent__find__getIsolatedTitleInHTML(_foundHTML);\n                $D.debugRemember('TitleSource', 'target');\n\n                \/\/  get html above?\n                if ($D.articleTitle > ''); else\n                {\n                    \/\/  get html above target?\n                    \/\/  ======================\n\n                        \/\/  global vars:\n                        \/\/      _found\n                        \/\/      _foundHTML\n                        \/\/      _documentTitle\n                        \/\/      _aboveNodes\n\n                        var \n                            _prevNode = _found._targetCandidate.__node,\n                            _prevHTML = '',\n                            _aboveHTML = '',\n                            _differentTargets = (_found._firstCandidate.__node != _found._targetCandidate.__node)\n                        ;\n\n                        (function () \n                        {\n\n                            while (true)\n                            {\n                                \/\/  the end?\n                                switch (true)\n                                {\n                                    case (_prevNode.tagName &#038;&#038; (_prevNode.tagName.toLowerCase() == 'body')):\n                                    case (_differentTargets &#038;&#038; (_prevNode == _found._firstCandidate.__node)):\n                                        \/\/  enough is enough\n                                        return;\n                                }\n\n                                \/\/  up or sideways?\n                                if (_prevNode.previousSibling); else\n                                {\n                                    _prevNode = _prevNode.parentNode;\n                                    continue;\n                                }\n\n                                \/\/\tprevious\n                                _prevNode = _prevNode.previousSibling;\n\n                                \/\/\toutline -- element might be re-outlined, when buildHTML is invoked\n                                if ($D.debug) { $D.debugOutline(_prevNode, 'target', 'add-above'); }\n\n                                \/\/\tget html; add\n                                _prevHTML = $D.getContent__buildHTMLForNode(_prevNode, 'above-the-target');\n                                _aboveHTML = _prevHTML + _aboveHTML;\n                                _aboveNodes.unshift(_prevNode);\n\n                                \/\/  isolate title\n                                _aboveHTML = $D.getContent__find__isolateTitleInHTML(_aboveHTML, _documentTitle);\n\n                                \/\/\tfinished?\n                                switch (true)\n                                {\n                                    case ($D.measureText__getTextLength(_aboveHTML.replace(\/<[^>]+?>\/gi, '').replace(\/\\s+\/gi, ' ')) > (65 * 3 * 3)):\n                                    case ($D.getContent__find__hasIsolatedTitleInHTML(_aboveHTML)):\n                                        return;\n                                }\n                            }\n\n                        })();\n\n                    \/\/  is what we found any good?\n                    \/\/  ==========================\n                        switch (true)\n                        {\n                            case ($D.getContent__find__hasIsolatedTitleInHTML(_aboveHTML)):\n                            case (_differentTargets &#038;&#038; (_aboveHTML.split('<a ').length < 3) &#038;&#038; ($D.measureText__getTextLength(_aboveHTML.replace(\/<[^>]+?>\/gi, '').replace(\/\\s+\/gi, ' ')) < (65 * 3))):\n                                _foundHTML = _aboveHTML + _foundHTML;\n                                break;\n\n                            default:\n                                _aboveHTML = '';\n                                _aboveNodes = [];\n                                break;\n                        }\n\n                    \/\/  set title\n                    \/\/  =========\n\n                        $D.articleTitle = $D.getContent__find__getIsolatedTitleInHTML(_foundHTML);\n                        $D.debugRemember('TitleSource', 'above_HTML');\n\n                        \/\/  get document title?\n                        if ($D.articleTitle > ''); else\n                        {\n                            \/\/  if all else failed, get document title\n                            \/\/  ======================================\n\n                                \/\/  global vars:\n                                \/\/      _foundHTML\n                                \/\/      _documentTitle\n\n                                (function ()\n                                {\n                                    \/\/  return?\n                                    \/\/  =======\n                                        if (_documentTitle > ''); else { return; }\n\n                                    \/\/  vars\n                                        var\n                                            _doc_title_parts = [],\n                                            _doc_title_pregs =\n                                            [\n                                                \/( [-][-] |( [-] )|( [>][>] )|( [<][<] )|( [|] )|( [\\\/] ))\/i,\n                                                \/(([:] ))\/i\n                                            ]\n                                        ;\n\n                                    \/\/\tloop through pregs\n                                    \/\/  ==================\n                                        for (var i=0, _i=_doc_title_pregs.length; i<_i; i++)\n                                        {\n                                            \/\/\tsplit\n                                            _doc_title_parts = _documentTitle.split(_doc_title_pregs[i]);\n\n                                            \/\/\tbreak if we managed a split\n                                            if (_doc_title_parts.length > 1) { break; }\n                                        }\n\n                                    \/\/\tsort title parts -- longer goes higher up -- i.e. towards 0\n                                    \/\/\t================\n                                        _doc_title_parts.sort(function (a, b)\n                                        {\n                                            switch (true)\n                                            {\n                                                case (a.length > b.length): return -1;\n                                                case (a.length < b.length): return 1;\n                                                default: return 0;\n                                            }\n                                        });\n\n                                    \/\/\tset title -- first part, if more than one word; otherwise, whole\n                                    \/\/  =========\n                                        _foundHTML = ''\n                                            + $D.articleTitleMarker__start\n                                            +   (_doc_title_parts[0].split(\/\\s+\/i).length > 1 ? _doc_title_parts[0] : _documentTitle) \n                                            + $D.articleTitleMarker__end \n                                            + _foundHTML\n                                        ;\n\n                                })();\n\n                            \/\/  set title\n                            \/\/  =========\n\n                                $D.articleTitle = $D.getContent__find__getIsolatedTitleInHTML(_foundHTML);\n                                $D.debugRemember('TitleSource', 'document_title');\n                        }\n                }\n\n            \/\/\tremember\n            \/\/\t========\n                $D.debugRemember('theTarget', _found._targetCandidate.__node);\n                $D.debugRemember('firstCandidate', _found._firstCandidate.__node);\n\n            \/\/\tresult\n            \/\/  ======\n\n                $D.nextPage__firstFragment__firstPage = _firstFragmentBeforeProcessing;\n                $D.nextPage__firstFragment__lastPage = $D.nextPage__getFirstFragment(_foundHTML);\n                $D.nextPage__firstLinks = _found_links;\n\n                var\n                    _result = {\n                        '_html': _foundHTML,\n                        '_title': $D.articleTitle,\n                        '_rtl': $D.rtl\n                    }\n                ;\n\n                \/\/  add elements\n                _result['_elements'] = _aboveNodes;\n                _result['_elements'].push(_found._targetCandidate.__node);\n\n            \/\/  return\n            \/\/  ======\n                $D.callbacks.finished(_result);\n        };\n\n    \/\/  start }    \n\n    \/\/  return self\n    \/\/  ===========\n        return $D;\n}\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/*!\n *  ClearlyComponent__highlight\n *  Evernote Clearly's highlighting algorithm\/functionality as an embeddable component.\n *  Copyright 2013, Evernote Corporation\n *\n *  Usage:\n *  ======\n *\n *      \/\/ define\n *      window.ClearlyComponent__highlight = {\n *          'callbacks': {\n *              'highlightAdded': someFunction(),\n *              'highlightDeleted': someFunction(),\n *              'arbitraryRangeExclusion': someFunction()\n *          },\n *          'settings': {\n *              'imgPath': 'string',\n *              'onInsertCSSUseThisId': 'string',\n *              'highlightingEnabledCSSClass': 'string',\n *              'highlightElementCSSClass': 'string',\n *              'highlightElementIdAttribute': 'string',\n *              'highlightElementFirstCSSClass': 'string',\n *              'highlightElementLastCSSClass': 'string',\n *              'highlightElementDeleteCSSClass': 'string',\n *              'highlightElementDeleteIdPrefix': 'string',\n *              'highlightCleanHTMLElementStart': 'string',\n *              'highlightCleanHTMLElementEnd': 'string',\n *              'elementWhichMustContainAllHighlights': _dom_element,\n *              'elementsToAttachMouseHandlersTo': [\n *                  _dom_element\n *              ]\n *          },\n *          'window': window,\n *          'document': document,\n *          'jQuery': window.jQuery\n *      };\n *\n *      \/\/ init -- will return false, if something goes wrong\n *      window.ClearlyComponent__highlight = initClearlyComponent__highlight(window.ClearlyComponent__highlight);\n *\n *      \/\/  setup\n *      window.ClearlyComponent__highlight.insertCSS();\n *      window.ClearlyComponent__highlight.addMouseHandlers();\n *\n *      \/\/  enable\n *      window.ClearlyComponent__highlight.enable();\n *\n *      \/\/ publcly available\/overridable\n *      window.ClearlyComponent__highlight.debug\n *\n *\/\n\n\/*\n    changes:\n    ========\n        $R => $H\n        $R.highlight => $H.enabled\n\n    to do:\n    ======\n*\/\n\nfunction initClearlyComponent__highlight(_paramInstance)\n{\n    \/\/  global instance reference {\n    \/\/  ===========================\n\n        \/\/  null; return\n        if (_paramInstance); else { return false; }\n\n        \/\/  shorthand\n        $H = _paramInstance;\n\n    \/\/  global instance reference }\n\n    \/\/  required vars {\n    \/\/  ===============\n\n        \/\/  the component instance object must already be created,\n        \/\/  when the init function is called. it must have these vars set:\n\n        switch (true)\n        {\n            case (!($H.settings)):\n            case (!($H.settings.imgPath)):\n\n            case (!($H.window)):\n            case (!($H.document)):\n            case (!($H.document.body)):\n\n            case (!($H.jQuery)):\n\n                if ($H.debug)\n                {\n                    console.log(!($H.settings));\n                    console.log(!($H.settings.imgPath));\n\n                    console.log(!($H.window));\n                    console.log(!($H.document));\n                    console.log(!($H.document.body));\n\n                    console.log(!($H.jQuery));\n                }\n\n                \/\/  something's wrong\n                return false;\n        }\n\n    \/\/  required vars }\n\n    \/\/  missing settings {\n    \/\/  ==================\n\n        \/\/  restrictions\n        if ($H.settings.elementWhichMustContainAllHighlights); else { $H.settings.elementWhichMustContainAllHighlights = $H.document.body; }\n        if ($H.settings.elementsToAttachMouseHandlersTo); else { $H.settings.elementsToAttachMouseHandlersTo = [$H.document.body]; }\n\n        \/\/  names for stuff\n        \/* css id *\/            if ($H.settings.onInsertCSSUseThisId); else             { $H.settings.onInsertCSSUseThisId =            'clearly_highlighting_css'; }\n        \/* enabled *\/           if ($H.settings.highlightingEnabledCSSClass); else      { $H.settings.highlightingEnabledCSSClass =     'clearly_highlighting_enabled'; }\n        \/* element id *\/        if ($H.settings.highlightElementIdAttribute); else      { $H.settings.highlightElementIdAttribute =     'clearly_highlight_id'; }\n        \/* element class *\/     if ($H.settings.highlightElementCSSClass); else         { $H.settings.highlightElementCSSClass =        'clearly_highlight_element'; }\n        \/* element (first) *\/   if ($H.settings.highlightElementFirstCSSClass); else    { $H.settings.highlightElementFirstCSSClass =   'clearly_highlight_first'; }\n        \/* element (first) *\/   if ($H.settings.highlightElementLastCSSClass); else     { $H.settings.highlightElementLastCSSClass =    'clearly_highlight_last'; }\n        \/* delete class *\/      if ($H.settings.highlightElementDeleteCSSClass); else   { $H.settings.highlightElementDeleteCSSClass =  'clearly_highlight_delete_element'; }\n        \/* delete id prefix *\/  if ($H.settings.highlightElementDeleteIdPrefix); else   { $H.settings.highlightElementDeleteIdPrefix =  'clearly_highlight_delete__'; }\n        \/* clean html start *\/  if ($H.settings.highlightCleanHTMLElementStart); else   { $H.settings.highlightCleanHTMLElementStart =  '<span style=\"-evernote-highlighted:true; background-color:#f6ee96\">'; }\n        \/* clean html end *\/    if ($H.settings.highlightCleanHTMLElementEnd); else     { $H.settings.highlightCleanHTMLElementEnd =    '<\/span>'; }\n\n    \/\/  missing settings }\n\n    \/\/  global vars {\n    \/\/  =============\n\n        $CJ = $H.jQuery;\n\n        $H.$window = $CJ($H.window);\n        $H.$document = $CJ($H.document);\n        $H.$html = $H.$document.find('html');\n        $H.$elementWhichMustContainAllHighlights = $CJ($H.settings.elementWhichMustContainAllHighlights);\n\n        $H.enabled = false;\n\n    \/\/  global vars }\n\n    \/\/  parse options {\n    \/\/  ===============   \n\n\t\t$H.parseOptions =\n\t\t{\n\t\t\t'_elements_ignore': \t\t\t        '|button|input|select|textarea|optgroup|command|datalist|--|frame|frameset|noframes|--|style|link|script|noscript|--|canvas|applet|map|--|marquee|area|base|',\n\t\t\t'_elements_ignore_tag': \t\t        '|form|fieldset|details|dir|--|center|font|span|',\n\n\t\t\t'_elements_container': \t\t\t        '|body|--|article|section|--|div|--|td|--|li|--|dd|dt|',\n            '_elements_self_closing': \t\t        '|br|hr|--|img|--|col|--|source|--|embed|param|--|iframe|',\n\n            '_elements_highlight_protect':          '|video|audio|source|--|object|param|embed|',\n\n            '_elements_keep_attributes':\n\t\t\t{\n\t\t\t\t'a': \t\t['href', 'title', 'name'],\n\t\t\t\t'img': \t\t['src', 'width', 'height', 'alt', 'title'],\n\n\t\t\t\t'video': \t['src', 'width', 'height', 'poster', 'audio', 'preload', 'autoplay', 'loop', 'controls'],\n\t\t\t\t'audio': \t['src', 'preload', 'autoplay', 'loop', 'controls'],\t\t \n\t\t\t\t'source': \t['src', 'type'],\n\n\t\t\t\t'object': \t['data', 'type', 'width', 'height', 'classid', 'codebase', 'codetype'],\t\t\t\t\t\t\n\t\t\t\t'param': \t['name', 'value'],\n\t\t\t\t'embed': \t['src', 'type', 'width', 'height', 'flashvars', 'allowscriptaccess', 'allowfullscreen', 'bgcolor'],\n\n\t\t\t\t'iframe':\t['src', 'width', 'height', 'frameborder', 'scrolling'],\n\n\t\t\t\t'td':\t\t['colspan', 'rowspan'],\t\t\t\n\t\t\t\t'th':\t\t['colspan', 'rowspan']\n\t\t\t}\n\n\t\t};\n\n    \/\/  parse options }\n\n    \/\/  debug {\n    \/\/  =======\n\n        $H.debug = ($H.debug || false);\n\n\t\tif ($H.debug)\n\t\t{\n\t\t    \/\/  writeLog\n\t\t    \/\/  ========\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase (!(!($H.window.console &#038;&#038; $H.window.console.log))):    $H.writeLog = function (msg) { $H.window.console.log(msg); };       break;\n\t\t\t\t\tcase (!(!($H.window.opera &#038;&#038; $H.window.opera.postError))):  $H.writeLog = function (msg) { $H.window.opera.postError(msg); };   break;\n\t\t\t\t\tdefault:                                                    $H.writeLog = function (msg) {};                                    break;\n\t\t\t\t}\n\n            \/\/  log\n            \/\/  ===\n                $H.log = function ()\n                {\n                    if ($H.debug); else { return; }\n                    for (var i=0, il=arguments.length; i<il ; i++) { $H.writeLog(arguments[i]); }\n                    $H.writeLog('-----------------------------------------');\n                };\n\t\t}\n\t\telse\n\t\t{\n            $H.writeLog \t\t= function () { return false; };\n            $H.log \t\t\t\t= function () { return false; };\n        }\n\n    \/\/  debug }\n\n    \/\/  insert css {\n    \/\/  ============\n\n        $H.insertCSS = function ()\n        {\n            var _cssText = ''\n            +   '\/* selection *\/ '\n            +   'html.'+$H.settings.highlightingEnabledCSSClass+' ::-moz-selection { background: rgba(246, 238, 150, 0.99); } '\n            +   'html.'+$H.settings.highlightingEnabledCSSClass+' ::selection { background: rgba(246, 238, 150, 0.99); } '\n\n            +   '\/* cursor *\/ '\n            +   'html.'+$H.settings.highlightingEnabledCSSClass+' { '\n            +   '   \/* cursor and hot-spot position -- requires a default cursor, after the URL one *\/ '\n            +   '} '\n\n            +   '\/* highlight tag *\/ '\n            +   'em.'+$H.settings.highlightElementCSSClass+' { '\n            +   '   font-style: inherit !important; font-weight: inherit !important; '\n            +   '   background-repeat: repeat-x; background-position: top left; background-size: 100% 100%; '\n            +   '} '\n            +   '\/* the delete-buttons are positioned relative to this *\/ '\n            +   'em.'+$H.settings.highlightElementCSSClass+'.'+$H.settings.highlightElementFirstCSSClass+' { position: relative; } '\n\n            +   '\/* delete buttons *\/ '\n            +   'em.'+$H.settings.highlightElementCSSClass+' a.'+$H.settings.highlightElementDeleteCSSClass+' { '\n            +   '   display: none; cursor: pointer; '\n            +   '   padding: 0; margin: 0; line-height: 0; '\n            +   '   position: absolute; width: 34px; height: 34px; left: -17px; top: -17px; '\n            +   '} '\n            +   'em.'+$H.settings.highlightElementCSSClass+' a.'+$H.settings.highlightElementDeleteCSSClass+':hover { background-position: -34px 0px; } '\n            ;\n\n            \/\/  create\n            var _cssElement = $H.document.createElement('style');\n            _cssElement.setAttribute('id', $H.settings.onInsertCSSUseThisId);\n            _cssElement.setAttribute('type', 'text\/css');\n            if (_cssElement.styleSheet) { _cssElement.styleSheet.cssText = _cssText; }\n                else { _cssElement.appendChild($H.document.createTextNode(_cssText)); }\n\n            \/\/  append\n            $H.$document.find('head').append(_cssElement);\n        };\n\n    \/\/  insert css }\n\n    \/\/  selection {\n    \/\/  ===========\n\n        $H.sel = {};\n\n        $H.sel.getWindowFromDocument = function (theDocument)\n        {\n            if (theDocument); else { return null; }\n\n            if ('defaultView' in theDocument) {\n                arguments.calee = function (theDocument) {\n                    if (theDocument); else { return null; }\n                    return theDocument.defaultView;\n                };\n            }\n            else if ('parentWindow' in theDocument) {\n                arguments.calee = function (theDocument) {\n                    if (theDocument); else { return null; }\n                    return theDocument.parentWindow;\n                };\n            }\n            else {\n                arguments.calee = function (theDocument) {\n                    return null;\n                };\n            }\n\n            return arguments.calee(theDocument);\n        };\n\n        $H.sel.getSelection = function (theWindow)\n        {\n            if (theWindow); else { return null; }\n\n            if ('getSelection' in theWindow) {\n                arguments.calee = function (theWindow) {\n                    if (theWindow); else { return null; }\n                    return theWindow.getSelection();\n                };\n            }\n            else if ('selection' in theWindow.document) {\n                arguments.calee = function (theWindow) {\n                    if (theWindow); else { return null; }\n                    return theWindow.document.selection;\n                };\n            }\n            else {\n                arguments.calee = function (theWindow) {\n                    return null;\n                };\n            }\n\n            return arguments.calee(theWindow);\n        };\n\n        $H.sel.getRange = function (selection)\n        {\n            if (selection); else { return null; }\n\n            if ('getRangeAt' in selection) {\n                arguments.calee = function (selection) {\n                    if (selection); else { return null; }\n                    if (selection.rangeCount > 0) { return selection.getRangeAt(0); }\n                    else { return null; }\n                    \/\/\tdoesn't work in old versions of safari \n                    \/\/\t... I don't care\n                };\n            }\n            else if ('createRange' in selection) {\n                arguments.calee = function (selection) {\n                    if (selection); else { return null; }\n                    return selection.createRange();\n                };\n            }\n            else {\n                arguments.calee = function (selection) {\n                    return null;\n                };\n            }\n\n            return arguments.calee(selection);\n        };\n\n        $H.sel.getRangeHTML = function (range)\n        {\n            if (range); else { return null; }\n\n            if ('htmlText' in range) {\n                arguments.calee = function (range) {\n                    if (range); else { return null; }\n                    return range.htmlText;\n                };\n            }\n            else if ('surroundContents' in range) {\n                arguments.calee = function (range) {\n\n                    if (range); else { return null; }\n                    if (range.commonAncestorContainer &#038;&#038; range.commonAncestorContainer.ownerDocument); else { return null; }\n\n                    var dummy = range.commonAncestorContainer.ownerDocument.createElement(\"div\");\n                    dummy.appendChild(range.cloneContents());\n                    return dummy.innerHTML;\n                };\n            }\n            else {\n                arguments.calee = function (range) {\n                    return null;\n                };\n            }\n\n            return arguments.calee(range);\n        };\n\n        $H.sel.getRangeText = function (range)\n        {\n            if (range); else { return null; }\n\n            if ('text' in range) {\n                arguments.calee = function (range) {\n                    if (range); else { return null; }\n                    return range.text;\n                };\n            }\n            else if ('surroundContents' in range) {\n                arguments.calee = function (range) {\n\n                    if (range); else { return null; }\n                    if (range.commonAncestorContainer &#038;&#038; range.commonAncestorContainer.ownerDocument); else { return null; }\n\n                    var dummy = range.commonAncestorContainer.ownerDocument.createElement(\"div\");\n                    dummy.appendChild(range.cloneContents());\n                    return dummy.textContent;\n                };\n            }\n            else {\n                arguments.calee = function (range) {\n                    return null;\n                };\n            }\n\n            return arguments.calee(range);\n        };\n\n    \/\/  selection }\n\n    \/\/  helpers {\n    \/\/  =========\n\n        $H.rand = function (_min, _max)\n        {\n            return (Math.floor(Math.random() * (_max - _min + 1)) + _min);\n        };\n\n        $H.highlight__deleteSpansFromParents = function (_parents)\n        {\n            var _done = [], _this_done = false, _inner = '';\n\n            \/\/  main loop\n            for (var i=0, _i=_parents.length; i<_i; i++)\n            {\n                \/\/  init\n                _this_done = false;\n\n                \/\/  check\n                for (var ii=0, _ii=_done.length; ii<_ii; ii++)\n                {\n                    if (_done[ii] == _parents[i])\n                    {\n                        _this_done = true;\n                        break;\n                    }\n                }    \n\n                \/\/  skip\n                if (_this_done) { continue; }\n\n                \/\/  actually do\n                \/\/  ===========\n\n                    \/\/  add\n                    _done.push(_parents[i]);\n\n                    \/\/  get\n                    _inner = _parents[i].innerHTML;\n\n                    \/\/  check\n                    if (_inner.indexOf('<span') > -1); else { continue; }\n\n                    \/\/  replace\n                    _inner = _inner.replace(\/<span([^>]*?)>\/gi, '');\n                    _inner = _inner.replace(\/<\\\/span>\/gi, '');\n                    _parents[i].innerHTML = _inner;\n            }\n        };\n\n        $H.highlight__getDeepestTextNode = function (_node)\n        {\n            var _n = _node;\n\n            while (true)\n            {\n                switch (true)\n                {\n                    \/\/  text\n                    case (_n.nodeType &#038;&#038; _n.nodeType == 3): return _n;\n\n                    \/\/  single child\n                    case (_n.nodeType &#038;&#038; _n.nodeType == 1 &#038;&#038; _n.childNodes.length > 0): _n = _n.childNodes[0]; break;\n\n                    \/\/  no children but has sibling\n                    case (_n.nodeType &#038;&#038; _n.nodeType == 1 &#038;&#038; _n.childNodes.length == 0 &#038;&#038; _n.nextSibling): _n = _n.nextSibling; break;\n\n                    \/\/  default\n                    default: return _node;\n                }\n            }\n        };\n\n        $H.highlight__getCommonAncestorContainerForNodes = function (_node1, _node2, _fallback)\n        {\n            var _parent1 = _node1, _parent2 = _node2;\n\n            while (true)\n            {\n                \/\/  next\n                _parent1 = _parent1.parentNode;\n                _parent2 = _parent2.parentNode;\n\n                \/\/  break\n                switch (true)\n                {\n                    case (!(_parent1)):\n                    case (!(_parent2)):\n                    case (_parent1 == _fallback):\n                    case (_parent2 == _fallback):\n                        return _fallback;\n                }\n\n                \/\/  maybe\n                switch (true)\n                {\n                    case (_parent1 == _parent2): return _parent1;\n\n                    case ($CJ.contains(_parent1, _node2)): return _parent1;\n                    case ($CJ.contains(_parent2, _node1)): return _parent2;\n\n                    case ($CJ.contains(_parent1, _parent2)): return _parent1;\n                    case ($CJ.contains(_parent2, _parent1)): return _parent2;\n                }\n            }\n        };\n\n        $H.highlight__getParentElementOfNode = function (_thisNode)\n        {\n            var _element = _thisNode;\n            while (true) {\n                \/\/  correct\n                if (_element.nodeType == 1) { break; }\n\n                \/\/  continue\n                _element = _element.parentNode;\n            }\n            return _element;\n        };\n\n        $H.highlight__getParentElementOfNodeWithThisParent = function (_thisNode, _thisParent)\n        {\n            \/\/  impossible\n            switch (true)\n            {\n                case (_thisNode == _thisParent):\n                    return _thisNode;\n\n                case (!($CJ.contains(_thisParent, _thisNode))):  \/\/ always false in IE\n                    \/\/return _thisNode;\n            }\n\n            \/\/  do\n            var _element = _thisNode;\n            while (true) {\n                \/\/  correct\n                if (_element.parentNode == _thisParent) { break; }\n\n                \/\/  continue\n                _element = _element.parentNode;\n            }\n            return _element;\n        };\n\n    \/\/  helpers }\n\n    \/\/  build html for element with selected range {\n    \/\/  ============================================\n\n        $H.highlight__buildHTMLForElementWithSelectedRange = function (_elementToBuildHTMLFor, _modeToBuildHTMLIn, _rangeToBuildHTMLWith)\n        {\n            var \n                _global__element_index = 0,\n                _global__the_html = '',\n                _global__highlight_on = ((_modeToBuildHTMLIn == 'boundry-end') ? true : false)\n            ;\n\n            \/\/\trecursive function\n            \/\/\t==================\n                var _recursive = function (_node)\n                {\n                    \/\/\tincrement index -- starts with 1\n                    \/\/\t===============\n                        _global__element_index++;\n\n                    \/\/\tvars\n                    \/\/\t====\n                        var \n                            _explored = false,\n                            _tag_name = (_node.nodeType === 3 ? '#text' : ((_node.nodeType === 1 &#038;&#038; _node.tagName &#038;&#038; _node.tagName > '') ? _node.tagName.toLowerCase() : '#invalid')),\n                            _tag_is_ignored = ($H.parseOptions._elements_ignore_tag.indexOf('|'+_tag_name+'|') > -1),\n                            _tag_is_ignored = (_tag_is_ignored ? ((_tag_name == 'span') ? false : true) : false),\n                            _pos__start__before = 0,\n                            _pos__start__after = 0,\n                            _pos__end__before = 0,\n                            _pos__end__after = 0,\n                            _to_write = '',\n                            _selection_starts_here = false,\n                            _selection_ends_here = false\n                        ;\n\n                    \/\/\tfast return\n                    \/\/\t===========\n                        switch (true)\n                        {\n                            case ((_tag_name == '#invalid')):\n                            case (($H.parseOptions._elements_ignore.indexOf('|'+_tag_name+'|') > -1)):\n                                return;\n\n                            case (_tag_name == '#text'):\n                                \/\/  get value\n                                \/\/  =========\n                                    _to_write = _node.nodeValue.replace(\/<\/gi, '&lt;').replace(\/>\/gi, '&gt;');\n\n                                \/\/  mode?\n                                \/\/  =====\n                                    switch (true)\n                                    {\n                                        case (_modeToBuildHTMLIn == 'nothing'):\n                                            break;\n\n                                        case (_modeToBuildHTMLIn == 'everything'):\n                                            _to_write = ''\n                                                + '<highlight>' \n                                                +   _to_write \n                                                + '<\/highlight>'\n                                            ;\n                                            break;\n\n                                        case (_modeToBuildHTMLIn == 'boundry-start'):\n                                        case (_modeToBuildHTMLIn == 'boundry-end'):\n                                        case (_modeToBuildHTMLIn == 'boundry-both'):\n\n                                            \/\/  end of range?\n                                            \/\/  =============\n                                                if (_node == _rangeToBuildHTMLWith.endContainer)\n                                                {\n                                                    _to_write = ''\n                                                        + '<highlight>'\n                                                        +   _to_write.substr(0, _rangeToBuildHTMLWith.endOffset)\n                                                        + '<\/highlight>'\n                                                        + _to_write.substr(_rangeToBuildHTMLWith.endOffset)\n                                                    ;\n\n                                                    _global__highlight_on = false;\n                                                    _selection_ends_here = true;\n                                                }\n\n                                            \/\/  start of range?\n                                            \/\/  ===============\n                                                if (_node == _rangeToBuildHTMLWith.startContainer)\n                                                {\n                                                    _to_write = ''\n                                                        + _to_write.substr(0, _rangeToBuildHTMLWith.startOffset)\n                                                        + '<highlight>'\n                                                        +   _to_write.substr(_rangeToBuildHTMLWith.startOffset)\n                                                        + '<\/highlight>'  \n                                                    ;\n\n                                                    _global__highlight_on = true;\n                                                    _selection_starts_here = true;\n                                                }\n\n                                            \/\/  correction\n                                            \/\/  ==========\n                                                if (_selection_starts_here &#038;&#038; _selection_ends_here)\n                                                {\n                                                    _to_write = _node.nodeValue.replace(\/<\/gi, '&lt;').replace(\/>\/gi, '&gt;');\n                                                    _to_write = ''\n                                                        + _to_write.substr(0, _rangeToBuildHTMLWith.startOffset)\n                                                        + '<highlight>'\n                                                        +   _to_write.substr(_rangeToBuildHTMLWith.startOffset, (_rangeToBuildHTMLWith.endOffset - _rangeToBuildHTMLWith.startOffset))\n                                                        + '<\/highlight>'\n                                                        + _to_write.substr(_rangeToBuildHTMLWith.endOffset)\n                                                    ;\n\n                                                    _global__highlight_on = false;\n                                                }\n\n                                            \/\/  snap-to\n                                            \/\/  =======\n                                                if (_selection_starts_here &#038;&#038; (_rangeToBuildHTMLWith.startOffset > 0))\n                                                {\n                                                    \/\/  before\n                                                    _to_write = _to_write.replace(\/([ .,;?!])([a-z0-9]{1,2})<highlight>\/gi, '$1<highlight>$2');\n\n                                                    \/\/  space at begining\n                                                    _to_write = _to_write.replace(\/<highlight>([\\s])([^\\s])\/gi, '$1<highlight>$2');\n\n                                                    \/\/  too much\n                                                    _to_write = _to_write.replace(\/<highlight>([a-z0-9])([ ])([a-z0-9])\/gi, '$1$2<highlight>$3');\n                                                }\n\n                                                if (_selection_ends_here &#038;&#038; (_rangeToBuildHTMLWith.endOffset > 0))\n                                                {\n                                                    var _do_end = true;\n\n                                                    if (_rangeToBuildHTMLWith.endContainer &#038;&#038; _rangeToBuildHTMLWith.endContainer.nodeValue &#038;&#038; _rangeToBuildHTMLWith.endContainer.nodeValue.length)\n                                                        { _do_end = (_rangeToBuildHTMLWith.endOffset < _rangeToBuildHTMLWith.endContainer.nodeValue.length); }\n\n                                                    if (_do_end)\n                                                    {\n                                                        \/\/  after\n                                                        _to_write = _to_write.replace(\/<\\\/highlight>([a-z0-9]{0,2})([ .,;?!])\/gi, '$1$2<\/highlight>');\n\n                                                        \/\/  space at end\n                                                        _to_write = _to_write.replace(\/([^\\s])([\\s])<\\\/highlight>\/gi, '$1<\/highlight>$2');\n\n                                                        \/\/  too much\n                                                        _to_write = _to_write.replace(\/([ ])([a-z0-9])<\\\/highlight>([a-z0-9])\/gi, '<\/highlight>$1$2$3');\n                                                    }\n                                                }\n\n                                            \/\/  other\n                                            \/\/  =====\n                                                if (!(_selection_starts_here) &#038;&#038; !(_selection_ends_here))\n                                                {\n                                                    _to_write = _node.nodeValue.replace(\/<\/gi, '&lt;').replace(\/>\/gi, '&gt;');\n                                                    if (_global__highlight_on)\n                                                    {\n                                                        _to_write = ''\n                                                            + '<highlight>' \n                                                            +   _to_write \n                                                            + '<\/highlight>'\n                                                        ;\n                                                    }\n                                                }\n\n                                            break;\n                                    }\n\n                                \/\/  write value\n                                \/\/  ===========\n                                    _global__the_html += _to_write;\n\n                                return;\n                        }\n\n                    \/\/  range anchors are elements instead of text-nodes\n                    \/\/  ================================================\n\n                        \/\/  end of range?\n                        if ((_rangeToBuildHTMLWith.endContainer.nodeType == 1) &#038;&#038; (_node == _rangeToBuildHTMLWith.endContainer)) {\n                            _global__highlight_on = false;\n                            _selection_ends_here = true;\n                        }\n\n                        \/\/  start of range?\n                        if ((_rangeToBuildHTMLWith.startContainer.nodeType == 1) &#038;&#038; (_node == _rangeToBuildHTMLWith.startContainer)) {\n                            _global__highlight_on = true;\n                            _selection_starts_here = true;\n                        }\n\n                        \/\/  correction\n                        if (_selection_starts_here &#038;&#038; _selection_ends_here) {\n                            _global__highlight_on = false;\n                        }\n\n                    \/\/\tstart tag\n                    \/\/\t=========\n                        if (_tag_is_ignored); else\n                        {\n                            \/* mark *\/\t_pos__start__before = _global__the_html.length;\n                            \/* add *\/\t_global__the_html += '<'+_tag_name;\n\n                            \/\/\tattributes\n                            \/\/\t==========\n\n                                \/\/\tallowed attributes\n                                if (_tag_name in $H.parseOptions._elements_keep_attributes)\n                                {\n                                    for (var i=0, _i=$H.parseOptions._elements_keep_attributes[_tag_name].length; i<_i; i++)\n                                    {\n                                        var \n                                            _attribute_name = $H.parseOptions._elements_keep_attributes[_tag_name][i],\n                                            _attribute_value = _node.getAttribute(_attribute_name)\n                                        ;\n\n                                        \/\/\tif present\n                                        if (_attribute_value > '')\n                                            { _global__the_html += ' '+_attribute_name+'=\"'+(_attribute_value)+'\"'; }\n                                    }\n                                }\n\n                                \/\/\tkeep ID for all elements\n                                var _id_attribute = _node.getAttribute('id');\n                                if (_id_attribute > '')\n                                    { _global__the_html += ' id=\"'+_id_attribute+'\"'; }\n\n                                \/\/\tlinks target NEW\n                                if (_tag_name == 'a')\n                                    { _global__the_html += ' target=\"_blank\"'; }\n\n                            \/\/  add class name\n                            \/\/  ==============\n                                var _class_attribute = _node.getAttribute('class');\n                                if (_class_attribute > '')\n                                    { _global__the_html += ' class=\"'+_class_attribute+'\"'; }\n\n                            \/\/  add highlight id -- for EMs that are outside the global highlight\n                            \/\/  ================\n                                if (_tag_name == 'em' &#038;&#038; _modeToBuildHTMLIn != 'everything')\n                                {\n                                    \/\/  with a fix for when an em is the first thing inside a parent element\n\n                                    switch (true)\n                                    {\n                                        case (_global__highlight_on):\n                                        case ((_rangeToBuildHTMLWith.startOffset == 0) &#038;&#038; (_node.firstChild) &#038;&#038; (_node.firstChild == _rangeToBuildHTMLWith.startContainer)):\n                                            break;\n\n                                        default:\n                                            var _highlight_id_attribute = _node.getAttribute($H.settings.highlightElementIdAttribute);\n                                            if (_highlight_id_attribute > '')\n                                                { _global__the_html += ' '+$H.settings.highlightElementIdAttribute+'=\"'+_highlight_id_attribute+'\"'; }\n                                            break;\n                                    }\n                                }\n\n                            \/\/\tclose start\n                            \/\/\t===========\n                                if ($H.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1) { _global__the_html += ' \/>'; }\n                                else { _global__the_html += '>';}\n\n                            \/* mark *\/ _pos__start__after = _global__the_html.length;\n                        }\n\n                    \/\/\tchild nodes\n                    \/\/\t===========\n                        if ($H.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1); else\n                        {\n                            for (var i=0, _i=_node.childNodes.length; i<_i; i++)\n                                { _recursive(_node.childNodes[i]); }\n                        }\n\n                    \/\/\tend tag\n                    \/\/\t=======\n                        switch (true)\n                        {\n                            case (_tag_is_ignored):\n                                return;\n\n                            case (($H.parseOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1)):\n                                \/* mark *\/ \t_pos__end__before = _global__the_html.length;\n                                \/* mark *\/ \t_pos__end__after = _global__the_html.length;\n                                break;\n\n                            default:\n                                \/* mark *\/ \t_pos__end__before = _global__the_html.length;\n                                \/* end *\/ \t_global__the_html += '<\/'+_tag_name+'>';\n                                \/* mark *\/ \t_pos__end__after = _global__the_html.length;\n                                break;\n                        }\n\n                    \/\/  protected elements\n                    \/\/  ==================\n                        switch (true)\n                        {\n                            \/\/  some elemnts are protected from highlighting\n                            case (($H.parseOptions._elements_highlight_protect.indexOf('|'+_tag_name+'|') > -1)):\n                            case ((_tag_name == 'em') &#038;&#038; $CJ(_node).hasClass($H.settings.highlightElementCSSClass)):\n\n                                \/\/  so, if highlights are inside an already highlighted element --or an unhighlightable one-- remove\n\n                                _global__the_html = ''\n                                    + _global__the_html.substr(0, _pos__start__after)\n                                    +   _global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n                                            .replace(\/<highlight>\/gi, '')\n                                            .replace(\/<\\\/highlight>\/gi, '')\n                                    + _global__the_html.substr(_pos__end__before)\n                                ;\n\n                                break;\n\n                            \/\/  some elements are invalid completely\n                            case ((_tag_name == 'a') &#038;&#038; (_node.className == 'deleteHighlight')):\n\n                                _global__the_html = ''\n                                    + _global__the_html.substr(0, _pos__start__before)\n                                    + _global__the_html.substr(_pos__end__after)\n                                ;\n\n                                break;\n\n                            \/\/  some elements need to have their tags ignored\n                            \/*case (_tag_name == 'span'):\n\n                                _global__the_html = ''\n                                    + _global__the_html.substr(0, _pos__start__before)\n                                    + _global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after))\n                                    + _global__the_html.substr(_pos__end__after)\n                                ;\n\n                                break;*\/\n                        }\n\n                    \/\/\treturn\n                        return;\n                };\n\n            \/\/\tactually do it\n            _recursive(_elementToBuildHTMLFor);\n\n            \/\/  use em, instead of highlight\n            _global__the_html = _global__the_html\n                .replace(\/<highlight>\/gi, '<em class=\"'+$H.settings.highlightElementCSSClass+'\">')\n                .replace(\/<\\\/highlight>\/gi, '<\/em>')\n            ;\n\n            \/\/\treturn\n            return _global__the_html;\n        };    \n\n    \/\/  build html for element with selected range }\n\n    \/\/  do range {\n    \/\/  ==========\n\n        $H.highlight__doRange = function (_range_to_highlight)\n        {\n            \/\/  get referrence elements\n            var\n                _commonAncestorElement = $H.highlight__getParentElementOfNode(_range_to_highlight.commonAncestorContainer),\n                _startElement = $H.highlight__getParentElementOfNodeWithThisParent(_range_to_highlight.startContainer, _commonAncestorElement),\n                _endElement = $H.highlight__getParentElementOfNodeWithThisParent(_range_to_highlight.endContainer, _commonAncestorElement)\n            ;\n\n            \/\/  range not in container element\n            if (true\n                &#038;&#038; (_commonAncestorElement.tagName) \n                &#038;&#038; !($CJ.contains($H.settings.elementWhichMustContainAllHighlights, _commonAncestorElement))\n            ) {\n                return false;\n            }\n\n            \/\/  arbitrary range exclusion\n            if ($H.callbacks.arbitraryRangeExclusion) {\n                if ($H.callbacks.arbitraryRangeExclusion(_range_to_highlight, _commonAncestorElement, _startElement, _endElement) === false) {\n                    return false;\n                }\n            }\n\n            \/* $H.log(\n                _range.startContainer, _range.endContainer, _range.startOffset, _range.endOffset, \n                _range_to_highlight, \n                _commonAncestorElement, _startElement, _endElement\n            ); *\/\n\n            \/\/  selection id\n            var _selection_id = $H.rand(1, 1000);\n            while (true)\n            {\n                \/\/  nothing found\n                if ($H.$elementWhichMustContainAllHighlights.find('em.'+$H.settings.highlightElementCSSClass+'['+$H.settings.highlightElementIdAttribute+'=\"'+_selection_id+'\"]').length > 0); else { break; }\n\n                \/\/  new id\n                _selection_id = $H.rand(1, 1000);\n            }\n\n            \/\/  chainging elements\n            \/\/  ==================\n\n                var _chaingingElements = [], _currElement = _startElement, _currChainging = false;\n\n                while (true)\n                {\n                    \/\/  object\n                    _currChainging = {\n                        '_element': _currElement,\n                        '_tagName': (_currElement.nodeType === 3 ? '#text' : ((_currElement.nodeType === 1 &#038;&#038; _currElement.tagName &#038;&#038; _currElement.tagName > '') ? _currElement.tagName.toLowerCase() : '#invalid'))\n                    };\n\n                    \/\/  add\n                    _chaingingElements.push(_currChainging);\n\n                    \/\/  break\n                    if (_currElement == _endElement) { break; }\n\n                    \/\/  next\n                    _currElement = _currElement.nextSibling;\n\n                    \/\/  error?\n                    if (_currElement); else { break; }\n                }\n\n            \/\/  rewrite elements\n            \/\/  ================\n                var _parents_to_clean = [];\n                for (var i=0, _i=_chaingingElements.length, _currElement=false; i<_i; i++)\n                {\n                    var \n                        _currElement = _chaingingElements[i],\n                        _currNode = _currElement._element,\n                        _currTag = _currElement._tagName,\n                        _boundry_mode = '',\n                        _currBuiltHTML = false,\n                        _resNode = false\n                    ;\n\n                    \/\/  get html \/ mode\n                    \/\/  ===============\n                        switch (true)\n                        {\n                            case ((_i == 1) &#038;&#038; (i == 0)):       _boundry_mode = 'boundry-both';     break;\n                            case ((_i > 1) &#038;&#038; (i == 0)):        _boundry_mode = 'boundry-start';    break;\n                            case ((_i > 1) &#038;&#038; (i == (_i-1))):   _boundry_mode = 'boundry-end';      break;\n                            default:                            _boundry_mode = 'everything';       break;\n                        }\n\n                    \/\/  get html\n                    \/\/  ========\n                        _currBuiltHTML = $H.highlight__buildHTMLForElementWithSelectedRange(_currNode, _boundry_mode, _range_to_highlight);\n\n                    \/\/  write\n                    \/\/  =====\n                        switch (true)\n                        {\n                            case ((_currTag == '#text')):\n\n                                \/\/  resulting html might be something like \"<em>something<\/em> something else\"\n                                \/\/  so we create a dummy span tag to eomcompass it, and then repalce the old text node with that\n\n                                \/\/  create\n                                var _newElement = $H.document.createElement('span');\n                                    _newElement.innerHTML = _currBuiltHTML;\n\n                                \/\/  result\n                                _resNode = _newElement;\n\n                               \/* with (Evernote.evernotePopup) {\n                                    console.log(' ~~~ highlight.js gadit before |'  + docSelection + \"|\");\n                                    console.log(' ~~~ from ' +docSelection.startOffset + ' to  ' + docSelection.endOffset);\n                                }*\/\n\n                                Evernote.Utils.sendMessageToPopup('highlightDomChangesStart');\n                                \/\/  replace\n                                _currNode.parentNode.replaceChild(_resNode, _currNode);\n\n                                Evernote.Utils.sendMessageToPopup('highlightDomChangesEnd');\n\/*\n                                with (Evernote.evernotePopup) {\n                                    console.log(' ~~~ highlight.js nagadil |'  + docSelection + \"|\");\n                                    console.log(' ~~~ from ' +docSelection.startOffset + ' to  ' + docSelection.endOffset);\n                                }*\/\n\n                                break;\n\n                            case (($H.parseOptions._elements_self_closing.indexOf('|'+_currTag+'|') > -1)):\n\n                                \/\/  result\n                                _resNode = _currNode;\n\n                                \/* nothing *\/ \/*\n                                    var _newElement = $H.document.createElement('em');\n                                        _newElement.className = $H.settings.highlightElementCSSClass;\n                                        _newElement.innerHTML = _currBuiltHTML;\n                                    _currNode.parentNode.replaceChild(_newElement, _currNode);\n                                *\/\n\n                                break;\n\n                            default:\n\n                                \/\/  result\n                                _resNode = _currNode;\n\n                                \/\/  innerHTML\n                                _currBuiltHTML = _currBuiltHTML.substr((_currBuiltHTML.indexOf('>')+1));\n                                _currBuiltHTML = _currBuiltHTML.substr(0, _currBuiltHTML.lastIndexOf('<'));\n\n                                \/\/  highlighted anything?\n                                if (_currBuiltHTML.indexOf('<em class=\"'+$H.settings.highlightElementCSSClass+'\">') > - 1); else { break; }\n\n                                \/\/  do it\n                                _currNode.innerHTML = _currBuiltHTML;\n                                break;\n                        }\n\n                    \/\/  set highlight class \n                    \/\/  ===================\n\n                        \/\/  inside node\n                        $CJ(_resNode).find('em.'+$H.settings.highlightElementCSSClass+':not(['+$H.settings.highlightElementIdAttribute+'])').attr($H.settings.highlightElementIdAttribute, _selection_id);\n\n                        \/\/  on node\n                        if ((_currTag == 'em') &#038;&#038; $CJ(_resNode).hasClass($H.settings.highlightElementCSSClass))\n                            { $CJ(_resNode).attr($H.settings.highlightElementIdAttribute, _selection_id); }\n\n                        \/\/  clean::add\n                        _parents_to_clean.push(_resNode.parentNode);\n                }\n\n                \/\/  clean::do\n                $H.highlight__deleteSpansFromParents(_parents_to_clean);\n        };\n\n    \/\/  do range }\n\n    \/\/  do current selection {\n    \/\/  ======================\n\n        $H.highlight__doCurentSelection = function ()\n        {\n            \/\/  vars\n            \/\/  ====\n                var \n                    _selection = $H.sel.getSelection($H.window),\n                    _range = $H.sel.getRange(_selection),\n                    _text = $H.sel.getRangeText(_range),\n\n                    _good_range = (_range ? {\n                        'commonAncestorContainer':  _range.commonAncestorContainer,\n                        'startContainer':           _range.startContainer,\n                        'endContainer':             _range.endContainer,\n                        'startOffset':              _range.startOffset,\n                        'endOffset':                _range.endOffset\n                    } : false)\n                ;\n\n            \/\/  some exception rules\n            \/\/  ====================\n                switch (true)\n                {\n                    case (!(_text)):\n                    case (!(_text.length > 0)):\n                    case (!(_good_range)):\n                        return false;\n                }\n\n            \/\/  some corrections\n            \/\/  ================\n\n                \/\/  Firefox fucks up -- https:\/\/developer.mozilla.org\/en\/DOM\/range.startOffset\n                \/\/  Offsets mean two differet things\n\n                \/\/  start container\n                if (_good_range.startContainer.nodeType == 1)\n                {\n                    if (_good_range.startContainer.childNodes[_good_range.startOffset])\n                    {\n                        _good_range.startContainer = _good_range.startContainer.childNodes[_good_range.startOffset];\n                        _good_range.startOffset = 0;\n                    }\n                }\n\n                \/\/  end container\n                if (_good_range.endContainer.nodeType == 1)\n                {\n                    if (_good_range.endContainer.childNodes[_good_range.endOffset])\n                    {\n                        _good_range.endContainer = _good_range.endContainer.childNodes[_good_range.endOffset];\n                        _good_range.endOffset = 0;\n                    }\n                }\n\n            \/\/  highlight range\n            \/\/  ===============\n                var _highlighted_range = $H.highlight__doRange(_good_range);\n                if (_highlighted_range === false) { return false; }\n\n            \/\/  clear selection\n            \/\/  ===============\n                try { _selection.removeAllRanges(); } catch (e) {}\n\n            \/\/  correct double highlights\n            \/\/  =========================\n                var _parents_double_to_clean = [];\n                $H.$elementWhichMustContainAllHighlights.find('em.'+$H.settings.highlightElementCSSClass+' em.'+$H.settings.highlightElementCSSClass).each(function (_i, _e)\n                {\n                    \/\/  remove inner button\n                        $CJ(_e).find('a.'+$H.settings.highlightElementDeleteCSSClass).remove();\n\n                    \/\/  create\n                    var _newElement = $H.document.createElement('span');\n                        _newElement.innerHTML = _e.innerHTML;\n\n                    \/\/  repalce\n                    _e.parentNode.replaceChild(_newElement, _e);\n\n                    \/\/  add\n                    _parents_double_to_clean.push(_newElement.parentNode);\n                });\n\n                \/\/  clean\n                $H.highlight__deleteSpansFromParents(_parents_double_to_clean);\n\n            \/\/  remove buttons and classes\n            \/\/  ==========================\n                \/\/  delete buttons\n                $H.$elementWhichMustContainAllHighlights.find('em.'+$H.settings.highlightElementCSSClass+' a.'+$H.settings.highlightElementDeleteCSSClass).remove();\n\n                \/\/  first, last\n                $H.$elementWhichMustContainAllHighlights.find('em.'+$H.settings.highlightElementCSSClass+'.'+$H.settings.highlightElementFirstCSSClass).removeClass($H.settings.highlightElementFirstCSSClass);\n                $H.$elementWhichMustContainAllHighlights.find('em.'+$H.settings.highlightElementCSSClass+'.'+$H.settings.highlightElementLastCSSClass).removeClass($H.settings.highlightElementLastCSSClass);\n\n            \/\/  add buttons and classes\n            \/\/  =======================\n                var \n                    _highlights_collection = $H.$elementWhichMustContainAllHighlights.find('em.'+$H.settings.highlightElementCSSClass),\n                    _highlights_collection_ids = [],\n                    _curr_delete_button = false\n                ;\n\n                \/\/  get all ids\n                _highlights_collection.each(function (_i, _e) {\n                    _highlights_collection_ids.push($CJ(_e).attr($H.settings.highlightElementIdAttribute));\n                });\n\n                \/\/  add button, classes\n                _highlights_collection.each(function (_i, _e)\n                {\n                    var\n                        _isFirst = (_highlights_collection_ids[(_i-1)] ? (_highlights_collection_ids[_i] != _highlights_collection_ids[(_i-1)]) : true),\n                        _isLast = (_highlights_collection_ids[(_i+1)] ? (_highlights_collection_ids[_i] != _highlights_collection_ids[(_i+1)]) : true)\n                    ;\n\n                    if (_isFirst)\n                    {\n                        \/\/  class\n                        $CJ(_e).addClass($H.settings.highlightElementFirstCSSClass);\n\n                        \/\/  create button\n                        _curr_delete_button = $H.document.createElement('a');\n                        _curr_delete_button.className = $H.settings.highlightElementDeleteCSSClass;\n                        _curr_delete_button.id = $H.settings.highlightElementDeleteIdPrefix + _highlights_collection_ids[_i];\n\n                        \/\/  add button\n                        _e.insertBefore(_curr_delete_button, _e.firstChild);\n                    }\n\n                    if (_isLast)\n                    {\n                        \/\/  class\n                        $CJ(_e).addClass($H.settings.highlightElementLastCSSClass);\n                    }\n                });\n        };\n\n    \/\/  do current selection }\n\n    \/\/  delete highlight {\n    \/\/  ==================\n\n        $H.highlight__deleteAllHighlights = function ()\n        {\n            $H.highlight__deleteHighlight('all');\n        };\n\n        $H.highlight__deleteHighlight = function (_highlight_id)\n        {\n            var \n                _expression = 'em.' + $H.settings.highlightElementCSSClass + (_highlight_id == 'all' ? '' : '['+$H.settings.highlightElementIdAttribute+'=\"'+_highlight_id+'\"]'),\n                _parents_to_clean = []\n            ;\n\n            \/\/  collection\n            $H.$elementWhichMustContainAllHighlights.find(_expression).each(function (_index, _e)\n            {\n                \/\/  create\n                var _s = $H.document.createElement('span');\n                    _s.innerHTML = _e.innerHTML;\n\n                \/\/  do\n                _e.parentNode.replaceChild(_s, _e);\n\n                \/\/  parents\n                _parents_to_clean.push(_s.parentNode);\n            });\n\n            \/\/  delete spans\n            $H.highlight__deleteSpansFromParents(_parents_to_clean);\n        };\n\n    \/\/  delete highlight }\n\n    \/\/  enable \/ disable {\n    \/\/  ==================\n\n        $H.enable = function ()\n        {\n            if ($H.enabled) { return; }\n            $H.enabled = true;\n            $H.$html.addClass($H.settings.highlightingEnabledCSSClass);\n        };\n\n        $H.disable = function ()\n        {\n            if ($H.enabled); else { return; }\n            $H.enabled = false;\n            $H.$html.removeClass($H.settings.highlightingEnabledCSSClass);\n        };\n\n    \/\/  enable \/ disable }\n\n    \/\/  add mouse handlers {\n    \/\/  ====================\n\n        \/\/  globals\n        $H.highlight__mouseUp_timeout = false;\n        $H.highlight__deleteButton__byId__mouseEnter_timeout = {};\n        $H.highlight__deleteButton__byId__mouseLeave_timeout = {};\n\n        \/\/  containers mouse up\n        $H.highlight__mouseUp = function ()\n        {\n            \/\/  not in highlight mode\n            if ($H.enabled); else { return; }\n\n            \/\/  timeout\n            $H.highlight__mouseUp_timeout = $H.window.setTimeout\n            (\n                function ()\n                {\n                    \/\/  try\n                    $H.highlight__mouseUp_timeout = false;\n                    var _didSelection = $H.highlight__doCurentSelection();\n\n                    \/\/  callback\n                    if (_didSelection === false); else {\n                        if ($H.callbacks.highlightAdded) {\n                            $H.callbacks.highlightAdded();\n                        }\n                    }\n                }, \n                250\n            );\n        };\n\n        \/\/  containers mouse down\n        $H.highlight__mouseDown = function ()\n        {\n            \/\/  not in highlight mode\n            if ($H.enabled); else { return; }\n\n            \/\/  timeout\n            $H.window.clearTimeout($H.highlight__mouseUp_timeout);\n        };\n\n        \/\/  delete buttons show\/hide\n        $H.highlight__deleteButton__show = function (_highlight_id) { $H.$elementWhichMustContainAllHighlights.find('#' + $H.settings.highlightElementDeleteIdPrefix + _highlight_id).fadeIn(250); };\n        $H.highlight__deleteButton__hide = function (_highlight_id) { $H.$elementWhichMustContainAllHighlights.find('#' + $H.settings.highlightElementDeleteIdPrefix + _highlight_id).fadeOut(250); };\n\n        \/\/  add mouse handlers\n        $H.addMouseHandlers = function ()\n        {\n            \/\/  mouse up\/down\n            for (var i=0, _i=$H.settings.elementsToAttachMouseHandlersTo.length; i<_i; i++)\n            {\n                $CJ($H.settings.elementsToAttachMouseHandlersTo[i])\n                    .mouseup($H.highlight__mouseUp)\n                    .mousedown($H.highlight__mouseDown)\n                ;\n            }\n\n            \/\/  highlight mouse enter\n            $H.$elementWhichMustContainAllHighlights.on('mouseenter', 'em.'+$H.settings.highlightElementCSSClass, function ()\n            {\n                var _highlight_id = $CJ(this).attr($H.settings.highlightElementIdAttribute);\n\n                $H.window.clearTimeout($H.highlight__deleteButton__byId__mouseLeave_timeout[_highlight_id]);\n\n                $H.highlight__deleteButton__byId__mouseEnter_timeout[_highlight_id] = $H.window.setTimeout(\n                    function ()\n                    {\n                        $H.highlight__deleteButton__byId__mouseEnter_timeout[_highlight_id] = false;\n                        $H.highlight__deleteButton__show(_highlight_id);\n                    },\n                    250\n                );\n            });\n\n            \/\/  highlight mouse leave\n            $H.$elementWhichMustContainAllHighlights.on('mouseleave', 'em.'+$H.settings.highlightElementCSSClass, function ()\n            {\n                var _highlight_id = $CJ(this).attr($H.settings.highlightElementIdAttribute);\n\n                $H.window.clearTimeout($H.highlight__deleteButton__byId__mouseEnter_timeout[_highlight_id]);\n\n                $H.highlight__deleteButton__byId__mouseLeave_timeout[_highlight_id] = $H.window.setTimeout(\n                    function ()\n                    {\n                        $H.highlight__deleteButton__byId__mouseLeave_timeout[_highlight_id] = false;\n                        $H.highlight__deleteButton__hide(_highlight_id);\n                    },\n                    250\n                );\n            });\n\n            \/\/  highlight delete click        \n            $H.$elementWhichMustContainAllHighlights.on('click', 'em.'+$H.settings.highlightElementCSSClass+' a.'+$H.settings.highlightElementDeleteCSSClass, function ()\n            {\n                \/\/  get id\n                var _id = $CJ(this.parentNode).attr($H.settings.highlightElementIdAttribute);\n\n                \/\/  remove self\n                $CJ(this).remove();\n\n                \/\/  delete\n                $H.highlight__deleteHighlight(_id);\n\n                \/\/  callback\n                if ($H.callbacks.highlightDeleted) {\n                    $H.callbacks.highlightDeleted();\n                }\n            });\n        };\n\n    \/\/  add mouse handlers }\n\n    \/\/  get clean html {\n    \/\/  ================\n\n        $H.getCleanHTML = function (_rawHTML)\n        {\n            \/\/  html\n            var _html = _rawHTML;\n\n            \/\/  remove all spans -- spans hold deleted highlights, or useless helper elements\n            _html = _html.replace(\/<span([^>]*?)>\/gi, '');\n            _html = _html.replace(\/<\\\/span>\/gi, '');\n\n            \/\/  remove highlight-delete buttons\n            var _highlight_delete_reg = new RegExp('<a ([^>]*?)'+$H.settings.highlightElementDeleteCSSClass+'([^>]*?)><\/a>', 'gi');\n            _html = _html.replace(_highlight_delete_reg, '');\n\n            \/\/  highlight element\n            var _highlight_element_reg = new RegExp('<em ([^>]*?)'+$H.settings.highlightElementCSSClass+'([^>]*?)>([^>]+?)<\/em>', 'gi');\n            _html = _html.replace(_highlight_element_reg, '<highlight>$3<\/highlight>');\n\n            \/\/  double EMs\n            var _two_highlights_reg = new RegExp('<highlight>([\\\\s\\\\S]*?)<\/highlight>([ \\\\n\\\\r\\\\t]*?)<highlight>([\\\\s\\\\S]*?)<\/highlight>', 'gi');\n            while (true &#038;&#038; _html.match(_two_highlights_reg)) {\n                _html = _html.replace(_two_highlights_reg, '<highlight>$1$3<\/highlight>');\n            }\n\n            \/\/  replace EMs\n            var _highlight_reg = new RegExp('<highlight>([\\\\s\\\\S]*?)<\/highlight>', 'gi');\n            _html = _html.replace(_highlight_reg, $H.settings.highlightCleanHTMLElementStart+'$1'+$H.settings.highlightCleanHTMLElementEnd);\n\n            return _html;\n        };\n\n    \/\/  get clean html }\t\t\n\n    \/\/  return self\n    \/\/  ===========\n        return $H;\n}\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/*!\n *  ClearlyComponent__next\n *  Evernote Clearly's next-page algorithm as an embeddable component.\n *  Copyright 2013, Evernote Corporation\n *\n *  Usage:\n *  ======\n *\n *      The Next-pages Clearly-component works hand-in-hand with the clearly Detect Component.\n *      So its init\/usage pattern needs to come after the normal init\/usage pattern for the Detect Component.\n *      Like this:\n *\n *      First \"Detect\":\n *      =============\n *\n *          \/\/ define\n *          window.ClearlyComponent__detect = {\n *              'callbacks': {\n *                  'finished': someFunction(),\n *              },\n *              'window': window,\n *              'document': document,\n *              'jQuery': window.jQuery\n *          };\n *\n *          \/\/ init -- will return false, if something goes wrong\n *          window.ClearlyComponent__detect = initClearlyComponent__detect(window.ClearlyComponent__detect);\n *\n *      Then \"Next\":\n *      ============\n *\n *          \/\/ define\n *          window.ClearlyComponent__next = {\n *              'callbacks': {\n *                  'newPageFound': someFunction()\n *              },\n *\n *              'settings': { \n *                  'onCreateNextPagesContainerUseThisId': 'string',\n *                  'onCreateNextPagesContainerDoNotInsertCSS': true\n *              },\n *\n *              'detectComponentInstance': window.ClearlyComponent__detect\n *          };\n *\n *          \/\/ init -- will return false, if something goes wrong\n *          window.ClearlyComponent__next = initClearlyComponent__next(window.ClearlyComponent__next);\n *\n *          \/\/ call -- returns nothing; callbacks will be used\n *          window.ClearlyComponent__next.createNextPagesContainer()\n *          window.ClearlyComponent__next.start();\n *\n *\/\n\n\/*\n    changes:\n    ========\n        $R => $N, $D\n*\/\n\nfunction initClearlyComponent__next(_paramInstance)\n{\n    \/\/  global instance reference {\n    \/\/  ===========================\n\n        \/\/  null; return\n        if (_paramInstance); else { return false; }\n\n        \/\/  shorthand\n        $N = _paramInstance;\n\n    \/\/  global instance reference }\n\n    \/\/  required vars {\n    \/\/  ===============\n\n        \/\/  the component instance object must already be created,\n        \/\/  when the init function is called. it must have these vars set:\n\n        switch (true)\n        {\n            case (!($N.detectComponentInstance)):\n\n            case (!($N.callbacks)):\n            case (!($N.callbacks.newPageFound)):\n\n                \/\/  something's wrong\n                return false;\n        }\n\n    \/\/  required vars }\n\n    \/\/  missing settings {\n    \/\/  ==================\n\n        if ($N.settings); else { $N.settings = {}; }\n\n        \/\/  names for stuff\n        \/* frames id *\/               if ($N.settings.onCreateNextPageFramesUseThisIdPrefix); else           { $N.settings.onCreateNextPageFramesUseThisIdPrefix =          'clearly_next_page_frame__'; }\n        \/* container id *\/            if ($N.settings.onCreateNextPagesContainerUseThisId); else             { $N.settings.onCreateNextPagesContainerUseThisId =            'clearly_next_pages_container'; }\n        \/* insert container css *\/    if ($N.settings.onCreateNextPagesContainerDoNotInsertCSS); else        { $N.settings.onCreateNextPagesContainerDoNotInsertCSS =       false; }\n        \/* frames attribute *\/        if ($N.settings.onLoadingNextPageFramesUseThisAttribute); else         { $N.settings.onLoadingNextPageFramesUseThisAttribute =        'clearly_next_page_loaded'; }\n        \/* frames attribute value *\/  if ($N.settings.onLoadingNextPageFramesUseThisAttributeValue); else    { $N.settings.onLoadingNextPageFramesUseThisAttributeValue =   'yes'; }\n\n    \/\/  missing settings }\n\n    \/\/  global vars {\n    \/\/  =============\n\n        $D = $N.detectComponentInstance;\n        $CJ = $D.jQuery;\n\n        $N.pages = [];\n\n    \/\/  global vars }\n\n    \/\/  parse options {\n    \/\/  =============   \n\n\t\t$N.parseOptions =\n\t\t{\n\t\t\t'_next_page_keywords': [\n                \/* english *\/   'next page', 'next',\n                \/* german *\/    'vorw&#228;rts', 'weiter',\n                \/* japanese *\/  '&#27425;&#12408;'\n\t\t\t],\n\n\t\t\t'_next_page_keywords_not': [\n\t\t\t    \/* english *\/   'article', 'story', 'post', 'comment', 'section', 'chapter'\n\t\t\t]\n\t\t};\n\n    \/\/  parse options }\n\n    \/\/  create next pages container {\n    \/\/  =============================\n\n        $N.createNextPagesContainer = function ()\n        {\n            \/\/  default id\n            \/\/  ==========\n                _container_id = $N.settings.onCreateNextPagesContainerUseThisId;\n\n            \/\/\tcontainer\n            \/\/\t=========\n                var _containerElement = $D.document.createElement('div');\n                    _containerElement.setAttribute('id', _container_id);\n\n            \/\/\tcss\n            \/\/\t===\n                if ($N.settings.onCreateNextPagesContainerDoNotInsertCSS); else\n                {\n                    var \n                        _cssElement = $D.document.createElement('style'),\n                        _cssText = ''\n                        +\t'#'+_container_id+' { '\n                        +\t\t'margin: 0; padding: 0; border: none; '\n                        +\t\t'position: absolute; '\n                        +\t\t'width: 10px; height: 10px; '\n                        +\t\t'top: -100px; left: -100px; '\n                        +\t'} '\n                        +\t'#'+_container_id+' iframe { '\n                        +\t\t'margin: 0; padding: 0; border: none; '\n                        +\t\t'position: absolute; '\n                        +\t\t'width: 10px; height: 10px; '\n                        +\t\t'top: -100px; left: -100px; '\n                        +\t'} '\n                    ;\n                    _cssElement.setAttribute('id', _container_id + '__css');\n                    _cssElement.setAttribute('type', 'text\/css');\n                    if (_cssElement.styleSheet) { _cssElement.styleSheet.cssText = _cssText; }\n                        else { _cssElement.appendChild($D.document.createTextNode(_cssText)); }\n                }\n\n            \/\/\twrite\n            \/\/\t=====\n                var _body = $D.document.getElementsByTagName('body')[0];\n                    \/* css *\/       if (_cssElement) { _body.appendChild(_cssElement); }\n                    \/* container *\/ _body.appendChild(_containerElement);\n\n            \/\/  set\n            \/\/  ===\n                $N.nextPages = _containerElement;\n                $N.$nextPages = $CJ($N.nextPages);\n        };\n\n    \/\/  create next pages container }\n\n\t\/\/  helpers {\n\t\/\/  =========\n\n        \/\/  substr starting with the first slash after \/\/\n\t\t$N.getURLPath = function (_url) { return _url.substr(_url.indexOf('\/', (_url.indexOf('\/\/') + 2))); };\n\n        \/\/  substr until the first slash after \/\/\n\t\t$N.getURLDomain = function (_url) { return _url.substr(0, _url.indexOf('\/', (_url.indexOf('\/\/') + 2))); };\n\n\t\/\/  helpers }\n\n\t\/\/  load page {\n\t\/\/  ===========\n\n        $N.nextPage__loadToFrame = function (_pageNr, _nextPageURL)\n        {\n            \/\/\tdo ajax\n            \/\/\t=======\n                $CJ.ajax\n                ({\n                    'url' : _nextPageURL,\n\n                    'type' : 'GET',\n                    'dataType' : 'html',\n                    'async' : true,\n                    'timeout': (10 * 1000),\n\n                    \/\/'headers': { 'Referrer': _nextPageURL },\n\n                    'success' : function (_response, _textStatus, _xhr)\t{ $N.nextPage__ajaxComplete(_pageNr, _response, _textStatus, _xhr); },\n                    'error' : \tfunction (_xhr, _textStatus, _error)\t{ $N.nextPage__ajaxError(_pageNr, _xhr, _textStatus, _error); }\n                });\n        };\n\n        $N.nextPage__ajaxError = function (_pageNr, _xhr, _textStatus, _error) { };\n\n        $N.nextPage__ajaxComplete = function (_pageNr, _response, _textStatus, _xhr)\n        {\n            \/\/\tvalid?\n            \/\/\t======\n                if (_response > ''); else { return; }\n\n            \/\/\tget html\n            \/\/\t========\n                var _html = _response;\n\n                \/\/\tnormalize\n                \/\/\t=========\n                    _html = _html.replace(\/<\\s+\/gi, '<');\n                    _html = _html.replace(\/\\s+>\/gi, '>');\n                    _html = _html.replace(\/\\s+\\\/>\/gi, '\/>');\n\n                \/\/\tremove\n                \/\/\t======\n                    _html = _html.replace(\/<script[^>]*?>([\\s\\S]*?)<\\\/script>\/gi, '');\n                    _html = _html.replace(\/<script[^>]*?\\\/>\/gi, '');\n                    _html = _html.replace(\/<noscript[^>]*?>([\\s\\S]*?)<\\\/noscript>\/gi, '');\n\n            \/\/\tappend frame\n            \/\/\t============\n                $N.$nextPages.append(''\n                    + '<iframe'\n                    + ' id=\"'+$N.settings.onCreateNextPageFramesUseThisIdPrefix+_pageNr+'\"'\n                    + ' scrolling=\"no\" frameborder=\"0\"'\n                    + '><\/iframe>'\n                );\t\t\n\n            \/\/\twrite to frame\n            \/\/\t==============\n                var _doc = $N.$nextPages.find('#'+$N.settings.onCreateNextPageFramesUseThisIdPrefix+_pageNr).contents().get(0);\n                    _doc.open();\n                    _doc.write(_html);\n                    _doc.close();\n\n            \/\/\tadd load handler\n            \/\/\t================\n                $N.$nextPages.find('#'+$N.settings.onCreateNextPageFramesUseThisIdPrefix+_pageNr).bind('load', function ()\n                {\n                    \/\/  done?\n                    if ($N.$nextPages.find('#'+$N.settings.onCreateNextPageFramesUseThisIdPrefix+_pageNr).attr($N.settings.onLoadingNextPageFramesUseThisAttribute) == $N.settings.onLoadingNextPageFramesUseThisAttributeValue) { return; }\n\n                    \/\/  can do?\n                    var _doc = $N.$nextPages.find('#'+$N.settings.onCreateNextPageFramesUseThisIdPrefix+_pageNr).contents().get(0);\n                    if (_doc); else { return; }\n                    if (_doc.readyState == 'interactive' || _doc.readyState == 'complete'); else { return; }\n\n                    \/\/  mark\n                    $N.$nextPages.find('#'+$N.settings.onCreateNextPageFramesUseThisIdPrefix+_pageNr).attr($N.settings.onLoadingNextPageFramesUseThisAttribute, $N.settings.onLoadingNextPageFramesUseThisAttributeValue);\n\n                    \/\/ do\n                    $N.nextPage__loadedInFrame(_pageNr, _doc.defaultView);                  \n                });\n        };\n\n        $N.nextPage__loadedInFrame = function (_pageNr, _pageWindow)\n        {\n            \/\/\tfind\n            \/\/\t====\n                var \n                    _found = $D.getContent__findInPage(_pageWindow),\n                    _foundHTML = _found._html,\n                    _removeTitleRegex = new RegExp($D.articleTitleMarker__start + '(.*?)' + $D.articleTitleMarker__end, 'i')\n                ;\n\n            \/\/  get first fragment\n            \/\/  ==================\n                var _firstFragment = $D.nextPage__getFirstFragment(_foundHTML);\n\n                \/\/  gets first 2000 characters\n                \/\/  diff set at 100 -- 0.05\n                switch (true)\n                {\n                    case ($D.levenshteinDistance(_firstFragment, $N.nextPage__firstFragment__firstPage) < 100):\n                    case ($D.levenshteinDistance(_firstFragment, $N.nextPage__firstFragment__lastPage) < 100):\n                        \/\/  break\n                        return false;\n\n                    default:\n                        \/\/  add to first fragemnts\n                        $N.nextPage__firstFragment__lastPage = _firstFragment;\n                        break;\n                }\n\n            \/\/  remove title -- do it twice\n            \/\/  ============\n\n                \/\/  once with document title\n                _foundHTML = $D.getContent__find__isolateTitleInHTML(_foundHTML, ($D.document.title > '' ? $D.document.title : ''));\n                _foundHTML = _foundHTML.replace(_removeTitleRegex, '');\n\n                \/\/  once with article title\n                _foundHTML = $D.getContent__find__isolateTitleInHTML(_foundHTML, $D.articleTitle);\n                _foundHTML = _foundHTML.replace(_removeTitleRegex, '');\n\n            \/\/\treturn\n            \/\/\t======\n                var _page = {\n                    '_url':         _pageWindow.location.href,\n                    '_html':        _foundHTML,\n                    '_elements':    [_found._targetCandidate.__node]\n                };\n\n                $N.pages.push(_page);\n                if ($N.callbacks.newPageFound) { $N.callbacks.newPageFound(_page); }\n\n            \/\/\tnext\n            \/\/\t====\n                $N.nextPage__find(_pageWindow, _found._links);\n        };\n\n\t\/\/  load }\n\n    \/\/  find {\n    \/\/  ======\n\n\t\t$N.nextPage__find = function (_currentPageWindow, _linksInCurrentPage)\n\t\t{\n\t\t\t\/\/\tpage id\n\t\t\t\tvar _pageNr = ($N.pages.length + 1);\n\n\t\t\t\/\/\tget\n\t\t\t\/\/\t===\n\t\t\t\tvar _possible = [];\n\t\t\t\tif (_possible.length > 0); else { _possible = $N.nextPage__find__possible(_currentPageWindow, _linksInCurrentPage, 0.5); }\n\t\t\t\t\/\/if (_possible.length > 0); else { _possible = $N.nextPage__find__possible(_currentPageWindow, _linksInCurrentPage, 0.50); }\n\n\t\t\t\t\/\/\tnone\n\t\t\t\tif (_possible.length > 0); else\n\t\t\t\t\t{ if ($D.debug) { $D.log('no next link found'); } return; }\n\n\t\t\t\t\/\/  log\n\t\t\t\tif ($D.debug) { $D.log('possible next', _possible); }\n\n\t\t\t\/\/\tthe one\n\t\t\t\/\/\t=======\n\t\t\t\tvar _nextLink = false;\n\n\t\t\t\/\/\tnext keyword?\n\t\t\t\/\/\t=============\n\t\t\t\t(function ()\n\t\t\t\t{\n\t\t\t\t\tif (_nextLink) { return; }\n\n\t\t\t\t\tfor (var i=0, _i=_possible.length; i<_i; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (var j=0, _j=$N.parseOptions._next_page_keywords.length; j<_j; j++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (_possible[i]._caption.indexOf($N.parseOptions._next_page_keywords[j]) > -1)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\/\/\tlength\n\t\t\t\t\t\t\t\t\/\/\t======\n\t\t\t\t\t\t\t\t\tif (_possible[i]._caption.length > $N.parseOptions._next_page_keywords[j].length * 2)\n\t\t\t\t\t\t\t\t\t\t{ continue; }\n\n\t\t\t\t\t\t\t\t\/\/\tnot keywords\n\t\t\t\t\t\t\t\t\/\/\t============\n\t\t\t\t\t\t\t\t\tfor (var z=0, _z=$N.parseOptions._next_page_keywords_not.length; z<_z; z++)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tif (_possible[i]._caption.indexOf($N.parseOptions._next_page_keywords_not[z]) > -1)\n\t\t\t\t\t\t\t\t\t\t\t{ _nextLink = false; return; }\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\/\/\tgot it\n\t\t\t\t\t\t\t\t\/\/\t======\n\t\t\t\t\t\t\t\t\t_nextLink = _possible[i];\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})();\t\n\n\t\t\t\/\/\tcaption matched page number\n\t\t\t\/\/\t===========================\n\t\t\t\t(function ()\n\t\t\t\t{\n\t\t\t\t\tif (_nextLink) { return; }\n\n\t\t\t\t\tfor (var i=0, _i=_possible.length; i<_i; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (_possible[i]._caption == (''+_pageNr))\n\t\t\t\t\t\t\t{ _nextLink = _possible[i]; return; }\n\t\t\t\t\t}\n\t\t\t\t})();\n\n\t\t\t\/\/\tnext keyword in title\n\t\t\t\/\/\t=====================\n\t\t\t\t(function ()\n\t\t\t\t{\n\t\t\t\t\tif (_nextLink) { return; }\n\n\t\t\t\t\tfor (var i=0, _i=_possible.length; i<_i; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\t\/\/\tsanity\n\t\t\t\t\t\tif (_possible[i]._title > ''); else { continue; }\n\t\t\t\t\t\tif ($D.measureText__getTextLength(_possible[i]._caption) <= 2); else { continue; }\n\n\t\t\t\t\t\tfor (var j=0, _j=$N.parseOptions._next_page_keywords.length; j<_j; j++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (_possible[i]._title.indexOf($N.parseOptions._next_page_keywords[j]) > -1)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\/\/\tlength\n\t\t\t\t\t\t\t\t\/\/\t======\n\t\t\t\t\t\t\t\t\tif (_possible[i]._title.length > $N.parseOptions._next_page_keywords[j].length * 2)\n\t\t\t\t\t\t\t\t\t\t{ continue; }\n\n\t\t\t\t\t\t\t\t\/\/\tnot keywords\n\t\t\t\t\t\t\t\t\/\/\t============\n\t\t\t\t\t\t\t\t\tfor (var z=0, _z=$N.parseOptions._next_page_keywords_not.length; z<_z; z++)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tif (_possible[i]._title.indexOf($N.parseOptions._next_page_keywords_not[z]) > -1)\n\t\t\t\t\t\t\t\t\t\t\t{ _nextLink = false; return; }\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\/\/\tgot it\n\t\t\t\t\t\t\t\t\/\/\t======\n\t\t\t\t\t\t\t\t\t_nextLink = _possible[i];\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})();\n\n\t\t\t\/\/\treturn?\n\t\t\t\/\/\t=======\n\t\t\t\tif (_nextLink); else { return; }\n\n\t\t\t\/\/\tmark\n\t\t\t\/\/\t====\n\t\t\t\tif ($D.debug)\n\t\t\t\t{\n\t\t\t\t\t$D.debugOutline(_nextLink._node, 'target', 'next-page');\n\t\t\t\t\t$D.log('NextPage Link', _nextLink, _nextLink._node);\n\t\t\t\t}\n\n\t\t\t\/\/\tprocess page\n\t\t\t\/\/\t============\n\t\t\t\t$N.nextPage__loadToFrame(_pageNr, _nextLink._href);\n\t\t};\n\n\t\t$N.nextPage__find__possible = function (_currentPageWindow, _linksInCurrentPage, _distanceFactor)\n\t\t{\n\t\t\tvar \n\t\t\t\t_mainPageHref = $D.window.location.href,\n\t\t\t\t_mainPageDomain = $N.getURLDomain(_mainPageHref),\n\t\t\t\t_mainPagePath = $N.getURLPath(_mainPageHref)\n\t\t\t;\n\n\t\t\tvar _links = $CJ.map\n\t\t\t(\n\t\t\t\t_linksInCurrentPage,\n\t\t\t\tfunction (_element, _index)\n\t\t\t\t{\n\t\t\t\t\tvar \n\t\t\t\t\t\t_href = _element.__node.href,\n\t\t\t\t\t\t_path = $N.getURLPath(_href),\n\t\t\t\t\t\t_title = (_element.__node.title > '' ? _element.__node.title.toLowerCase() : ''),\n\t\t\t\t\t\t_caption = _element.__node.innerHTML.replace(\/<[^>]+?>\/gi, '').replace(\/\\&#038;[^\\&\\s;]{1,10};\/gi, '').replace(\/\\s+\/gi, ' ').replace(\/^ \/, '').replace(\/ $\/, '').toLowerCase(),\n\t\t\t\t\t\t_distance = $D.levenshteinDistance(_mainPagePath, _path)\n\t\t\t\t\t;\n\n\t\t\t\t\tvar _caption2 = '';\n\t\t\t\t\tfor (var i=0, _i=_caption.length, _code=0; i<_i; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\t_code = _caption.charCodeAt(i);\n\t\t\t\t\t\t_caption2 += (_code > 127 ? ('&#'+_code+';') : _caption.charAt(i));\n\t\t\t\t\t}\n\t\t\t\t\t_caption = _caption2;\n\n\t\t\t\t\tswitch (true)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase (!(_href > '')):\n\t\t\t\t\t\tcase (_mainPageHref.length > _href.length):\n\t\t\t\t\t\tcase (_mainPageDomain != $N.getURLDomain(_href)):\n\t\t\t\t\t\tcase (_href.substr(_mainPageHref.length).substr(0, 1) == '#'):\n\t\t\t\t\t\tcase (_distance > Math.ceil(_distanceFactor * _path.length)):\n\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\/\/\tskip if already loaded as next page\n\t\t\t\t\t\t\tfor (var i=0, _i=$N.pages.length; i<_i; i++)\n\t\t\t\t\t\t\t\t{ if ($N.pages[i]._url == _href) { return null; } }\n\n\t\t\t\t\t\t\t\/\/\treturn\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t'_node': _element.__node,\n\t\t\t\t\t\t\t\t'_href': _href,\n\t\t\t\t\t\t\t\t'_title': _title,\n\t\t\t\t\t\t\t\t'_caption': _caption,\n\t\t\t\t\t\t\t\t'_distance': _distance\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t\/\/\tsort -- the less points, the closer to position 0\n\t\t\t\/\/\t====\n\t\t\t\t_links.sort(function (a, b)\n\t\t\t\t{\n\t\t\t\t\tswitch (true)\n\t\t\t\t\t{\n\t\t\t\t\t\tcase (a._distance < b._distance): return -1;\n\t\t\t\t\t\tcase (a._distance > b._distance): return 1;\n\t\t\t\t\t\tdefault: return 0;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\/\/\treturn\n\t\t\t\treturn _links;\n\t\t};\n\n    \/\/  find }\n\n    \/\/  start {\n    \/\/  =======\n\n        $N.start = function ()\n        {\n            \/\/  first fragments\n                $N.nextPage__firstFragment__firstPage = $D.nextPage__firstFragment__firstPage;\n                $N.nextPage__firstFragment__lastPage = $D.nextPage__firstFragment__lastPage;\n\n            \/\/  first page\n                $N.pages = [{ '_url': $D.window.location.href }];\n\n            \/\/  start\n                $N.nextPage__find($D.window, $D.nextPage__firstLinks);\n        };\n\n    \/\/  start }\n\n    \/\/  return self\n    \/\/  ===========\n        return $N;\n}\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/*!\n *  ClearlyComponent__reformat\n *  Evernote Clearly's display as an embeddable component.\n *  Copyright 2013, Evernote Corporation\n *\n *  Usage:\n *  ======\n *\n *      \/\/ define\n *      window.ClearlyComponent__reformat = {\n *          'callbacks': {\n *              'frameCreated': someFunction(),\n *              'pageAdded': someFunction(),\n *          },\n *\n *          'settings': { \n *              'cssPath': 'string',\n *              'pageLabel': 'string'.\n *              'onCreateFrameUseThisId': 'string',\n *              'onCreateFrameDoNotInsertCSS': true\n *          },\n *\n *          'window': window,\n *          'document': document,\n *          'jQuery': window.jQuery\n *      };\n *\n *      \/\/ init -- will return false, if something goes wrong\n *      window.ClearlyComponent__reformat = initClearlyComponent__reformat(window.ClearlyComponent__reformat);\n *\n *      \/\/ create frame\n *      window.ClearlyComponent__detect.createFrame();\n *\n *      \/\/ apply options\n *      window.ClearlyComponent__detect.applyOptions(_options_object);\n *\n *      \/\/ add page\n *      window.ClearlyComponent__detect.addNewPage(_html, _source_url);\n *\n *\/\n\n\/*\n    changes:\n    ========\n        $R => $R\n        $R.win => $R.window\n\n    to do:\n    ======\n*\/\n\nfunction initClearlyComponent__reformat(_paramInstance)\n{\n    \/\/  global instance reference {\n    \/\/  ===========================\n\n        \/\/  null; return\n        if (_paramInstance); else { return false; }\n\n        \/\/  shorthand\n        $R = _paramInstance;\n\n    \/\/  global instance reference }\n\n    \/\/  required vars {\n    \/\/  ===============\n\n        \/\/  the component instance object must already be created,\n        \/\/  when the init function is called. it must have these vars set:\n\n        switch (true)\n        {\n            case (!($R.settings)):\n            case (!($R.settings.cssPath)):\n\n            case (!($R.window)):\n            case (!($R.document)):\n            case (!($R.document.body)):\n\n            case (!($R.jQuery)):\n\n                if ($R.debug)\n                {\n                    console.log(!($R.settings));\n                    console.log(!($R.settings.cssPath));\n\n                    console.log(!($R.window));\n                    console.log(!($R.document));\n                    console.log(!($R.document.body));\n\n                    console.log(!($R.jQuery));\n                }\n\n                \/\/  something's wrong\n                return false;\n        }\n\n    \/\/  required vars }\n\n    \/\/  missing settings {\n    \/\/  ==================\n\n        \/\/  names for stuff\n        \/* frame id *\/            if ($R.settings.onCreateFrameUseThisId); else             { $R.settings.onCreateFrameUseThisId =            'clearly_frame'; }\n        \/* insert frame css *\/    if ($R.settings.onCreateFrameDoNotInsertCSS); else        { $R.settings.onCreateFrameDoNotInsertCSS =       false; }\n        \/* page label *\/          if ($R.settings.pageLabel); else                          { $R.settings.pageLabel =                         'Page '; }\n\n    \/\/  missing settings }\n\n    \/\/  global vars {\n    \/\/  =============\n\n        $CJ = $R.jQuery;\n\n        $R.$window = $CJ($R.window);\n        $R.$document = $CJ($R.document);\n\n        $R.pagesCount = 0;\n        $R.footnotedLinksCount;\n\n        \/*\n            .iframe, .$iframe\n            .iframeWindow, .$iframeWindow\n            .iframeDocument, .$iframeDocument\n            .$iframeBackground, .$iframeBox, .$iframePages\n        *\/\n\n    \/\/  global vars }\n\n    \/\/  debug {\n    \/\/  =======\n\n        $R.debug = ($R.debug || false);\n\t\t$R.debugRemembered = {};\n        $R.debugTimers = [];\n\n\t\tif ($R.debug)\n\t\t{\n\t\t    \/\/  writeLog\n\t\t    \/\/  ========\n\t\t\t\tswitch (true)\n\t\t\t\t{\n\t\t\t\t\tcase (!(!($R.window.console &#038;&#038; $R.window.console.log))):    $R.writeLog = function (msg) { $R.window.console.log(msg); };       break;\n\t\t\t\t\tcase (!(!($R.window.opera &#038;&#038; $R.window.opera.postError))):  $R.writeLog = function (msg) { $R.window.opera.postError(msg); };   break;\n\t\t\t\t\tdefault:                                                    $R.writeLog = function (msg) {};                                    break;\n\t\t\t\t}\n\n            \/\/  log\n            \/\/  ===\n                $R.log = function ()\n                {\n                    if ($R.debug); else { return; }\n                    for (var i=0, il=arguments.length; i<il ; i++) { $R.writeLog(arguments[i]); }\n                    $R.writeLog('-----------------------------------------');\n                };\n\n            \/\/  remember\n            \/\/  ========\n                $R.debugRemember = function (_k, _v)\n                {\n                    $R.debugRemembered[_k] = _v;\n                };\n\t\t}\n\t\telse\n\t\t{\n            $R.writeLog \t\t= function () { return false; };\n            $R.log \t\t\t\t= function () { return false; };\n            $R.debugRemember \t= function () { return false; };\n        }\n\n    \/\/  debug }\n\n    \/\/  encode \/ decode {\n    \/\/  =================\n\n\t\t$R.encode = function (_string)\n\t\t{\n\t\t\t\/\/\tnone\n\t\t\tif (_string == '') { return 'none'; }\n\n\t\t\t\/\/\tencode\n\t\t\treturn encodeURIComponent(_string)\n\t\t\t\t.replace(\/!\/g, '%21')\n\t\t\t\t.replace(\/'\/g, '%27')\n\t\t\t\t.replace(\/\\(\/g, '%28')\n\t\t\t\t.replace(\/\\)\/g, '%29')\n\t\t\t\t.replace(\/\\*\/g, '%2A')\n\t\t\t;\n\t\t};\n\n\t\t$R.decode = function (_string)\n\t\t{\n\t\t\t\/\/\tnone\n\t\t\tif (_string == 'none') { return ''; }\n\n\t\t\t\/\/\tdecode\n\t\t\treturn decodeURIComponent(_string);\n\t\t};\n\n    \/\/  encode \/ decode }\n\n    \/\/  themes {\n    \/\/  ========\n\n        (function ()\n        {\n            \/\/  themes already set\n            if ($R.availableThemes) { return; } \n\n            \/\/  set themes\n            $R.availableThemes = {\n                'newsprint': {\n                    'text_font': \t\t\t$R.encode('\"PT Serif\"'),\n                    'text_font_header': \t$R.encode('\"PT Serif\"'),\n                    'text_font_monospace': \t$R.encode('Inconsolata'),\n                    'text_size': \t\t\t$R.encode('16px'),\n                    'text_line_height': \t$R.encode('1.5em'),\n                    'box_width': \t\t\t$R.encode('36em'),\n                    'color_background': \t$R.encode('#f3f2ee'),\n                    'color_text': \t\t\t$R.encode('#1f0909'),\n                    'color_links': \t\t\t$R.encode('#065588'),\n                    'text_align': \t\t\t$R.encode('normal'),\n                    'base': \t\t\t\t$R.encode('base__newsprint'),\n                    'footnote_links': \t\t$R.encode('on_print'),\n                    'large_graphics': \t\t$R.encode('do_nothing'),\n                    'custom_css': \t\t\t$R.encode(''\n                                            + '#text #articleHeader { border-color: #c5c5c5; }'\n                                            + '#text #relatedNotes { border-color: rgba(197, 197, 197, 0.5); }'\n                                            + '#text blockquote { border-color: #bababa; color: #656565; }'\n                                            + '#text thead { background-color: #dadada; }'\n                                            + '#text tr:nth-child(even) { background: #e8e7e7; }'\n                                            + '#text hr { border-color: #c5c5c5; }')\n                },\n                'notable': {\n                    'text_font': \t\t\t$R.encode('Helvetica, Arial'),\n                    'text_font_header': \t$R.encode('Helvetica, Arial'),\n                    'text_font_monospace': \t$R.encode('\"Droid Sans Mono\"'),\n                    'text_size': \t\t\t$R.encode('14px'),\n                    'text_line_height': \t$R.encode('1.5em'),\n                    'box_width': \t\t\t$R.encode('42em'),\n                    'color_background': \t$R.encode('#fff'),\n                    'color_text': \t\t\t$R.encode('#333'),\n                    'color_links': \t\t\t$R.encode('#090'),\n                    'text_align': \t\t\t$R.encode('normal'),\n                    'base': \t\t\t\t$R.encode('base__notable'),\n                    'footnote_links': \t\t$R.encode('on_print'),\n                    'large_graphics': \t\t$R.encode('do_nothing'),\n                    'custom_css': \t\t\t$R.encode(''\n                                            + '#text #articleHeader { border-color: #000; }'\n                                            + '#text #relatedNotes { border-color: rgba(0, 0, 0, 0.25); }'\n                                            + '#text h1 { color: #000; }'\n                                            + '#text h2, #text h3, #text h4, #text h5, #text h6 { color: #444; }'\n                                            + '#text blockquote { border-color: #d1d1d1; }'\n                                            + '#text thead { background-color: #444; color: #fff; }'\n                                            + '#text tr:nth-child(even) { background: #d1d1d1; }'\n                                            + '#text hr { border-color: #000; }')\n                },\n                'night_owl': {\n                    'text_font': \t\t\t$R.encode('\"PT Serif\"'),\n                    'text_font_header': \t$R.encode('\"PT Serif\"'),\n                    'text_font_monospace': \t$R.encode('Inconsolata'),\n                    'text_size': \t\t\t$R.encode('16px'),\n                    'text_line_height': \t$R.encode('1.5em'),\n                    'box_width': \t\t\t$R.encode('36em'),\n                    'color_background': \t$R.encode('#2d2d2d'),\n                    'color_text': \t\t\t$R.encode('#e3e3e3'),\n                    'color_links': \t\t\t$R.encode('#e3e3e3'),\n                    'text_align': \t\t\t$R.encode('normal'),\n                    'base': \t\t\t\t$R.encode('base__night_owl'),\n                    'footnote_links': \t\t$R.encode('on_print'),\n                    'large_graphics': \t\t$R.encode('do_nothing'),\n                    'custom_css': \t\t\t$R.encode(''\n                                            + '#text #articleHeader { border-color: #c5c5c5; }'\n                                            + '#text #relatedNotes { border-color: rgba(197, 197, 197, 0.5); }'\n                                            + '#text a:link { -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -o-transition: all 0.3s ease; }'\n                                            + '#text #relatedNotes a { -webkit-transition-duration: 0s; -moz-transition-duration: 0s; -o-transition-duration: 0s; }'\n                                            + '#text a:hover, #text a:active {\tcolor: #44bde8; }'\n                                            + '#text blockquote { color: #c1bfbf; border-color: #c1bfbf; }'\n                                            + '#text thead { background-color: #4f4f4f; }'\n                                            + '#text tr:nth-child(even) { background: #404040; }'\n                                            + '#text hr { border-color: #c5c5c5; }')\n                }\n            };\n        })();\n\n    \/\/  themes }\n\n    \/\/  font sizes {\n    \/\/  ============\n\n        (function ()\n        {\n            \/\/  font sizes already set\n            if ($R.availableFontSizes) { return; } \n\n            \/\/  set font sizes\n            $R.availableFontSizes = {\n                'small':    { 'newsprint': '12px', 'notable': '12px', 'night_owl': '12px' },\n                'medium':   { 'newsprint': '16px', 'notable': '16px', 'night_owl': '16px' },\n                'large':    { 'newsprint': '20px', 'notable': '20px', 'night_owl': '20px' }\n            };\n        })();\n\n    \/\/  font sizes }\n\n    \/\/  google fonts {\n    \/\/  ==============\n\n        (function ()\n        {\n            \/\/  google fonts already set\n            if ($R.availableGoogleFonts) { return; }\n\n            \/\/  set google fonts to these\n            var __google_fonts_array = [\n                \/* serif *\/ 'Arvo', 'Bentham', 'Cardo', 'Copse', 'Corben', 'Crimson Text', 'Droid Serif', 'Goudy Bookletter 1911', 'Gruppo', 'IM Fell', 'Josefin Slab', 'Kreon', 'Meddon', 'Merriweather', 'Neuton', 'OFL Sorts Mill Goudy TT', 'Old Standard TT', 'Philosopher', 'PT Serif', 'Radley', 'Tinos', 'Vollkorn',\n                \/* sans  *\/ 'Allerta', 'Anton', 'Arimo', 'Bevan', 'Buda', 'Cabin', 'Cantarell', 'Coda', 'Cuprum', 'Droid Sans', 'Geo', 'Josefin Sans', 'Lato', 'Lekton', 'Molengo', 'Nobile', 'Orbitron', 'PT Sans', 'Puritan', 'Raleway', 'Syncopate', 'Ubuntu', 'Yanone Kaffeesatz',\n                \/* fixed *\/ 'Anonymous Pro', 'Cousine', 'Droid Sans Mono', 'Inconsolata'\n            ];\n\n            \/\/  set\n            $R.availableGoogleFonts = {};\n            for (var i=0, ii=__google_fonts_array.length; i<ii; i++){\n                $R.availableGoogleFonts[__google_fonts_array[i]] = 1;\n            }\n        })();\n\n    \/\/  google fonts }\n\n    \/\/  default options {\n    \/\/  =================\n\n        $R.defaultOptions = \n        {\n            'text_font': \t\t\t$R.encode('\"PT Serif\"'),\n            'text_font_header': \t$R.encode('\"PT Serif\"'),\n            'text_font_monospace': \t$R.encode('Inconsolata'),\n            'text_size': \t\t\t$R.encode('16px'),\n            'text_line_height': \t$R.encode('1.5em'),\n            'box_width': \t\t\t$R.encode('36em'),\n            'color_background': \t$R.encode('#f3f2ee'),\n            'color_text': \t\t\t$R.encode('#1f0909'),\n            'color_links': \t\t\t$R.encode('#065588'),\n            'text_align': \t\t\t$R.encode('normal'),            \/* normal, justified *\/\n            'base': \t\t\t\t$R.encode('base__newsprint'),   \/* base__ newsprint, notable, night_owl *\/\n            'footnote_links': \t\t$R.encode('on_print'),          \/* on_print, always, never *\/\n            'large_graphics': \t\t$R.encode('do_nothing'),        \/* do_nothing, hide_on_print, hide_always *\/\n            'custom_css': \t\t\t('')\n        };\n\n    \/\/  default options }\n\n    \/\/  get css from options {\n    \/\/  ======================\n\n        $R.getCSSFromOptions = function (_options)\n        {\n            var _cssText = (''\n            +\t'#body { '\n            +\t\t'font-family: [=text_font]; '\n            +\t\t'font-size: [=text_size]; '\n            +\t\t'line-height: [=text_line_height]; '\n            +\t\t'color: [=color_text]; '\n            +\t\t'text-align: '+(_options['text_align'] == 'justified' ? 'justify' : 'left')+'; '\n            +\t'} '\n\n            +\t'#background { background-color: [=color_background]; } '\n\n            +\t'.setTextColorAsBackgroundColor { background-color: [=color_text]; } '\n            +\t'.setBackgroundColorAsTextColor { color: [=color_background]; } '\n\n            +\t'#box, .setBoxWidth { width: [=box_width]; } '\n\n            +\t'a { color: [=color_links]; } '\n            +\t'a:visited { color: [=color_text]; } '\n\n            +\t'@media print { body.footnote_links__on_print a, body.footnote_links__on_print a:hover { color: [=color_text] !important; text-decoration: none !important; } } '\n            +\t'body.footnote_links__always a, body.footnote_links__always a:hover { color: [=color_text] !important; text-decoration: none !important; } '\n\n            +\t'img { border-color: [=color_text]; } '\n            +\t'a img { border-color: [=color_links]; } '\n            +\t'a:visited img { border-color: [=color_text]; } '\n\n            +\t'h1 a, h2 a, a h1, a h2 { color: [=color_text]; } '\n            +\t'h1, h2, h3, h4, h5, h6 { font-family: [=text_font_header]; } '\n\n            +\t'pre { background-color: [=color_background]; } '\n            +\t'pre, code { font-family: [=text_font_monospace]; } '\n            +\t'hr { border-color: [=color_text]; } '\n\n            +\t'html.rtl #body #text { text-align: ' + (_options['text_align'] == 'justified' ? 'justify' : 'right')+' !important; } '\n            +\t'h1, h2, h3, h4, h5, h6 { text-align: left; } '\n            +\t'html.rtl h1, html.rtl h2, html.rtl h3, html.rtl h4, html.rtl h5, html.rtl h6 { text-align: right !important; } '\n\n            +\t'[=custom_css] '\n            ).replace(\n                \/\\[=([a-z_]+?)\\]\/gi,\n                function (_match, _key) { return _options[_key]; }\n            );\n\n            return _cssText;\n        }\n\n    \/\/  get css from options }\n\n    \/\/  apply options {\n    \/\/  ===============\n\n        \/\/\tvar\n        \/\/\t===\n\n            \/\/  _encodedOptions and _decodeOptions hold the options to be applied\n            \/\/\t$R.appliedOptions holds the options currently applied (encoded)\n            \/\/\t$R.loadedGoogleFonts holds the  currently loaded Google fonts URLs\n\n            $R.appliedOptions = {};\n            $R.loadedGoogleFonts = {};\n\n        \/\/\tapply options\n        \/\/\t=============\n            $R.applyOptions = function (_encodedOptions)\n            {\n                \/\/  possible options\n                \/\/  =================\n                    var _possible_options = $R.defaultOptions;\n\n                \/\/  our themes        \n                \/\/  ==========\n                    var _ourOwnThemes = '|theme-1|theme-2|theme-3|';\n\n                \/\/\tnull\n                \/\/\t====\n                    if (_encodedOptions); else { _encodedOptions = {}; }\n\n                \/\/  blank, invalid\n                \/\/  ==============\n                    for (var _option in _possible_options)\n                    {\n                        switch (true)\n                        {\n                            case (!(_option in _encodedOptions)):\n                            case (!(_encodedOptions[_option] > '')):\n                                \/\/  either current, or default\n                                _encodedOptions[_option] = ($R.appliedOptions[_option] ? $R.appliedOptions[_option] : _possible_options[_option]);\n                                break;\n                        }\n                    }\n\n                \/\/\twhat to do\n                \/\/\t==========\n\n                    var \n                        _resetBase = false,\n                        _resetOptions = false, \n                        _decodedOptions = {}\n                    ;\n\n                \/\/  set stuff\n                \/\/  =========\n\n                    \/\/\t_resetBase\n                    switch (true)\n                    {\n                        case (!('base' in  $R.appliedOptions)):\n                        case (!(_encodedOptions['base'] == $R.appliedOptions['base'])):\n                            _resetBase = true;\n                            break;\n                    }\n\n                    \/\/\t_resetOptions\n                    for (var _option in _possible_options)\n                    {\n                        switch (true)\n                        {\n                            case (!(_option in $R.appliedOptions)):\n                            case (!(_encodedOptions[_option] == $R.appliedOptions[_option])):\n                                _resetOptions = true;\n                                break;\n                        }\n\n                        \/\/\tstop\n                        if (_resetOptions) { break; }\n                    }\t\n\n                    \/\/\tappliedOptions and optionsToApply\n                    for (var _option in _possible_options)\n                    {\n                        $R.appliedOptions[_option] = _encodedOptions[_option];\n                        _decodedOptions[_option] = $R.decode(_encodedOptions[_option]);\n                    }\n\n                \/\/\tapply stuff\n                \/\/\t===========\n\n                    \/\/  base\n                    if (_resetBase)\n                    {\n                        \/\/\tremove old\n                        $R.$iframeDocument.find('#baseCSS').remove();\n\n                        \/\/\tadd new\n                        if (_decodedOptions['base'] > '')\n                        {\n                            $R.$iframeDocument.find('head').append(''\n                                + '\t\n\t<link id=\"baseCSS\" href=\"'\n                                + $R.settings.cssPath + _decodedOptions['base']+'.css'\n                                + '\" rel=\"stylesheet\" type=\"text\/css\" \/>'\n                            );\n                        }\n                    }\n\n                    \/\/\toptions\n                    if (_resetOptions)\n                    {\n                        var _cssText = $R.getCSSFromOptions(_decodedOptions);\n\n                        \/\/\tremove old\n                        \/\/\t==========\n                            $R.$iframeDocument.find('#optionsCSS').remove();\n\n                        \/\/\tnew\n                        \/\/\t===\n                            var _cssElement = document.createElement('style');\n                                _cssElement.setAttribute('type', 'text\/css');\n                                _cssElement.setAttribute('id', 'optionsCSS');\n\n                            if (_cssElement.styleSheet) { _cssElement.styleSheet.cssText = _cssText; }\n                                else { _cssElement.appendChild(document.createTextNode(_cssText)); }\n\n                            $R.$iframeDocument.find('head').append(_cssElement);\n\n                        \/\/\tbody classes\n                        \/\/\t============\n                            $R.$iframeDocument.find('body')\n                                .removeClass('footnote_links__on_print footnote_links__always footnote_links__never')\n                                .removeClass('large_graphics__do_nothing large_graphics__hide_on_print large_graphics__hide_always')\n                                .addClass('footnote_links__'+_decodedOptions['footnote_links'])\n                                .addClass('large_graphics__'+_decodedOptions['large_graphics'])\n                            ;\n                    }\t\n            };\n\n    \/\/  apply options }\n\n    \/\/  apply google fonts  {\n    \/\/  =====================\n\n        $R.getGoogleFontsFromOptions = function (_options)\n        {\n            var \n                _fonts = {},\n                _fonts_urls = [],\n                _check_font = function (_match, _font) {\n                    if (_font in $R.availableGoogleFonts) { _fonts[_font] = 1; }\n                }\n            ;\n\n            \/\/\tbody\n            \/\/\t====\n                _options['text_font'].replace(\/\"([^\",]+)\"\/gi, _check_font);\n                _options['text_font'].replace(\/([^\",\\s]+)\/gi, _check_font);\t\t\t\t\n\n            \/\/\theaders\n            \/\/\t=======\n                _options['text_font_header'].replace(\/\"([^\",]+)\"\/gi, _check_font);\n                _options['text_font_header'].replace(\/([^\",\\s]+)\/gi, _check_font);\t\t\t\t\n\n            \/\/\tmonospace\n            \/\/\t=========\n                _options['text_font_monospace'].replace(\/\"([^\",]+)\"\/gi, _check_font);\n                _options['text_font_monospace'].replace(\/([^\",\\s]+)\/gi, _check_font);\t\t\t\t\n\n            \/\/\tcustom css\n            \/\/\t==========\n                _options['custom_css'].replace(\/font-family: \"([^\",]+)\"\/gi, _check_font);\n                _options['custom_css'].replace(\/font-family: ([^\",\\s]+)\/gi, _check_font);\n\n            \/\/\treturn\n            \/\/\t======\n\n                \/\/\ttransform to array\n                for (var _font in _fonts)\n                {\n                    _fonts_urls.push(''\n                        + 'http:\/\/fonts.googleapis.com\/css?family='\n                        + _font.replace(\/\\s+\/g, '+')\n                        + ':regular,bold,italic'\n                    );\n                }\n\n                \/\/\treturn\n                return _fonts_urls;\n        };\n\n        $R.loadGoogleFontsRequiredByAppliedOptions = function ()\n        {\n            \/\/  decode options\n            var _decodedOptions = {};\n            for (var _option in $R.appliedOptions)\n                { _decodedOptions[_option] = $R.decode($R.appliedOptions[_option]); }\n\n            \/\/\tget\n            var _fonts_urls = $R.getGoogleFontsFromOptions(_decodedOptions);\n\n            \/\/\tapply\n            for (var i=0,_i=_fonts_urls.length; i<_i; i++) {\n                \/* loaded *\/    if ($R.loadedGoogleFonts[_fonts_urls[i]]) { continue; }\n                \/* load *\/      $R.$iframeDocument.find('head').append('\t\n\t<link href=\"'+_fonts_urls[i]+'\" rel=\"stylesheet\" type=\"text\/css\" \/>');\n                \/* mark *\/      $R.loadedGoogleFonts[_fonts_urls[i]] = 1;\n            }\n        };\n\n    \/\/  apply google fonts }\n\n    \/\/  create frame {\n    \/\/  ==============\n\n        $R.createFrame = function ()\n        {\n            \/\/  default id\n            \/\/  ==========\n                _frame_id = $R.settings.onCreateFrameUseThisId;\n\n            \/\/\tiframe\n            \/\/\t======\n                var\n                    _iframeElement = $R.document.createElement('div'),\n                    _iframeHTML = ''\n                    +\t'\n\n\n\n<div id=\"html\">'\n                    +\t    '\n\n\n\n<div id=\"body\">'\n                    +\t    \t'\n\n\n\n<div id=\"bodyContent\">'\n\n                    +\t            '\n\n\n\n<div id=\"box\">'\n                    +\t    \t        '\n\n\n\n<div id=\"box_inner\">'\n                    +\t    \t\t        '\n\n\n\n<div id=\"text\">'\n                    +\t    \t\t\t        '\n\n\n\n<div id=\"pages\"><\/div>\n\n\n\n\n'\n                    +\t    \t\t\t        '\n\n\n\n<ol id=\"footnotedLinks\"><\/ol>\n\n\n\n\n'\n                    +\t    \t\t        '\n\n<\/div>\n\n\n\n\n'\n                    +\t    \t        '\n\n<\/div>\n\n\n\n\n'\n                    +\t            '\n\n<\/div>\n\n\n\n\n'\n                    +\t            '\n\n\n\n<div id=\"background\"><\/div>\n\n\n\n\n'\n                    +           '\n\n<\/div>\n\n\n\n\n'\n                    +\t    '\n\n<\/div>\n\n\n\n\n'\n                    +\t'\n\n<\/div>\n\n\n\n\n'\n                ;\n                _iframeElement.setAttribute('id', _frame_id);\n\n            \/\/\tcss\n            \/\/\t===\n\n                if ($R.settings.onCreateFrameDoNotInsertCSS); else\n                {\n                    var \n                        _cssElement = $R.document.createElement('style'),\n                        _cssText = ''\n                        +\t'#'+_frame_id+' { '\n                        +\t\t'margin: 0; padding: 0; border: none; '\n                        +\t\t'position: absolute; '\n                        +\t\t'width: 10px; height: 10px; '\n                        +\t\t'top: -100px; left: -100px; '\n                        +\t'} '\n                    ;\n                    _cssElement.setAttribute('id', _frame_id + '__css');\n                    _cssElement.setAttribute('type', 'text\/css');\n                    if (_cssElement.styleSheet) { _cssElement.styleSheet.cssText = _cssText; }\n                        else { _cssElement.appendChild($R.document.createTextNode(_cssText)); }\n                }\n\n            \/\/\twrite\n            \/\/\t=====\n\n                var _body = $R.document.getElementsByTagName('body')[0];\n                    \/* css *\/   if (_cssElement) { _body.appendChild(_cssElement); }\n                    \/* frame *\/ _body.appendChild(_iframeElement);\n\n                var _iframe = $R.document.getElementById(_frame_id);\n                var _doc;\n                _iframe.innerHTML = _iframeHTML;\n\n            \/\/  callback &#038; variables\n            \/\/  ====================\n                var _check_interval = false;\n                var _check = function ()\n                {\n                    \/\/  iframe\n                        var _iframe = $R.document.getElementById(_frame_id);\n                        if (_iframe); else { return; }\n\n                    \/\/  body\n                        var _body = $CJ(_iframe).find('#bodyContent')[0];\n\n                        if (_body); else { return; }\n\n                    \/\/  clear interval\n                        $R.window.clearInterval(_check_interval);\n\n                    \/\/  global vars\n                        $R.iframe = _iframe;\n                        $R.$iframe = $CJ($R.iframe);\n\n                        $R.iframeDocument = _iframe;\n                        $R.$iframeDocument = $CJ($R.iframeDocument);\n\n                        $R.iframeWindow = _iframe;\n                        $R.$iframeWindow = $CJ($R.iframeWindow);\n\n                        $R.$iframeBox = $R.$iframeDocument.find('#box');\n                        $R.$iframePages = $R.$iframeDocument.find('#pages');\n                        $R.$iframeBackground = $R.$iframeDocument.find('#background');\n                        $R.$iframeFootnotedLinks = $R.$iframeDocument.find('#footnotedLinks');\n\n                    \/\/  callback\n                        if ($R.callbacks.frameCreated) { $R.callbacks.frameCreated(); }\n                };\n\n                \/\/  set interval\n                _check_interval = $R.window.setInterval(_check, 250);\n        };\n\n    \/\/  create frame }\n\n    \/\/  add page {\n    \/\/  ==========\n\n        $R.addNewPage = function (_pageHTML, _pageURL)\n        {\n            \/\/  update page count\n            \/\/  =================\n                var _pageNr = $R.pagesCount + 1;\n                $R.pagesCount++;\n\n            \/\/\tseparator\n            \/\/\t=========\n                if (_pageNr > 1)\n                {\n                    $R.$iframePages.append(''\n                        + '\n\n\n\n<div class=\"pageSeparator\">'\n                        +\t'\n\n\n\n<div class=\"pageSeparatorLine setTextColorAsBackgroundColor\"><\/div>\n\n\n\n\n'\n                        + \t'\n\n\n\n<div class=\"pageSeparatorLabel\"><em>'+$R.settings.pageLabel+_pageNr+'<\/em><\/div>\n\n\n\n\n'\n                        + '\n\n<\/div>\n\n\n\n\n'\n                    );\n                }\n\n            \/\/\tappend page\n            \/\/\t===========\n                $R.$iframePages.append(''\n                    + '\n\n\n\n<div class=\"page\" id=\"page'+_pageNr+'\">'\n                    +     '\n\n\n\n<div class=\"page_content\">'\n                    + \t      _pageHTML\n                    +     '<\/div>\n\n\n\n\n'\n                    + '\n\n<\/div>\n\n\n\n\n'\n                );\n\n            \/\/  this new page\n            \/\/  =============\n\n                \/\/  cache\n                var _$page = $R.$iframeDocument.find('#page'+_pageNr);\n\n                \/\/\tlinks as footnotes\n                _$page.find('a').each(function (_index, _element)\n                {\n                    \/\/\tcheck\n                    var _href = _element.href;\n                    if (_href > ''); else { return; }\n                    if (_href.indexOf); else { return; }\n                    if (_href.indexOf('#') > -1) { return; }\n\n                    \/\/\tcount\n                    var _nr = ++$R.footnotedLinksCount;\n\n                    \/\/\tadd\n                    $CJ(_element).append(' <sup class=\"readableLinkFootnote\">['+_nr+']<\/sup>');\n                    $R.$iframeFootnotedLinks.append('\n\n\t\n\n<li>'+_href+'<\/li>\n\n\n\n\n');\n                });\n        };\n\n    \/\/  add page }\n\n    \/\/  clear all pages {\n    \/\/  =================\n\n        $R.clearAllPages = function ()\n        {\n            \/\/  reset pages count\n            $R.pagesCount = 0;\n\n            \/\/  delete all pages\n            $R.$iframePages.get(0).innerHTML = '';\n\n            \/\/  reset footnote count\n            $R.footnotedLinksCount = 0;\n\n            \/\/  delete all footnotes\n            $R.$iframeFootnotedLinks.get(0).innerHTML = '';\n        };\n\n    \/\/  clear all pages }\n\n    \/\/  return self\n    \/\/  ===========\n        return $R;\n}\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ClearlyController = {\n    _created : false,\n    _visible : false,\n    _logEnabled : false,\n    _detectResult : null,\n\n    logger : function(text) {\n        if (!this._logEnabled) return;\n        console.log('[Clearly] : ' + text);\n    },\n\n    getSimplifiedArticle : function() {\n        this.logger('getSimplifiedArticle()');\n        return Evernote.JQuery('#evernoteClearlyArticle #box #text').get(0);\n    },\n\n    changeFrameClassTo : function(className) {\n        this.clearlyFrame[0].className = '';\n        this.clearlyFrame.addClass(className);\n    },\n\n    hide : function() {\n        this.logger('hide()');\n        var self = this;\n        if (this._created &#038;&#038; this._visible) {\n            this.clearlyBackground.stop();\n            this.changeFrameClassTo('processing');\n            this.clearlyBackground.animate({right:'100%'}, 500, null,\n                function() {\n                    self.changeFrameClassTo('temphidden');\n                    window.focus();\n                }\n            );\n            this._visible = false;\n        }\n    },\n\n    show : function() {\n        this.logger('show()');\n        var self = this;\n        if (this._created &#038;&#038; !this._visible) {\n            this.clearlyBackground.stop();\n            this.changeFrameClassTo('processing');\n            this.clearlyBackground.animate({ right: \"0px\" }, 500, null,\n                function() {\n                    self.changeFrameClassTo('visible');\n                    window.focus();\n                }\n            );\n            this._visible = true;\n        }\n    },\n\n    detectComponent : function(callback) {\n        this.logger('detectComponent()');\n        window.ClearlyComponent__detect = {\n            callbacks: {\n                finished: function(data) {\n                    if (callback) callback(data);\n                }\n            },\n            window: window,\n            document: document,\n            jQuery: Evernote.JQuery\n        };\n\n        window.ClearlyComponent__detect = initClearlyComponent__detect(window.ClearlyComponent__detect);\n        window.ClearlyComponent__detect.start();\n    },\n\n    reformatComponent : function(callback){\n        this.logger('reformatComponent()');\n        window.ClearlyComponent__reformat = {\n            callbacks: {\n                frameCreated: function(data) {\n                    if (callback) callback(data);\n                }\n            },\n            settings: {\n                cssPath: 'css\/clearly',\n                pageLabel: \"page \",\n                onCreateFrameUseThisId: \"evernoteClearlyArticle\",\n                onCreateFrameDoNotInsertCSS: true\n            },\n            window: window,\n            document: document,\n            jQuery: Evernote.JQuery\n        };\n\n        window.ClearlyComponent__reformat = initClearlyComponent__reformat(window.ClearlyComponent__reformat);\n        window.ClearlyComponent__reformat.createFrame();\n    },\n\n    getContentElementAndHTML : function (callback) {\n        this.logger('getContentElementAndHTML()');\n        this.detectComponent(callback);\n    },\n\n    getClearlyArticleText : function(callback) {\n        this.logger('getClearlyArticleText()');\n        this.detectComponent(callback);\n    },\n\n    assignClearlyArticleContent : function()  {\n        this.logger('showClearlyArticleContent()');\n        window.ClearlyComponent__reformat.$iframeBox.find('#text #pages')[0].innerHTML = this._detectResult;\n    },\n\n    setContainersSize : function() {\n        var maxHeight = Math.max(document.body.scrollHeight, this.clearlyFrame.scrollHeight);\n\n        try { \/\/old ie throws error\n            this.clearlyFrame[0].style.height = maxHeight + \"px\";\n        } catch (e) {\n\n        }\n    },\n\n    startClearly : function() {\n        this.logger('startClearly()');\n\n        var self = this;\n\n        if (this._created) {\n            self.show();\n            return;\n        }\n\n        function onDetectEnd(data) {\n            self._detectResult = data._html.replace(\/(id|class)=\"(.*?)\"\/ig,'cid=\"$2\"');\n            self.assignClearlyArticleContent();\n            self.show();\n        }\n\n        function onFrameCreated() {\n            self.clearlyFrame = window.ClearlyComponent__reformat.$iframe;\n            self.clearlyBackground = window.ClearlyComponent__reformat.$iframeBackground;\n            self._created = true;\n            self.setContainersSize();\n            self.detectComponent(onDetectEnd);\n        }\n\n        window.scrollTo(0,0);\n        this.reformatComponent(onFrameCreated);\n    },\n\n    isReady : function() {\n        return this._created;\n    },\n\n    isVisible : function() {\n        return this._visible;\n    },\n\n    highlight : function () {\n        this.logger('highlight()');\n        var numTextHighlights;\n\n        window.ClearlyComponent__highlight = {\n            callbacks: {\n                highlightAdded: function() {\n                    numTextHighlights++;\n                },\n                highlightDeleted: function() {\n                    numTextHighlights--;\n                }\n            },\n            settings: {\n                imgPath: \"images\/\"\n            },\n            window: window,\n            document: document,\n            jQuery: Evernote.JQuery\n        };\n\n        window.ClearlyComponent__highlight = initClearlyComponent__highlight(window.ClearlyComponent__highlight);\n        window.ClearlyComponent__highlight.insertCSS();\n        window.ClearlyComponent__highlight.addMouseHandlers();\n\n        window.ClearlyComponent__highlight.enable();\n    },\n\n    disableHighlight : function() {\n        this.logger('disableHighlight()');\n        if (window.ClearlyComponent__highlight) {\n            window.ClearlyComponent__highlight.disable();\n        }\n    },\n\n    removeHighlighted : function() {\n        this.logger('removeHighlighed()');\n\/\/        Evernote.JQuery('.clearly_highlight_delete_element').click();\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/**\n * SelectionFinder provides mechanism for finding selection on the page via\n * find(). It is able to traverse frames in order to find a selection. It will\n * report whether there's a selection via hasSelection(). After doing find(),\n * the selection is stored in the selection property, and the document property\n * will contain the document in which the selection was found. Find method will\n * only recurse documents if it was invoked as find(true), specifying to do\n * recursive search. You can use reset() to undo find().\n *\/\nEvernote.SelectionFinder = function SelectionFinder( doc ) {\n    this._document = doc;\n};\n\nEvernote.SelectionFinder.prototype._document = null;\nEvernote.SelectionFinder.prototype._selection = null;\n\nEvernote.SelectionFinder.prototype.hasSelection = function() {\n    Evernote.Logger.debug( \"SelectionFinder.hasSelection()\" );\n\n    var range = Evernote.Utils.fixIERangeObject(this.getRange());\n    return range &#038;&#038; (range.startContainer != range.endContainer\n        || (range.startContainer == range.endContainer &#038;&#038; range.startOffset != range.endOffset));\n};\n\nEvernote.SelectionFinder.prototype.find = function( deep ) {\n    Evernote.Logger.debug( \"SelectionFinder.find()\" );\n    var result = this.findSelectionInDocument( this._document, deep );\n    this._document = result.document;\n    this._selection = result.selection;\n};\n\nEvernote.SelectionFinder.prototype.getRange = function() {\n    Evernote.Logger.debug( \"SelectionFinder.getRange()\" );\n    if ( !this._selection || this._selection.rangeCount == 0 ) {\n        return null;\n    }\n\n    if ( typeof this._selection.getRangeAt == 'function' ) {\n        return this._selection.getRangeAt( 0 );\n    }\n\n    if ( (window.Range &#038;&#038; this._selection instanceof window.Range) || !this._selection.anchorNode ) {\n        return this._selection;\n    }\n    var range = this._document.createRange();\n    range.setStart( this._selection.anchorNode, this._selection.anchorOffset );\n    range.setEnd( this._selection.focusNode, this._selection.focusOffset );\n\n    return range;\n};\n\nEvernote.SelectionFinder.prototype.findSelectionInDocument = function( doc, deep ) {\n    try {\n        Evernote.Logger.debug( \"SelectionFinder.findSelectionInDocument()\" );\n\n        var sel = null;\n        var hasSelection = false;\n        var win = null;\n\n        try {\n            win = (doc.defaultView) ? doc.defaultView : window;\n        }\n        catch ( e ) {\n            win = window;\n        }\n        if ( typeof win.getSelection == 'function' ) {\n            sel = win.getSelection();\n            if ( sel &#038;&#038; typeof sel.rangeCount != 'undefined' &#038;&#038; sel.rangeCount > 0 ) {\n                Evernote.Logger.debug(\"Found selection by win.getSelection()\");\n                hasSelection = true;\n            }\n        }\n        else if ( win.selection &#038;&#038; typeof win.selection.createRange == 'function' ) {\n            sel = win.selection.createRange();\n            if ( win.selection.type == 'Text' &#038;&#038; typeof sel.htmlText == 'string' &#038;&#038; sel.htmlText.length > 0 ) {\n                Evernote.Logger.debug(\"Found selection by win.selection\");\n                hasSelection = true;\n            }\n        }\n        else if ( doc.selection &#038;&#038; (typeof doc.selection.createRange == 'function' || typeof doc.selection.createRange == 'object') ) {\n            sel = doc.selection.createRange();\n            if(doc.selection.type == \"None\")\n                sel = undefined;\n            if ( (doc.selection.type == 'Text') &#038;&#038; (typeof sel.htmlText == 'string') &#038;&#038; (sel.htmlText.length > 0) ) {\n                Evernote.Logger.debug(\"Found selection by doc.selection\");\n                hasSelection = true;\n            }\n        }\n\n        if ( sel &#038;&#038; !hasSelection &#038;&#038; deep ) {\n            var nestedDocs = Evernote.Utils.getNestedDocuments( doc );\n            for ( var i = 0; i < nestedDocs.length; ++i ) {\n                if ( nestedDocs[ i ] ) {\n                    var framedSel = this.findSelectionInDocument( nestedDocs[ i ], deep );\n                    if ( framedSel &#038;&#038; framedSel.selection &#038;&#038; framedSel.selection.rangeCount > 0 ) {\n                        return framedSel;\n                    }\n                }\n            }\n        }\n\n        \/\/if do not find any selection in document, try to find selection in HTMLTextArea|Input.\n        \/\/Get Selection object for TextArea, and set selection as a Range object\n        if(doc.activeElement)\n            Evernote.Logger.debug( \"Check selection in INPUT TEXT area (input, textarea), for active element :\" + doc.activeElement.nodeName );\n\n        var activeEl = doc.activeElement &#038;& false; \/\/ disabled, because no need to search selections in this elements.\n        if ( activeEl &#038;&#038; ( (window.HTMLInputElement &#038;&#038; (activeEl instanceof window.HTMLInputElement &#038;&#038; activeEl.type == \"text\")) || ( window.HTMLTextAreaElement &#038;&#038; (activeEl instanceof window.HTMLTextAreaElement)) ) ) {\n            if ( activeEl.selectionStart != activeEl.selectionEnd ) {\n                var range = doc.createRange();\n                var textNode = doc.createTextNode( activeEl.value );\n\n                range.setStart( textNode, activeEl.selectionStart );\n                range.setEnd( textNode, activeEl.selectionEnd );\n                sel = range;\n            }\n        }\n\n        return {\n            document : doc,\n            selection : sel\n        };\n    } catch(e) {\n        Evernote.Logger.error(\"Failed to find selection on the page due to error \" + e);\n        \/\/Do not throw exception here, it is better to not show error to user and allow to clip article or something else.\n    }\n    return {\n        document: doc,\n        selection: null\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.JSSerializer = {\n\n    _selectionFinder : new Evernote.SelectionFinder(window.document),\n\n    serializeAsync : function( element, fullPage, callback ) {\n        try {\n            var start = new Date().getTime();\n            var root = element || document.body.parentNode || document.body;\n            var serializer = new Evernote.NodeSerializer( window, new Evernote.ClipFullStylingStrategy() );\n            var parser = new Evernote.DomParser( window, null );\n\n            var resultFunc = function() {\n                var images = [];\n                var imageUrls = serializer.getImagesUrls();\n\n                for(var i = 0; i < imageUrls.length; i++) {\n                    images.push(Evernote.Utils.makeAbsolutePath(serializer.getDocumentBase(), imageUrls[i]).replace(\/\\s\/g, \"%20\"));\n                }\n                callback( {\n                    content : serializer.getSerializedDom(),\n                    imageUrls : images,\n                    docBase : serializer.getDocumentBase()\n                    });\n            };\n            parser.parseAsync( root, fullPage ? true: false, serializer, resultFunc);\n            var end = new Date().getTime();\n            Evernote.Logger.debug( \"Clip.clipFullPage(): clipped body in \" + (end - start) + \" milliseconds\" );\n        }\n        catch ( e ) {\n            Evernote.Logger.error( \"JSSerializer.serialize() failed: error = \" + e );\n            throw e;\n        }\n    },\n\n    serialize : function( element, fullPage ) {\n        try {\n            var start = new Date().getTime();\n            var root = element || document.body.parentNode || document.body;\n            var serializer = new Evernote.NodeSerializer( window, new Evernote.ClipFullStylingStrategy() );\n            var parser = new Evernote.DomParser( window, null );\n            parser.parse( root, fullPage ? true: false, serializer);\n            var end = new Date().getTime();\n            Evernote.Logger.debug( \"Clip.clipFullPage(): clipped body in \" + (end - start) + \" milliseconds\" );\n            var images = [];\n            var imageUrls = serializer.getImagesUrls();\n\n            for(var i = 0; i < imageUrls.length; i++) {\n                images.push(Evernote.Utils.makeAbsolutePath(serializer.getDocumentBase(), imageUrls[i]).replace(\/\\s\/g, \"%20\"));\n            }\n            return {\n                content : serializer.getSerializedDom(),\n                imageUrls : images,\n                docBase : serializer.getDocumentBase()\n            }\n        }\n        catch ( e ) {\n            Evernote.Logger.error( \"JSSerializer.serialize() failed: error = \" + e );\n            throw e;\n        }\n    },\n\n    serializeSelectionAsync : function( range, callback ) {\n\n        try {\n            if( !range ) {\n                if ( !this.hasSelection() ) {\n                    Evernote.Logger.warn( \"JSSerializer.serializeSelection(): no selection to clip\" );\n                    callback();\n                    return;\n                }\n\n                range = Evernote.Utils.fixIERangeObject(this._selectionFinder.getRange());\n\n                if ( !range ) {\n                    Evernote.Logger.warn( \"JSSerializer.serializeSelection(): no range in selection\" );\n                    callback();\n                    return;\n                }\n            }\n\n            var start = new Date().getTime();\n            var ancestor = (this._styleStrategy &#038;&#038; Evernote.Utils.Selection.getCommonAncestorContainer(range).nodeType == Evernote.Node.TEXT_NODE\n                &#038;&#038; Evernote.Utils.Selection.getCommonAncestorContainer(range).parentNode) ? Evernote.Utils.Selection.getCommonAncestorContainer(range).parentNode : Evernote.Utils.Selection.getCommonAncestorContainer(range);\n\n            while ( typeof Evernote.ClipRules.NON_ANCESTOR_NODES[ ancestor.nodeName.toUpperCase() ] != 'undefined' &#038;&#038; ancestor.parentNode ) {\n                if ( ancestor.nodeName.toUpperCase() == \"BODY\" ) {\n                    break;\n                }\n                ancestor = ancestor.parentNode;\n            }\n\n            var serializer = new Evernote.NodeSerializer( window, new Evernote.ClipFullStylingStrategy(), null, true );\n            var parser = new Evernote.DomParser(window, Evernote.Utils.fixIERangeObject(range));\n\n            var resultFunc = function() {\n                var images = [];\n                var imageUrls = serializer.getImagesUrls();\n\n                for(var i = 0; i < imageUrls.length; i++) {\n                    images.push(Evernote.Utils.makeAbsolutePath(serializer.getDocumentBase(), imageUrls[i]).replace(\/\\s\/g, \"%20\"));\n                }\n\n                callback( {\n                    content : serializer.getSerializedDom(),\n                    imageUrls : images,\n                    docBase : serializer.getDocumentBase()\n                } );\n            };\n            parser.parseAsync( ancestor, false, serializer, resultFunc );\n            var end = new Date().getTime();\n            Evernote.Logger.debug( \"JSSerializer.serializeSelection(): clipped selection in \" + (end - start) + \" milliseconds\" );\n        }\n        catch ( e ) {\n            Evernote.Logger.error( \"JSSerializer.serializeSelection() failed: error = \" + e );\n            throw e;\n        }\n    },\n\n    serializeSelection : function( range ) {\n        try {\n            if( !range ) {\n                if ( !this.hasSelection() ) {\n                    Evernote.Logger.warn( \"JSSerializer.serializeSelection(): no selection to clip\" );\n                    return;\n                }\n\n                range = Evernote.Utils.fixIERangeObject(this._selectionFinder.getRange());\n\n                if ( !range ) {\n                    Evernote.Logger.warn( \"JSSerializer.serializeSelection(): no range in selection\" );\n                    return;\n                }\n            }\n\n            var start = new Date().getTime();\n            var ancestor = (this._styleStrategy &#038;&#038; Evernote.Utils.Selection.getCommonAncestorContainer(range).nodeType == Evernote.Node.TEXT_NODE\n                &#038;&#038; Evernote.Utils.Selection.getCommonAncestorContainer(range).parentNode) ? Evernote.Utils.Selection.getCommonAncestorContainer(range).parentNode : Evernote.Utils.Selection.getCommonAncestorContainer(range);\n\n            while ( typeof Evernote.ClipRules.NON_ANCESTOR_NODES[ ancestor.nodeName.toUpperCase() ] != 'undefined' &#038;&#038; ancestor.parentNode ) {\n                if ( ancestor.nodeName.toUpperCase() == \"BODY\" ) {\n                    break;\n                }\n                ancestor = ancestor.parentNode;\n            }\n\n            var serializer = new Evernote.NodeSerializer( window, new Evernote.ClipFullStylingStrategy() );\n            var parser = new Evernote.DomParser(window, Evernote.Utils.fixIERangeObject(range));\n            parser.parse( ancestor, false, serializer );\n\n            var end = new Date().getTime();\n            Evernote.Logger.debug( \"JSSerializer.serializeSelection(): clipped selection in \" + (end - start) + \" milliseconds\" );\n            var images = [];\n            var imageUrls = serializer.getImagesUrls();\n\n            for(var i = 0; i < imageUrls.length; i++) {\n                images.push(Evernote.Utils.makeAbsolutePath(serializer.getDocumentBase(), imageUrls[i]).replace(\/\\s\/g, \"%20\"));\n            }\n\n            return {\n                content : serializer.getSerializedDom(),\n                imageUrls : images,\n                docBase : serializer.getDocumentBase()\n            }\n        }\n        catch ( e ) {\n            Evernote.Logger.error( \"JSSerializer.serializeSelection() failed: error = \" + e );\n            throw e;\n        }\n    },\n\n    hasSelection : function() {\n        Evernote.Logger.debug( \"Clip.hasSelection()\" );\n\n        if ( this._selectionFinder.hasSelection() ) {\n            return true;\n        }\n        else {\n            this._selectionFinder.find( true );\n            return this._selectionFinder.hasSelection();\n        }\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/**\n * Represents JQuery loader that allow to have two versions of JQuery loaded on the same page\n * @type {Object}\n *\/\nEvernote.JQueryLoader = {\n    \/**\n     * Initializes jquery instance on global Evernote context\n     *\/\n    initJQuery : function() {\n        if (!Evernote.JQuery) {\n            Evernote.JQuery = $.noConflict(true);\n        }\n    }\n};\n\n(function () {\n    if (!Evernote.JQuery) {\n        Evernote.JQuery = $.noConflict(true);\n    }\n}());\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ClipNotificator = function ClipNotificator() {\n\n};\n\/\/ TODO: clip notificator is obsolete now. Remove it.\n\nEvernote.ClipNotificator.WAIT_CONTAINER_ID = \"evernoteContentClipperWait\";\nEvernote.ClipNotificator.SHOW_WAIT_MIN_TIME = 2000;\n\nEvernote.ClipNotificator.prototype.showCopyNotification = function( doc, options, useAutoHide ) {\n\n    Evernote.evernotePostClipPopup.fillOutPopup(options.title, options.notebookName);\n    Evernote.evernotePostClipPopup.show();\n\n    try {\n        var wait = this.getWaitContainer( doc, Evernote.Addin.getLocalizedMessage(Evernote.Messages.CLIPPING) );\n        wait.style.display = \"none\";\n        this.centerBox(wait);\n\n        if ( doc.body ) {\n            doc.body.appendChild( wait );\n        }\n\n        if (useAutoHide)\n        {\n            var self = this;\n            var timeout = this.constructor.SHOW_WAIT_MIN_TIME;\n            setTimeout( function() {\n                self.clearWait( doc );\n            }, timeout );\n        }\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"ClipNotificator.showCopyNotification() failed: error = \" + e );\n    }\n};\n\nEvernote.ClipNotificator.prototype.centerBox = function( container ) {\n\n    \/\/ TODO: for what? It can be done with css.\n    var topPosition = ((document.documentElement.scrollTop || document.body.scrollTop) + ((((document.documentElement.clientHeight || document.body.clientHeight) + (!container.offsetHeight &#038;&#038; 0)) \/ 2) >> 0));\n    var leftPosition = (((document.documentElement.clientWidth || document.body.clientWidth) \/ 2) - (container.offsetWidth \/ 2));\n    container.style.position = \"absolute\";\n    container.style.top = (topPosition-20) + \"px\";\n    container.style.left = (leftPosition - 90) + \"px\";\n};\n\nEvernote.ClipNotificator.prototype.getWaitContainer = function( doc, msg ) {\n    Evernote.Logger.debug( \"ClipNotificator.getWaitContainer()\" );\n\n    var container = doc.getElementById( this.constructor.WAIT_CONTAINER_ID );\n    if ( !container ) {\n        container = doc.createElement( \"evernotediv\" );\n        if(Evernote.Utils.isQuirkMode()) {\n            container.className = \"quirk-mode-container\";\n        }\n        container.id = this.constructor.WAIT_CONTAINER_ID;\n\n        var wait = doc.createElement( \"div\" );\n        wait.id = this.constructor.WAIT_CONTAINER_ID + \"Content\";\n        if(Evernote.BrowserDetection.isLessThanIE9()) {\n            wait.className = \"content-less-than-nine-container\";\n        }\n        container.appendChild( wait );\n\n        var center = doc.createElement( \"center\" );\n        wait.appendChild( center );\n\n        var spinner = doc.createElement( \"div\" );\n        spinner.id = \"evernote-spinner-container\";\n        center.appendChild( spinner );\n\n        var text = doc.createElement( \"span\" );\n        text.id = this.constructor.WAIT_CONTAINER_ID + \"Text\";\n        center.appendChild( text );\n\n        container._waitMsgBlock = text;\n        container._waitMsgBlock.appendChild( doc.createTextNode( msg ) );\n    }\n\n    return container;\n};\n\nEvernote.ClipNotificator.prototype.clearWait = function( doc, immediately ) {\n    Evernote.Logger.debug( \"ClipNotificator.clearWait()\" );\n\n    var wait = doc.getElementById( Evernote.ClipNotificator.WAIT_CONTAINER_ID );\n    if ( wait ) {\n        wait.style.opacity = \"0\";\n        if (immediately) {\n            wait.parentNode.removeChild( wait );\n        } else {\n            setTimeout( function() {\n                if ( wait.parentNode ) {\n                    wait.parentNode.removeChild( wait );\n                }\n            }, 300 );\n        }\n    }\n\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/**\n * Represents clipper object that is capable of clipping elements from pages or clip elements based on preferences.\n *\/\nEvernote.Clipper = {\n\n    _serializer : Evernote.JSSerializer,\n\n    _clipNotifier : new Evernote.ClipNotificator(),\n\n    _defaultOptions : {\n        title: PageContext.title,\n        tags: [],\n        comments: \"\",\n        notebookUid: -1,\n        notebookName : \"\"\n    },\n\n    \/**\n     * Clips article element (one that user selected or default if no selection was made).\n     *\/\n    clipArticle : function(options, clearly) {\n        var currentOptions = this.initOptions(options);\n        this._clipNotifier.showCopyNotification(document, currentOptions);\n        var self = this;\n        setTimeout(function() {\n            var article\n            if ( clearly ) {\n                article = Evernote.ClearlyController.getSimplifiedArticle();\n            } else {\n                article = Evernote.contentPreviewer.getArticleElement();\n            }\n            if(!article) {\n                article = Evernote.pageInfo.getDefaultArticle(function(article) {});\n            }\n            var resultFunc = function(serializedDom) {\n                self._clipNotifier.clearWait(document);\n                Evernote.Addin.clipNote(currentOptions.comments + serializedDom.content, currentOptions, PageContext.url, serializedDom.imageUrls, true, document);\n                Evernote.ClearlyController.hide();\n            };\n            self._serializer.serializeAsync(article, false, resultFunc);\n        }, 100);\n    },\n\n    initOptions: function(options) {\n        if(!options)\n            options = this._defaultOptions;\n        options = Evernote.JQuery.extend({}, this._defaultOptions, options);\n        if(!options.title || Evernote.JQuery.trim(options.title).length == 0)\n            options.title = Evernote.Addin.getLocalizedMessage(Evernote.Messages.UNTITLED_NOTE);\n        options.title = Evernote.JQuery.trim(Evernote.Utils.cutToLength(options.title, 255, \" \"));\n\n        \/* get notebook name *\/\n        var notebookUid = options.notebookUid || 0;\n        var notebook = Evernote.NotebooksLoader.getNotebookByUid(notebookUid);\n\n        if(!notebook) {\n            options.notebookName = Evernote.Addin.getLocalizedMessage(Evernote.Messages.DEFAULT_NOTEBOOK);\n        } else {\n            options.notebookName = notebook.name;\n        }\n\n        return options;\n    },\n\n    \/**\n     * Clips full page.\n     *\/\n    clipFullPage : function(options) {\n        Evernote.Logger.debug(\"Clipper: clipFullPage\");\n        var currentOptions = this.initOptions(options);\n        this._clipNotifier.showCopyNotification(document , currentOptions);\n        var self = this;\n        setTimeout(function() {\n            Evernote.Logger.debug(\"Start clipping of full page\");\n            var resultFunc = function(serializedDom) {\n                self._clipNotifier.clearWait(document);\n                Evernote.Logger.debug(\"Image urls \" + JSON.stringify(serializedDom.imageUrls));\n                Evernote.Logger.debug(\"Send clip to EN\");\n                Evernote.Addin.clipNote(currentOptions.comments + serializedDom.content, currentOptions, PageContext.url, serializedDom.imageUrls, true, document);\n            };\n            self._serializer.serializeAsync(null, true, resultFunc);\n        }, 100);\n    },\n\n    \/**\n     * Clips url with favicon (if favicon is recognized)\n     *\/\n    clipUrl : function(options) {\n        var currentOptions = this.initOptions(options);\n        this._clipNotifier.showCopyNotification(document, currentOptions, true);\n        var self = this;\n        setTimeout(function() {\n            var snippet = Evernote.contentPreviewer.getSnippetText();\n            if (snippet) {\n                snippet = snippet.replace(\/(<([^>]+)>)\/ig,\"\");\n                var content = Evernote.GlobalUtils.createUrlClipContent(PageContext.title, PageContext.url, PageContext.getFavIconUrl(), snippet);\n                Evernote.Addin.clipNote(currentOptions.comments + content, currentOptions, PageContext.url, PageContext.getFavIconUrl(), true, document);\n            }else {\n                self._clipNotifier.clearWait(document, true);\n                Evernote.ClearlyController.getClearlyArticleText( function (data) {\n                    snippet = data._html.replace(\/(<([^>]+)>)\/ig,\"\");\n                    var content = Evernote.GlobalUtils.createUrlClipContent(PageContext.title, PageContext.url, PageContext.getFavIconUrl(), snippet);\n                    Evernote.Addin.clipNote(currentOptions.comments + content, currentOptions, PageContext.url, PageContext.getFavIconUrl(), true, document);\n                });\n            }\n        }, 100);\n    },\n\n    \/**\n     * Clips selection from the page.\n     *\/\n    clipSelection : function( range, options ) {\n        var currentOptions = this.initOptions(options);\n        this._clipNotifier.showCopyNotification(document , currentOptions);\n        var self = this;\n        setTimeout(function() {\n            var resultFunc = function(serializedDom) {\n                self._clipNotifier.clearWait(document);\n                if(serializedDom) {\n                    Evernote.Addin.clipNote(currentOptions.comments + serializedDom.content, currentOptions, PageContext.url, serializedDom.imageUrls, true, document);\n                }\n            };\n            self._serializer.serializeSelectionAsync( range, resultFunc );\n        }, 100);\n    },\n\n    \/**\n     * Clips image from the page.\n     *\/\n    clipImage : function(options ) {\n        if (!options.imageElement) {\n            Evernote.Logger.debug(\"clipImage Empty element\");\n            return;\n        }\n        var currentOptions = this.initOptions(options);\n        this._clipNotifier.showCopyNotification(document , currentOptions);\n        var self = this;\n\n        var clojureBug = Evernote.BrowserDetection.isIE7();\n        var CUSTOM_ID = 'evn-image-for-clip';\n\n        if (clojureBug) {\n            \/\/ add attr to find this element later\t\t\t\n            Evernote.JQuery(document).find(options.imageElement).attr( CUSTOM_ID ,'true');\n        }\n\n        setTimeout(function() {\n            var elementToSerialize = options.imageElement;\n            if (clojureBug) {\n                var elem = Evernote.JQuery('*['+ CUSTOM_ID +']');\n                elementToSerialize = Evernote.JQuery('*['+ CUSTOM_ID +']')[0];\n                elem.removeAttr(CUSTOM_ID);\n            }\n            Evernote.Logger.debug(\"Start clipping of image\");\n            var resultFunc = function(serializedDom) {\n                self._clipNotifier.clearWait(document);\n                Evernote.Logger.debug(\"Image urls \" + JSON.stringify(serializedDom.imageUrls));\n                Evernote.Logger.debug(\"Send clip to EN\");\n                Evernote.Addin.clipNote(currentOptions.comments + serializedDom.content, currentOptions, PageContext.url, serializedDom.imageUrls, true, document);\n            };\n            self._serializer.serializeAsync(elementToSerialize, false, resultFunc);\n        }, 100);\n    },\n\n    \/**\n     * Clips part of the page, defined in option (url, article or full page) or selection if presented.\n     *\/\n    clipWithOptions : function(clipOptions) {\n\n        function getNotebook() {\n            return {uid : -1};\n        }\n\n        var notebookToClipTo = getNotebook();\n\n        var alwaysTags = [];\n        if (notebookToClipTo.type != Evernote.NotebookTypes.LINKED &#038;&#038; Evernote.Options.tags.alwaysEnable == true) {\n            alwaysTags = Evernote.Options.tags.alwaysData.split(',');\n        }\n\n        var options = {\n            notebookUid: notebookToClipTo.uid,\n            imageElement: EvernoteExternal.imageElement,\n            tags: alwaysTags\n        };\n\n        if(clipOptions.getClipAction() == Evernote.ClipperActions.CLIP_SELECTION &#038;&#038; Evernote.Utils.hasSelection(window)) {\n            Evernote.Clipper.clipSelection(null, options);\n        }\n\t\t else if(clipOptions.getClipAction() == Evernote.ClipperActions.CLIP_URL) {\n            Evernote.Clipper.clipUrl(options);\n        } else if(clipOptions.getClipAction() == Evernote.ClipperActions.CLIP_FULL_PAGE) {\n            Evernote.Clipper.clipFullPage(options);\n        } else if(clipOptions.getClipAction() == Evernote.ClipperActions.CLIP_IMAGE) {\n            Evernote.Clipper.clipImage(options);\n        } else {\n            Evernote.Logger.warn(\"Unknown option is specified : \" + clipOptions.getClipAction());\n        }\n    },\n\n    clipBase64Image : function(options, base64Image) {\n        var self = this;\n        var currentOptions = this.initOptions(options);\n        this._clipNotifier.showCopyNotification(document , currentOptions);\n        Evernote.Addin.clipImageAsync(options, function(result) {\n            EvernoteGlobalReceiver(result);\n        }, PageContext.url, base64Image);\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ClipOptions = function ClipOptions(data) {\n    this.clipAction = data.clipAction;\n};\n\nEvernote.ClipOptions.prototype.getClipAction = function() {\n    return this.clipAction;\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nfunction ContentVeil() {\n\n    var veil = document.createElement(\"div\");\n    veil.id = \"evernoteContentVeil\";\n    var inner = document.createElement(\"div\");\n    inner.id = \"evernoteInnerBox\";\n\n    function fireClickUnderVeil(evt) {\n        veil.style.display = 'none';\n        var bottomElement = document.elementFromPoint(evt.clientX, evt.clientY);\n        veil.style.display = 'block';\n        bottomElement.click();\n    }\n\n    \/\/ make veil imperceptible for mouse clicks.\n    veil.attachEvent('onclick', fireClickUnderVeil);\n\n    var topExpandContract;\n    var bottomExpandContract;\n    for (var i = 0; i < 2; i++) {\n        var expand = document.createElement(\"span\");\n        var contract = document.createElement(\"span\");\n        expand.className = \"evernoteArticleExpand\";\n        contract.className = \"evernoteArticleContract\";\n\n\/\/        expand.setAttribute('tooltip', Evernote.Addin.getLocalizedMessage(Evernote.Messages.EXPAND));\n\/\/        expand.setAttribute('unselectable', 'on');\n\/\/        contract.setAttribute('tooltip',Evernote.Addin.getLocalizedMessage(Evernote.Messages.CONTRACT));\n\/\/        contract.setAttribute('unselectable','on');\n\n        expand.attachEvent(\"onclick\", function() {\n            Evernote.contentPreviewer.previewNudge('up');\n        });\n        contract.attachEvent(\"onclick\", function() {\n            Evernote.contentPreviewer.previewNudge('down');\n        });\n        if (i == 0) {\n            topExpandContract = document.createElement(\"div\");\n            topExpandContract.className = \"evernoteExpandContract evernoteUsingExpandContract\";\n            topExpandContract.appendChild(expand);\n            topExpandContract.appendChild(contract);\n        } else {\n            bottomExpandContract = document.createElement(\"div\");\n            bottomExpandContract.id = \"bottomExpandContract\";\n            bottomExpandContract.className = \"evernoteExpandContract\";\n            bottomExpandContract.appendChild(expand);\n            bottomExpandContract.appendChild(contract);\n        }\n    }\n\n    veil.appendChild(topExpandContract);\n    veil.appendChild(inner);\n    veil.appendChild(bottomExpandContract);\n\n    \/\/ We keep a record of what we're currently showing (at least in some cases) so that we can update it in case the\n    \/\/ state of the page changes (like if the user scrolls).\n    var currentlyShownRect = null;\n    var currentlyShownElt = null;\n    var currentRectOffsetTop = 0;\n    var currentRectOffsetLeft = 0;\n    var currentlyStatic = false;\n    var currentlyShadowBox = false;\n\n    function reset(doNotResetPageCount) {\n        currentlyShownRect = null;\n        currentlyShownElt = null;\n        currentRectOffsetTop = 0;\n        currentRectOffsetLeft = 0;\n        currentlyShadowBox = false;\n\n        inner.className = inner.className.replace(\/\\s*evernoteShadowBox\/g, \"\");\n        veil.className = inner.className.replace(\/\\s*evernoteShadowBox\/g, \"\");\n\n        if (!doNotResetPageCount) {\n\/\/            setPageCount();\n        }\n\n        topExpandContract.className = topExpandContract.className.replace(\/\\s*evernoteUsingExpandContract\/g, \"\");\n        bottomExpandContract.className = bottomExpandContract.className.replace(\/s*evernoteUsingExpandContract\/g, \"\");\n\n        showElements(\"embed\");\n        showElements(\"object\");\n        showElements(\"iframe\");\n\n        if(Evernote.Utils.isQuirkMode()) {\n            veil.className = \"evernote-top-fixed-position-quirks\";\n        }\n\n        blank();\n    }\n\n    function blank() {\n        veil.style.height = document.body.scrollHeight  + \"px\";\n        veil.style.width = document.body.scrollWidth  + \"px\";\n        veil.style.borderWidth = \"0\";\n    }\n\n    function gray() {\n        show();\n        inner.style.display = \"none\";\n        try {\n            veil.style.backgroundColor = \"rgba(255, 255, 255, 0.75)\";\n        } catch (e) {\n            veil.style.backgroundColor = \"rgb(255, 255, 255)\";\n        }\n    }\n\n    function show() {\n        Evernote.Logger.debug(\"Content veil show\");\n        inner.style.display = \"\";\n        veil.style.backgroundColor = \"\";\n        if (!Evernote.ElementExtension.hasParentNode(veil)) {\n            document.body.appendChild(veil);\n        }\n    }\n\n    function hide() {\n        if (Evernote.ElementExtension.hasParentNode(veil)) {\n            veil.parentNode.removeChild(veil);\n        }\n    }\n\n    function isHidden() {\n        if (Evernote.ElementExtension.hasParentNode(veil)) {\n            return false;\n        }\n        return true;\n    }\n\n    \/\/ Makes a rectangle bigger in all directions by the number of pixels specified (or smaller, if 'amount' is\n    \/\/ negative). Returns the new rectangle.\n    function expandRect(rect, amount) {\n        return {\n            top: (rect.top - amount),\n            left: (rect.left - amount),\n            bottom: (rect.bottom + amount),\n            right: (rect.right + amount),\n            width: (rect.width + (2 * amount)),\n            height: (rect.height + (2 * amount))\n        };\n    }\n\n    function revealRect(rect, elt, staticView, shadowBox) {\n\n        \/\/ Save this info.\n        currentlyShownRect = rect;\n        currentlyShownElt = elt;\n        currentRectOffsetTop = Evernote.Utils.scrollTop();\n        currentRectOffsetLeft = Evernote.Utils.scrollLeft();\n        currentlyStatic = staticView;\n        currentlyShadowBox = shadowBox;\n\n        \/\/ We expand the rectangle for two reasons.\n        \/\/ 1) we want to expand it by the width of the stroke, so that when we draw out outline, it doesn't overlap our\n        \/\/ content.\n        \/\/ 2) We want to leave a little extra room around the content for aesthetic reasons.\n        rect = expandRect(rect, 8);\n        var x = rect.left;\n        var y = rect.top;\n        var width = rect.width;\n        var height = rect.height;\n\n        \/*var veilWidth = Evernote.Utils.innerWidth(); \/\/veil.style.width.replace(\"px\", \"\");\n        var veilHeight = Evernote.Utils.innerHeight(); \/\/veil.style.height.replace(\"px\", \"\");*\/\n\n        var veilWidth = veil.style.width.replace(\"px\", \"\");\n        var veilHeight = veil.style.height.replace(\"px\", \"\");\n\n        inner.className = inner.className.replace(\/\\s*evernoteShadowBox\/g, \"\");\n        veil.className = inner.className.replace(\/\\s*evernoteShadowBox\/g, \"\");\n\n        if (shadowBox) {\n            inner.className += \" evernoteShadowBox\";\n            veil.className += \" evernoteShadowBox\";\n        }\n\n        inner.style.display = \"block\";\n        veil.style.borderLeftWidth = Math.max(x, 0) + \"px\";\n        veil.style.borderTopWidth = Math.max(y, 0) + \"px\";\n        veil.style.borderRightWidth = Math.max((veilWidth - x - width), 0) + \"px\";\n        veil.style.borderBottomWidth = Math.max((veilHeight - y - height), 0) + \"px\";\n\n        if (Evernote.BrowserDetection.isIE7() || document.documentMode == '7') {\n            \/\/ ie7 doesn't support 'border-box' value.\n\n            function val(prop) {\n                return prop.replace(\/px\/, '');\n            }\n            var vs = veil.style;\n            vs.width = (val(vs.width) - val(vs.borderLeftWidth) - val(vs.borderRightWidth)) + \"px\";\n            vs.height = (val(vs.height) - val(vs.borderTopWidth) - val(vs.borderBottomWidth)) + \"px\";\n        }\n\n        Evernote.Logger.debug(\"revealRect finished\");\n    }\n\n    function revealStaticRect(rect, elt, shadowBox) {\n        revealRect(rect, elt, true, shadowBox);\n    }\n\n    function outlineElement(element, scrollTo, shadowBox, articleAdjustment) {\n        \/\/ See notes in Preview.js for why we use this method instead of just calling element.getBoundingClientRect().\n\n        var rect = Evernote.contentPreviewer.computeDescendantBoundingBox(element);\n        if (rect) {\n\n            var mutableRect = {\n                top: rect.top,\n                bottom: rect.bottom,\n                left: rect.left,\n                right: rect.right,\n                width: rect.width,\n                height: rect.height\n            };\n\n            \/\/ We don't want to adjust ourselves into odd positions if the page is scrolled.\n            var sLeft = Evernote.Utils.scrollLeft();\n            var sTop = Evernote.Utils.scrollTop();\n\n            var BORDER_MIN = 9;\n            if (mutableRect.left < (BORDER_MIN - sLeft)) {\n                mutableRect.width -= (BORDER_MIN - sLeft) - mutableRect.left;\n                mutableRect.left = (BORDER_MIN - sLeft);\n            }\n            if (mutableRect.top < (BORDER_MIN - sTop)) {\n                mutableRect.height -= (BORDER_MIN - sTop) - mutableRect.top;\n                mutableRect.top = (BORDER_MIN - sTop);\n            }\n\n            \/\/ Get the wider of our two possible widths.\n            var width = Math.max(document.body.scrollWidth, Evernote.Utils.innerWidth());\n\n            if (mutableRect.right > (width - BORDER_MIN - sLeft)) {\n                mutableRect.right = (width - BORDER_MIN - sLeft);\n                mutableRect.width = mutableRect.right - mutableRect.left;\n            }\n\n            reset(articleAdjustment);\n            revealStaticRect(mutableRect, true, shadowBox);\n\n            hideElements(\"embed\", element);\n            hideElements(\"object\", element);\n            hideElements(\"iframe\", element);\n\n            topExpandContract.className += \" evernoteUsingExpandContract\";\n\n            if (rect.height > Evernote.JQuery(window).height()) {\n                bottomExpandContract.className += \" evernoteUsingExpandContract\";\n            } else {\n                bottomExpandContract.className = bottomExpandContract.className.replace(\/\\s*evernoteUsingExpandContract\/g, \"\");\n            }\n\n            show();\n        }\n        else {\n            Evernote.Logger.warn(\"Couldn't create rectangle from element: \" + element.toString());\n        }\n    }\n\n    function hideAllActiveObjects() {\n        hideElements(\"embed\");\n        hideElements(\"object\");\n        hideElements(\"iframe\");\n    }\n\n    function hideElements (tagName, exceptInElement) {\n        var els = document.getElementsByTagName(tagName);\n        for (var i = 0; i < els.length; i++) {\n            els[i].enSavedVisibility = els[i].style.visibility;\n            els[i].style.visibility = \"hidden\";\n        }\n        showElements(tagName, exceptInElement);\n    }\n\n    function showElements (tagName, inElement) {\n        if (!inElement) {\n            inElement = document;\n        }\n        var els = inElement.getElementsByTagName(tagName);\n        for (var i = 0; i < els.length; i++) {\n            if (typeof els[i].enSavedVisibility !== \"undefined\") {\n                els[i].style.visibility = els[i].enSavedVisibility;\n                try {\n                    delete els[i].enSavedVisibility;\n                } catch(e) {\n                    els[i].enSavedVisibility = undefined;\n                }\n            }\n        }\n    }\n\n    function getElement() {\n        return veil;\n    }\n\n    var onScrollHandle =  function(e) {\n        if (currentlyShownRect &#038;&#038; !currentlyStatic) {\n            var rect = {\n                top: currentlyShownRect.top,\n                bottom: currentlyShownRect.bottom,\n                left: currentlyShownRect.left,\n                right: currentlyShownRect.right,\n                width: currentlyShownRect.width,\n                height: currentlyShownRect.height\n            };\n\n            var vert = Evernote.Utils.scrollTop() - currentRectOffsetTop;\n            var horiz = Evernote.Utils.scrollLeft() - currentRectOffsetLeft;\n\n            if (!vert &#038;&#038; !horiz) {\n                return;\n            }\n\n            rect.top -= vert;\n            rect.bottom -= vert;\n            rect.left -= horiz;\n            rect.right -= horiz;\n            blank();\n            revealRect(rect, currentlyShownElt);\n        }\n    };\n\n    Evernote.JQuery(window).resize( function(e) {\n        if (currentlyShownElt) {\n            var rect = Evernote.contentPreviewer.computeDescendantBoundingBox(currentlyShownElt);\n            if (rect) {\n                blank();\n                if (currentlyShadowBox) {\n                    revealRect(rect, currentlyShownElt, true, true);\n                } else {\n                    revealRect(rect, currentlyShownElt, true, false);\n                }\n            }\n        }\n        if (inner.style.display == 'none') {\n            gray();\n        }\n    });\n\n    if (window.attachEvent)\n        window.attachEvent(\"onscroll\", onScrollHandle);\n    else if (window.addEventListener)\n        window.addEventListener(\"scroll\", onScrollHandle, false);\n    else\n        Evernote.Logger.error( \"ContentVeil can't attachEvent\" );\n\n    \/\/ Public API:\n    this.reset = reset;\n    this.show = show;\n    this.gray = gray;\n    this.hide = hide;\n    this.revealRect = revealRect;\n    this.revealStaticRect = revealStaticRect;\n    this.outlineElement = outlineElement;\n    this.expandRect = expandRect;\n    this.hideAllActiveObjects = hideAllActiveObjects;\n}\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nfunction PageInfo() {\n\n    \/\/ This is a map of hostnames (for hostnames that begin with 'www.', the 'www.' will be stripped off first, so don't\n    \/\/ include it in your lookup string) to CSS selectors. When we try and locate an article in a page, we'll see if we\n    \/\/ can find the doamin for the page in this list, and if so, we'll try and find an element that matches the given\n    \/\/ selector. If no element is returned, we'll fall back to the heuristic approach.\n    var specialCases = {\n        \"penny-arcade.com\": \"div.contentArea > div.comic > img\",\n        \"aspicyperspective.com\": \"div.entry-content\",\n        \"thewirecutter.com\": \"div#content\",\n        \"katespade.com\": \"div#pdpMain\",\n        \"threadless.com\": \"section.product_section\",\n        \"yelp.com\": \"div#bizBox\",\n        \"flickr.com\": \"div#photo\",\n        \"instagr.am\": \"div.stage > div.stage-inner\",\n        \"stackoverflow.com\": \"div#mainbar\",\n        \"makeprojects.com\": \"div#guideMain\",\n        \"cookpad.com\": \"div#main\",\n        \"imgur.com\": \"div.image\",\n        \"smittenkitchen.com\": \"div.entry\",\n        \"allrecipes.com\": \"div#content-wrapper\",\n        \"qwantz.com\": \"img.comic\",\n        \"questionablecontent.net\": \"img#strip\",\n        \"cad-comic.com\": \"div#content\"\n    }\n\n    var useFoundImage = [\n        \"xkcd.com\"\n    ]\n\n    \/\/ These are the items we're trying to collect. This first block is trivial.\n    var containsImages = Boolean(document.getElementsByTagName(\"img\").length > 0);\n    var documentWidth = document.width;\n    var documentHeight = document.height;\n    var url = document.location.href;\n    var documentLength = document.body.textContent ? document.body.textContent.length : 0;\n\n    \/\/ These take slightly more work and are initialized only when requested.\n    var article = null;\n    var articleBoundingClientRect = null;\n    var selection = false; \/\/ This is easy to get, but is always \"false\" at load time until the user selects something.\n    var selectionIsInFrame = false;\n    var documentIsFrameset = false;\n    var selectionFrameElement = null;\n    var recommendationText = null;\n\n    \/\/ Internal state variables to keep us duplicating work.\n    var hasCheckedArticle = false;\n\n    \/\/ Experimental recognition of 'image' pages (like photo sites and comics).\n    function findImage() {\n        var imgs = document.getElementsByTagName(\"img\");\n        var biggest = null;\n        var biggestArea = 0;\n\n        try {\n            for (var i = 0; i < imgs.length; i++) {\n                var style = Evernote.ElementExtension.getComputedStyle(imgs[i]);\n                var width = style.width.replace(\/[^0-9.-]\/g, \"\");\n                var height = style.height.replace(\/[^0-9.-]\/g, \"\");\n                var area = width * height;\n                if (!biggest || area > biggestArea) {\n                    biggest = imgs[i];\n                    biggestArea = area;\n                }\n            }\n        } catch (e) {\n            \/\/ error on mail.com\n        }\n        return biggest;\n    }\n\n    function getAncestors(node) {\n        var an = [];\n        while (node) {\n            an.unshift(node);\n            node = node.parentNode;\n        }\n        return an;\n    }\n\n    function getDeepestCommonNode(nodeList1, nodeList2) {\n        var current = null;\n        for (var i = 0; i < nodeList1.length; i++) {\n            if (nodeList1[i] === nodeList2[i]) {\n                current = nodeList1[i];\n            }\n            else {\n                break;\n            }\n        }\n        return current;\n    }\n\n    function getCommonAncestor(nodeList) {\n        if (!nodeList.length) return null;\n\n        if (nodeList.length == 1) return nodeList[0];\n        var lastList = getAncestors(nodeList[0]);\n\n        var node = null;\n        for (var i = 1; i < nodeList.length; i++) {\n            var list = getAncestors(nodeList[i]);\n            node = getDeepestCommonNode(lastList, list);\n            lastList = getAncestors(node);\n        }\n        return node;\n    }\n\n    function getBiggestImage(callback) {\n        getDefaultArticle(function(art) {\n            var imgs;\n            if (art) {\n                imgs = Evernote.JQuery(art).find('img');\n            } else {\n                imgs = Evernote.JQuery(\"img\");\n            }\n\n            var maxHeight = 0;\n            var maxWidth = 0;\n            var maxImage;\n            for (var i = 0; i < imgs.length; i++) {\n                var w = imgs[i].width;\n                var h = imgs[i].height;\n                if (w * h > maxWidth * maxHeight) {\n                    maxHeight = h;\n                    maxWidth = w;\n                    maxImage = imgs[i].src;\n                }\n            }\n            callback({ src: maxImage, width: maxWidth, height: maxHeight });\n        });\n    }\n\n    function clearlyCallback(data, callback) {\n        Evernote.Logger.debug(\"Clearly callback invoked\");\n        findImage();\n\n        \/\/ See if we should special-case this.\n        var host = getHostname();\n        if (specialCases[host])\n        {\n            var candidate = Evernote.ElementExtension.querySelector(specialCases[host]);\n            if (candidate) {\n                Evernote.Logger.debug(\"Found article in specialCases\");\n                article = candidate;\n                articleBoundingClientRect = Evernote.ElementExtension.getBoundingClientRect(article);\n            }\n        }\n\n        \/\/ Or see if it's a special case image page.\n        else if (Evernote.ArrayExtension.indexOf(useFoundImage, host) != -1) {\n            article = findImage();\n            if (article) {\n                Evernote.Logger.debug(\"Found article in image\");\n                articleBoundingClientRect = Evernote.ElementExtension.getBoundingClientRect(article);\n            }\n        }\n\n        \/\/ If it's not a special case, see if it's a single image.\n        if (!article) {\n            var imageTypes = ['jpeg', 'jpg', 'gif', 'png'];\n            var urlExtension = document.location.href.replace(\/^.*\\.(\\w+)$\/, \"$1\");\n            if (urlExtension &#038;&#038; (Evernote.ArrayExtension.indexOf(imageTypes, urlExtension) != -1)) {\n                var candidate = Evernote.JQuery(\"body > img\");\n                if (candidate.length > 0) {\n                    Evernote.Logger.debug(\"Found article in a single image\");\n                    article = candidate.get(0);\n                    articleBoundingClientRect = Evernote.ElementExtension.getBoundingClientRect(article);\n                }\n            }\n        }\n\n        \/\/ If we still didn't find an article, let's see if maybe it's in a frame. Cleary fails on frames so we try this\n        \/\/ check before we use our clearly info.\n        if (!article) {\n            if (document.body.nodeName.toLowerCase() == \"frameset\") {\n                documentIsFrameset = true;\n                var frame = findBiggestFrame();\n                if (frame &#038;&#038; frame.contentDocument &#038;&#038; frame.contentDocument.documentElement) {\n                    selectionFrameElement = frame;\n                    article = frame.contentDocument.documentElement;\n                    articleBoundingClientRect = Evernote.ElementExtension.getBoundingClientRect(article);\n                }\n            }\n        }\n\n        \/\/ If we didn't use any of our special case handling, we'll use whatever clearly found.\n        if (!article) {\n            Evernote.Logger.debug(\"Use clearly find article\");\n            if (data &#038;&#038; data._elements &#038;&#038; data._elements.length) {\n                article = data._elements[0];\n                if (data._elements.length > 1) {\n\n                    \/\/ This will include *all* clearly elements (and whatever else in in between them).\n                    article = getCommonAncestor(data._elements);\n\n                    \/\/ This includes *just the last (and therefore most important)* element from the clearly detection.\n                    \/\/ article = data._elements[data._elements.length - 1];\n                }\n\n                if (article.nodeType === ( window.Node ? window.Node.TEXT_NODE : 1)) {\n                    article = article.parentNode;\n                }\n            }\n        }\n\n        if(article) {\n            if(Evernote.JQuery(article).closest(\"#evernote-content\").length != 0)\n                article = undefined;\n        }\n\n        \/\/ If clearly found nothing (because it failed), then use the body of the document.\n        if (!article) {\n            article = document.body;\n        }\n\n        hasCheckedArticle = true;\n        callback();\n    }\n\n    \/\/ This will try and determine the 'default' page article. It will only run once per page, but it's specifically\n    \/\/ called only on demand as it can be expensive.\n    function findArticle(callback) {\n\n        function afterInject() {\n            \/\/ If we'd previously computed an article element, but it's lost its parent or become invisible, then we'll try\n            \/\/ and re-compute the article. This can happen if, for example the page dynamically udaptes itself (like showing\n            \/\/ the latest news article in a box that updates periodically). This doesn't guarantee that we clip something\n            \/\/ sane if this happens, (if the page re-writes itself while a clip is taking place, the results are\n            \/\/ indeterminate), but it will make such things less likely.\n            if (article &#038;&#038;\n                (!article.parentNode || !article.getBoundingClientRect || Evernote.ElementExtension.getBoundingClientRect(article).width == 0)) {\n                article = null;\n                hasCheckedArticle = false;\n            }\n            Evernote.Logger.debug(\"afterInject\");\n            if (!hasCheckedArticle) {\n                Evernote.Logger.debug(\"no article\");\n                if (!window || !window.ClearlyComponent)\n                {\n                    Evernote.Logger.warn(\"Couldn't find clearly!\");\n                    clearlyCallback(null, callback);\n                }\n                else {\n                    Evernote.Logger.debug(\"Call clearly to select article\");\n                    try {\n                        Evernote.ClearlyController.getContentElementAndHTML(function(data){clearlyCallback(data, callback)});\n                    } catch(e) {\n                        Evernote.Logger.error(\"Failed to find article by clearly due to error \" + e);\n                        clearlyCallback(null, callback);\n                    }\n                }\n            }\n            \/\/ If the page is big enough, clearly is excruciatingly slow. We'll jsut get the whole page.\n            \/\/ @TODO: Maybe clearly can get faster.\n            else if (document.body.innerHTML.length > (1024 * 1024)) {\n                Evernote.Logger.warn(\"Page over 1mb, skipping article detection.\");\n                clearlyCallback(null, callback);\n            }\n            else {\n                Evernote.Logger.debug(\"callback\");\n                callback();\n            }\n        }\n\n        afterInject();\n\n    }\n\n    function findBiggestFrame() {\n        var frames = document.getElementsByTagName(\"frame\");\n        var candidate = null;\n        var candidateSize = 0;\n        for (var i = 0; i < frames.length; i++) {\n            if (frames[i].width &#038;&#038; frames[i].height) {\n                var area = frames[i].width * frames[i].height;\n                if (area > candidateSize) {\n                    candidate = frames[i];\n                    candidateSize = area;\n                }\n            }\n        }\n        return candidate;\n    }\n\n    function getHostname() {\n        var match = document.location.href.match(\/^.*?:\\\/\\\/(www\\.)?(.*?)(\\\/|$)\/);\n        if (match) {\n            return match[2];\n        }\n        return null;\n    }\n\n    function getDefaultArticle(callback) {\n        Evernote.Logger.debug(\"getDefaultArticle\");\n        findArticle(function(){callback(article)});\n        \/\/ Article already exists, so we'll return it.\n        if (article) return article;\n    }\n\n    \/\/ Looks for selections in the current document and descendent (i)frames.\n    \/\/ Returns the *first* non-empty selection.\n    function getSelection() {\n\n        \/\/ First we check our main window and return a selection if that has one.\n        var selection = window.getSelection();\n        if (selection &#038;&#038; selection.rangeCount &#038;&#038; !selection.isCollapsed) {\n            return selection;\n        }\n\n        \/\/ Then we'll try our frames and iframes.\n        var docs = [];\n        var iframes = document.getElementsByTagName(\"iframe\");\n        for (var i = 0; i < iframes.length; i++) {\n            docs.push(iframes[i]);\n        }\n        var frames = document.getElementsByTagName(\"frame\");\n        for (var i = 0; i < frames.length; i++) {\n            docs.push(frames[i]);\n        }\n\n        var urlBase = document.location.href.replace(\/^(https?:\\\/\\\/.*?)\\\/.*\/i, \"$1\").toLowerCase();\n        for (var i = 0; i < docs.length; i++) {\n\n            \/\/ If frames\/iframes fail a same origin policy check, then they'll through annoying errors, and we wont be able\n            \/\/ to access them anyway, so we attempt to skip anything that wont match.\n            if (docs[i].src &#038;&#038; docs[i].src.toLowerCase().substr(0, urlBase.length) !== urlBase) {\n                continue;\n            }\n\n            var doc = docs[i].contentDocument;\n\n            if (doc) {\n                var frameSelection = doc.getSelection();\n                if (frameSelection &#038;&#038; frameSelection.rangeCount &#038;&#038; !frameSelection.isCollapsed) {\n                    selectionIsInFrame = true;\n                    selectionFrameElement = docs[i];\n                    return frameSelection;\n                }\n            }\n            else {\n                Evernote.Logger.warn(\"iframe contained no Document object.\");\n            }\n        }\n\n        \/\/ Didn't find anything.\n        return null;\n    }\n\n    function getUrl() {\n        return url;\n    }\n\n    function getText(node, soFar, maxLen) {\n        if (node.nodeType == Evernote.Node.TEXT_NODE) {\n            var trimmed = node.textContent.trim().replace(\/\\s+\/g, \" \");\n            if (trimmed === \" \" || trimmed === \"\") return soFar;\n            return soFar + \" \" + trimmed;\n        }\n\n        var banned = [\n            \"style\",\n            \"script\",\n            \"noscript\"\n        ];\n\n        if (node.nodeType == Evernote.Node.ELEMENT_NODE) {\n            if (Evernote.ArrayExtension.indexOf(banned, node.nodeName.toLowerCase()) == -1) {\n                for (var i = 0; i < node.childNodes.length; i++) {\n                    soFar = getText(node.childNodes[i], soFar, maxLen);\n                    if (soFar.length > maxLen) {\n                        return soFar;\n                    }\n                }\n            }\n        }\n        return soFar;\n    }\n\n    function getRecommendationText() {\n        var text = \"\";\n        var MAX_LEN = 5000;\n        var selection = getSelection();\n        if (selection) {\n            var df = selection.getRangeAt(0).cloneContents();\n            var div = document.createElement(\"div\");\n            div.appendChild(df);\n            text = getText(div, \"\", MAX_LEN);\n        }\n\n        else if (article) {\n            text = getText(article, \"\", MAX_LEN);\n        }\n        else {\n            text = getText(document.body, \"\", MAX_LEN);\n        }\n        text = document.title + \" \" + text;\n        return text;\n    }\n\n    \/\/ Note: you must call getSelection() first to populate this field!\n    function getSelectionFrame() {\n        return selectionFrameElement;\n    }\n\n    function checkClearly() {\n        var clearlyDoc = Evernote.ElementExtension.querySelector(\"iframe#readable_iframe\");\n        if (clearlyDoc) clearlyDoc = clearlyDoc.contentDocument;\n        if (clearlyDoc) clearlyDoc = Evernote.ElementExtension.querySelector(\"body#body div#box\", clearlyDoc);\n        if (clearlyDoc) {\n            article = clearlyDoc;\n            articleBoundingClientRect = Evernote.ElementExtension.getBoundingClientRect(article);\n        }\n    }\n\n    \/\/ @TODO: This is fairly incomplete.\n    function getFavIconUrl() {\n        var links = document.getElementsByTagName(\"link\");\n        var i;\n        for (i = 0; i < links.length; i++) {\n            if (links[i].rel) {\n                var rels = links[i].rel.toLowerCase().split(\/\\s+\/);\n                if (Evernote.ArrayExtension.indexOf(rels, \"icon\") !== -1) {\n                    \/\/ Found it!\n                    return links[i].href;\n                }\n            }\n        }\n        return null;\n    }\n\n    function _getInfoRequestHandler(data, request, sender, sendResponse) {\n        var isSelected = getSelection();\n\n        checkClearly();\n\n        var response = {\n            containsImages: containsImages,\n            documentWidth: documentWidth,\n            documentHeight: documentHeight,\n            url: url,\n            selection: (isSelected !== null),\n            selectionIsInFrame: selectionIsInFrame,\n            documentLength: document.body.textContent.length,\n            articleBoundingClientRect: articleBoundingClientRect,\n            article: (article != null),\n            recommendationText: getRecommendationText(),\n            favIconUrl: getFavIconUrl(),\n            documentIsFrameset: documentIsFrameset\n        };\n        sendResponse(response);\n    }\n\n    function getInfoRequestHandler(request, sender, sendResponse) {\n        findArticle(function(data){_getInfoRequestHandler(data, request, sender, respondWithInfo)});\n    }\n\n    \/\/ Public API:\n    this.getDefaultArticle = getDefaultArticle;\n    this.getSelection = getSelection;\n    this.getSelectionFrame = getSelectionFrame;\n    this.getFavIconUrl = getFavIconUrl;\n    this.getBiggestImage = getBiggestImage;\n    this.getUrl = getUrl;\n}\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.Scroller = function Scroller( tab ) {\n    this.initialize( tab );\n};\n\nEvernote.Scroller.prototype._tab = null;\n\nEvernote.Scroller.prototype.initialize = function ( tab ) {\n    this._tab = tab;\n    var scrollX = (this._tab.pageXOffset !== undefined) ? this._tab.pageXOffset : (this._tab.document.documentElement || this._tab.document.body.parentNode ||this._tab.document.body).scrollLeft;\n    var scrollY = (this._tab.pageYOffset !== undefined) ? this._tab.pageYOffset : (this._tab.document.documentElement || this._tab.document.body.parentNode || this._tab.document.body).scrollTop;\n    this.initialPoint = {\n        x: scrollX,\n        y: scrollY\n    };\n};\n\nEvernote.Scroller.prototype.scrollTo = function ( endPoint, time, resolution ) {\n    this.abort();\n\n    this.endPoint = endPoint;\n    this.step = 0;\n    this.calculatePath( time, resolution );\n    var self = this;\n    this.proc = setInterval( function () {\n            if ( !self.doScroll() ) {\n                self.abort();\n            }\n        },\n        resolution );\n};\n\nEvernote.Scroller.prototype.calculatePath = function ( time, resolution ) {\n    this.path = [];\n    var sx = this.initialPoint.x;\n    var sy = this.initialPoint.y;\n    var ex = this.endPoint.x;\n    var ey = this.endPoint.y;\n    var k = (Math.PI * resolution) \/ time;\n    for ( var i = -(Math.PI \/ 2); i < (Math.PI \/ 2); i += k ) {\n        var c = ((1 + Math.sin( i )) \/ 2);\n        this.path.push( {\n            x:(sx + c * (ex - sx)),\n            y:(sy + c * (ey - sy))\n        } );\n    }\n};\n\nEvernote.Scroller.prototype.doScroll = function () {\n    var s = this.path[++this.step];\n    if ( !s ) {\n        return false;\n    }\n    var view = this._tab.document.defaultView || this._tab;\n    view.scrollTo( s.x, s.y );\n    return true;\n};\n\nEvernote.Scroller.prototype.abort = function () {\n    if ( this.proc ) {\n        clearInterval( this.proc );\n        this.proc = null;\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nfunction ContentPreview() {\n    Evernote.Logger.debug(\"Start creating preview box\");\n\n    var contentVeil = new ContentVeil();\n    Evernote.Logger.debug(\"End creating preview box\");\n    \/\/ Stores a reference to the last element that we used as a preview.\n    var previewElement = null;\n    var article = null;\n    var snippet = null;\n\n    function buildUrlElement() {\n        var urlEl = document.createElement(\"div\");\n        urlEl.id = \"evernotePreviewContainer\";\n        var className = \"yui3-cssreset\";\n        if(Evernote.Utils.isQuirkMode()) {\n            className += \" evernote-middle-fixed-position-quirks\"\n        }\n        urlEl.className = className;\n        return urlEl;\n    }\n\n    Evernote.Logger.debug(\"Build url element\");\n    var urlElement = buildUrlElement();\n\n    function showUrlElement() {\n        Evernote.Logger.debug(\"ContentPreview: showUrlElement start\");\n        if (!Evernote.ElementExtension.hasParentNode(urlElement)) {\n            document.body.appendChild(urlElement);\n        }\n\n        \/\/ Make sure we're centered in the window.\n        var elStyle = Evernote.ElementExtension.getComputedStyle(urlElement, '');\n        var w = parseInt(Evernote.StyleElementExtension.getPropertyValue(elStyle, \"width\"));\n        var h = parseInt(Evernote.StyleElementExtension.getPropertyValue(elStyle, \"height\"));\n\n        if (isNaN(w) || isNaN(h)) {\n            \/\/ IE8\n            w =  Evernote.JQuery(urlElement).width();\n            h = Evernote.JQuery(urlElement).height();\n        }\n\n        if (w &#038;&#038; h) {\n            urlElement.style.marginLeft = (0 - w \/ 2) + \"px\";\n            urlElement.style.marginTop = (0 - h \/ 2) + \"px\";\n        }\n\n        Evernote.Logger.debug(\"ContentPreview: showUrlElement end\");\n    }\n\n    function hideUrlElement() {\n        if (Evernote.ElementExtension.hasParentNode(urlElement)) {\n            urlElement.parentNode.removeChild(urlElement);\n        }\n    }\n\n    function showOverlay()  {\n        previewElement = null;\n        clear();\n        contentVeil.reset();\n        contentVeil.hideAllActiveObjects();\n        contentVeil.gray();\n    }\n\n    function previewUrl() {\n        clear();\n\n        function buildContent ( data ) {\n            var title = PageContext.title;\n            var url = PageContext.url;\n            var favIconUrl = PageContext.getFavIconUrl();\n            snippet = data.replace(\/(<([^>]+)>)\/ig,\"\"); \/\/ remove html tags from text\n\n            urlElement.innerHTML = Evernote.GlobalUtils.createUrlClipContent(title, url, favIconUrl, snippet);\n\n            var element = Evernote.JQuery(urlElement);\n\n            if(Evernote.Utils.isQuirkMode() &#038;&#038; !element.hasClass(\"evernote-fixed-position-fix\")) {\n                element.addClass(\"evernote-fixed-position-fix\");\n            }\n\n            showUrlElement();\n            contentVeil.reset();\n            contentVeil.hideAllActiveObjects();\n            contentVeil.gray();\n\n        }\n\n        Evernote.ClearlyController.getClearlyArticleText( function (data) {\n            buildContent(data._html);\n        });\n    }\n\n    \/\/ This doesn't remove internal state of previewElement, because another script may not have finished clipping until\n    \/\/ after the page looks 'clear'.\n    function clear() {\n        contentVeil.reset();\n        contentVeil.hide();\n        hideUrlElement();\n    }\n\n    function _previewArticle () {\n        Evernote.Logger.debug(\"Start previewing article element\");\n        if (previewElement)\n        {\n            var selectionFrame;\n            if (typeof Evernote.pageInfo !== undefined) {\n                selectionFrame = Evernote.pageInfo.getSelectionFrame();\n            }\n            Evernote.Logger.debug(\"Selection frame selected \" + selectionFrame);\n            if (selectionFrame) {\n\n                var rect = {\n                    width: selectionFrame.width,\n                    height: selectionFrame.height,\n                    top: selectionFrame.offsetTop,\n                    bottom: (selectionFrame.height + selectionFrame.offsetTop),\n                    left: selectionFrame.offsetLeft,\n                    right: (selectionFrame.width + selectionFrame.offsetLeft)\n                };\n                Evernote.Logger.debug(\"contentVeil.revealStaticRect \" + rect);\n                contentVeil.revealStaticRect(contentVeil.expandRect(rect, -9), selectionFrame, true);\n                Evernote.Logger.debug(\"contentVeil.show \");\n                contentVeil.show();\n            }\n            else {\n                Evernote.Logger.debug(\"contentVeil.outlineElement\");\n                contentVeil.outlineElement(previewElement, false, true);\n                window.scrollTo(0, previewElement.offsetTop - 30);\n            }\n        }\n        else {\n            Evernote.Logger.warn(\"Couldn't find a preview element. We should switch to 'full page' mode.\");\n        }\n    }\n\n    \/**\n     * Finds and preview article element.\n     * If reloadArticle is specified and equals to true, then discard previously found article and re-start search of article again.\n     * Otherwise use article found on previous call (if this is the first call then article will be searched anyway).\n     * @param reloadArticle\n     *\/\n    function previewArticle (reloadArticle) {\n\n        clear();\n        previewElement = null;\n        if(reloadArticle) {\n            article = null;\n        }\n        Evernote.Logger.debug(\"Evernote.pageinfo \" + Evernote.pageInfo);\n        if (typeof Evernote.pageInfo !== undefined) {\n            if(!article) {\n                previewElement = Evernote.pageInfo.getDefaultArticle(function(el){\n                    Evernote.Logger.debug(\"Article element \" + el.nodeName);\n                    previewElement = el;\n                    article = el;\n                    Evernote.Logger.debug(\"Preview article \");\n                    _previewArticle();\n                });\n                article = previewElement;\n            } else {\n                previewElement = article;\n                _previewArticle();\n            }\n        }\n        else {\n            Evernote.Logger.warn(\"Couldn't find a 'pageInfo' object.\");\n        }\n    }\n\n    \/\/ When nudging the preview around the page, we want to skip nodes that aren't interesting. This includes empty\n    \/\/ nodes, containers that have identical contents to the already selected node, invisible nodes, etc.\n    \/\/ @TODO: There's a lot more we could probably add here.\n    function looksInteresting(candidate, given) {\n\n        if (!candidate) {\n            Evernote.Logger.warn(\"Can't determine if 'null' is interesting (it's probably not).\");\n            return false;\n        }\n        \/\/ This is the parent of our 'HTML' tag, but has no tag itself. There's no reason it's ever more interesting than\n        \/\/ the HTML element.\n        if (candidate === window.document) {\n            return false;\n        }\n\n        \/\/Disable clip of evernote main popup\n        if(Evernote.JQuery(candidate).closest(\"#evernote-content\").length != 0) {\n            return false;\n        }\n\n        \/\/ Elements with neither text nor images are not interesting.\n        if (!candidate.textContent &#038;&#038; (candidate.getElementsByTagName(\"img\").length === 0)) {\n            return false;\n        }\n\n        \/\/ Elements with 0 area are not interesting.\n        var rect = Evernote.ElementExtension.getBoundingClientRect(candidate);\n        if (!rect.width || !rect.height) {\n            return false;\n        }\n\n        \/\/ Invisible elements are not interesting.\n        var style = Evernote.ElementExtension.getComputedStyle(candidate);\n        if ((style.visibility === \"hidden\") || (style.display === \"none\")) {\n            return false;\n        }\n\n        \/\/ If the nodes have a parent\/child relationship, then they're only interesting if their visible contents differ.\n        if (candidate.parentNode &#038;&#038; given.parentNode) {\n            if ((candidate.parentNode == given) || (given.parentNode == candidate)) {\n                if ((candidate.textContent === given.textContent) &#038;&#038;\n                    (candidate.getElementsByTagName(\"img\").length === given.getElementsByTagName(\"img\").length)) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n\n    \/\/ Returns the current article element, which may not be the same as the auto-detected one if the user has 'nudged'\n    \/\/ the selection around the page.\n    function getArticleElement() {\n        return previewElement;\n    }\n\n    function nudgePreview(direction) {\n        Evernote.Logger.debug(\"nudgePreview start\");\n        if (!previewElement) {\n            return;\n        }\n\n        var oldPreview = previewElement;\n        Evernote.Logger.debug(\"nudgePreview: direction is \" + direction);\n        Evernote.Logger.debug(\"nudgePreview: previewElement is \" + previewElement.nodeName);\n        switch (direction) {\n            case \"up\":\n                var temp = previewElement.parentNode;\n                while (temp) {\n                    if (looksInteresting(temp, previewElement)) {\n                        \/\/ If we move up and then down, we want to move back to where we started, not the first child.\n                        temp.enNudgeDescendToNode = previewElement;\n                        previewElement = temp;\n                        break;\n                    }\n                    temp = temp.parentNode;\n                }\n                break;\n            case \"down\":\n                Evernote.Logger.debug(\"nudgePreview: previewElement.enNudgeDescendToNode is \" + previewElement.enNudgeDescendToNode);\n                if (previewElement.enNudgeDescendToNode)\n                {\n                    var temp = previewElement.enNudgeDescendToNode;\n                    \/\/ @TODO: make sure we clean these up somewhere else if we never reverse our nudging.\n                    try {\n                        delete previewElement.enNudgeDescendToNode;\n                    } catch(e) {\n                        previewElement.enNudgeDescendToNode = undefined;\n                    }\n                    previewElement = temp;\n                    break;\n                }\n                Evernote.Logger.debug(\"nudgePreview: previewElement.children.length = \" + previewElement.children.length);\n                for (var i = 0; i < previewElement.children.length; i++) {\n                    Evernote.Logger.debug(\"nudgePreview: checking child is \" + previewElement.children[i].nodeName);\n                    if (looksInteresting(previewElement.children[i], previewElement)) {\n                        Evernote.Logger.debug(\"nudgePreview: found interesting child\" + previewElement.children[i]);\n                        previewElement = previewElement.children[i];\n                        break;\n                    }\n                }\n                break;\n            case \"left\":\n                var temp = previewElement.previousElementSibling;\n                while (temp) {\n                    if (looksInteresting(temp, previewElement)) {\n                        previewElement = temp;\n                        break;\n                    }\n                    temp = temp.previousElementSibling;\n                }\n                break;\n            case \"right\":\n                var temp = previewElement.nextElementSibling;\n                while (temp) {\n                    if (looksInteresting(temp, previewElement)) {\n                        previewElement = temp;\n                        break;\n                    }\n                    temp = temp.nextElementSibling;\n                }\n                break;\n            default:\n                Evernote.Logger.warn(\"Unhandled nudge direction: \" + direction);\n        }\n\n        \/\/ Drawing is expensive so don't bother if nothing changed.\n        if (oldPreview !== previewElement) {\n            Evernote.Logger.debug(\"nudgePreview: draw new element.\");\n\n            function enoughSize(elem) {\n                var el = Evernote.JQuery(elem);\n                var w = el.width();\n                var h = el.height();\n                return (w > 30 &#038;&#038; h > 15)\n            }\n\n\/\/            if (enoughSize(previewElement) === false) return;\n\n            contentVeil.outlineElement(previewElement, false, true, true);\n            article = previewElement;\n\n            window.scrollTo(0, previewElement.offsetTop - 30);\n        }\n    }\n\n    function previewFullPage() {\n        var borderWidth = 4;\n        var w = Evernote.Utils.innerWidth();\n        var h = Evernote.Utils.innerHeight();\n\n        var rect = {\n            bottom: (h - borderWidth),\n            top: (borderWidth),\n            left: (borderWidth),\n            right: (w - borderWidth),\n            width: (w - (2 * borderWidth)),\n            height: (h - (2 * borderWidth))\n        };\n\n        clear();\n        contentVeil.reset();\n        contentVeil.revealStaticRect(rect, document.body);\n        contentVeil.show();\n        contentVeil.hideAllActiveObjects();\n    }\n\n    \/\/ Creates the union of two rectangles, which is defined to be the smallest rectangle that contains both given\n    \/\/ rectangles.\n    function unionRectangles(rect1, rect2) {\n        var rect = {\n            top: (Math.min(rect1.top, rect2.top)),\n            bottom: (Math.max(rect1.bottom, rect2.bottom)),\n            left: (Math.min(rect1.left, rect2.left)),\n            right: (Math.max(rect1.right, rect2.right))\n        }\n        rect.width = rect.right - rect.left;\n        rect.height = rect.bottom - rect.top;\n\n        return rect;\n    }\n\n    \/\/ Returns true if the rectangles match, false otherwise.\n    function rectanglesEqual(rect1, rect2) {\n        if (!rect1 &#038;&#038; !rect2) return true;\n        if (!rect1) return false;\n        if (!rect2) return false;\n        if (rect1.top != rect2.top) return false;\n        if (rect1.bottom != rect2.bottom) return false;\n        if (rect1.left != rect2.left) return false;\n        if (rect1.right != rect2.right) return false;\n        if (rect1.width != rect2.width) return false;\n        if (rect1.height != rect2.height) return false;\n        return true;\n    }\n\n    \/\/ If the user triple-clicks a paragraph, we will often get a selection that includes the next paragraph after the\n    \/\/ selected one, but only up to offset 0 in that paragraph. This causes the built in getBoundingClientRect to give a\n    \/\/ box that includes the whole trailing paragraph, even though none of it is actually selected. Instead, we'll build\n    \/\/ our own bounding rectangle that omits the trailing box.\n    \/\/ @TODO: Currently this computes a box that is *too big* if you pass it a range that doesn't have start and\/or end\n    \/\/ offsets that are 0, because it will select the entire beginning and ending node, instead of jsut the selected\n    \/\/ portion.\n    function computeAlternateBoundingBox(range) {\n\n        \/\/ If the end of selection isn't at offset 0 into an element node (rather than a text node), then we just return the\n        \/\/ original matching rectangle.\n        if ((range.endOffset !== 0) ||\n            (range.endContainer &#038;&#038; range.endContainer.nodeType !== Evernote.Node.ELEMENT_NODE) ||\n            ( range.startContainer &#038;&#038; range.startContainer &#038;&#038; range.startContainer.getBoundingClientRect) ||\n            ( range.endContainer &#038;&#038; range.endContainer.getBoundingClientRect) ||\n            ( range.commonAncestorContainer &#038;&#038; range.commonAncestorContainer.getBoundingClientRect)\n            ) {\n            var rect = Evernote.ElementExtension.getBoundingClientRect(range);\n\n            \/\/ In ie8 and older getBoundingClientRect takes into account text only. If there is an image or other element\n            \/\/ at the bound of selection, it will be ignored during calculation of rect coordinates. Here, we fix it.\n            if (range.startContainer &#038;&#038; range.startContainer.nodeType == Evernote.Node.ELEMENT_NODE) {\n                var startNodeRect = Evernote.ElementExtension.getBoundingClientRect(range.startContainer);\n                if (startNodeRect.height > rect.height) rect = Evernote.Utils.unionRectangles(rect, startNodeRect)\n            }\n            if (range.endContainer &#038;&#038; range.endContainer.nodeType == Evernote.Node.ELEMENT_NODE) {\n                var endNodeRect = Evernote.ElementExtension.getBoundingClientRect(range.endContainer);\n                if (endNodeRect.height > rect.height) rect = Evernote.Utils.unionRectangles(rect, endNodeRect)\n            }\n\n            if(rect.top == 0 &#038;&#038; rect.bottom == 0 &#038;&#038; rect.left == 0 &#038;&#038; rect.right == 0) {\n                if(range.commonAncestorContainer &#038;&#038; range.commonAncestorContainer.getBoundingClientRect) {\n                    rect = range.commonAncestorContainer.getBoundingClientRect();\n                } else if(range.startContainer &#038;&#038; range.startContainer.getBoundingClientRect) {\n                    rect = range.startContainer.getBoundingClientRect();\n                } else if(range.endContainer &#038;&#038; range.endContainer.getBoundingClientRect) {\n                    rect = range.endContainer.getBoundingClientRect();\n                }\n            }\n            var mutableRect = {\n                top: rect.top,\n                bottom: rect.bottom,\n                left: rect.left,\n                right: rect.right,\n                width: rect.width,\n                height: rect.height\n            };\n            return mutableRect;\n        }\n\n        \/\/ This is the one we don't want.\n        var endElementRect = null;\n        try {\n            endElementRect = Evernote.ElementExtension.getBoundingClientRect(range.endContainer);\n        }\n        catch(ex) {\n            Evernote.Logger.warn(\"Couldn't get a bounding client rect for our end element, maybe it's a text node.\");\n        }\n\n        \/\/ We look for a rectangle matching our end element, and if we find it, we don't copy it to our list to keep.\n        \/\/ You'd think we could just grab the last element in range.getClientRects() here and trim that one, which might be\n        \/\/ true, but the spec makes no claim that these are returned in order, so I don't want to rely on that.\n        \/\/ We keep track if we remove a rectangle, as we're only trying to remove one for the trailnig element. If there are\n        \/\/ more than one matching rectangle, we want to keep all but one of them.\n        var foundEnd = false;\n        var keptRects = [];\n        var initialRects = range.getClientRects();\n        for (var i = 0; i < initialRects.length; i++) {\n            if (rectanglesEqual(endElementRect, initialRects[i]) &#038;&#038; !foundEnd) {\n                foundEnd = true;\n            }\n            else {\n                keptRects.push(initialRects[i]);\n            }\n        }\n\n        \/\/ Now compute our new bounding box and return that.\n        if (keptRects.length == 0) return Evernote.ElementExtension.getBoundingClientRect(range);\n        if (keptRects.length == 1) return keptRects[0];\n\n        var rect = keptRects[0];\n        for (var i = 1; i < keptRects.length; i++) {\n            rect = unionRectangles(rect, keptRects[i]);\n        }\n\n        return rect;\n    }\n\n    \/\/ If every edge of the rectangle is in negative space,\n    function rectIsOnScreen(rect) {\n        \/\/ rtl pages have actual content in \"negative\" space. This case could be handled better.\n        if (document.dir == \"rtl\") {\n            return false;\n        }\n        \/\/ If both top and bottom are in negative space, we can't see this.\n        if (rect.bottom < 0 &#038;&#038; rect.top < 0) {\n            return false;\n        }\n        \/\/ Or, if both left and right are in negative space, we can't see this.\n        if (rect.left < 0 &#038;&#038; rect.right < 0) {\n            return false;\n        }\n        \/\/ Probably visible.\n        return true;\n    }\n\n    function applyElementRect(element, rect) {\n        var newRect = rect;\n        var tempRect = Evernote.ElementExtension.getBoundingClientRect(element);\n\n        \/\/ We skip anything with an area of one px or less. This is anything that has \"display: none\", or single pixel\n        \/\/ images for loading ads and analytics and stuff. Most hidden items end up at 0:0 and will stretch our rectangle\n        \/\/ to the top left corner of the screen if we include them. Sometimes single pixels are deliberately placed off\n        \/\/ screen.\n        if ((tempRect.width * tempRect.height) > 1) {\n            newRect = unionRectangles(Evernote.ElementExtension.getBoundingClientRect(element), rect);\n        }\n        if (element.children) {\n            for (var i = 0; i < element.children.length; i++) {\n                newRect = applyElementRect(element.children[i], newRect);\n            }\n        }\n        return newRect;\n    }\n\n    \/\/ In the case of positioned elements, a bounding box around an element doesn't necessarily contain its child\n    \/\/ elements, so we have this method to combine all of these into one bigger box. ContentVeil calls this function.\n    function computeDescendantBoundingBox(element) {\n        if (!element) return {top: 0, bottom: 0, left: 0, right: 0, width: 0, height: 0};\n\n        var rect  = Evernote.ElementExtension.getBoundingClientRect(element)\n        return applyElementRect(element, rect);\n    }\n\n    function previewSelection(sel) {\n\n        var selection;\n        var selectionFrame;\n        if(sel) {\n            selection = sel;\n        }\n        else if (typeof Evernote.pageInfo !== undefined) {\n            selection = Evernote.pageInfo.getSelection();\n            \/\/ If our selection is in a frame or iframe, we'll compute an offset relative to that, so we need to adjust it by\n            \/\/ the offset of the frame.\n            selectionFrame = Evernote.pageInfo.getSelectionFrame();\n        }\n\n        contentVeil.reset();\n\n        var frameRect = null;\n        if (selectionFrame) {\n            frameRect = Evernote.ElementExtension.getBoundingClientRect(selectionFrame);\n        }\n\n        var range, rect, i;\n\n        \/\/ If !selection, then something has gone awry.\n        if (selection) {\n            clear();\n            contentVeil.reset();\n            \/\/ We attempt to highlight each selection, but this hasn't been tested for more than a single selection.\n            for (i = 0; i < Evernote.Utils.Selection.getRangeCount(selection); i++) {\n                range = Evernote.Utils.Selection.getRangeAt(selection, i);\n\n                rect = computeAlternateBoundingBox(Evernote.Utils.fixIERangeObject(range));\n\n                rect.top += document.documentElement.scrollTop;\n                rect.bottom += document.documentElement.scrollTop;\n                rect.left += document.documentElement.scrollLeft;\n                rect.right += document.documentElement.scrollLeft;\n\n                \/\/ Actual adjustment mentioned earlier regarding frames.\n                if (frameRect) {\n                    rect.left += frameRect.left;\n                    rect.right += frameRect.left;\n                    rect.top += frameRect.top;\n                    rect.bottom += frameRect.top;\n                }\n\n                contentVeil.revealStaticRect(rect, selectionFrame, false);\n                contentVeil.show();\n            }\n        }\n        contentVeil.show();\n        contentVeil.hideAllActiveObjects();\n    }\n\n    function getSnippetText() {\n        return snippet;\n    }\n\n    \/\/ Public API:\n    this.getArticleElement = getArticleElement;\n    this.looksInteresting = looksInteresting;\n    this.computeDescendantBoundingBox = computeDescendantBoundingBox;\n    this.previewArticle = previewArticle;\n    this.previewFullPage = previewFullPage;\n    this.previewSelection = previewSelection;\n    this.previewUrl = previewUrl;\n    this.clear = clear;\n    this.previewNudge = nudgePreview;\n    this.showOverlay = showOverlay;\n    this.getSnippetText = getSnippetText;\n}\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ElementExtension = {\n    querySelector : function(selector, doc) {\n        if(!doc) {\n            doc = document;\n        }\n        if(doc.querySelector) {\n            return doc.querySelector(selector);\n        }\n        else {\n            var head = doc.documentElement.firstChild;\n            var styleTag = doc.createElement(\"STYLE\");\n            head.appendChild(styleTag);\n            doc.__qsResult = [];\n\n            styleTag.styleSheet.cssText = selector + \"{x:expression(document.__qsResult.push(this))}\";\n            window.scrollBy(0, 0);\n            head.removeChild(styleTag);\n\n            var result = [];\n            for (var i in doc.__qsResult)\n                result.push(doc.__qsResult[i]);\n            return result;\n        }\n    },\n\n    getComputedStyle : function(element, pseudoElement, win) {\n        var pseudo = pseudoElement;\n        var target = win;\n        if(!target)\n            target = window;\n        if(!pseudo) {\n            pseudo = null;\n        }\n        if(target.getComputedStyle)\n            return target.getComputedStyle(element, pseudo);\n        if(element.currentStyle) {\n            try {\n\t\t\t\tvar fixedElement = Evernote.Utils.cloneObject(element.currentStyle);\n\t\t\t\tfixedElement['fontSize'] = Evernote.Utils.getIEComputedStyle(element, 'fontSize');\n\t\t\t\treturn fixedElement; \n\t\t\t}             \n            catch (err) {\n                return element.currentStyle;\n            }\n        }\n        return null;\n    },\n\n    hasParentNode : function(element) {\n        return element.parentNode &#038;&#038; element.parentNode.nodeType != 9 &#038;&#038; element.parentNode.nodeType != 11;\n    },\n\n    getBoundingClientRect : function(element) {\n        if(element &#038;&#038; element.getBoundingClientRect) {\n            var rect = element.getBoundingClientRect();\n            var width = rect.width || element.offsetWidth || element.boundingWidth;\n            var height = rect.height || element.offsetHeight || element.boundingHeight;\n            return {\n                left : rect.left,\n                right : rect.right,\n                top : rect.top,\n                bottom : rect.bottom,\n                width : width,\n                height : height\n            }\n        }\n        return null;\n    },\n\n    hasAttribute : function(node, attrName) {\n        if(node) {\n            if(node.hasAttribute) {\n                return node.hasAttribute(attrName);\n            }\n            if(node.attributes) {\n                var attrValue = node.attributes[attrName];\n                return typeof attrValue != typeof undefined;\n            }\n        }\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ArrayExtension = {\n    indexOf : function(element, searchStr) {\n        if(!element) {\n            return -1;\n        }\n        if (element.indexOf)\n            return element.indexOf(searchStr);\n        for(var i = 0; i < element.length; i++) {\n            if(element[i] == searchStr)\n                return i;\n        }\n        return -1;\n    },\n\n    containsCaseIgnore : function(element, searchStr) {\n        if(!element) {\n            return false;\n        }\n        for(var i = 0; i < element.length; i++) {\n            if(element[i].toLowerCase() == searchStr.toLowerCase())\n                return true;\n        }\n        return false;\n    },\n\n    remove : function(arr, element) {\n        var elementPosition = Evernote.ArrayExtension.indexOf(arr, element);\n        if(elementPosition != -1) {\n            var rest = arr.slice(elementPosition  + 1 || arr.length);\n            arr.length = elementPosition;\n            return arr.push.apply(arr, rest);\n        }\n    },\n\n    filter : function(arr, fun) {\n        var len = arr.length >>> 0;\n        if (typeof fun != \"function\")\n            throw new TypeError();\n\n        var res = [];\n        var thisp = arguments[1];\n        for (var i = 0; i < len; i++) {\n            if (i in arr) {\n                var val = arr[i];\n                if (fun.call(thisp, val, i, arr))\n                {\n                    res.push(val);\n                }\n            }\n        }\n        return res;\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.StyleElementExtension = {\n    getPropertyValue : function(styleObj, propertyName) {\n        var props = propertyName;\n        if(!(props instanceof Array)) {\n            props = [propertyName];\n        }\n        Evernote.Logger.debug(\"Evernote.StyleElementExtension.getPropertyValue: number of properties to check \" + props.length);\n        for(var i = 0; i < props.length; i++) {\n            var propName = props[i];\n            Evernote.Logger.debug(\"Evernote.StyleElementExtension.getPropertyValue: property name is \" + propName);\n            var val;\n            if(styleObj.getPropertyValue) {\n                val = styleObj.getPropertyValue(propName);\n                Evernote.Logger.debug(\"Evernote.StyleElementExtension.getPropertyValue: value from getPropertyValue is \" + val);\n                if(val)\n                    return val;\n            }\n            val = styleObj[propName];\n            Evernote.Logger.debug(\"Evernote.StyleElementExtension.getPropertyValue: value from styleObj \" + val);\n            if(val)\n                return val;\n        }\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.GlobalUtils = {};\n(function(){\n    var urlMatcher = \/^(.*?):\\\/\\\/((www\\.)?(.*?))(:\\d+)?(\\\/.*?)(\\?.*)?$\/;\n\n    var BAD_FAV_ICON_URLS = {\"http:\/\/localhost\/favicon.ico\": true};\n\n    Evernote.GlobalUtils.componentizeUrl = function(url) {\n        var data = {\n            protocol: null,\n            domain: null,\n            domainNoWww: null,\n            port: null,\n            path: null,\n            queryString: null\n        };\n        var matches = urlMatcher.exec(url);\n        data.protocol = matches[1];\n        data.domain = matches[2];\n        data.domainNoWww = matches[4];\n        data.port = matches[5];\n        data.path = matches[6];\n        data.queryString = matches[7];\n        return data;\n    };\n\n    Evernote.GlobalUtils.getMessageCode = function(messageConst) {\n        Evernote.Logger.debug(\"getMessageCode: \" + messageConst);\n        return Evernote.Messages[messageConst];\n    };\n\n    Evernote.GlobalUtils.absolutizeImages = function(element, path) {\n        if(path) {\n            Evernote.Utils.changeBackgroundImage(element, Evernote.Addin.getPath(\"resources\") + path);\n        }\n        else if(element.attributes &#038;&#038; element.attributes[\"background-image\"]) {\n            \/\/ TODO: replace \"oldlipper\" with universal path\n            Evernote.Utils.changeBackgroundImage(element, Evernote.Addin.getPath(\"resources\") + 'oldclipper\/' + element.attributes[\"background-image\"].value);\n        }\n        Evernote.Logger.debug(\"absolutizeImages: walk through children\");\n        for (var i = 0; i < element.children.length; i++) {\n            Evernote.GlobalUtils.absolutizeImages(element.children[i]);\n        }\n        Evernote.Logger.debug(\"absolutizeImages: end\");\n    };\n\n    Evernote.GlobalUtils.localize = function(element) {\n        var node = element.nodeName.toLowerCase();\n        if (node == \"input\" || node == \"textarea\") {\n            var type = element.type;\n            if (node == \"textarea\") type = \"textarea\";\n            switch (element.type) {\n                case \"text\":\n                case \"textarea\":\n                case \"button\":\n                case \"submit\":\n                case \"search\":\n                    if (element.attributes &#038;&#038; element.attributes[\"placeholder\"]) {\n                        var localizedMessage = Evernote.Addin.getLocalizedMessage(Evernote.GlobalUtils.getMessageCode(element.attributes[\"placeholder\"].value));\n                        Evernote.Logger.debug(\"localizedMessage is \" + localizedMessage);\n                        if (localizedMessage) {\n                            try {\n                                element.attributes[\"placeholder\"].value = localizedMessage;\n                            } catch(e) {\n                                var placeHolderAttr = document.createAttribute(\"placeholder\");\n                                placeHolderAttr.nodeValue = localizedMessage;\n                                element.setAttribute(\"placeholder\", localizedMessage);\n                            }\n                        }\n                    }\n\n                    if (element.attributes &#038;&#038; element.attributes[\"message\"]) {\n                        var localizedMessage = Evernote.Addin.getLocalizedMessage(Evernote.GlobalUtils.getMessageCode(element.attributes[\"message\"].value));\n                        Evernote.Logger.debug(\"localizedMessage is \" + localizedMessage);\n                        if (localizedMessage) {\n                            element.value = localizedMessage;\n                        }\n                    }\n                    break;\n\n                \/\/ unlocalizable.\n                case \"checkbox\":\n                case \"password\":\n                case \"hidden\":\n                case \"radio\":\n                    break;\n\n                default:\n                    throw new Error(\"We need to localize the value of input elements.\");\n            }\n        }\n\n        else if (element.attributes &#038;&#038; element.attributes[\"message\"]) {\n            var localizedMessage = Evernote.Addin.getLocalizedMessage(Evernote.GlobalUtils.getMessageCode(element.attributes[\"message\"].value));\n            if (localizedMessage) {\n                element.innerHTML = localizedMessage;\n            } else {\n                element.innerHTML = 'l10n error'; \/\/ to spot if something goes wrong\n            }\n        }\n\n        if (element.title){\n            var localizedTitle = Evernote.Addin.getLocalizedMessage(Evernote.GlobalUtils.getMessageCode(element.title));\n            if (localizedTitle) {\n                element.title = localizedTitle;\n            }\n        }\n\n        for (var i = 0; i < element.children.length; i++) {\n            Evernote.GlobalUtils.localize(element.children[i]);\n        }\n    };\n\n    Evernote.GlobalUtils.getQueryParams = function(url) {\n        var data = Evernote.GlobalUtils.componentizeUrl(url);\n        var queryString = data.queryString;\n        var params = {};\n        if (!queryString) {\n            return params;\n        };\n        queryString = queryString.substr(1); \/\/ Don't want the question mark.\n        queryString = queryString.split(\"#\")[0]; \/\/ Get rid of any fragment identifier.\n        var pairs = queryString.split(\"&#038;\");\n        var i;\n        for (i = 0; i < pairs.length; i++) {\n            var item = pairs[i].split(\"=\");\n            if (item[1]) {\n                item[1] = item[1].replace(\/\\+\/g, \" \");\n            }\n            params[item[0].toLowerCase()] = item[1];\n        }\n        return params;\n    };\n\n    Evernote.GlobalUtils.escapeXML = function(str) {\n        var map = {\n            \"&#038;\" : \"&amp;\",\n            \"<\" : \"&lt;\",\n            \">\" : \"&gt;\",\n            \"\\\"\" : \"&quot;\",\n            \"'\" : \"&apos;\"\n        };\n\n        var a = str.split(\"\");\n        for (var i = 0; i < a.length; i++) {\n            if (map[a[i]]) {\n                a[i] = map[a[i]];\n            }\n        }\n        return a.join(\"\");\n    };\n\n    Evernote.GlobalUtils.decodeXML = function(str) {\n        str = str.replace(\/&amp;apos;\/g, \"&#39;\");\n        str = str.replace(\/&amp;quot;\/g, \"&#34;\");\n        str = str.replace(\/&amp;lt;\/g, \"&#60;\");\n        str = str.replace(\/&amp;gt;\/g, \"&#62;\");\n        return str;\n    };\n\n    Evernote.GlobalUtils.cropImage = function( data ) {\n        var img = new Image;\n        img.onload = function(){\n            var canvas=document.createElement(\"canvas\");\n            canvas.width=Math.min(150,data.width);\n            canvas.height=Math.min(150,data.height);\n            canvas.getContext(\"2d\").drawImage(img ,Math.max(0,(data.width-150)\/2),Math.max(0,(data.height-150)\/2),canvas.width,canvas.height,0,0,canvas.width,canvas.height);\n            return canvas.toDataURL();   \/\/ Not working. Cross origin policy forbids toDataUrl() method.\n        };\n        img.src = data.src;\n    };\n\n    Evernote.GlobalUtils.createUrlClipContent = function(title, url, favIcoUrl, snippet) {\n\n        var titleAttr = (title) ? Evernote.GlobalUtils.escapeXML(title) : \"\";\n        var urlStr = Evernote.GlobalUtils.escapeXML(url);\n        var snip = snippet;\n\n        if (snip.length > 275) {\n            snip = snip.substr(0, 275-3) + '...';\n        }\n\n        snip = Evernote.GlobalUtils.escapeXML(snip);\n\n        var contentStyle = 'text-align:left;padding:15px;font-size:12px;font-family:Verdana;max-width:370px;color:black;background-color:white;box-sizing:content-box;display:block;background-repeat:no-repeat;';\n        var titleStyle = 'white-space:nowrap;font-size:14px;font-weight:bold;overflow-x:hidden;text-overflow:ellipsis;height:24px;';\n        var hrStyle = 'border-top-width:1px;border-top-style:solid;border-top-color:#d8d8d8;height:0;width:100%;';\n        var imgStyle = 'position:relative;display:inline-block;float:left;width:150px;height:150px;margin:15px 30px 0 0;overflow:hidden;';\n        var contStyle = 'display:inline-block;vertical-align:top;margin:15px 0 0;width:364px;';\n        var linkDivStyle = 'padding:0px 0px 11px 0px;';\n        var faviconStyle = 'float:left;width:16px; height:16px; margin-right:9px; background-size:16px 16px;background-repeat: no-repeat; background-position:left center;';\n        var linkStyle = 'display:inline-block;text-decoration:none;line-height:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:rgb(12, 12, 12);width:325px;';\n        var snipStyle ='word-wrap:break-word;line-height:normal;text-align:left;font-size:12px';\n\n        var imgDiv = '';\n        var titleDiv = '\n\n\n\n<div id=\"evernoteBookmarkTitle\" style=\"' + titleStyle + '\">' + titleAttr + '<\/div>\n\n\n\n\n';\n        var hrDiv = '\n\n\n\n<div id=\"evernoteBookmarkDivider\" style=\"' + hrStyle + '\">&#160;<\/div>\n\n\n\n\n';\n\n        Evernote.pageInfo.getBiggestImage(function(data) {\n            if (data &#038;&#038; data.src) {\n                var im = '<img decoding=\"async\" src=\"' + data.src + '\" width=\"150\"\/>';\n                imgDiv =  '\n\n\n\n<div id=\"evernoteBookmarkImage\" style=\"'+ imgStyle +'\">' + im + '<\/div>\n\n\n\n\n';\n                contentStyle = contentStyle.replace('max-width:370px','max-width:562px');\n            }\n        });\n\n        var link = '<a style=\"' + linkStyle + '\" href=\"' + urlStr+ '\">' + urlStr + '<\/a>';\n        var favicon = '\n\n\n\n<div style=\"' + faviconStyle + 'background-image:url('+ favIcoUrl +  ');\">&#160;<\/div>\n\n\n\n\n';\n        var linkDiv = '\n\n\n\n<div id=\"evernoteBookmarkLink\" style=\"' + linkDivStyle + '\">' + favicon + link + '<\/div>\n\n\n\n\n' ;\n        var snipDiv = '\n\n\n\n<div id=\"evernoteBookmarkSnippet\" style=\"' + snipStyle + '\">' + snip + '<\/div>\n\n\n\n\n';\n        var contDiv = '\n\n\n\n<div id=\"evernoteBookmarkContent\" style=\"' + contStyle + '\">' + linkDiv + snipDiv + '<\/div>\n\n\n\n\n';\n        var clearDiv = '\n\n\n\n<div style=\"clear:both\"\/>'\n\n        var content = '\n\n\n\n<div id=\"evernoteBookmarkContainer\" style=\"' + contentStyle + '\">' + titleDiv + hrDiv + imgDiv + contDiv + clearDiv + '<\/div>\n\n\n\n\n';\n        return content;\n    };\n\n    Evernote.GlobalUtils.executeOnDomReady = function(callback) {\n        Evernote.JQuery(document).ready(function() {\n            callback();\n        });\n    };\n\n    Evernote.GlobalUtils.isDocumentLoaded = function(doc) {\n        return doc.readyState == \"complete\" || doc.readyState == \"interactive\";\n    };\n})();\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/**\n * Global utilities.\n *\/\nEvernote.Utils = {\n    _prevTime : null,\n\n    getIEComputedStyle : function(elem, prop) {\n        \/\/Dean Edwards method. See first comment here: http:\/\/bit.ly\/cMSs9R\n\n        var value = elem.currentStyle[prop] || 0;\n        var leftCopy = elem.style.left;\n        var runtimeLeftCopy = elem.runtimeStyle.left;\n\n        elem.runtimeStyle.left = elem.currentStyle.left;\n        elem.style.left = (prop === \"fontSize\") ? \"1em\" : value;\n        value = elem.style.pixelLeft + \"px\";\n\n        elem.style.left = leftCopy;\n        elem.runtimeStyle.left = runtimeLeftCopy;\n        return value\n    },\n\n    sendMessageToPopup : function( message ){\n        Evernote.JQuery(\"#\" + Constants.CLIP_DIALOG_ID).trigger(message);\n    },\n\n    pushTimeWithPrefix : function(prefix) {\n        var time = new Date;\n        var passed;\n\n        time = time.getTime();\n        passed = time - this._prevTime;\n        this._prevTime = time;\n        console.log(prefix + ': ' + passed + 'ms');\n    },\n\n    cloneObject : function(obj){\n        if(obj == null || typeof(obj) != 'object')\n            return obj;\n        if(obj.constructor == Array)\n            return [].concat(obj);\n        var temp = {};\n        for(var key in obj)\n            temp[key] = this.cloneObject(obj[key]);\n        return temp;\n    },\n\n    saveSelection : function(win) {\n        Evernote.Logger.debug( \"Utils.SaveSelection()\" );\n        var selectionFinder = new Evernote.SelectionFinder(win.document);\n        selectionFinder.find( true );\n        if(selectionFinder.hasSelection()) {\n            return Evernote.Utils.cloneRange(selectionFinder.getRange());\n        }\n        return null;\n    },\n\n    clearSelection : function(doc) {\n        if(doc.getSelection) {\n            doc.getSelection().removeAllRanges();\n        }\n    },\n\n    \/**\n     * Make selection of passed range in document.\n     * @param doc - DOM object\n     * @param range - selection range\n     *\/\n    selectRange : function(doc, range) {\n        if(doc.getSelection) {\n            doc.getSelection().addRange(range);\n        }\n        else if (doc.selection &#038;&#038; range) {\n            range.select();\n        }\n    },\n\n    \/**\n     * Creates copy of selection range only if it supports it, otherwise returns same range\n     * @param range - Range object\n     * @return {Range}\n     *\/\n    cloneRange : function(range) {\n        Evernote.Logger.debug(\"cloneRange: start\");\n        if(range &#038;&#038; range.cloneRange) {\n            return range.cloneRange();\n        }\n        if(range.duplicate) {\n            Evernote.Logger.debug(\"cloneRange: result = \" + range.duplicate());\n            return range.duplicate();\n        }\n        return range;\n    },\n\n    \/**\n     * Checks whether selection is presented.\n     * @param win - window object that should be checked.\n     * @return true - if selection is presented, false otherwise.\n     *\/\n    hasSelection : function(win) {\n        Evernote.Logger.debug( \"Utils.hasSelection()\" );\n        var selectionFinder = new Evernote.SelectionFinder(win.document)\n        if ( selectionFinder.hasSelection() ) {\n            return true;\n        }\n        else {\n            selectionFinder.find( true );\n            return selectionFinder.hasSelection();\n        }\n    },\n\n    \/**\n     * Gets favicon url from the document (if any)\n     * @param doc - document to inspect.\n     * @return url to the favicon or null.\n     *\/\n    getFavIconUrl : function(doc) {\n        var links = doc.getElementsByTagName(\"link\");\n        var i;\n        for (i = 0; i < links.length; i++) {\n            if (links[i].rel) {\n                var rels = links[i].rel.toLowerCase().split(\/\\s+\/);\n                if (Evernote.ArrayExtension.indexOf(rels, \"icon\") !== -1) {\n                    \/\/ Found it!\n                    return links[i].href;\n                }\n            }\n        }\n        return null;\n    },\n\n    \/**\n     * If passed string length is more than length argument, than string is trimmed to length and dots are added\n     * (total length of the returned string does not exceed specified length).\n     * @param str - string to trim\n     * @param length - max number of characters in the string\n     * @param addition - text to be added to truncated string\n     * @return {*}\n     *\/\n    cutToLength : function(str, length, addition) {\n        if(!addition) {\n            addition = \"...\";\n        }\n        if(str.length > length) {\n            return (str.substring(0, length-3) + addition);\n        }\n        return str;\n    },\n\n    \/**\n     * Change new line symbol to html \n     *\/\n    newLineToBr : function(str) {\n        return str.replace(\/(\\r\\n|\\n|\\r)\/gm, \"\n\");\n    },\n\n    \/**\n     * Encodes html specific characters (<, >, &#038;, etc.) in specified string\n     * @param str - string to encode.\n     * @return new string with encoded characters.\n     *\/\n    htmlEncode : function( str ) {\n        var result = \"\";\n        for ( var i = 0; i < str.length; i++ ) {\n            var charcode = str.charCodeAt( i );\n            var aChar = str[ i ];\n            if(!aChar) {\n                aChar = str.charAt(i);\n            }\n            if(charcode >= 55296 )\n                result += aChar;\n            else if ( charcode > 0x7f ) {\n                result += \"&#\" + charcode + \";\";\n            }\n            else if ( aChar == '>' ) {\n                result += \"&gt;\";\n            }\n            else if ( aChar == '<' ) {\n                result += \"&lt;\";\n            }\n            else if ( aChar == '&#038;' ) {\n                result += \"&amp;\";\n            }\n            else {\n                result += str[ i ] ? str[ i ] : str.charAt(i);\n            }\n        }\n\n        return result;\n    },\n\n    \/**\n     * Absolutize specified url by specified base.\n     * @param base - base url\n     * @param href - relative url (from base)\n     *\/\n    makeAbsolutePath : function ( base, href ) {\n        function parseURI( url ) {\n            var m = String( url ).replace( \/^\\s+|\\s+$\/g, '' ).match( \/^([^:\\\/?#]+:)?(\\\/\\\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\\\/?#]*)(?::(\\d*))?))?([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?\/ );\n            \/\/ authority = '\/\/' + user + ':' + pass '@' + hostname + ':' port\n            return (m ? {\n                href : m[ 0 ] || '',\n                protocol : m[ 1 ] || '',\n                authority : m[ 2 ] || '',\n                host : m[ 3 ] || '',\n                hostname : m[ 4 ] || '',\n                port : m[ 5 ] || '',\n                pathname : m[ 6 ] || '',\n                search : m[ 7 ] || '',\n                hash : m[ 8 ] || ''\n            } : null);\n        }\n\n        function absolutizeURI( base, href ) {\/\/ RFC 3986\n            function removeDotSegments( input ) {\n                var output = [];\n                input.replace( \/^(\\.\\.?(\\\/|$))+\/, '' )\n                    .replace( \/\\\/(\\.(\\\/|$))+\/g, '\/' )\n                    .replace( \/\\\/\\.\\.$\/, '\/..\/' )\n                    .replace( \/\\\/?[^\\\/]*\/g, function ( p ) {\n                        if ( p === '\/..' ) {\n                            output.pop();\n                        }\n                        else {\n                            output.push( p );\n                        }\n                    } );\n                return output.join( '' ).replace( \/^\\\/\/, input.charAt( 0 ) === '\/' ? '\/' : '' );\n            }\n\n            href = parseURI( href || '' );\n            base = parseURI( base || '' );\n\n            return !href || !base ? null : (href.protocol || base.protocol) +\n                (href.protocol || href.authority ? href.authority : base.authority) +\n                removeDotSegments( href.protocol || href.authority || href.pathname.charAt( 0 ) === '\/' ? href.pathname :\n                    (href.pathname ? ((base.authority &#038;&#038; !base.pathname ? '\/' : '') +\n                        base.pathname.slice( 0, base.pathname.lastIndexOf( '\/' ) + 1 ) + href.pathname) : base.pathname) ) +\n                (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) +\n                href.hash;\n        }\n        return absolutizeURI( base, href );\n\n    },\n\n    getNestedDocuments : function( doc ) {\n        Evernote.Logger.debug( \"Utils.getNestedDocuments()\" );\n\n        var docs = [ ];\n        try {\n            var frames = ( doc ) ? doc.getElementsByTagName( \"frame\" ) : [ ];\n            for ( var i = 0; i < frames.length; ++i ) {\n                if ( frames[ i ].contentDocument ) {\n                    docs.push( frames[ i ].contentDocument );\n                }\n            }\n\n            var iframes = ( doc ) ? doc.getElementsByTagName( \"iframe\" ) : [ ];\n            for ( i = 0; i < iframes.length; ++i ) {\n                if ( iframes[ i ].contentDocument ) {\n                    docs.push( iframes[ i ].contentDocument );\n                }\n            }\n        } catch (e) {\n            Evernote.Logger.error(\"getNestedDocuments failed with error \" + e);\n        }\n        Evernote.Logger.debug( \"Utils.getNestedDocuments() end\" );\n        return docs;\n\n    },\n\n    isSupportedUrl : function(url) {\n        return url.indexOf(\"http\") == 0;\n    },\n\n    getFontSizeInPixels : function(elementFontSize) {\n        function computedStyle(element, property){\n            var s = false;\n            if(window.getComputedStyle){\n                s = window.getComputedStyle(element, null).getPropertyValue(property);\n            } else if(element.currentStyle){\n                var p = property.split('-');\n                var str = new String('');\n                for(var i = 0; i < p.length; i++){\n                    str += (i > 0)?(p[i].substr(0, 1).toUpperCase() + p[i].substr(1)):p[i];\n                }\n                s = element.currentStyle[str];\n            }\n            return s;\n        }\n\n        function getPercentageSize(size) {\n            var currentFontSize = parseFloat(size);\n            var htmlFontSize = 16;\n            var htmlElement = document.getElementsByTagName(\"html\");\n            if(htmlElement &#038;&#038; htmlElement.length > 0) {\n                var htmlComputedFontSize = computedStyle(htmlElement[0], \"font-size\");\n                if(htmlComputedFontSize &#038;&#038; htmlComputedFontSize.indexOf(\"%\") == -1) {\n                    htmlFontSize = Evernote.Utils.getFontSizeInPixels(htmlComputedFontSize);\n                }\n            }\n            return htmlFontSize * currentFontSize \/ 100;\n        }\n\n        var size = elementFontSize;\n        if(size.indexOf(\"em\") > -1) {\n            var defFont = computedStyle(document.body, \"font-size\");\n            if(defFont.indexOf(\"pt\") > -1){\n                defFont = Math.round(parseInt(defFont)*96\/72);\n            } else if(defFont.indexOf(\"%\") > -1)  {\n                defFont = getPercentageSize(defFont);\n            } else{\n                defFont = parseInt(defFont);\n            }\n            size = Math.round(defFont * parseFloat(size));\n        }\n        else if(size.indexOf(\"pt\") > -1){\n            size = Math.round(parseInt(size)*96\/72)\n        } else if(size.indexOf(\"%\") > -1) {\n            size = getPercentageSize(size);\n        }\n        return parseInt(size);\n    },\n\n    innerWidth : function() {\n        if(window.innerWidth)\n            return window.innerWidth;\n\n        var doc= (document.body.clientWidth)? document.body: document.documentElement;\n        return doc.clientWidth;\n    },\n\n    innerHeight : function() {\n        if(window.innerHeight)\n            return window.innerHeight;\n\n        var doc= (document.body.clientHeight)? document.body: document.documentElement;\n        return doc.clientHeight;\n    },\n\n    scrollTop : function() {\n        var doc = document.body.scrollTop ? document.body : document.documentElement;\n        return doc.scrollTop;\n    },\n\n    scrollLeft : function() {\n        var doc = document.body.scrollLeft ? document.body : document.documentElement;\n        return doc.scrollLeft;\n    },\n\n    \/**\n     * Stopped propagation of keydown events for passed selector.\n     * @param selector - could be element or jquery selector.\n     *\/\n    hardInput : function(selector) {\n        this.elem = Evernote.JQuery(selector);\n        this.elem.keydown(function(e) {\n            e.stopPropagation();\n        });\n    },\n\n    isQuirkMode : function() {\n        return document.compatMode == \"BackCompat\" &#038;&#038; !Evernote.BrowserDetection.isIE11();\n    },\n\n    isQuirkModeNew : function() {\n        return document.compatMode == \"BackCompat\" &#038;&#038; Evernote.BrowserDetection.isLessThanIE9();\n    },\n\n    isInstanceOf : function(obj, type) {\n        if(obj &#038;&#038; type) {\n            try {\n                return obj instanceof type;\n            } catch (e) {\n                return type.toString().indexOf(typeof obj) != -1;\n            }\n        }\n        return false;\n    },\n\n    changeBackgroundImage : function(element, localpath) {\n        if(element.style) {\n            element.style.backgroundImage = \"url('file:\/\/\/\" + localpath.replace(\/\\\\\/g, \"\/\").replace(\/\\s\/g, \"%20\") + \"')\";\n        }\n    },\n\n    format: function(str) {\n        var args = arguments;\n        return str.replace(\/\\{(\\d+)\\}\/g, function (m, n) { return args[(n | 0)+1]; });\n    },\n\n    fixIERangeObject : function(range,win) { \/\/Only for IE8 and below.\n        win=win || window;\n\n        if(!range) return null;\n        if(!range.startContainer &#038;&#038; win.document.selection) { \/\/IE8 and below\n\n            var _findTextNode=function(parentElement,text) {\n                \/\/Iterate through all the child text nodes and check for matches\n                \/\/As we go through each text node keep removing the text value (substring) from the beginning of the text variable.\n                var container=null,offset=-1;\n                for(var node=parentElement.firstChild; node; node=node.nextSibling) {\n                    if(node.nodeType==3) {\/\/Text node\n                        var find=node.nodeValue;\n                        var pos=text.indexOf(find);\n                        if(pos==0 &#038;&#038; text!=find) { \/\/text==find is a special case\n                            text=text.substring(find.length);\n                        } else {\n                            container=node;\n                            offset=text.length-1; \/\/Offset to the last character of text. text[text.length-1] will give the last character.\n                            break;\n                        }\n                    }\n                }\n                \/\/Debug Message\n                \/\/alert(container.nodeValue);\n                return {node: container,offset: offset}; \/\/nodeInfo\n            };\n\n            var rangeCopy1=range.duplicate(), rangeCopy2=range.duplicate(); \/\/Create a copy\n            var rangeObj1=range.duplicate(), rangeObj2=range.duplicate(); \/\/More copies :P\n\n            rangeCopy1.collapse(true); \/\/Go to beginning of the selection\n            rangeCopy1.moveEnd('character',1); \/\/Select only the first character\n            rangeCopy2.collapse(false); \/\/Go to the end of the selection\n            rangeCopy2.moveStart('character',-1); \/\/Select only the last character\n\n            \/\/Debug Message\n            \/\/ alert(rangeCopy1.text); \/\/Should be the first character of the selection\n            var parentElement1=rangeCopy1.parentElement(), parentElement2=rangeCopy2.parentElement();\n\n            \/\/If user clicks the input button without selecting text, then moveToElementText throws an error.\n            if(window.HTMLInputElement &#038;&#038; (parentElement1 instanceof window.HTMLInputElement || parentElement2 instanceof HTMLInputElement)) {\n                return null;\n            }\n            rangeObj1.moveToElementText(parentElement1); \/\/Select all text of parentElement\n            rangeObj1.setEndPoint('EndToEnd',rangeCopy1); \/\/Set end point to the first character of the 'real' selection\n            rangeObj2.moveToElementText(parentElement2);\n            rangeObj2.setEndPoint('EndToEnd',rangeCopy2); \/\/Set end point to the last character of the 'real' selection\n\n            var text1=rangeObj1.text; \/\/Now we get all text from parentElement's first character upto the real selection's first character\n            var text2=rangeObj2.text; \/\/Here we get all text from parentElement's first character upto the real selection's last character\n\n            var nodeInfo1=_findTextNode(parentElement1,text1);\n            var nodeInfo2=_findTextNode(parentElement2,text2);\n\n            \/\/ todo: dirty fix\n            if (!nodeInfo1.node) {\n                nodeInfo1.node = parentElement1;\n            }\n\n            if (!nodeInfo2.node) {\n                nodeInfo2.node = parentElement2;\n            }\n\n            \/\/Finally we are here\n            range.startContainer=nodeInfo1.node;\n            range.startOffset=nodeInfo1.offset;\n            range.endContainer=nodeInfo2.node;\n            range.endOffset=nodeInfo2.offset+1; \/\/End offset comes 1 position after the last character of selection.\n        }\n        return range;\n    },\n\n    unionRectangles : function(rect1, rect2) {\n        var rect = {\n            top: (Math.min(rect1.top, rect2.top)),\n            bottom: (Math.max(rect1.bottom, rect2.bottom)),\n            left: (Math.min(rect1.left, rect2.left)),\n            right: (Math.max(rect1.right, rect2.right))\n        };\n        rect.width = rect.right - rect.left;\n        rect.height = rect.bottom - rect.top;\n\n        return rect;\n    },\n\n    fixedPosition : function(win, el, topOffset, immediate) {\n        function applyPosition(elem) {\n            if(elem) {\n                var scrollPosition = win.document.documentElement.scrollTop || win.document.body.scrollTop;\n                var offset;\n                if(typeof topOffset == \"function\") {\n                    offset = topOffset();\n                } else {\n                    offset = scrollPosition + topOffset;\n                }\n                elem.animate({top: offset}, 100);\n            }\n        }\n\n        if(el) {\n            var elem = Evernote.JQuery(el);\n            if(Evernote.Utils.isQuirkMode())  {\n                elem.css(\"position\", \"absolute\");\n                if (win.attachEvent)\n                    win.attachEvent(\"onscroll\", function() {applyPosition(elem);});\n                else if (win.addEventListener)\n                    win.addEventListener(\"scroll\", function() {applyPosition(elem);}, false);\n                else\n                    Evernote.Logger.error( \"Utils.fixedPosition() can't attachEvent\" );\n                if(immediate) {\n                    applyPosition(elem);\n                }\n            }\n        }\n    },\n\n    mergeCustomComboBoxStrings : function(notebook, owner, ownedByStr, maxLen) {\n\n        var totalLen = notebook.length;\n        if (owner.length) {\n            \/\/ format: \"space\",\"(\",\"<owned by localize string>\",\"space\",\"<owner>\",\")\"\n            \/\/ magic number \"4\" is: \"space\",\"(\",\"space\",\")\"\n            totalLen += ownedByStr.length + owner + 4;\n        }\n\n        if (totalLen <= maxLen) {\n            return {\n                note: notebook,\n                own: \"\",\n                title: \"\"\n            };\n        }\n\n        var half = maxLen \/ 2 - 2;\n\n        if (owner.length == 0) {\n            return {\n                note: notebook.substr(0, half) + \"...\" + notebook.substring(notebook.length - half, notebook.length),\n                own: \"\",\n                title: notebook\n            };\n        }\n\n        var ownerFormatStr = \"(\" + ownedByStr + \" \" + owner + \")\";\n        var title = notebook + ownerFormatStr;\n        var resultString = title.substr(0, half) + \"...\" + title.substr(title.length - half);\n\n        if (notebook.length <= half) {\n            return  {\n                note: notebook,\n                own: \"...\" + title.substr(title.length - notebook.length),\n                title: notebook + \" \" + ownerFormatStr\n            };\n        }else if (ownerFormatStr <= half) {\n            return  {\n                note: notebook.substr(0, maxLen - ownerFormatStr.length) + \"...\",\n                own: ownerFormatStr,\n                title: notebook + \" \" + ownerFormatStr\n            };\n        }else {\n            return  {\n                note: resultString.substr(0, resultString.length - half),\n                own: resultString.substr(half + 3),\n                title: notebook + \" \" + ownerFormatStr\n            };\n        }\n    },\n\n    setEvernoteLogo : function(selector) {\n        var serverLocation = Evernote.Addin.getServerLocation();\n        Evernote.Logger.debug(\"Evernote server location is \" + serverLocation);\n        if (serverLocation.length &#038;&#038; serverLocation.indexOf(\"international\") == -1) {\n            var evernoteLogoEl = Evernote.JQuery(selector);\n            if (evernoteLogoEl) {\n                var imageFileName = \"oldclipper\/images\/web-clipper-logo_\" + serverLocation + \".png\";\n                this.changeBackgroundImage(evernoteLogoEl.get(0), Evernote.Addin.getPath(\"resources\") + imageFileName);\n            }\n        }\n    },\n\n    Selection : {\n        getRangeCount : function(selection) {\n            if(selection.rangeCount) {\n                return selection.rangeCount;\n            }\n            return 1;\n        },\n\n        getRangeAt : function(selection, pos) {\n            if(selection.getRangeAt) {\n                selection.getRangeAt(pos);\n            }\n            return selection;\n        },\n\n        getCommonAncestorContainer : function(range) {\n            if(range.commonAncestorContainer) {\n                return range.commonAncestorContainer;\n            }\n            else if(range.parentElement) {\n                return range.parentElement();\n            }\n            return null;\n        }\n    }\n\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ClipperActions = {\n    CLIP_URL : \"0\",\n    CLIP_FULL_PAGE: \"1\",\n    CLIP_ARTICLE: \"2\",\n    CLIP_SELECTION: \"3\", \/\/ Selection is not supported by default\n    CLIP_IMAGE: \"4\", \/\/ Image too\n    CLIP_SIMPLIFIED_ARTICLE: \"5\",\n    CLIP_SCREEN_SHOT: \"6\"\n};\n\nEvernote.ArticleSelectionOptions = {\n    ENABLED : \"0\",\n    DISABLED : \"1\",\n    ENABLED_WITHOUT_HINTS : \"2\"\n};\n\nEvernote.Trigger = {\n    ENABLED : true,\n    DISABLED : false\n};\n\nEvernote.Options = {\n    oneClickMode: false,\n    action: {\n        bydefault: \"2\",\n        lastUsedEnable: true,\n        lastUsed: \"article\"\n    },\n    tags: {\n        alwaysEnable: false,\n        alwaysData: \"\"\n    },\n    notebooks: {\n        lastUsed: -1,\n        lastUsedEnable: true,\n        bydefault: \"\"\n    },\n    skitch: {\n        lastUsedColor: \"\"\n    },\n    hints: {\n        permanentScreenCapture : true\n    },\n    postClip : {\n        show : false\n    },\n    \/**\n     * Return string representation of the object (you can use it in load method to restore object from string).\n     *\/\n    _serialize: function() {\n        \/\/return JSON.stringify(this, null, '\\t');  CNN.com has own JSON.stringify with parse errors\n\n        function strObj( obj ) {\n            var i = 0;\n            var optArr = [];\n\n            for (var prop in obj) {\n                if (obj.hasOwnProperty(prop) &#038;&#038; typeof obj[prop] != 'function') {\n                    var value;\n                    if (typeof obj[prop] == 'object') {\n                        value = strObj(obj[prop]);\n                    } else if (typeof obj[prop] == 'string') {\n                        var tempStr = obj[prop];\n                        tempStr = tempStr.replace(\/\\\\\/g, \"\\\\\\\\\");\n                        tempStr = tempStr.replace(\/\\\"\/g, \"\\\\\\\"\");\n                        value = '\"' + tempStr + '\"';\n                    } else {\n                        value = obj[prop];\n                    }\n                    optArr[i] = '\"' + prop + '\":' + value;\n                    i++;\n                }\n            }\n            return '{' + optArr.toString() + '}';\n        }\n        return strObj(this);\n    },\n\n    load : function() {\n        var optionsContent = Evernote.FS.getOptionsFileContent();\n        this._load(optionsContent);\n        Evernote.Logger.debug('Load options ' + JSON.stringify(this, null, '\\t'));\n    },\n\n    _load : function(str) {\n        if(str) {\n            try {\n                var options;\n\n                options = JSON.parse(str);\n\n                for (var prop in options) {\n                    if (options[prop] &#038;&#038; options.hasOwnProperty(prop)) {\n                        this[prop] = options[prop];\n                    }\n                }\n            } catch(e){\n                \/\/ ignore\n            }\n        }\n    },\n\n    setScreenCaptureHintNonPermanent : function(){\n        this.hints.permanentScreenCapture = false;\n        this.save();\n    },\n\n    setDefaultAction : function(action) {\n        this.action.bydefault = action;\n        this.setLastUsedActionDisabled();\n        this.save();\n    },\n\n    setDefaultNotebook : function(notebook) {\n        this.notebooks.bydefault = notebook;\n        this.setLastUsedNotebookDisabled();\n        this.save();\n    },\n\n    setNotebook : function(notebookUid) {\n        this.notebooks.lastUsed = notebookUid;\n        this.save();\n    },\n\n    setLastUsedNotebookEnabled : function() {\n        if (this.notebooks.lastUsedEnable == Evernote.Trigger.DISABLED) {\n            this.notebooks.lastUsedEnable = Evernote.Trigger.ENABLED;\n        }\n        this.save();\n    },\n\n    setLastUsedNotebookDisabled : function() {\n        if (this.notebooks.lastUsedEnable == Evernote.Trigger.ENABLED) {\n            this.notebooks.lastUsedEnable = Evernote.Trigger.DISABLED;\n        }\n        this.save();\n    },\n\n    setLastUsedAction : function(action) {\n        this.action.lastUsed = action;\n        this.save();\n    },\n\n    setLastUsedActionEnabled : function () {\n        if (this.action.lastUsedEnable == Evernote.Trigger.DISABLED) {\n            this.action.lastUsedEnable = Evernote.Trigger.ENABLED;\n        }\n        this.save();\n    },\n\n    setLastUsedActionDisabled : function() {\n        if (this.action.lastUsedEnable == Evernote.Trigger.ENABLED) {\n            this.action.lastUsedEnable = Evernote.Trigger.DISABLED;\n        }\n    },\n\n    setOneClickClipping : function(condition) {\n        if (condition) {\n            this.oneClickMode = Evernote.Trigger.ENABLED;\n        } else {\n            this.oneClickMode = Evernote.Trigger.DISABLED;\n        }\n        this.save();\n    },\n\n    setAlwaysTagsEnabled : function (condition) {\n        if (condition) {\n            this.tags.alwaysEnable = Evernote.Trigger.ENABLED;\n        } else {\n            this.tags.alwaysEnable = Evernote.Trigger.DISABLED;\n        }\n        this.save();\n    },\n\n    setAlwaysTagsString : function (str) {\n        this.tags.alwaysData = str;\n        this.save();\n    },\n\n    setPostClipDialogEnabled : function () {\n        if (this.postClip.show == Evernote.Trigger.DISABLED) {\n            this.postClip.show = Evernote.Trigger.ENABLED;\n        }\n        this.save();\n    },\n\n    setPostClipDialogDisabled : function () {\n        if (this.postClip.show == Evernote.Trigger.ENABLED) {\n            this.postClip.show = Evernote.Trigger.DISABLED;\n        }\n        this.save();\n    },\n\n    setLastUsedSkitchColor : function(color) {\n        this.skitch.lastUsedColor = color;\n        this.save();\n    },\n\n    save : function() {\n        Evernote.Logger.debug('Save options: ' + JSON.stringify(this, null, '\\t'));\n        var jsonSer = this._serialize();\n        Evernote.FS.writeOptionsToFile(jsonSer);\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.BrowserDetection = {\n    isIE11 : function() {\t\t\t\t\n        return navigator.userAgent.indexOf(\"Trident\/7.0\") != -1       \n    },\n\n\tisIE10 : function() {\n        return navigator.userAgent.indexOf(\"MSIE 10\") != -1;\n    },\n\n    isIE7 : function() {\n        return navigator.userAgent.indexOf(\"MSIE 7.0\") != -1 &#038;&#038; navigator.userAgent.indexOf(\"Trident\/7.0\") == -1;\n    },\n\n    isIE8 : function() {\n        return navigator.userAgent.indexOf(\"MSIE 8.0\") != -1 &#038;&#038; navigator.userAgent.indexOf(\"Trident\/7.0\") == -1;\n    },\n\n    isIE9 : function() {\n        return navigator.userAgent.indexOf(\"MSIE 9.0\") != -1 &#038;&#038; navigator.userAgent.indexOf(\"Trident\/7.0\") == -1;\n    },\n\n    isLessThanIE9 : function() {\n        return Evernote.BrowserDetection.isIE7() || Evernote.BrowserDetection.isIE8()\n    },\n\n\tisIE10orGreater : function() {\n\t\treturn Evernote.BrowserDetection.isIE10() || Evernote.BrowserDetection.isIE11()\n\t}\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.Node = {\n    ELEMENT_NODE : 1,\n    TEXT_NODE : 3\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.Share = {\n    _DEFAULT_WIDTH : 650,\n    _DEFAULT_HEIGHT : 650,\n    _DEFAULT_TYPE : 'popup',\n\n    _openWindow : function( url, width, height ) {\n        var w = width || this._DEFAULT_WIDTH;\n        var h = height || this._DEFAULT_HEIGHT;\n        var t = this._DEFAULT_TYPE;\n\n        var params = 'width=' + w + ',height=' + h + ',type=' + t + ',left=200,top=200,resizable=yes';\n\n        Evernote.Logger.debug('Open ' + url + ' with params: ' + params);\n        window.open(url, null, params);\n    },\n\n    toSocial : function ( id, link , title) {\n        Evernote.Logger.debug('Evernote.Share.toSocial ' + id + ' and link: ' + link + ', title: ' + title);\n        var shareUrl;\n\n        if ( id == 'facebook') {\n            shareUrl = \"https:\/\/www.facebook.com\/sharer\/sharer.php?u=\" + encodeURIComponent(link);\n            this._openWindow( shareUrl, 626, 436 );\n        } else if (id == 'twitter') {\n            shareUrl = \"https:\/\/twitter.com\/intent\/tweet?text=\" + encodeURIComponent(title)\n                + \"&#038;url=\" + encodeURIComponent(link);\n            this._openWindow( shareUrl, 550, 420 );\n        } else if (id == 'linkedin') {\n            shareUrl = \"http:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=\" + encodeURIComponent(link)\n                + \"&#038;title=\" + encodeURIComponent(title);\n            this._openWindow( shareUrl, 900, 570 );\n        } else if (id == 'weibo') {\n            shareUrl = \"http:\/\/service.weibo.com\/share\/share.php?url=\" + encodeURIComponent(link)\n                + \"&#038;title=\" + encodeURIComponent(title);\n            this._openWindow( shareUrl, 650, 650 );\n        }\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.PostClipPopup = function(doc) {\n\n    var elem = Evernote.JQuery('#' + Constants.POST_CLIP_DIALOG_ID);\n    var clipboard_container = elem.find('#' + 'evn-clipboardCopy-container');\n\n    var titleField = elem.find('.noteTitle');\n    var link = Evernote.pageInfo.getUrl();\n    var shareTitle = 'error';\n\n    \/\/ subscribe to response from addin\n    Evernote.ResponseReceiver.subscribe(this);\n\n    var _title = '';\n    var _notebook = '';\n    var clipping_message = Evernote.Addin.getLocalizedMessage(Evernote.Messages.CLIPPING);\n    var clipped_message = Evernote.Addin.getLocalizedMessage(Evernote.Messages.CLIPPED);\n\n    var message = elem.find('.clippedMessage');\n    var closeButton = elem.find('.closeCross');\n    var openButton  = elem.find('#openButton');\n    var shareButton  = elem.find('#shareButton');\n    var shareIcons = elem.find('.shareButton');\n\n    var cbInput = elem.find('.evn-pcp-clipboard-input');\n    var cbMessage = elem.find('.evn-pcp-clipboard-message');\n    var cbButton = elem.find('.evn-pcp-clipboard-button');\n\n    var errorLink = elem.find('#evn-show-logs');\n    var errorMsg = elem.find('.evn-error-desc');\n\n    function showLogs() {\n        var logFile = Evernote.Addin.getPath(\"logfile\");\n        Evernote.Addin.openLocalFile(logFile, BrowserNavConstants.NAVOPENNEWTAB);\n    }\n\n    function modifyToCurrentIE() {\n        if (document.documentMode == '9') {\n            elem.addClass('evn-iexplorer9');\n        } else if (document.documentMode == '7' || Evernote.BrowserDetection.isIE7()) {\n            elem.addClass('evn-iexplorer7');\n        }\n    }\n\n    function finishPostClip () {\n        endProcessingAndClose();\n\/\/        if (Evernote.Options.postClip.show == true) {\n\/\/            endProcessing();\n\/\/        } else {\n\/\/            endProcessingAndClose();\n\/\/        }\n    }\n\n    function localize() {\n        Evernote.GlobalUtils.localize(elem.get(0));\n    }\n\n    function copyToClipboard(){\n        var clipSucceed = window.clipboardData.setData('Text', link);\n\n        var isAllowed = window.clipboardData.getData('Text');\n        if (isAllowed == \"\") { \/\/ Could be empty, or failed\n            \/\/ Verify failure\n            if (!window.clipboardData.setData('Text', 'test_string'))\n                isAllowed = null;\n        }\n\n        if (clipSucceed &#038;&#038; isAllowed) {\n            clipboard_container.addClass('evn-success');\n            cbMessage.text(Evernote.Addin.getLocalizedMessage(Evernote.Messages.URL_COPIED));\n        } else {\n            clipboard_container.addClass('evn-failed');\n            cbMessage.text(Evernote.Addin.getLocalizedMessage(Evernote.Messages.DISABLED));\n        }\n\n    }\n\n    function handleShareIconClick ( evt ) {\n        var id = evt.srcElement.id || Evernote.JQuery(evt.target).closest('table').attr('id');\n\n        if (id == 'clipboard') {\n            elem.addClass('evn-clipboard-mode');\n        } else {\n            Evernote.Share.toSocial( id , link, shareTitle);\n        }\n    }\n\n    function fillOutPopup(title, notebook) {\n        _title = title;\n        _notebook = notebook;\n\n        titleField.html(title);\n        cbInput.val(link);\n        shareTitle = title;\n    }\n\n    function renderErrorMessage( error ) {\n\n        if (error.code == Evernote.ErrorCodes.AUTHENTICATION_ERROR) {\n            errorMsg.html(error.message);\n        }\n\n        elem.removeClass('processing');\n        elem.addClass('evn-error-mode');\n    }\n\n    function processError(error) {\n        renderErrorMessage(error);\n        elem.show();\n        return true;\n    }\n\n    function endProcessing() {\n        elem.removeClass('processing');\n        Evernote.ClearlyController.removeHighlighted();\n        message.html(clipped_message + ' ' + _notebook);\n    }\n\n    function endProcessingAndClose() {\n        elem.removeClass('processing').addClass('withoutShare');\n        Evernote.ClearlyController.removeHighlighted();\n        message.html(clipped_message + ' ' + _notebook);\n\n        setTimeout(function(){\n            hide();\n        }, 1000);\n    }\n\n    function setProcessing() {\n        elem.addClass('processing');\n        message.html('<span class=\"evn-processing-status\">' + clipping_message + '<\/span>' + _title);\n    }\n\n    function show() {\n        setProcessing();\n        addListeners();\n        elem.show();\n        elem.addClass('visible');\n    }\n\n    function hide() {\n        removeListeners();\n        elem.hide();\n        elem.removeClass('visible');\n        elem.removeClass('evn-error-mode');\n        elem.removeClass('withoutShare');\n        elem.removeClass('evn-clipboard-mode');\n        clipboard_container.removeClass();\n        cbMessage.text(Evernote.Addin.getLocalizedMessage(Evernote.Messages.SOURCE_LINK));\n    }\n\n    function onClickOutside(e) {\n        if (Evernote.JQuery(e.target).closest('#' + Constants.POST_CLIP_DIALOG_ID).length == 0) {\n            hide();\n        }\n    }\n\n    function onKeyPressed(e) {\n        if (e.keyCode == 27) {\n            hide();\n        }\n    }\n\n    function onDataReceived(response) {\n        if (response.type == 'clipped') {\n            finishPostClip();\n        }\n    }\n\n    function addListeners() {\n        Evernote.JQuery(document).on('click', onClickOutside);\n        Evernote.JQuery(document).on('keydown',onKeyPressed);\n    }\n\n    function removeListeners() {\n        Evernote.JQuery(document).off('click',onClickOutside);\n        Evernote.JQuery(document).off('keydown',onKeyPressed);\n    }\n\n    closeButton.click(hide);\n    shareIcons.click(handleShareIconClick);\n    cbButton.click(copyToClipboard);\n\n    errorLink.click(showLogs);\n\n    elem.on('errorShown', hide);\n\n    localize();\n    modifyToCurrentIE();\n\n    this.fillOutPopup = fillOutPopup;\n    this.endProcessing = endProcessing;\n    this.endProcessingAndClose = endProcessingAndClose;\n    this.show = show;\n    this.hide = hide;\n\n    this.processError = processError;\n    this.onDataReceived = onDataReceived;\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.Messages = {\n    CLIP_SELECTION: 113,\t\t\t\/\/ Save Selection\n    CLIP_URL: 115,\t\t\t\t\t\/\/ Save URL\n    CLIP_FULL_PAGE: 116,\t\t\t\/\/ Save Full Page\n    CLIP_ARTICLE: 117,\t\t\t\t\/\/ Save Article\n    ENTER: 118,\t\t\t\t\t\t\/\/ enter\n    OPTIONS: 119,\t\t\t\t\t\/\/ Options\n    DEFAULT_ACTION: 120,\t\t\t\/\/ Default action\n    ARTICLE_SELECTION: 121,\t\t\t\/\/ Article selection\n    ENABLED: 122,\t\t\t\t\t\/\/ Enabled\n    DISABLED: 123,\t\t\t\t\t\/\/ Disabled\n    ENABLED_NO_HINTS: 124,\t\t\t\/\/ Enabled (no hints)\n    ARTICLE_SELECTION_HINT: 125,\t\/\/ When enabled, you can modify article selection using your keyboard before make a clip. Enabling with \"no hints\" will prevent displaying the informational message. When disabled - you cannot make any adjustments to the automatic article selection.\n    EXPAND_SELECTION: 126,\t\t\t\/\/ expand selection\n    SHRINK_SELECTION: 127,\t\t\t\/\/ shrink selection\n    MOVE_SELECTION: 128,\t\t\t\/\/ move selection\n    CLIP_ARTICLE_HINT: 129,\t\t\t\/\/ clip article\n    CLIPPING: 130,\t\t\t\t\t\/\/ Clipping\n    UNSUPPORTED_SCHEMA: 131,\t\t\/\/ Clipping from this location is not supported.\n    UNTITLED_NOTE: 132,\t\t\t\t\/\/ Untitled note\n    ADD_TAGS: 133,\t\t\t\t\t\/\/ Add tags\n    ADD_REMARK: 134,\t\t\t\t\/\/ Add remark\n    OWNED_BY: 135,\t\t\t\t\t\/\/ owned by\n    SHARED_NOTEBOOKS: 136,\t\t\t\/\/ Shared Notebooks\n    BUSINESS_NOTEBOOKS: 137,\t\t\/\/ Business Notebooks\n    LOADING_TAGS: 140,\t\t\t\t\/\/ Loading tags...\n    LOGIN_FAILED: 141,\t\t\t\t\/\/ You need to be signed in to Evernote desktop to clip webpages\n    CLOSE: 142,\t\t\t\t\t\t\/\/ \u0110\u2014\u0110\u00b0\u0110\u015f\u0143\u20ac\u0143\u2039\u0143\u201a\u0143\u015a\n    LOADING_NOTEBOOKS: 146,\t\t\t\/\/ \u0110\u00b7\u0110\u00b0\u0110\u0142\u0143\u20ac\u0143\u0083\u0110\u00b6\u0110\u00b0\u0143\u017d \u0110\u00b1\u0110\u00bb\u0110\u013e\u0110\u015f\u0110\u02dd\u0110\u013e\u0143\u201a\u0143\u2039...\n    CLIP_FAILED_TITLE: 147,\t\t\t\/\/ \u0110\u0165\u0110\u00b5 \u0143\u0083\u0110\u00b4\u0110\u00b0\u0110\u00bb\u0110\u013e\u0143\u0081\u0143\u015a \u0143\u0081\u0110\u013e\u0143\u2026\u0143\u20ac\u0110\u00b0\u0110\u02dd\u0110\u00b8\u0143\u201a\u0143\u015a \u0110\u00b7\u0110\u00b0\u0110\u013d\u0110\u00b5\u0143\u201a\u0110\u015f\u0143\u0083.\n    VERSION: 148,\t\t\t\t\t\/\/ \u0110\u2019\u0110\u00b5\u0143\u20ac\u0143\u0081\u0110\u00b8\u0143\u0179\n    LIMIT_TAGS: 150,\t\t\t\t\/\/ You've entered the maximum number of tags\n    CLIP_HEADER: 151,\t\t\t\t\/\/ Clip\n    SKITCH_HEADER: 152,\t\t\t\t\/\/ Annotate\n    ORGANIZE_HEADER: 153,\t\t\t\/\/ Organize\n    SAVE_BUTTON: 154,\t\t\t\t\/\/ Save\n    CLIP_SCREEN_SHOT: 155,\t\t\t\/\/ Screenshot\n    NOTEBOOK_SEARCH: 156,\t\t\t\/\/ Find a notebook\n    SHARE_BUTTON: 157,\t\t\t\t\/\/ Share\n    ARTICLE: 158,\t\t\t\t\t\/\/ Article\n    SIMPLIFIED_ARTICLE: 159,\t\t\/\/ Simplified Article\n    SELECTION: 160,\t\t\t\t\t\/\/ Selection\n    URL: 161,\t\t\t\t\t\t\/\/ Bookmark\n    SCREENSHOT: 162,\t\t\t\t\/\/ Screen Capture\n    SOURCE_LINK: 163,\t\t\t\t\/\/ Source link\n    URL_COPIED: 164,\t\t\t\t\/\/ Url copied to clipboard\n    FULL_PAGE: 165,\t\t\t\t\t\/\/ Full Page\n    TAGS : 166,                     \/\/ Tag selection\n    CLIP_ACTION : 167,              \/\/ Default clip action\n    LOADING : 168,                  \/\/ Loading...\n    ALWAYS_START_IN : 169,          \/\/ Always start in\n    ALWAYS_ADD_TAGS : 170,          \/\/ Always tag with\n    LAST_USED_ACTION : 171,         \/\/ Last Used Action\n    COPYRIGHT : 172,                \/\/ Copyright 2009-2013 Evernote Corporation. All rights reserved.\n    PRIVACY_POLICY : 173,           \/\/ Privacy Policy\n    TERMS_OF_SERVICE : 174,         \/\/ Terms of Service\n    EXPAND : 175,                   \/\/ Expand the article selection\n    CONTRACT : 176,                 \/\/ Contract the article selection\n    ADD_TAG : 177,                  \/\/ Add tag\n    LIMIT_TAGS_SHORT : 178,         \/\/ Max 20 tags\n    TAGS_NOT_SUPPORTED : 179,       \/\/ Tags not supported\n    DONE : 180,                     \/\/ Done\n    ARROW :181,                     \/\/ Shape tool\n    COLOR :182,                     \/\/ Colors\n    STAMP_REJECT :183,              \/\/ Stamp tool\n    CROP :184,                      \/\/ Crop\n    HIGHLIGHTER :185,               \/\/ HTML Highlighter\n    MARKER :186,                    \/\/ Marker tool\n    PIXELATE :187,                  \/\/ Pixelator tool\n    TEXT :188,                      \/\/ Type tool\n    ZOOM_IN :189,                   \/\/ Zoom In\n    ZOOM_OUT :190,                  \/\/ Zoom Out\n    ZOOM_RESET :191,                \/\/ Reset\n    ZOOM_TIP :192,                  \/\/ Tip: Hold Ctrl while clicking to pan\n    CROP_APPLY :193,                \/\/ Apply\n    CROP_CANCEL :194,               \/\/ Cancel\n    SCREENSHOT_CAPTURED :195,       \/\/ Screenshot captured\n    SAVING : 196,                   \/\/ Saving...\n    IMAGE_HIGHLIGHTER : 197,        \/\/ Image highlighter\n    FORBIDDEN : 198,                \/\/ Not allowed for this action\n    SETTINGS : 200,                 \/\/ Settings\n    ONE_CLICK_CLIPPING: 201,        \/\/ 1-click Clipping\n    ONE_CLICK_CLIPPING_DESC: 202,   \/\/ ~~~ Put description here ~~~\n    NOTEBOOK_SELECTION: 203,        \/\/ Notebook Selection\n    LAST_USED_NOTEBOOK: 204,        \/\/ Last used notebook\n    SCREEN_CAPTURE_TOAST: 205,      \/\/ Single <b>click<\/b> to capture full screen\nor <b>drag<\/b> a region and release\n    CLIPPED: 206,                   \/\/ Clipped to\n    TAKE_A_SCREENSHOT: 207,         \/\/ Take a Screenshot\n    DEFAULT_NOTEBOOK: 208,          \/\/ default notebook\n    ERROR_LOGS: 209,                \/\/ Error logs\n    VIEW_LOGS: 210,                 \/\/ View Logs\n    LOGS_DESCRIPTION: 211,          \/\/ If you contact Evernote Support, they may ask you to view these logs to help diagnose a problem\n    COPY_TO_CLIPBOARD: 212,         \/\/ Copy to clipboard\n    AFTER_CLIP: 213,                \/\/ After clip\n    SHOW_POST_CLIP_DESC: 214,       \/\/ Show successful clip dialog\n    CLOSE_POST_CLIP_DESC: 215,      \/\/ Automatically close clipper\n    LEGAL: 216,                     \/\/ Legal\n    LEGAL_HEADER: 217,              \/\/ Web Clipper uses the following open source software\n    CLIP_ERROR: 218,                \/\/ Cannot save clip\n    VIEW_REPORT: 219                \/\/ View Crash Report\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ResponseReceiver = {\n    parsers : [],\n    receivers : [],\n\n    onResponse: function(str) {\n        Evernote.Logger.debug(\"Response received\" + str);\n        for(var i = 0; i < Evernote.ResponseReceiver.parsers.length; i++) {\n            if(Evernote.ResponseReceiver.parsers[i].canParse &#038;&#038; Evernote.ResponseReceiver.parsers[i].canParse(str)) {\n                Evernote.ResponseReceiver.notify(Evernote.ResponseReceiver.parsers[i].parse(str));\n            }\n        }\n    },\n\n    registerParser: function(parser) {\n        Evernote.ResponseReceiver.parsers.push(parser);\n    },\n\n    subscribe: function(receiver) {\n        Evernote.ResponseReceiver.receivers.push(receiver);\n    },\n\n    notify: function(data) {\n        for(var i=0; i < Evernote.ResponseReceiver.receivers.length; i++) {\n            Evernote.ResponseReceiver.receivers[i].onDataReceived(data);\n        }\n    }\n};\n\nfunction EvernoteGlobalReceiver(str) {\n    Evernote.ResponseReceiver.onResponse(str);\n}\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.NotebookResponseParser = {\n    parse : function(str) {\n        str = Evernote.GlobalUtils.decodeXML(str);\n        var xmlDom = Evernote.JQuery(str);\n        var result = [];\n        var type = xmlDom.attr(\"type\");\n        if(xmlDom.length == 1) {\n            var notebooks = xmlDom.find(\"notebook\");\n            for(var i = 0; i < notebooks.length; i++) {\n                var notebook = Evernote.JQuery(notebooks[i]);\n                var notebookObj = Evernote.NotebookResponseParser.createNotebook(type,notebook);\n                if(notebookObj) {\n                    result.push(notebookObj);\n                }\n            }\n        }\n        else if(xmlDom.length > 1) {\n            for(var i = 1; i < xmlDom.length - 1; i += 2) {\n                var notebook = Evernote.JQuery(xmlDom[i]);\n                var notebookObj = Evernote.NotebookResponseParser.createNotebook(type, notebook);\n                if(notebookObj) {\n                    result.push(notebookObj);\n                }\n            }\n        }\n        return new Evernote.Response(\"notebooks\", result);\n    },\n\n    createNotebook : function(type, notebook) {\n        var notebookType;\n        var notebookTypeText;\n        switch (type) {\n            case \"personal\":\n                notebookType = Evernote.NotebookTypes.PERSONAL;\n                notebookTypeText = Evernote.NotebookTypes.PERSONAL_TEXT;\n                break;\n            case \"business\":\n                notebookType = Evernote.NotebookTypes.BUSINESS;\n                notebookTypeText = Evernote.NotebookTypes.BUSINESS_TEXT;\n                break;\n            case \"linked\":\n                notebookType = Evernote.NotebookTypes.LINKED;\n                notebookTypeText = Evernote.NotebookTypes.LINKED_TEXT;\n                break;\n        }\n        var hidden = false;\n        var writableAttrValue = notebook.attr(\"writable\");\n\n        if (notebookType == Evernote.NotebookTypes.BUSINESS) {\n            return null\n        }\n\n        if(notebookType == Evernote.NotebookTypes.LINKED) {\n            var business = notebook.attr(\"business\");\n\n            if(business &#038;&#038; ((business | 0) == 1)) {\n                notebookType = Evernote.NotebookTypes.BUSINESS;\n                notebookTypeText = Evernote.NotebookTypes.BUSINESS_TEXT;\n            }\n        }\n\n        if(notebookType == Evernote.NotebookTypes.LINKED || notebookType == Evernote.NotebookTypes.BUSINESS) {\n            if(!writableAttrValue || (writableAttrValue | 0) != 1) {\n                if(notebookType == Evernote.NotebookTypes.LINKED)\n                    return null;\n                else {\n                    hidden = true;\n                }\n            }\n        }\n\n        var owner = notebook.attr(\"owner\");\n        if (owner &#038;&#038; owner == Evernote.evernotePopup._user)\n            owner = undefined;\n\n        return new Evernote.Notebook(\n            notebookType,\n            notebook.attr(\"name\"),\n            notebook.attr(\"uid\"),\n            notebook.attr(\"stack\"),\n            owner,\n            hidden,\n            notebookTypeText\n        );\n    },\n\n    canParse: function(str) {\n        var request = Evernote.JQuery(str).attr(\"request\");\n        return (request &#038;&#038; (request == \"get_notebooks\"));\n    }\n};\n\nEvernote.ResponseReceiver.registerParser(Evernote.NotebookResponseParser);\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.AddNoteResponseParser = {\n    parse : function(str) {\n        Evernote.Logger.debug(\"AddNoteResponseParser: response\" + str);\n        var xmlDom = Evernote.JQuery(str);\n        var result = xmlDom.attr(\"notebook_name\");\n        return new Evernote.Response(\"clipped\", result);\n    },\n\n    canParse: function(str) {\n        var request = Evernote.JQuery(str).attr(\"request\");\n        return request &#038;&#038; (request == \"add_note\");\n    }\n};\n\nEvernote.ResponseReceiver.registerParser(Evernote.AddNoteResponseParser);\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ProcessIDResponseParser = {\n    parse : function(str) {\n        Evernote.Logger.debug(\"ProcessIDResponseParser: response\" + str);\n        var xmlDom = Evernote.JQuery(str);\n        var result = xmlDom.attr(\"process_id\");\n        return new Evernote.Response(\"process_id\", result);\n    },\n\n    canParse: function(str) {\n        var request = Evernote.JQuery(str).attr(\"request\");\n        return request &#038;&#038; (request == \"get_process_id\");\n    }\n};\n\nEvernote.ResponseReceiver.registerParser(Evernote.ProcessIDResponseParser);\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ErrorResponseParser = {\n\n    parse : function(str) {\n        Evernote.Logger.warn(\"Received error \" + str);\n        var error = Evernote.JQuery(str);\n        var errorCode = error.attr(\"code\");\n        var errorMessage = null;\n        var problem = null;\n        if(error.length == 1) {\n            var problems = error.find(\"problem\");\n            if(problems &#038;&#038; problems.length > 0) {\n                problem = Evernote.JQuery(problems[0]);\n            }\n        }\n        else if(error.length > 2) {\n            errorMessage = error[2].toString();\n        }\n        if(problem) {\n            errorMessage = problem.text();\n        } else if(!errorMessage) {\n            errorMessage = error.attr(\"details\");\n        }\n        switch (errorCode) {\n            case Evernote.ErrorCodes.AUTHENTICATION_ERROR :\n                errorMessage = Evernote.Addin.getLocalizedMessage(Evernote.Messages.LOGIN_FAILED);\n                break;\n            case Evernote.ErrorCodes.CLIP_ERROR :\n                errorMessage = Evernote.Addin.getLocalizedMessage(Evernote.Messages.CLIP_FAILED_TITLE) + \"\\n\" + errorMessage;\n        }\n        var msg = {\n            message: errorMessage,\n            code: errorCode\n        };\n\n        return new Evernote.Response(\"error\", msg);\n    },\n\n    canParse: function(str) {\n        var request = Evernote.JQuery(str).get(0);\n        return (request &#038;&#038; (request.nodeName == \"ERROR\"));\n    }\n};\n\nEvernote.ResponseReceiver.registerParser(Evernote.ErrorResponseParser);\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ErrorHandler = {\n\n    getHandler: function() {\n        return [Evernote.Addin, Evernote.evernotePopup, Evernote.evernotePostClipPopup, Evernote.AlertErrorHandler];\n    },\n\n    onDataReceived : function(response) {\n        if(response.type) {\n            if(response.type == \"error\") {\n                this.notifyHandlers(response.data);\n\n            }\n        }\n    },\n\n    notifyHandlers : function(error) {\n        for(var i = 0; i < this.getHandler().length; i++) {\n            var handler = this.getHandler()[i];\n            if(handler &#038;&#038; handler.processError &#038;&#038; handler.processError(error)) {\n                return;\n            }\n        }\n    }\n};\n\nEvernote.ResponseReceiver.subscribe(Evernote.ErrorHandler);\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.Response = function(type, data) {\n    this.type = type;\n    this.data = data;\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.FS = {\n    _addon : null,\n\n    init : function(addon) {\n        this._addon = addon;\n    },\n\n    \/**\n     * Write content to the specified path.\n     * @param content - content, that should be written to\n     *\/\n    writeOptionsToFile : function(content) {\n        if (!this._addon)\n            return;\n        try {\n            this._addon.WriteOptionsContent(content );\n        } catch (e) {\n            Evernote.Logger.error( \"FS.writeOptionsToFile() failed \" + e );\n        }\n    },\n\n    \/**\n     * Read content of the file specified by path.\n     * @return {string} - content of the file\n     *\/\n    getOptionsFileContent : function() {\n        if (!this._addon)\n            return null;\n        try {\n            return this._addon.ReadOptionsContent();\n        } catch (e) {\n            Evernote.Logger.error( \"FS.getOptionsFileContent() failed \" + e );\n        }\n        return null;\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/\/\"use strict\";\n\nEvernote.AbstractElementSerializer = function AbstractElementSerializer( node, nodeStyle ) {\n    this.initialize( node, nodeStyle );\n};\n\nEvernote.AbstractElementSerializer.isResponsibleFor = function( \/*navigator*\/ ) {\n    return false;\n};\n\nEvernote.AbstractElementSerializer.prototype._node = null;\nEvernote.AbstractElementSerializer.prototype._nodeStyle = null;\n\nEvernote.AbstractElementSerializer.prototype.handleInheritance = function( child\/*, parent *\/) {\n    Evernote.ElementSerializerFactory.ClassRegistry.push( child );\n};\n\nEvernote.AbstractElementSerializer.prototype.initialize = function( node, nodeStyle ) {\n    this._node = node;\n    this._nodeStyle = nodeStyle;\n};\n\nEvernote.AbstractElementSerializer.prototype.serialize = function( \/*docBase*\/ ) {\n    return \"\";\n};\n\nEvernote.AbstractElementSerializer.prototype.getImageUrl = function() {\n    return \"\";\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/\/\"use strict\";\n\nEvernote.ElementSerializerFactory = {\n    getImplementationFor : function( node ) {\n        for ( var i = 0; i < this.ClassRegistry.length; ++i ) {\n            if ( this.ClassRegistry[ i ].isResponsibleFor( node ) ) {\n                return this.ClassRegistry[ i ];\n            }\n        }\n\n        return null;\n    }\n};\n\nEvernote.ElementSerializerFactory.ClassRegistry = [ ];\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/\/\"use strict\";\n\nEvernote.ClipStylingStrategy = function ClipStylingStrategy( ) {\n    this.initialize( );\n};\n\nEvernote.ClipStylingStrategy.prototype.initialize = function( ) {\n\n};\n\nEvernote.ClipStylingStrategy.prototype.styleForNode = function(  \/*node, root, fullPage, clipStyleType*\/ ) {\n    return null;\n};\n\nEvernote.ClipStylingStrategy.prototype.getNodeView = function ( node ) {\n    var doc = node.ownerDocument;\n    return (doc.defaultView) ? doc.defaultView : null;\n};\n\nEvernote.ClipStylingStrategy.prototype.getNodeStyle = function( node, filterFn, pseudo ) {\n    Evernote.Logger.debug( \"ClipStylingStrategy.getNodeStyle()\" );\n\n    var style = new Evernote.ClipStyle();\n    if ( pseudo != \"\" ) {\n        return style;\n    }\n\n    if ( node &#038;&#038; typeof node.nodeType == 'number' &#038;&#038; node.nodeType == 1 ) {\n        var view = this.getNodeView( node );\n        style = new Evernote.ClipStyle( Evernote.ElementExtension.getComputedStyle( node, null, view ), filterFn );\n    }\n\n    return style;\n};\n\nEvernote.ClipStyleType = {\n    NodeStyle : 0x01,\n    InheritedFontStyle: 0x02,\n    InheritedBgStyle: 0x04,\n    AllStyle : 0x01 | 0x02 | 0x04,\n    Default : 0x01 | 0x02\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ClipFullStylingStrategy = function ClipFullStylingStrategy( ) {\n    this.initialize( );\n};\n\nEvernote.inherit( Evernote.ClipFullStylingStrategy, Evernote.ClipStylingStrategy, true );\n\nEvernote.ClipFullStylingStrategy.prototype.styleForNode = function ( node, root, fullPage, clipStyleType ) {\n    Evernote.Logger.debug( \"ClipStylingStrategy.styleForNode()\" );\n\n    if ( clipStyleType == null ) {\n        clipStyleType = Evernote.ClipStyleType.Default;\n    }\n\n    var bodyStyles = new Evernote.ClipStyle( [ ], function ( prop, value ) {\n        return value != \"\"\n    } );\n    var inhFontStyles = new Evernote.ClipStyle( [ ] );\n    var inhBgStyles = [ ];\n\n    if ( (clipStyleType &#038; Evernote.ClipStyleType.NodeStyle) == Evernote.ClipStyleType.NodeStyle ) {\n        Evernote.Logger.debug( \"ClipStylingStrategy.styleForNode(): get node style\" );\n        try {\n            if ( node.nodeName.toLowerCase() == \"body\" ) {\n                for ( var attrName in Evernote.ClipStyle.STYLE_ATTRIBUTES ) {\n                    if ( Evernote.ElementExtension.hasAttribute(node, attrName) ) {\n                        var cssPropName = Evernote.ClipStyle.STYLE_ATTRIBUTES[ attrName ];\n                        var style = { };\n                        style[ cssPropName ] = node.getAttribute( attrName );\n                        bodyStyles.addStyle( style );\n                    }\n                }\n            }\n        } catch(e) {\n            Evernote.Logger.error(\"ClipFullStylingStrategy.styleForNode failed to get attributes from body due to error \" + e);\n        }\n        var evaluatedStyles = this.getNodeStyle( node );\n        if ( node.nodeName.toLowerCase() == \"table\" &#038;&#038; !evaluatedStyles.getStyle( \"font-size\" ) ) {\n            evaluatedStyles.addStyle( {\"font-size\":\"1em\"} );\n        }\n\n        if ( node.nodeName.toLowerCase() == \"img\" ) {\n            style = new Evernote.ClipStyle( Evernote.ElementExtension.getComputedStyle( node, null, this.getNodeView( node ) ), function ( prop, value ) {\n                return value != \"\"\n            } );\n            evaluatedStyles.addStyle( { height:style.getStyle( \"height\" ) } );\n            evaluatedStyles.addStyle( { width:style.getStyle( \"width\" ) } );\n        }\n\n        if ( evaluatedStyles.getStyle( \"background-image\" ) ) {\n            var regExp = \/url\\((.*?)\\)\/;\n            evaluatedStyles.addStyle( { \"background-image\": Evernote.StyleElementExtension.getPropertyValue(Evernote.ElementExtension.getComputedStyle( node, null, this.getNodeView( node ) ),  Evernote.IEStylePropertiesMapping.getPropertyNameFor(\"background-image\") ).replace( regExp, \"url('$1')\").replace(\/('\")|(\"')|('')\/g, \"'\")} );\n        }\n\n        if ( evaluatedStyles.getStyle( \"height\" ) == \"100%\" &#038;&#038; Evernote.StyleElementExtension.getPropertyValue(Evernote.ElementExtension.getComputedStyle( node, null, this.getNodeView( node ) ), \"height\" ) == \"0px\" ) {\n            evaluatedStyles.addStyle( { height:\"0px\" } );\n        }\n        bodyStyles.mergeStyle( evaluatedStyles, true );\n    }\n\n    if ( node == root &#038;&#038; !fullPage ) {\n        if ( (clipStyleType &#038; Evernote.ClipStyleType.InheritedFontStyle) == Evernote.ClipStyleType.InheritedFontStyle ) {\n            Evernote.Logger.debug( \"ClipStylingStrategy.styleForNode(): get inherited font style\" );\n            inhFontStyles = this.inheritFontForNode( node, true );\n            Evernote.Logger.debug( \"ClipStylingStrategy.styleForNode(): inherited fonts \" );\n        }\n\n        if ( (clipStyleType &#038; Evernote.ClipStyleType.InheritedBgStyle) == Evernote.ClipStyleType.InheritedBgStyle ) {\n            Evernote.Logger.debug( \"ClipStylingStrategy.styleForNode(): get inherited bg style\" );\n            inhBgStyles = this.inheritBackgroundForNode( node, true );\n        }\n    }\n\n    bodyStyles.mergeStyle( inhFontStyles, true );\n    return {\n        nodeStyle:bodyStyles,\n        inheritedFonts:inhFontStyles,\n        inheritedBackground:inhBgStyles,\n        evaluated:bodyStyles\n    };\n};\n\nEvernote.ClipFullStylingStrategy.prototype.getNodeStyle = function ( node, filterFn, pseudo ) {\n    Evernote.Logger.debug( \"ClipStylingStrategy.getNodeStyle()\" );\n\n    if ( pseudo == null || typeof pseudo == \"undefined\" ) {\n        pseudo = \"\";\n    }\n    var style = new Evernote.ClipStyle([ ], filterFn);\n    Evernote.Logger.debug( \"Pseudo : \" + pseudo );\n    if ( pseudo == \"\" &#038;&#038; node &#038;&#038; typeof node.nodeType == 'number' &#038;&#038; node.nodeType == 1 ) {\n        var view = this.getNodeView( node );\n        style = new Evernote.ClipStyle( Evernote.ElementExtension.getComputedStyle( node, null, view ), filterFn );\n    }\n    return style;\n};\n\nEvernote.ClipFullStylingStrategy.prototype.inheritFontForNode = function ( node, recur ) {\n    Evernote.Logger.debug( \"ClipFullStylingStrategy.inheritFontForNode()\" );\n\n    var fontStyle = new Evernote.ClipStyle();\n    if ( !node ) {\n        return fontStyle;\n    }\n\n    var parent = node;\n    var styles = [ ];\n    var nodes = [ ];\n\n    var dynamicUnit = [\"%\", \"em\"];\n    var sizeUnitRegExp = \/(.*?)(em|%|px|pt)\/;\n\n    while ( parent ) {\n        nodes.push( parent );\n        styles.push( new Evernote.ClipStyle( this.getNodeStyle( parent ), function ( prop, value ) {\n            return (Evernote.ArrayExtension.indexOf(Evernote.ClipStyle.INHERITED_STYLES,  prop ) > 0 &#038;&#038; value != \"inherit\" );\n        } ) );\n\n        Evernote.Logger.debug( \"Inh parent style:\" + styles[styles.length - 1].toString() );\n\n        if ( !recur || parent == document.body ) {\n            break;\n        }\n        else {\n            parent = parent.parentElement;\n        }\n    }\n\n    \/\/merge styles starting from low-priority parent styles\n    Evernote.Logger.debug( \"Styles inh for processing:\" + (styles.length - 1) );\n    for ( var i = styles.length - 1; i >= 0; i-- ) {\n        var style = styles[ i ];\n        var fontSize = fontStyle.getStyle( \"font-size\" );\n        var overFontStyle = style.getStyle( \"font-size\" );\n        Evernote.Logger.debug( \"fontSize:\" + fontSize + \"    ;overFontStyle: \" + overFontStyle );\n        if ( fontSize &#038;&#038; overFontStyle ) {\n            var resFontSize = fontSize.match( sizeUnitRegExp );\n            if ( resFontSize == null ) {\n                continue;\n            }\n            var sizeVal = resFontSize[1];\n            var sizeUnit = resFontSize[2];\n            var resOverFontSize = overFontStyle.match( sizeUnitRegExp );\n\n            if ( resOverFontSize == null ) {\n                continue;\n            }\n            var overSizeVal = resOverFontSize[1];\n            var overSizeUnit = resOverFontSize[2];\n\n            if ( Evernote.ArrayExtension.indexOf(dynamicUnit, overSizeUnit ) != -1 ) {\n                if ( overSizeUnit == \"%\" ) {\n                    style.addStyle( { \"font-size\":(parseFloat( sizeVal ) * parseFloat( overSizeVal ) \/ 100).toString() + sizeUnit } );\n                }\n                else {\n                    style.addStyle( { \"font-size\":(parseFloat( sizeVal ) * parseFloat( overSizeVal )).toString() + ((sizeUnit != \"em\") ? sizeUnit : overSizeUnit) } );\n                }\n            }\n            Evernote.Logger.debug( \"Style: \" + i + \"   ;Eval inh style:\" + style.toString() );\n        }\n\n        fontStyle.mergeStyle( style, true );\n    }\n\n    return fontStyle;\n};\n\nEvernote.ClipFullStylingStrategy.prototype.inheritBackgroundForNode = function ( node, recur ) {\n    Evernote.Logger.debug( \"ClipFullStylingStrategy.inheritBackgroundForNode()\" );\n\n    var bgStyle = new Evernote.ClipStyle();\n    if ( !node ) {\n        return bgStyle;\n    }\n\n    var parent = node;\n    var styles = [ ];\n    var nodes = [ ];\n    var topElement = (document.body.parentNode) ? document.body.parentNode : document.body;\n    try {\n        while ( parent ) {\n            nodes.push( parent );\n            var filterFn = function ( prop, value ) {\n                return !(prop == \"background-repeat\" &#038;&#038; (value == \"no-repeat\" || value == \"repeat-y\"));\n            };\n            var nodeStyle = new Evernote.ClipStyle( this.getNodeStyle( parent ), filterFn, Evernote.ClipStyle.CSS_GROUP.getExtForStyle( \"background\" ) );\n\n            if ( !nodeStyle.getStyle( \"background-repeat\" ) ) {\n                nodeStyle.removeStyle( \"background-image\" );\n            }\n            if ( !nodeStyle.getStyle( \"background-color\" ) &#038;&#038; parent.getAttribute( \"bgcolor\" ) ) {\n                Evernote.Logger.debug( \"Set bgcolor attribute: \" + parent.getAttribute( \"bgcolor\" ) );\n                nodeStyle.addStyle( {\"background-color\":parent.getAttribute( \"bgcolor\" )} );\n            }\n\n            nodeStyle = this.evalBgPosition( node, parent, nodeStyle );\n            if ( nodeStyle.getStylesNames().length > 0 ) {\n                styles.push( nodeStyle );\n                Evernote.Logger.debug( \"Add inh bg style \" + nodeStyle.toString() );\n            }\n\n            if ( !recur || parent == topElement ) {\n                break;\n            }\n            else {\n                parent = parent.parentNode;\n            }\n        }\n    } catch(e) {\n        Evernote.Logger.error(\"ClipFullStylingStrategy.prototype.inheritBackgroundForNode failed to error \" + e);\n    }\n\n    return styles;\n};\n\nEvernote.ClipFullStylingStrategy.prototype.evalBgPosition = function ( node, inhNode, nodeBgStyle ) {\n    Evernote.Logger.debug( \"Dettermining background image offset\" );\n\n    var strPosToPercent = {\n        \"center\":\"50%\",\n        \"top\":\"0%\",\n        \"bottom\":\"100%\",\n        \"right\":\"100%\",\n        \"left\":\"0%\"\n    };\n\n    var regExp = \/url\\((.*?)\\)\/;\n    var bgImage = nodeBgStyle.getStyle( \"background-image\" );\n    if ( !regExp.test( nodeBgStyle.getStyle( \"background-image\" ) ) || (bgImage &#038;&#038; nodeBgStyle.getStyle( \"background-image\" ).indexOf( \"data:image\" ) >= 0) ) {\n        Evernote.Logger.debug( \"bgStyle: \" + nodeBgStyle.toString() );\n        return nodeBgStyle;\n    }\n\n    nodeBgStyle.addStyle( { \"background-image\": Evernote.StyleElementExtension.getPropertyValue(Evernote.ElementExtension.getComputedStyle( inhNode, null, this.getNodeView( inhNode ) ), Evernote.IEStylePropertiesMapping.getPropertyNameFor(\"background-image\") ).replace( regExp, \"url('$1')\" ) } );\n\n    var actualImage = new Image();\n    actualImage.src = nodeBgStyle.getStyle( \"background-image\" ).match( regExp )[ 1 ].replace( \/[\"']\/g, \"\" );\n    var bgNodeRect = this.getOffsetRect( inhNode );\n    var nodeRect = this.getOffsetRect( node );\n    var yDelta = nodeRect.top - bgNodeRect.top;\n    var xDelta = nodeRect.left - bgNodeRect.left;\n\n    var bgNodeBgPosX = 0;\n    var bgNodeBgPosY = 0;\n    var origPosX = 0;\n    var origPosY = 0;\n\n    if ( nodeBgStyle.getStyle( \"background-position\" ) ) {\n        var bgPosition = nodeBgStyle.getStyle( \"background-position\" ).split( \" \" );\n        bgNodeBgPosX = strPosToPercent[bgPosition[ 0 ]] != null ? strPosToPercent[bgPosition[ 0 ]] : bgPosition[ 0 ];\n        bgNodeBgPosY = strPosToPercent[bgPosition[ 1 ]] != null ? strPosToPercent[bgPosition[ 1 ]] : bgPosition[ 1 ];\n\n        if ( bgNodeBgPosX &#038;&#038; bgNodeBgPosX.indexOf( \"%\" ) > 0 ) {\n            origPosX = parseInt( bgNodeRect.width ) * (parseInt( bgNodeBgPosX ) \/ 100);\n            origPosX -= parseInt(actualImage.width) * (parseInt(bgNodeBgPosX) \/ 100);\n        }\n        else {\n            origPosX = parseInt( bgNodeBgPosX );\n        }\n\n        if ( bgNodeBgPosY &#038;&#038; bgNodeBgPosY.indexOf( \"%\" ) > 0 ) {\n            origPosY = parseInt( bgNodeRect.height ) * (parseInt( bgNodeBgPosY ) \/ 100);\n            origPosY -= parseInt(actualImage.height) * (parseInt(bgNodeBgPosY) \/ 100);\n        }\n        else {\n            origPosY = parseInt( bgNodeBgPosY );\n        }\n    }\n\n    if ( isNaN( origPosX ) ) {\n        origPosX = 0;\n    }\n    if ( isNaN( origPosY ) ) {\n        origPosY = 0;\n    }\n\n    var xOffset = 0 - xDelta + origPosX;\n    var yOffset = 0 - yDelta + origPosY;\n\n    nodeBgStyle.addStyle( { \"background-position\":(xOffset + \"px \" + yOffset + \"px\") } );\n    Evernote.Logger.debug( \"bgStyle: \" + nodeBgStyle.toString() );\n    return nodeBgStyle;\n};\n\nEvernote.ClipFullStylingStrategy.prototype.getOffsetRect = function ( elem ) {\n    Evernote.Logger.debug( \"ClipCSSStyleWalker.getOffsetRect()\" );\n\n    var box = Evernote.ElementExtension.getBoundingClientRect(elem);\n    var body = elem.ownerDocument.body;\n    var docElem = elem.ownerDocument.documentElement;\n\n    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n\n    var clientTop = docElem.clientTop || body.clientTop || 0;\n    var clientLeft = docElem.clientLeft || body.clientLeft || 0;\n\n    var top = box.top + scrollTop - clientTop;\n    var left = box.left + scrollLeft - clientLeft;\n\n    return { top:Math.round( top ), left:Math.round( left ), width:box.width, height:box.height };\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/\/\"use strict\";\n\nEvernote.ClipRules = {\n    isNoKeepNodeAttr : function( attribute, nodeName, node ) {\n        if ( !attribute ) {\n            return true;\n        }\n\n        var attrName = attribute.name.toLowerCase();\n        var attrValue = attribute.value.toLowerCase();\n        if((node.nodeName.toUpperCase() == \"SPAN\" || node.nodeName.toUpperCase() == \"A\") &#038;&#038; node.getElementsByTagName( \"IMG\" ).length > 0) {\n            nodeName = \"div\";\n        }\n        var attributesToKeepForNode = this.KEEP_NODE_ATTRIBUTES[nodeName];\n        if(attributesToKeepForNode) {\n            var keepAttributeForNode = typeof attributesToKeepForNode[attrName] != 'undefined';\n        }\n        return typeof this.NOKEEP_NODE_ATTRIBUTES[ attrName ] != 'undefined'\n            || !keepAttributeForNode\n            || attrName.substring( 0, 2 ) == \"on\"\n            || attrName.indexOf(\"xml\") == 0\n            || attrValue.indexOf(\"function(\") >= 0\n            || (attrName == \"href\" &#038;&#038; attrValue.substring( 0, 11 ) == \"javascript:\");\n    },\n\n    isConditionalNode : function( node ) {\n        return node &#038;&#038; typeof this.CONDITIONAL_NODES[ node.nodeName.toUpperCase() ] != 'undefined';\n    },\n\n    translateNode : function( node ) {\n        var nodeName = this.NODE_NAME_TRANSLATIONS[ node.nodeName.toUpperCase() ] || node.nodeName.toUpperCase();\n        return (typeof this.SUPPORTED_NODES[ nodeName ] != \"undefined\") ? nodeName.toLowerCase() : this.NODE_NAME_TRANSLATIONS[ \"*\" ].toLowerCase();\n    },\n\n    isSupportedNode : function( node ) {\n        return node &#038;&#038; typeof this.SUPPORTED_NODES[ node.nodeName.toUpperCase() ] != 'undefined';\n    },\n\n    isRejectedNode : function( node ) {\n        return node &#038;&#038; typeof this.REJECTED_NODES[ node.nodeName.toUpperCase() ] != 'undefined';\n    },\n\n    isNonAncestorNode : function( node ) {\n        return node &#038;&#038; typeof this.NON_ANCESTOR_NODES[ node.nodeName.toUpperCase() ] != 'undefined';\n    },\n\n    isSelfClosingNode : function( node ) {\n        return node &#038;&#038; typeof this.SELF_CLOSING_NODES[ node.nodeName.toUpperCase() ] != 'undefined';\n    }\n};\n\nEvernote.ClipRules.KEEP_NODE_ATTRIBUTES = {\n    \"a\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"accesskey\": null,\n        \"charset\": null,\n        \"type\": null,\n        \"name\": null,\n        \"href\": null,\n        \"hreflang\": null,\n        \"rel\": null,\n        \"rev\": null,\n        \"shape\": null,\n        \"coords\": null,\n        \"target\": null\n    },\n\n    \"abbr\" : {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"acronym\" : {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"address\" : {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"area\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"accesskey\": null,\n        \"shape\": null,\n        \"coords\": null,\n        \"href\": null,\n        \"nohref\": null,\n        \"alt\": null,\n        \"target\": null\n    },\n\n    \"b\" : {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"bdo\" : {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"big\" : {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"blockquote\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"cite\": null\n    },\n\n    \"br\" : {\n        \"title\": null,\n        \"clear\": null\n    },\n\n    \"caption\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\": null\n    },\n\n    \"center\" : {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"cite\" : {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"code\" : {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"col\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"span\" : null,\n        \"width\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null\n    },\n\n    \"colgroup\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"span\" : null,\n        \"width\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null\n    },\n\n    \"dd\" : {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"del\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"cite\" : null,\n        \"datetime\" : null\n    },\n\n    \"dfn\" : {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"div\" : {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null\n    },\n\n    \"dl\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"compact\" : null\n    },\n\n    \"dt\": {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"em\": {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"font\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"size\" : null,\n        \"color\" : null,\n        \"face\" : null\n    },\n\n    \"h1\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null\n    },\n\n    \"h2\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null\n    },\n\n    \"h3\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null\n    },\n\n    \"h4\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null\n    },\n\n    \"h5\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null\n    },\n\n    \"h6\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null\n    },\n\n    \"hr\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"align\" : null,\n        \"noshade\" : null,\n        \"size\" : null,\n        \"width\" : null\n    },\n\n    \"i\": {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"img\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"src\" : null,\n        \"alt\" : null,\n        \"name\" : null,\n        \"longdesc\" : null,\n        \"height\" : null,\n        \"width\" : null,\n        \"usemap\" : null,\n        \"ismap\" : null,\n        \"align\" : null,\n        \"border\" : null,\n        \"hspace\" : null,\n        \"vspace\" : null\n    },\n\n    \"en-media\": {\n        \"type\" : null,\n        \"hash\" : null,\n        \"title\" : null,\n        \"dir\" : null,\n        \"alt\" : null,\n        \"longdesc\" : null,\n        \"height\" : null,\n        \"width\" : null,\n        \"usemap\" : null,\n        \"align\" : null,\n        \"border\" : null,\n        \"hspace\" : null,\n        \"vspace\" : null\n    },\n\n    \"ins\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"cite\" : null,\n        \"datetime\" : null\n    },\n\n    \"kbd\": {\n        \"title\": null,\n        \"dir\" : null\n    },\n\n    \"li\": {\n        \"title\": null,\n        \"dir\" : null,\n        \"type\" : null,\n        \"value\" : null\n    },\n\n    \"map\": {\n        \"dir\" : null,\n        \"title\" : null,\n        \"name\" : null\n    },\n\n    \"ol\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"type\" : null,\n        \"compact\" : null,\n        \"start\" : null\n    },\n\n    \"p\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"align\" : null\n    },\n\n    \"pre\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"width\" : null\n    },\n\n    \"s\": {\n        \"title\" : null,\n        \"dir\" : null\n    },\n\n    \"samp\": {\n        \"title\" : null,\n        \"dir\" : null\n    },\n\n    \"small\": {\n        \"title\" : null,\n        \"dir\" : null\n    },\n\n    \"span\": {\n        \"title\" : null,\n        \"dir\" : null\n    },\n\n    \"strike\": {\n        \"title\" : null,\n        \"dir\" : null\n    },\n\n    \"strong\": {\n        \"title\" : null,\n        \"dir\" : null\n    },\n\n    \"sub\": {\n        \"title\" : null,\n        \"dir\" : null\n    },\n\n    \"sup\": {\n        \"title\" : null,\n        \"dir\" : null\n    },\n\n    \"table\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"summary\" : null,\n        \"width\" : null,\n        \"border\" : null,\n        \"cellspacing\" : null,\n        \"cellpadding\" : null,\n        \"align\" : null,\n        \"bgcolor\" : null\n    },\n\n    \"tbody\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null\n    },\n\n    \"td\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null,\n        \"abbr\" : null,\n        \"rowspan\" : null,\n        \"colspan\" : null,\n        \"nowrap\" : null,\n        \"bgcolor\" : null,\n        \"width\" : null,\n        \"height\" : null\n    },\n\n    \"tfoot\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null\n    },\n\n    \"th\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null,\n        \"abbr\" : null,\n        \"rowspan\" : null,\n        \"colspan\" : null,\n        \"nowrap\" : null,\n        \"bgcolor\" : null,\n        \"width\" : null,\n        \"height\" : null\n    },\n\n    \"thead\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null\n    },\n\n    \"tr\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"align\" : null,\n        \"char\" : null,\n        \"charoff\" : null,\n        \"valign\" : null,\n        \"bgcolor\" : null\n    },\n\n    \"tt\": {\n        \"title\" : null,\n        \"dir\" : null\n    },\n\n    \"u\": {\n        \"title\" : null,\n        \"dir\" : null\n    },\n\n    \"ul\": {\n        \"title\" : null,\n        \"dir\" : null,\n        \"type\" : null,\n        \"compact\" : null\n    },\n\n    \"var\": {\n        \"title\" : null,\n        \"dir\" : null\n    }\n};\n\nEvernote.ClipRules.NOKEEP_NODE_ATTRIBUTES = {\n    \"style\" : null,\n    \"tabindex\" : null\n};\n\nEvernote.ClipRules.CONDITIONAL_NODES = {\n    \"EMBED\" : null,\n    \"OBJECT\" : null,\n    \"IMG\" : null,\n    \"VIDEO\" : null\n};\n\nEvernote.ClipRules.NODE_NAME_TRANSLATIONS = {\n    \"HTML\" : \"DIV\",\n    \"BODY\" : \"DIV\",\n    \"FORM\" : \"DIV\",\n    \"CANVAS\" : \"DIV\",\n    \"CUFON\" : \"DIV\",\n    \"EMBED\" : \"IMG\",\n    \"BUTTON\" : \"SPAN\",\n    \"INPUT\" : \"SPAN\",\n    \"LABEL\" : \"SPAN\",\n    \"BDI\" : \"SPAN\",\n    \"IMG\" : \"EN-MEDIA\",\n    \"*\" : \"DIV\"\n};\n\nEvernote.ClipRules.SUPPORTED_NODES = {\n    \"A\" : null,\n    \"ABBR\" : null,\n    \"ACRONYM\" : null,\n    \"ADDRESS\" : null,\n    \"AREA\" : null,\n    \"B\" : null,\n    \"BUTTON\" : null,\n    \"BDO\" : null,\n    \"BIG\" : null,\n    \"BLOCKQUOTE\" : null,\n    \"BR\" : null,\n    \"CAPTION\" : null,\n    \"CENTER\" : null,\n    \"CITE\" : null,\n    \"CODE\" : null,\n    \"COL\" : null,\n    \"COLGROUP\" : null,\n    \"DD\" : null,\n    \"DEL\" : null,\n    \"DFN\" : null,\n    \"DIV\" : null,\n    \"DL\" : null,\n    \"DT\" : null,\n    \"EM\" : null,\n    \"FONT\" : null,\n    \"FORM\" : null,\n    \"H1\" : null,\n    \"H2\" : null,\n    \"H3\" : null,\n    \"H4\" : null,\n    \"H5\" : null,\n    \"H6\" : null,\n    \"HR\" : null,\n    \"HTML\" : null,\n    \"I\" : null,\n    \"IMG\" : null,\n    \"EN-MEDIA\" : null,\n    \"INPUT\" : null,\n    \"INS\" : null,\n    \"KBD\" : null,\n    \"LI\" : null,\n    \"MAP\" : null,\n    \"OL\" : null,\n    \"P\" : null,\n    \"PRE\" : null,\n    \"Q\" : null,\n    \"S\" : null,\n    \"SAMP\" : null,\n    \"SMALL\" : null,\n    \"SPAN\" : null,\n    \"STRIKE\" : null,\n    \"STRONG\" : null,\n    \"SUB\" : null,\n    \"SUP\" : null,\n    \"TABLE\" : null,\n    \"TBODY\" : null,\n    \"TD\" : null,\n    \"TFOOT\" : null,\n    \"TH\" : null,\n    \"THEAD\" : null,\n    \"TR\" : null,\n    \"TT\" : null,\n    \"U\" : null,\n    \"UL\" : null,\n    \"VAR\" : null\n};\n\nEvernote.ClipRules.REJECTED_NODES = {\n    \"SCRIPT\" : null,\n    \"LINK\" : null,\n    \"IFRAME\" : null,\n    \"STYLE\" : null,\n    \"SELECT\" : null,\n    \"OPTION\" : null,\n    \"OPTGROUP\" : null,\n    \"NOSCRIPT\" : null,\n    \"PARAM\" : null,\n    \"HEAD\" : null,\n    \"EVERNOTEDIV\" : null,\n    \"CUFONTEXT\" : null,\n    \"NOEMBED\" : null\n};\n\nEvernote.ClipRules.NON_ANCESTOR_NODES = {\n    \"OL\" : null,\n    \"UL\" : null,\n    \"LI\" : null\n};\n\nEvernote.ClipRules.SELF_CLOSING_NODES = {\n    \"IMG\" : null,\n    \/\/\"INPUT\" : null,\n    \"BR\" : null\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/**\n * ClipStyle is a container for CSS styles. It is able to add and remove\n * CSSStyleRules (and parse CSSRuleList's for rules), as well as\n * CSSStyleDeclaration's and instances of itself.\n * ClipStyle provides a mechanism to serialize itself via toString(), and\n * reports its length via length property. It also provides a method to clone\n * itself and expects to be manipulated via addStyle and removeStyle.\n *\/\nEvernote.ClipStyle = function ClipStyle( css, filterFn, styleList ) {\n    this.initialize( css, filterFn, styleList );\n};\n\nEvernote.ClipStyle.STYLES = [\n    \"background\", \"background-attachment\", \"background-clip\", \"background-color\", \"background-image\", \"background-origin\", \"background-position-x\", \"background-position-y\", \"background-position\", \"background-repeat\", \"background-size\",\n    \"border-bottom\", \"border-bottom-color\", \"border-bottom-left-radius\", \"border-bottom-right-radius\", \"border-bottom-style\", \"border-bottom-width\",\n    \"border-left\", \"border-left-color\", \"border-left-style\", \"border-left-width\",\n    \"border-right\", \"border-right-color\", \"border-right-style\", \"border-right-width\",\n    \"border-top\", \"border-top-color\", \"border-top-left-radius\", \"border-top-right-radius\", \"border-top-style\", \"border-top-width\",\n    \"border-collapse\", \"border-spacing\", \"bottom\", \"box-shadow\",\n    \"caption-side\", \"clear\", \"clip\", \"color\", \"content\", \"counter-increment\", \"counter-reset\", \"cursor\",\n    \"direction\", \"display\",\n    \"empty-cells\",\n    \"float\", \"font\", \"font-family\", \"font-size\", \"font-size-adjust\", \"font-stretch\", \"font-style\", \"font-variant\", \"font-weight\",\n    \"height\",\n    \"ime-mode\",\n    \"left\", \"letter-spacing\", \"line-height\", \"list-style\", \"list-style-image\", \"list-style-position\", \"list-style-type\",\n    \"margin\", \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\", \"marker-offset\", \"max-height\", \"max-width\", \"min-height\", \"min-width\",\n    \"opacity\", \"outline\", \"outline-color\", \"outline-offset\", \"outline-style\", \"outline-width\", \"overflow\", \"overflow-x\", \"overflow-y\",\n    \"padding\", \"padding-bottom\", \"padding-left\", \"padding-right\", \"padding-top\", \"page-break-after\", \"page-break-before\", \"pointer-events\", \"position\",\n    \"resize\", \"right\",\n    \"table-layout\", \"text-align\", \"text-anchor\", \"text-decoration\", \"text-indent\", \"text-overflow\", \"text-shadow\", \"text-transform\", \"top\",\n    \"vertical-align\", \"visibility\",\n    \"white-space\", \"width\", \"word-spacing\", \"word-wrap\",\n    \"z-index\"\n];\n\nEvernote.ClipStyle.NO_INHERIT_STYLES = {\n    \"*\":[ \"background\", \"background-image\", \"background-color\", \"background-position\", \"background-repeat\",\n        \"border-bottom\", \"border-bottom-color\", \"border-bottom-left-radius\", \"border-bottom-right-radius\", \"border-bottom-style\", \"border-bottom-width\",\n        \"border-left\", \"border-left-color\", \"border-left-style\", \"border-left-width\",\n        \"border-right\", \"border-right-color\", \"border-right-style\", \"border-right-width\",\n        \"border-top\", \"border-top-color\", \"border-top-left-radius\", \"border-top-right-radius\", \"border-top-style\", \"border-top-width\",\n        \"border-collapse\", \"border-spacing\", \"bottom\",\n        \"clear\",\n        \"display\",\n        \"float\",\n        \"height\",\n        \"left\", \"list-style\",\n        \"margin\", \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\",\n        \"padding\", \"padding-bottom\", \"padding-left\", \"padding-right\", \"padding-top\",\n        \"right\",\n        \"text-decoration\", \"top\",\n        \"width\" ],\n    \"img\":[ \"height\", \"width\" ]\n};\n\nEvernote.ClipStyle.CSS_GROUP = {\n    \"margin\":[ \"left\", \"right\", \"top\", \"bottom\" ],\n    \"padding\":[ \"left\", \"right\", \"top\", \"bottom\" ],\n    \"border\":[ \"width\", \"style\", \"color\" ],\n    \"border-bottom\":[ \"width\", \"style\", \"color\" ],\n    \"border-top\":[ \"width\", \"style\", \"color\" ],\n    \"border-right\":[ \"width\", \"style\", \"color\" ],\n    \"border-left\":[ \"width\", \"style\", \"color\" ],\n    \"border-image\":[ \"outset\", \"repeat\", \"slice\", \"source\", \"width\" ],\n    \"background\":[ \"attachment\", \"color\", \"image\", \"position\", \"repeat\", \"clip\", \"origin\", \"size\" ],\n    \"font\":[ \"family\", \"size\", \"style\", \"variant\", \"weight\", \"size-adjust\", \"stretch\", \"+line-height\" ],\n    \"list-style\":[ \"image\", \"position\", \"type\" ]\n};\n\nEvernote.ClipStyle.CSS_GROUP.getExtForStyle = function ( name ) {\n    var list = this[ name ];\n    var extList = [ ];\n\n    if ( list ) {\n        for ( var i = 0; i < list.length; ++i ) {\n            if ( list[ i ].indexOf( \"+\" ) >= 0 ) {\n                var tmp = list[ i ];\n                extList.push( tmp.replace( \"+\", \"\" ) );\n            }\n            else {\n                extList.push( name + \"-\" + list[ i ] );\n            }\n        }\n        return extList;\n    }\n\n    return null;\n};\n\nEvernote.ClipStyle.STYLE_ATTRIBUTES = {\n    \"bgcolor\":\"background-color\",\n    \"text\":\"color\"\n};\n\nEvernote.ClipStyle.INHERITED_STYLES = [\n    \"azimuth\",\n    \"border-collapse\", \"border-spacing\",\n    \"caption-side\", \"color\", \"cursor\",\n    \"direction\",\n    \"elevation\", \"empty-cells\",\n    \"font-family\", \"font-size\", \"font-style\", \"font-weight\", \"font\",\n    \"letter-spacing\", \"line-height\", \"list-style-image\", \"list-style-position\", \"list-style-type\", \"list-style\",\n    \"orphans\",\n    \"pitch-range\", \"pitch\",\n    \"quotes\",\n    \"richness\",\n    \"speak-header\", \"speak-numeral\", \"speak-punctuation\", \"speak\", \"speak-rate\", \"stress\",\n    \"text-align\", \"text-indent\", \"text-transform\",\n    \"visibility\", \"voice-family\", \"volume\",\n    \"white-space\", \"widows\", \"word-spacing\"\n];\n\nEvernote.ClipStyle.prototype._collection = null;\nEvernote.ClipStyle.prototype._filterFn = null;\nEvernote.ClipStyle.prototype._styleList = null;\n\nEvernote.ClipStyle.prototype.initialize = function ( css, filterFn, styleList ) {\n    Evernote.Logger.debug( \"ClipStyle.initialize()\" );\n\n    this._collection = new Evernote.StylesCollection();\n    Evernote.Logger.debug( \"ClipStyle.initialize: collection initialized()\" );\n    this._filterFn = (typeof filterFn == \"function\") ? filterFn : null;\n    this._styleList = (styleList != null) ? styleList : Evernote.ClipStyle.STYLES;\n    if(css) {\n        if ( window.CSSStyleDeclaration &#038;&#038; css instanceof window.CSSStyleDeclaration ) {\n            this.addStyle( css, this._styleList );\n        }\n        else if ( window.CSSStyleRule &#038;&#038; css instanceof window.CSSStyleRule ) {\n            this.addStyle( css.style, this._styleList );\n        }\n        else if ( (window.CSSRuleList &#038;&#038; css instanceof window.CSSRuleList) || css instanceof Array ) {\n            for ( var i = 0; i < css.length; ++i ) {\n                this.addStyle( css[ i ].style, this._styleList );\n            }\n        }\n        else if ( typeof css == 'object' &#038;&#038; css != null ) {\n            this.addStyle( css, this._styleList );\n        }\n    }\n    Evernote.Logger.debug( \"ClipStyle.initialize() end \");\n};\n\nEvernote.ClipStyle.prototype.fixBackground = function ( prop, value ) {\n    if(prop &#038;&#038; value) {\n        if(prop.indexOf(\"background-image\") != -1 &#038;&#038; value.indexOf(\"url\") != -1) {\n            Evernote.Logger.debug(\"Start replace\");\n            var regExp = \/url\\((.*?)\\)\/;\n            var res = value.replace(regExp, \"url('$1')\").replace(\/('\")|(\"')|('')\/g, \"'\");\n            Evernote.Logger.debug(\"End replace\");\n            return Evernote.GlobalUtils.escapeXML(res);\n\n        }\n    }\n    return value;\n};\n\nEvernote.ClipStyle.prototype.addStyle = function ( style, styleList ) {\n    Evernote.Logger.debug( \"ClipStyle.addStyle()\" );\n    if ( window.CSSStyleDeclaration &#038;&#038; style instanceof window.CSSStyleDeclaration &#038;&#038; style.length > 0 ) {\n        var list = (styleList != null) ? styleList : this._styleList;\n        for ( var i = 0; i < list.length; ++i ) {\n            var prop = list[ i ];\n            var value = Evernote.StyleElementExtension.getPropertyValue(style, prop );\n            var importantPriority = !!((style.getPropertyPriority(prop) == 'important'));\n            value = this.fixBackground(prop, value);\n            this.addSimpleStyle( prop, value, importantPriority );\n        }\n    }\n    else if ( style instanceof Evernote.ClipStyle ) {\n        list = (styleList != null) ? styleList : style.getStylesNames();\n        for ( var i = 0; i < list.length; ++i ) {\n            var prop = list[ i ];\n            value = style.getStyle( prop );\n            importantPriority = style.isImportant( prop );\n            value = this.fixBackground(prop, value);\n            this.addSimpleStyle( prop, value, importantPriority );\n        }\n    }\n    else if ( typeof style == 'object' &#038;&#038; style != null ) {\n        list = (styleList != null) ? styleList : style;\n        for ( var prop in list ) {\n            \/\/ In some cases, attempt to get currentStyle.outline ( or outlineWidth ) property in IE8 throws\n            \/\/ 'unspecified error' and crash whole serilization process. So we wrap it into try {...} catch.\n\n            try {\n                if ( list.hasOwnProperty( prop ) ) {\n                    var usedStyle = style[ prop ];\n                    var pName = prop;\n                    if(!usedStyle) {\n                        usedStyle = style [list[prop]];\n                        pName = list[prop];\n                        if(!usedStyle) {\n                            var propName = Evernote.IEStylePropertiesMapping.getPropertyNameFor(list[prop]);\n                            if(propName) {\n                                usedStyle = style[propName[1]];\n                            }\n                        }\n                    }\n                    usedStyle = this.fixBackground(pName, usedStyle);\n                    this.addSimpleStyle( pName, usedStyle );\n                }\n            }  catch (err) {}\n        }\n    }\n};\n\nEvernote.ClipStyle.prototype.removeStyle = function ( style ) {\n    Evernote.Logger.debug( \"ClipStyle.removeStyle()\" );\n    if(style) {\n        if ( window.CSSStyleDeclaration &#038;&#038; Evernote.Utils.isInstanceOf(style, window.CSSStyleDeclaration) || style instanceof Array ) {\n            for ( var i = 0; i < style.length; ++i ) {\n                this.removeSimpleStyle( style[ i ] );\n            }\n        }\n        else if ( style instanceof Evernote.ClipStyle ) {\n            var stylesNames = style.getStylesNames();\n            for ( i = 0; i < stylesNames.length; ++i ) {\n                this.removeSimpleStyle( stylesNames[ i ] );\n            }\n        }\n        else if ( typeof style == 'string' ) {\n            this.removeSimpleStyle( style );\n        }\n    }\n    Evernote.Logger.debug(\"ClipStyle.removeStyle() end\")\n};\n\nEvernote.ClipStyle.prototype.mergeStyle = function ( style, override ) {\n    Evernote.Logger.debug( \"ClipStyle.mergeStyle()\" );\n\n    if ( style instanceof Evernote.ClipStyle ) {\n        var stylesNames = style.getStylesNames();\n        for ( var i = 0; i < stylesNames.length; ++i ) {\n            var styleName = stylesNames[ i ];\n            var styleValue = this._collection.getStyle( styleName );\n            if ( styleValue == null || override || (style.isImportant( styleName ) &#038;&#038; !this._collection.isImportant( styleName )) ) {\n                var newValue = style.getStyle( styleName );\n                if ( style.isImportant( styleName ) ) {\n                    this._collection.addStyle( styleName, newValue, true );\n                }\n                else if ( override &#038;&#038; !this._collection.isImportant( styleName ) ) {\n                    this._collection.addStyle( styleName, newValue, false );\n                }\n                else if ( styleValue == null &#038;&#038; !override ) {\n                    this._collection.addStyle( styleName, newValue, style.isImportant( styleName ) );\n                }\n            }\n        }\n    }\n};\n\nEvernote.ClipStyle.prototype.getStylesNames = function () {\n    return this._collection.getStylesNames();\n};\n\nEvernote.ClipStyle.prototype.getStyle = function ( prop ) {\n    return this._collection.getStyle( prop );\n};\n\nEvernote.ClipStyle.prototype.isImportant = function ( prop ) {\n    return this._collection.isImportant( prop );\n};\n\nEvernote.ClipStyle.prototype.addSimpleStyle = function ( prop, value, importantPriority ) {\n    if ( typeof this._filterFn == \"function\" &#038;&#038; !this._filterFn( prop, value ) ) {\n        return;\n    }\n    var impl = Evernote.StylesReplacementRegistry.getImplementationFor(prop);\n    if(impl &#038;&#038; impl.getValue) {\n        value = impl.getValue(value);\n    }\n    this._collection.addStyle( prop, value, importantPriority );\n};\n\nEvernote.ClipStyle.prototype.removeSimpleStyle = function ( prop ) {\n    this._collection.removeStyle( prop );\n};\n\nEvernote.ClipStyle.prototype.toString = function () {\n    var str = \"\";\n    var stylesNames = this.getStylesNames();\n    for ( var i = 0; i < stylesNames.length; ++i ) {\n        var styleName = stylesNames[ i ];\n        var value = this._collection.getStyle( styleName );\n        if ( value != null &#038;&#038; value.length > 0 ) {\n            str += styleName + \":\" + value + \";\";\n        }\n    }\n\n    return str;\n};\n\nEvernote.ClipStyle.CSSDefaultStyle = {\n    \"background-attachment\": \"scroll\",\n    \"background-color\" : \"transparent\",\n    \"background-image\" : \"none\",\n    \"background-position-x\" : \"0px\",\n    \"background-position-y\" : \"0px\",\n    \"background-repeat\" : \"repeat\",\n    \"border-bottom-style\" : \"none\",\n    \"border-bottom-width\" : \"medium\",\n    \"border-left-style\" : \"none\",\n    \"border-left-width\" : \"medium\",\n    \"border-right-style\" : \"none\",\n    \"border-right-width\" : \"medium\",\n    \"border-top-style\" : \"none\",\n    \"border-top-width\" : \"medium\",\n    \"border-collapse\" : \"separate\",\n    \"bottom\" : \"auto\",\n    \"clear\" : \"none\",\n    \"height\" : \"auto\",\n    \"left\" : \"auto\",\n    \"margin-bottom\" : \"0px\",\n    \"margin-left\" : \"0px\",\n    \"margin-right\" : \"0px\",\n    \"margin-top\" : \"0px\",\n    \"max-height\" : \"none\",\n    \"max-width\" : \"none\",\n    \"min-height\" : \"0px\",\n    \"min-width\" : \"0px\",\n    \"overflow\" : \"visible\",\n    \"overflow-x\" : \"visible\",\n    \"overflow-y\" : \"visible\",\n    \"padding\" : \"0px\",\n    \"padding-bottom\" : \"0px\",\n    \"padding-left\" : \"0px\",\n    \"padding-right\" : \"0px\",\n    \"padding-top\" : \"0px\",\n    \"page-break-before\" : \"auto\",\n    \"page-break-after\" : \"auto\",\n    \"position\" : \"static\",\n    \"right\" : \"auto\",\n    \"text-align\" : \"left\",\n    \"text-decoration\" : \"none\",\n    \"text-indent\" : \"0px\",\n    \"text-overflow\" : \"clip\",\n    \"top\" : \"auto\",\n    \"width\" : \"auto\"\n};\n\nEvernote.ClipStyle.prototype.removeDefaultCssStyle = function () {\n    var stylesNames = this.getStylesNames();\n    for ( var i = 0; i < stylesNames.length; ++i ) {\n        var styleName = stylesNames[ i ];\n        var defaultCssValue = Evernote.ClipStyle.CSSDefaultStyle[styleName];\n        var value = this.getStyle( styleName );\n        if (!value)\n            continue;\n        if (defaultCssValue == value) {\n            this.removeStyle(styleName);\n        }\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ClipStyleProperty = function ClipStyleProperty( name, value, isImportant ) {\n    this.initialize( name, value, isImportant );\n};\n\nEvernote.ClipStyleProperty.prototype.initialize = function( name, value, isImportant ) {\n    if ( typeof name == \"string\" &#038;&#038; typeof value == \"string\" ) {\n        this._name = name;\n        this._value = value;\n    }\n\n    this._isImportant = (isImportant) ? true : false;\n};\n\nEvernote.ClipStyleProperty.prototype._name = null;\nEvernote.ClipStyleProperty.prototype._value = null;\nEvernote.ClipStyleProperty.prototype._isImportant = null;\n\nEvernote.ClipStyleProperty.prototype.name = function() {\n    return this._name;\n};\n\nEvernote.ClipStyleProperty.prototype.value = function() {\n    return this._value;\n};\n\nEvernote.ClipStyleProperty.prototype.isImportant = function() {\n    return this._isImportant;\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/**\n * Represents DOM parser that could able to traverse the DOM node tree from specified root.\n * @param tab - current window object\n * @param range - current selection on the page (if any)\n * @constructor\n *\/\nEvernote.DomParser = function DomParser( tab, range ) {\n    this.initialize( tab, range );\n};\n\nEvernote.DomParser.prototype._tab = null;\n\n\/**\n * Update current parser data\n * @param tab - current window object\n * @param range - current selection on the page (if any)\n *\/\nEvernote.DomParser.prototype.initialize = function ( tab, range ) {\n    Evernote.Logger.debug( \"DomSerializer.initialize()\" );\n\n    this._tab = tab;\n    this._range = range;\n};\n\n\/**\n * Determines if passed node should be serialized.\n * Node should not be initialized if one of the following is true:\n *  - node is rejected according to configuration\n *  - there is the selection on the page and this node is out of selection range.\n * @param node - DOM node\n * @return {Boolean}\n *\/\nEvernote.DomParser.prototype.isNodeForSerialize = function ( node ) {\n    if ( !node || Evernote.ClipRules.isRejectedNode( node ) || node.id == \"evernoteContentClipperWait\" ) {\n        return false;\n    }\n    if(Evernote.ClipperElementsIdentifiers.match(node)) {\n        Evernote.Logger.debug(\"Node is rejected because it is clipper information \" + node.id);\n        return false;\n    }\n    return (!this._range || this.isNodeInRange( node )) ? true : false;\n};\n\n\/**\n * Determines whether passed node is inside the selection range. Returns true if it is, false otherwise.\n * @param node - DOM node\n * @return {Boolean}\n *\/\nEvernote.DomParser.prototype.isNodeInRange = function ( node ) {\n    Evernote.Logger.debug( \"DomParser.isNodeInRange()\" );\n\n    var nodeRange, endsAfterNodeStart, startsBeforeNodeEnd;\n\n    if (typeof node.ownerDocument.createRange == 'function') {\n        \/\/ ie9, ie10, ie11\n\n        if ( node &#038;&#038; this._range ) {\n            nodeRange = node.ownerDocument.createRange();\n\n            \/\/ create new selection from node, or node content\n            try {\n                nodeRange.selectNode( node );\n            }\n            catch ( e ) {\n                nodeRange.selectNodeContents( node );\n            }\n\n            \/\/ compare boundary points of selection and current node.\n            endsAfterNodeStart = this._range.compareBoundaryPoints( Range.START_TO_END, nodeRange ) == 1;\n            startsBeforeNodeEnd = this._range.compareBoundaryPoints( Range.END_TO_START, nodeRange ) == -1;\n\n            return endsAfterNodeStart &#038;&#038; startsBeforeNodeEnd;\n        }\n    } else {\n        \/\/ ie7 , ie8\n        nodeRange = node.ownerDocument.body.createTextRange();\n\n        try {\n            nodeRange.moveToElementText(node);\n        } catch (e) {\n            \/\/ [object Text]\n            \/\/ probably, here should be analog for createRange().selectNodeContents();\n            return true;\n        }\n\n        endsAfterNodeStart = this._range.compareEndPoints('EndToStart', nodeRange) == 1;\n        startsBeforeNodeEnd = this._range.compareEndPoints('StartToEnd', nodeRange) == -1;\n\n        return endsAfterNodeStart &#038;&#038; startsBeforeNodeEnd;\n    }\n\n    return false; \/\/ not found.\n};\n\n\/**\n * Determines whether passed node is visible on the page.\n * @param node - DOM node.\n * @return {Boolean}\n *\/\nEvernote.DomParser.prototype.isNodeVisible = function ( node ) {\n    Evernote.Logger.debug( \"DomParser.isNodeVisible()\" );\n\n    if ( !node ) {\n        return false;\n    }\n\n    var compStyles = Evernote.ElementExtension.getComputedStyle( node, null, this._tab );\n    return Evernote.StyleElementExtension.getPropertyValue(compStyles, \"display\" ) != \"none\";\n};\n\nEvernote.DomParser.prototype.parseAsync = function ( root, fullPage, serializer, callback ) {\n    var PARSING_TIMEOUT_INTERVAL = 1000; \/\/milliseconds\n\n    if (!callback) {\n        this.parse(root, fullPage, serializer);\n        return;\n    }\n\n    if ( !root ) {\n        throw new Error( \"No root element for parsing\" );\n    }\n\n    var node = root;\n    var parentNode = null;\n    var thizz = this;\n\n    var asyncParser = function()\n    {\n        var parsingEnd = true;\n        var startTimeParsing = new Date().getTime();\n        while ( node ) {\n            if ( node != root &#038;&#038; node.parentNode ) {\n                parentNode = node.parentNode.serializedNode;\n            }\n\n            if ( thizz.isNodeForSerialize( node ) ) {\n                if ( node.nodeType == Evernote.Node.TEXT_NODE ) {\n                    serializer.textNode( node, thizz._range );\n                }\n                else if ( node.nodeType == Evernote.Node.ELEMENT_NODE &#038;&#038; thizz.isNodeVisible( node ) ) {\n                    node.serializedNode = serializer.startNode( new Evernote.SerializedNode( node, parentNode ), root, fullPage );\n                    if ( node.hasChildNodes() ) {\n                        node = node.childNodes[ 0 ];\n                        continue;\n                    }\n                    else {\n                        serializer.endNode( node.serializedNode );\n                        if ( node.serializedNode ) {\n                            try {\n                                delete node.serializedNode;\n                            } catch(e) {\n                                \/\/If we are failed to delete the property, than just set it to undefined\n                                node.serializedNode = undefined;\n                            }\n                        }\n                    }\n                }\n            }\n\n            \/**\n             * Check if there is a next node available and it is not the root\n             *\/\n            if ( node.nextSibling &#038;&#038; node != root ) {\n                node = node.nextSibling;\n            }\n            else if ( node != root ) {\n                while ( node.parentNode &#038;&#038; node != root ) {\n                    node = node.parentNode;\n                    try {\n                        serializer.endNode( node.serializedNode );\n                    } catch (err) {\n                        node.serializedNode = undefined;\n                        continue;\n                    };\n                    try {\n                        delete node.serializedNode;\n                    } catch (e) {\n                        \/\/If we are failed to delete the property, than just set it to undefined\n                        node.serializedNode = undefined;\n                    }\n\n                    if ( node.nextSibling &#038;&#038; node != root ) {\n                        node = node.nextSibling;\n                        break;\n                    }\n                }\n\n                if ( node == root ) {\n                    break;\n                }\n            }\n            else {\n                break;\n            }\n\n            var endTimeParsing = new Date().getTime();\n            if ( (endTimeParsing - startTimeParsing) >= PARSING_TIMEOUT_INTERVAL ) {\n                Evernote.Logger.debug(\"Parsing interval timeout: \" + (endTimeParsing - startTimeParsing));\n                parsingEnd = false;\n                break;\n            }\n        }\n\n        if (parsingEnd) {\n            Evernote.Logger.debug(\"Parsing end\");\n            callback();\n        }else {\n            Evernote.Logger.debug(\"Parsing repeat\");\n            setTimeout(asyncParser, 0);\n        }\n    };\n    setTimeout(asyncParser, 0);\n};\n\n\/**\n * Starts parsing from specified root.\n * @param root - starting DOM node.\n * @param fullPage - is user selects to serialize the full page\n * @param serializer - current serializer to be used to serialize the DOM node to string\n *\/\nEvernote.DomParser.prototype.parse = function ( root, fullPage, serializer ) {\n    Evernote.Logger.debug( \"DomParser.parse()\" );\n\n    if ( !root ) {\n        throw new Error( \"No root element for parsing\" );\n    }\n\n    var node = root;\n    var parentNode = null;\n\n    while ( node ) {\n        if ( node != root &#038;&#038; node.parentNode ) {\n            parentNode = node.parentNode.serializedNode;\n        }\n\n        if ( this.isNodeForSerialize( node ) ) {\n            if ( node.nodeType == Evernote.Node.TEXT_NODE ) {\n                serializer.textNode( node, this._range );\n            }\n            else if ( node.nodeType == Evernote.Node.ELEMENT_NODE &#038;&#038; this.isNodeVisible( node ) ) {\n                node.serializedNode = serializer.startNode( new Evernote.SerializedNode( node, parentNode ), root, fullPage );\n                if ( node.hasChildNodes() ) {\n                    node = node.childNodes[ 0 ];\n                    continue;\n                }\n                else {\n                    serializer.endNode( node.serializedNode );\n                    if ( node.serializedNode ) {\n                        try {\n                            delete node.serializedNode;\n                        } catch(e) {\n                            \/\/If we are failed to delete the property, than just set it to undefined\n                            node.serializedNode = undefined;\n                        }\n                    }\n                }\n            }\n        }\n\n        \/**\n         * Check if there is a next node available and it is not the root\n         *\/\n        if ( node.nextSibling &#038;&#038; node != root ) {\n            node = node.nextSibling;\n        }\n        else if ( node != root ) {\n            while ( node.parentNode &#038;&#038; node != root ) {\n                node = node.parentNode;\n                try {\n                    serializer.endNode( node.serializedNode );\n                } catch (err) {\n                    node.serializedNode = undefined;\n                    continue;\n                };\n\n                try {\n                    delete node.serializedNode;\n                } catch (e) {\n                    \/\/If we are failed to delete the property, than just set it to undefined\n                    node.serializedNode = undefined;\n                }\n\n                if ( node.nextSibling &#038;&#038; node != root ) {\n                    node = node.nextSibling;\n                    break;\n                }\n            }\n\n            if ( node == root ) {\n                break;\n            }\n        }\n        else {\n            break;\n        }\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.NodeSerializer = function NodeSerializer( tab, styleStrategy, includeBg , isRange) {\n    this.initialize( tab, styleStrategy, includeBg , isRange);\n};\n\nEvernote.NodeSerializer.prototype._tab = null;\nEvernote.NodeSerializer.prototype._styleStrategy = null;\nEvernote.NodeSerializer.prototype._docBase = null;\nEvernote.NodeSerializer.prototype._imagesUrls = null;\nEvernote.NodeSerializer.prototype._isRange = null;\nEvernote.NodeSerializer.prototype._serializedDom = \"\";\nEvernote.NodeSerializer.prototype._includeBgStyles = true;\n\nEvernote.NodeSerializer.prototype.initialize = function ( tab, styleStrategy, includeBg ,isRange ) {\n    Evernote.Logger.debug( \"DomSerializer.initialize()\" );\n\n    this._tab = tab;\n    this._styleStrategy = (styleStrategy instanceof Evernote.ClipStylingStrategy) ? styleStrategy : null;\n    this._imagesUrls = [ ];\n    this._includeBgStyles = ( includeBg != null ) ? includeBg : true;\n    this._isRange = ( isRange != null ) ? isRange : false;\n    this.getDocumentBase();\n};\n\nEvernote.NodeSerializer.prototype.startNode = function ( serializedNode, root, fullPage ) {\n    Evernote.Logger.debug( \"Start to serialize node :\" + serializedNode.node.nodeName + \", class = \" + serializedNode.node.className + \", id = \" + serializedNode.node.id );\n    try {\n        var node = serializedNode.node;\n        if ( Evernote.ClipRules.isConditionalNode( node ) &#038;&#038; Evernote.ElementSerializerFactory.getImplementationFor( node ) != null ) {\n            var result = this.serializeConditionalNode( node, root, fullPage );\n            this._serializedDom += result.content;\n            \/\/ hack for desktop Win client\n            if ( result.imageUrl ) {\n                this._imagesUrls.push( result.imageUrl );\n            }\n            serializedNode.setStyle(result.nodeStyle);\n            return serializedNode;\n        }\n\n        if ( node.nodeName.toLowerCase() == \"embed\" ) {\n            var src = node.getAttribute( \"src\" );\n            if ( src &#038;&#038; (src.indexOf(\".swf\", src.length - \".swf\".length) !== -1) ) {\n                serializedNode.setStyle(new Evernote.ClipStyle());\n                return serializedNode;\n            }\n        }\n\n        if ( node.nodeName.toLowerCase() == \"img\" ) {\n            var src = node.getAttribute( \"src\" );\n\n            if (src &#038;&#038; src.indexOf('&#038;') != -1) {\n                src =  src.slice(0, src.indexOf('&#038;'));\n            }\n\n            var absoluteSource = Evernote.Utils.makeAbsolutePath(this._docBase, src).replace(\/\\s\/g, \"%20\");\n            node.setAttribute( \"type\", \"put-media-type-here-for-\" + absoluteSource);\n            node.setAttribute( \"hash\", \"put-hash-type-here-for-\" + absoluteSource);\n            node.setAttribute( \"src\", src);\n\n            if ( src &#038;&#038; src.indexOf( \"data:image\" ) < 0 ) {\n                this._imagesUrls.push( src );\n            }\n        }\n\n        var attrsStr = this.serializeAttributes( node );\n        var stylesStr = \"\";\n\n        var nodeName = Evernote.ClipRules.translateNode( node );\n\n        if ( this._styleStrategy ) {\n\n            var nodeStyle = this._styleStrategy.styleForNode( node, root, fullPage, Evernote.ClipStyleType.Default ).evaluated;\n\n            var inhBgStyle = null;\n            if ( this._includeBgStyles )\n                inhBgStyle = this._styleStrategy.styleForNode( node, root, fullPage, Evernote.ClipStyleType.InheritedBgStyle ).inheritedBackground;\n\n            if ( inhBgStyle != null )\n                for ( var inhI = inhBgStyle.length - 1; inhI >= 0; inhI-- ) {\n                    var inhStyle = inhBgStyle[inhI];\n                    this._serializedDom += \"\n\n\n\n<div \" + this.serializeStyles( node, inhStyle ) + \" >\";\n                    serializedNode.translateTo.push( \"div\" );\n                }\n\n            var pseudoStyle = this._styleStrategy.getNodeStyle( node, null, \":before\" );\n\n            if ( fullPage &#038;&#038; node.nodeName.toLowerCase() == \"body\" ) {\n                var wrapBodyStyle = new Evernote.ClipStyle( nodeStyle, null, Evernote.ClipStyle.CSS_GROUP.getExtForStyle( \"background\" ) );\n                this._serializedDom += \"<\" + \"div\" + \" \" + this.serializeStyles( node, wrapBodyStyle ) + \" >\";\n                serializedNode.translateTo.push( \"div\" );\n                var bgGroup = Evernote.ClipStyle.CSS_GROUP.getExtForStyle( \"background\" );\n                for ( var ind in bgGroup ) {\n                    if ( bgGroup.hasOwnProperty( ind ) ) {\n                        nodeStyle.removeStyle( bgGroup[ind] );\n                    }\n                }\n            }\n\n            \/\/ Bug 47705. dirty fix, may cause problems in some cases.\n            if (this._isRange) {\n                nodeStyle.addSimpleStyle('height', node.currentStyle.height);\n            }\n\n            if ( !fullPage &#038;&#038; node == root ) {\n                nodeStyle.removeStyle( \"float\" );\n            }\n            if ( !serializedNode.node.hasChildNodes() &#038;&#038; !(nodeStyle.getStyle( \"height\" ) || node.getAttribute( \"height\" )) ) {\n                nodeStyle.addStyle( {height:\"0px\"} );\n            }\n            if ( !serializedNode.node.hasChildNodes() &#038;&#038; !(nodeStyle.getStyle( \"width\" ) || node.getAttribute( \"width\" )) ) {\n                nodeStyle.addStyle( {width:\"0px\"} );\n            }\n            if(nodeStyle.getStyle(\"position\") == \"fixed\") {\n                nodeStyle.addStyle({position: \"absolute\"});\n            }\n\n            if ( (node.nodeName.toUpperCase() == \"SPAN\"\/* || node.nodeName.toUpperCase() == \"A\"*\/) &#038;&#038; node.getElementsByTagName( \"IMG\" ).length > 0) {\n                nodeName = \"div\";\n                if ( !nodeStyle.getStyle( \"display\" ) )\n                    nodeStyle.addStyle( {display:\"inline\"} );\n            }\n            if (node.nodeName.toUpperCase() == \"TH\" || node.nodeName.toUpperCase() == \"TD\") {\n                nodeStyle.addStyle( {display:\"table-cell\"} );\n            }\n\n            nodeStyle.removeDefaultCssStyle();\n\n            this._serializedDom += this.serializePseudoElement( node, pseudoStyle );\n            stylesStr = this.serializeStyles( node, nodeStyle );\n\n            if ( (nodeName.toLowerCase() == \"div\" \/*|| nodeName.toLowerCase() == \"span\"*\/) &#038;&#038; nodeStyle.getStyle( \"float\" ) &#038;&#038; nodeStyle.getStyle( \"float\" ) != \"none\" &#038;&#038; serializedNode.parentNode &#038;&#038; node.parentNode.nodeName.toLowerCase() != \"a\" ) {\n                if ( !serializedNode.node.nextSibling || serializedNode.node.nextSibling.nodeType == 3 )\n                    serializedNode.parentNode.isInlineBlock = true;\n            }\n        }\n\n        Evernote.Logger.debug( node.nodeName + \" \" + attrsStr + \" -> \" + nodeName + \" \" + stylesStr );\n\n        this._serializedDom += \"<\" + nodeName + \" \" + attrsStr + \" \" + stylesStr + \" >\";\n\n        serializedNode.setStyle(nodeStyle);\n        serializedNode.translateTo.push( nodeName );\n        return serializedNode;\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"Failed to start serialize node :\" + e );\n        throw e;\n    }\n};\n\nEvernote.NodeSerializer.prototype.serializePseudoElement = function ( node, pseudoStyle ) {\n    try {\n        var nodeName = Evernote.ClipRules.translateNode( node );\n        if ( pseudoStyle.getStylesNames().length > 0 ) {\n            var content = \"&nbsp;\";\n            if ( pseudoStyle.getStyle( \"content\" ) ) {\n                content = pseudoStyle.getStyle( \"content\" );\n                pseudoStyle.removeStyle( \"content\" );\n            }\n            var beforeStylesStr = this.serializeStyles( node, pseudoStyle );\n            return \"<\" + nodeName + \" \" + beforeStylesStr + \" >\" + content.replace( \/\"\/g, '' ) + \"<\/\" + nodeName + \">\";\n        }\n        return \"\";\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"Failed to  serialize pseudo element :\" + e );\n        throw e;\n    }\n};\n\nEvernote.NodeSerializer.prototype.textNode = function ( node, range ) {\n    this._serializedDom += this.serializeTextNode( node, range );\n};\n\nEvernote.NodeSerializer.prototype.endNode = function ( serializedNode ) {\n    try {\n        Evernote.Logger.debug( \"end serialize node :\" + serializedNode.translateTo );\n\n        if ( serializedNode.isInlineBlock ) {\n            var name = \"div\";\n            if ( serializedNode.node.nodeName.toLowerCase() == \"ul\" ) {\n                name = \"li\"\n            }\n            this._serializedDom += \"<\" + name + \" style=\\\"clear: both; width: 0px; height: 0px;\\\">\" + \"&nbsp;\" + \"<\/\" + name + \">\"\n        }\n\n        var node = serializedNode.node;\n        var serializedPseudo = \"\";\n        var pseudoStyle = new Evernote.ClipStyle();\n        if ( this._styleStrategy ) {\n            pseudoStyle = this._styleStrategy.getNodeStyle( node, null, \":after\" );\n            if ( pseudoStyle.getStylesNames().length > 0 ) {\n                var floatStyle = serializedNode.getStyle().getStyle( \"float\" );\n                if ( floatStyle &#038;&#038; !pseudoStyle.getStyle( \"float\" ) )\n                    pseudoStyle.addStyle( { \"float\" : floatStyle } );\n\n                if ( node.nodeName.toLowerCase() == \"ul\" )\n                    serializedPseudo = this.serializePseudoElement( document.createElement( \"div\" ), pseudoStyle );\n            }\n        }\n\n        while ( serializedNode.translateTo.length > 0 ) {\n            var nodeName = serializedNode.translateTo.pop();\n            if ( !Evernote.ClipRules.isSelfClosingNode( serializedNode.node ) ) {\n                if ( !serializedNode.node.hasChildNodes() )\n                    this._serializedDom += \"&nbsp;\";\n            }\n\n            if ( nodeName.toLowerCase() == \"ul\" ) {\n                this._serializedDom += this.serializePseudoElement( document.createElement( \"li\" ), pseudoStyle );\n            }\n            this._serializedDom += \"<\/\" + nodeName + \">\";\n        }\n\n        this._serializedDom += serializedPseudo;\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"Failed to end serialize node :\" + e );\n        throw e;\n    }\n};\n\nEvernote.NodeSerializer.prototype.serializeTextNode = function ( node, range ) {\n    Evernote.Logger.debug( \"DomSerializer.serializeTextNode()\" );\n\n    try {\n        var nodeValue = node.nodeValue;\n        if ( !range ) {\n            return Evernote.Utils.htmlEncode( nodeValue );\n        }\n        else {\n            if ( range.startContainer == node &#038;&#038; range.startContainer == range.endContainer ) {\n                return Evernote.Utils.htmlEncode( nodeValue.substring( range.startOffset, range.endOffset ) );\n            }\n            else if ( range.startContainer == node ) {\n                return Evernote.Utils.htmlEncode( nodeValue.substring( range.startOffset ) );\n            }\n            else if ( range.endContainer == node ) {\n                return Evernote.Utils.htmlEncode( nodeValue.substring( 0, range.endOffset ) );\n            }\n            else if ( range.commonAncestorContainer != node ) {\n                return Evernote.Utils.htmlEncode( nodeValue );\n            }\n        }\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"DomSerializer.serializeTextNode() failed \" + e );\n        throw e;\n    }\n\n    return \"\";\n};\n\nEvernote.NodeSerializer.prototype.serializeConditionalNode = function ( node, root, fullPage ) {\n    Evernote.Logger.debug( \"DomSerializer.serializeConditionalNode()\" );\n    var impl = Evernote.ElementSerializerFactory.getImplementationFor( node );\n    if ( typeof impl == 'function' ) {\n        var nodeStyle = (this._styleStrategy) ? this._styleStrategy.styleForNode( node, root, fullPage ).evaluated : null;\n        if (nodeStyle)\n            nodeStyle.removeDefaultCssStyle();\n        var serializer = new impl( node, nodeStyle );\n        var content = serializer.serialize( this._docBase );\n        var imageUrl = serializer.getImageUrl();\n\n        return { content:content, imageUrl:imageUrl, nodeStyle:nodeStyle };\n    }\n\n    return { content:\"\", imageUrl:\"\", nodeStyle:new Evernote.ClipStyle() };\n};\n\nEvernote.NodeSerializer.prototype.serializeAttributes = function ( node ) {\n    Evernote.Logger.debug( \"DomSerializer.serializeAttributes()\" );\n\n    try {\n        var attrs = node.attributes;\n        var str = \"\";\n\n        for ( var i = 0; i < attrs.length; ++i ) {\n            if ( !Evernote.ClipRules.isNoKeepNodeAttr( attrs[ i ], Evernote.ClipRules.translateNode( node ), node ) ) {\n                var attrValue = (attrs[ i ].value) ? Evernote.GlobalUtils.escapeXML( attrs[ i ].value ) : \"\";\n                if ( (attrs[ i ].name.toLowerCase() == \"src\" || attrs[ i ].name.toLowerCase() == \"href\") &#038;&#038; attrValue.toLowerCase().indexOf( \"http\" ) != 0 ) {\n                    attrValue = Evernote.Utils.makeAbsolutePath( this._docBase, attrValue );\n                }\n                str += \" \" + attrs[ i ].name.toLowerCase() + \"=\\\"\" + attrValue + \"\\\"\";\n            }\n        }\n\n        return str;\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"DomSerializer.serializeAttributes() failed: error = \" + e );\n    }\n\n    return \"\";\n};\n\nEvernote.NodeSerializer.prototype.serializeStyles = function ( node, nodeStyle ) {\n    Evernote.Logger.debug( \"DomSerializer.serializeStyles()\" );\n\n    try {\n        var str = \"\";\n        if(node.nodeName.toLowerCase() == \"map\") {\n            \/\/Map should not have style attribute according to Evernote DTD\n            return \"\";\n        }\n        if ( node &#038;&#038; nodeStyle instanceof Evernote.ClipStyle ) {\n            str += \" style=\\\"\" + nodeStyle.toString().replace( \/\"\/g, \"\" ) + \"\\\"\";\n        }\n        return str;\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"DomSerializer.serializeStyles() failed: error = \" + e );\n        throw e;\n    }\n    return \"\";\n};\n\nEvernote.NodeSerializer.prototype.getDocumentBase = function () {\n    Evernote.Logger.debug( \"DomSerializer.getDocumentBase()\" );\n\n    if ( !this._docBase ) {\n        var baseTags = this._tab.document.getElementsByTagName( \"base\" );\n        for ( var i = 0; i < baseTags.length; ++i ) {\n            var baseTag = baseTags[ i ];\n            if ( typeof baseTag == 'string' &#038;&#038; baseTag.indexOf( \"http\" ) == 0 ) {\n                this._docBase = baseTag;\n            }\n            if ( this._docBase ) {\n                break;\n            }\n        }\n\n        if ( !this._docBase ) {\n            var location = this._tab.document.location;\n            this._docBase = location.protocol + \"\/\/\" + location.host + location.pathname.replace( \/[^\\\/]+$\/, \"\" );\n        }\n    }\n\n    return this._docBase;\n};\n\nEvernote.NodeSerializer.prototype.getImagesUrls = function () {\n    return this._imagesUrls;\n};\n\nEvernote.NodeSerializer.prototype.getSerializedDom = function () {\n    return '\n\n\n\n<div style=\"position: relative;\">' + this._serializedDom.replace(\/[^\\u0009\\u000a\\u000d\\u0020-\\uD7FF\\uE000-\\uFFFD]+\/g, \"\") + '<\/div>\n\n\n\n\n';\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/\/\"use strict\";\n\nEvernote.SerializedNode = function SerializedNode( node, parent ) {\n    this.node = node;\n    this._parentSerializedNode = parent;\n    this.translateTo = [ ];\n};\n\nEvernote.SerializedNode.prototype.translateTo = null;\nEvernote.SerializedNode.prototype.node = null;\nEvernote.SerializedNode.prototype._parentSerializedNode = null;\n\nEvernote.SerializedNode.prototype.setStyle = function ( clipStyle ) {\n    this._clipStyle = clipStyle;\n};\n\nEvernote.SerializedNode.prototype.getStyle = function () {\n    return this._clipStyle;\n};\n\nEvernote.SerializedNode.prototype.parentNode = function () {\n    return this._parentSerializedNode;\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/\/\"use strict\";\n\nEvernote.StylesCollection = function StylesCollection() {\n    this._styles = { };\n};\n\nEvernote.StylesCollection.prototype._styles = null;\n\nEvernote.StylesCollection.prototype.addStyle = function( name, value, isImportant ) {\n    if ( typeof name == \"string\" &#038;&#038; typeof value == \"string\" ) {\n        Evernote.Logger.debug( \"StylesCollection.addStyle(): name = \" + name + \", value = \" + value + \", isImportant = \" + isImportant );\n        this._styles[ name ] = new Evernote.ClipStyleProperty( name, value, isImportant);\n    }\n};\n\nEvernote.StylesCollection.prototype.getStyle = function( name ) {\n    if ( typeof name == \"string\" ) {\n        Evernote.Logger.debug( \"StylesCollection.getStyle(): name = \" + name + \" value: \" + ((typeof this._styles[ name ] != \"undefined\") ? this._styles[ name ].value() : null) );\n        return (typeof this._styles[ name ] != \"undefined\") ? this._styles[ name ].value() : null;\n    }\n\n    return null;\n};\n\nEvernote.StylesCollection.prototype.removeStyle = function( name ) {\n    if ( typeof name == \"string\" ) {\n        Evernote.Logger.debug( \"StylesCollection.removeStyle(): name = \" + name );\n\n        this._styles[ name ] = null;\n        delete this._styles[ name ];\n    }\n};\n\nEvernote.StylesCollection.prototype.isImportant = function( name ) {\n    if ( typeof name == \"string\" ) {\n        return (typeof this._styles[ name ] != \"undefined\") ? this._styles[ name ].isImportant() : false;\n    }\n};\n\nEvernote.StylesCollection.prototype.getStylesNames = function() {\n    Evernote.Logger.debug( \"StylesCollection.getStylesNames()\" );\n\n    var stylesNames = [ ];\n    for ( var key in this._styles ) {\n        if ( this._styles[ key ] != null ) {\n            stylesNames.push( key );\n        }\n    }\n\n    return stylesNames;\n};\n\nEvernote.StylesCollection.prototype.getStylesNumber = function() {\n    Evernote.Logger.debug( \"StylesCollection.getStylesNumber()\" );\n\n    var num = 0;\n    for ( var key in this._styles ) {\n        if ( this._styles[ key ] != null ) {\n            ++num;\n        }\n    }\n\n    return num;\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.DataImageSerializer = function DataImageSerializer( node, nodeStyle ) {\n    if ( !nodeStyle ) {\n        nodeStyle = new Evernote.ClipStyle();\n    }\n\n    this.initialize( node, nodeStyle );\n};\n\nEvernote.inherit( Evernote.DataImageSerializer, Evernote.AbstractElementSerializer, true );\n\nEvernote.DataImageSerializer.isResponsibleFor = function( node ) {\n    try {\n        if ( node &#038;&#038; node.nodeType == Evernote.Node.ELEMENT_NODE &#038;&#038; node.nodeName.toLowerCase() == \"img\" ) {\n            var src = node.getAttribute( \"src\" );\n            if ( src &#038;&#038; src.indexOf( \"data:image\" ) != -1 ) {\n                return true;\n            }\n        }\n    } catch(e) {\n        Evernote.Logger.error(\"DataImageSerializer.isResponsibleFor failed due to error \" + e);\n    }\n    return false;\n};\n\nEvernote.DataImageSerializer.prototype.serialize = function( \/*docBase*\/ ) {\n    Evernote.Logger.debug( \"DataImageSerializer.serialize()\" );\n\n    try {\n        this._nodeStyle.addStyle( { \"background-image\" : \"url('\" + this._node.getAttribute( \"src\" ) + \"')\",\n            \"width\" : this._node.offsetWidth + \"px\",\n            \"height\" : this._node.offsetHeight + \"px\",\n            \"background-repeat\" : \"no-repeat\",\n            \"display\" : \"block\" } );\n\n        return \"<span style=\\\"\" + this._nodeStyle.toString().replace( \/\"\/g, \"\" ) + \"\\\"\" + \">&nbsp;<\/span>\";\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"DataImageSerializer.serialize() failed: error = \" + e );\n    }\n\n    return \"\";\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.VideoElementSerializer = function VideoElementSerializer( node, nodeStyle ) {\n    this.initialize( node, nodeStyle );\n};\n\nEvernote.inherit( Evernote.VideoElementSerializer, Evernote.AbstractElementSerializer, true );\n\nEvernote.VideoElementSerializer.isResponsibleFor = function( node ) {\n    return node &#038;&#038; node.nodeType == Evernote.Node.ELEMENT_NODE &#038;&#038; node.nodeName.toLowerCase() == \"video\";\n};\n\nEvernote.VideoElementSerializer.prototype.serialize = function( \/*docBase*\/ ) {\n    Evernote.Logger.debug( \"VideoElementSerializer.serialize()\" );\n\n    try {\n        var width = this._node.offsetWidth;\n        var height = this._node.offsetHeight;\n        var doc = this._node.ownerDocument;\n\n        var canvas = doc.createElement( \"CANVAS\" );\n        canvas.width = width;\n        canvas.height = height;\n\n        var context = canvas.getContext( \"2d\" );\n        context.drawImage( this._node, 0, 0, width, height );\n\n        var dataUrl = canvas.toDataURL( \"image\/png\" );\n        context.clearRect( 0, 0, width, height );\n\n        this._nodeStyle.addStyle( { \"background-image\" : \"url('\" + dataUrl + \"')\",\n            \"width\" : width + \"px\",\n            \"height\" : height + \"px\",\n            \"display\" : \"block\" } );\n\n        return \"<a style=\\\"\" + this._nodeStyle.toString().replace( \/\"\/g, \"\" ) + \"\\\"\" + \"href='\" + doc.defaultView.location.href + \"'>&nbsp;<\/a>\";\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"VideoElementSerializer.serialize() failed: error = \" + e );\n    }\n\n    return \"\";\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\n\/**\n * Serializes DOM element into an img pointing to the thumbnail of the video\n *\n * Video ids are used for obtaining thumbnails via\n * https:\/\/i2.ytimg.com\/vi\/cAcxHQalWOw\/hqdefault.jpg. These ids can be\n * obtained from:\n *\n *\n\n\n\n<pre>\r\n *   - the URL of the document containing EMBED\r\n *   - iframe's src attribute that embeds the video via an iframe\r\n *   - src attribute of the embed object (though on actualy youtube.com it's not possible)\r\n *<\/pre>\n\n\n\n\n *\n * Sample URLs are:\n *\n *\n\n\n\n<pre>\r\n * http: \/\/www.youtube.com\/embed\/IWJJBwKhvp4?wmode=opaque&amp;rel=0\r\n * http: \/\/www.youtube.com\/v\/YZEbBZ2IrXE?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1\r\n * http: \/\/www.youtube.com\/v\/J3mjFSTsKiM&amp;hl=en&amp;fs=1\r\n * http:\/\/www.youtube.com\/watch?v=cAcxHQalWOw\r\n * http:\/\/www.youtube.com\/user\/IFiDieApp?v=sdzCELofGgE&#038;feature=pyv\r\n *<\/pre>\n\n\n\n\n *\/\n\nEvernote.YoutubeElementSerializer = function YoutubeElementSerializer( doc, node, nodeStyle ) {\n    this.initialize( doc, node, nodeStyle );\n};\n\nEvernote.inherit( Evernote.YoutubeElementSerializer, Evernote.AbstractElementSerializer, true );\n\nEvernote.YoutubeElementSerializer.WATCH_URL_REGEX = \/^https?:\\\/\\\/www\\.youtube\\.com\\\/watch\\?.*v=([^&#038;]+)\/i;\nEvernote.YoutubeElementSerializer.USER_CHANNEL_URL_REGEX = \/^https?:\\\/\\\/www\\.youtube\\.com\\\/user\\\/([a-zA-Z0-9]+)\\?v=([^&#038;]+)\/i;\nEvernote.YoutubeElementSerializer.EMBED_URL_REGEX = \/^https?:\\\/\\\/www\\.youtube\\.com\\\/embed\\\/([^\\\/\\?&#038;]+)\/i;\nEvernote.YoutubeElementSerializer.VIDEO_URL_REGEX = \/^https?:\\\/\\\/www\\.youtube\\.com\\\/v\\\/([^\\\/\\?&#038;]+)\/i;\nEvernote.YoutubeElementSerializer.POSSIBLE_CONTAINER_NODES = [ \"OBJECT\" ];\nEvernote.YoutubeElementSerializer.VIDEO_NODES = [ \"EMBED\", \"IFRAME\" ];\nEvernote.YoutubeElementSerializer.WATCH_URL = \"http:\/\/www.youtube.com\/watch?v=$videoId$\";\nEvernote.YoutubeElementSerializer.USER_CHANNEL_URL = \"http:\/\/www.youtube.com\/user\/$userId$?v=$videoId$\";\nEvernote.YoutubeElementSerializer.DEFAULT_THUMB_URL = \"https:\/\/i2.ytimg.com\/vi\/$videoId$\/default.jpg\";\nEvernote.YoutubeElementSerializer.HQ_THUMB_URL = \"https:\/\/i2.ytimg.com\/vi\/$videoId$\/hqdefault.jpg\";\nEvernote.YoutubeElementSerializer.DEFAULT_THUMB_WIDTH = 120;\nEvernote.YoutubeElementSerializer.DEFAULT_THUMB_HEIGHT = 90;\n\nEvernote.YoutubeElementSerializer.isResponsibleFor = function( node ) {\n    var params = this.extractVideoParamsFromNode( node );\n    return (params) ? true : false;\n};\n\nEvernote.YoutubeElementSerializer.extractVideoParamsFromNode = function( node ) {\n    Evernote.Logger.debug( \"YoutubeElementSerializer.extractVideoIdFromNode()\" );\n    try {\n        if ( node &#038;&#038; node.nodeType == Evernote.Node.ELEMENT_NODE ) {\n            var view = window;\n            try {\n                view = node.ownerDocument.defaultView;\n            }\n            catch ( e ) {\n            }\n\n            var matches = null;\n            if ( view &#038;&#038; (node.nodeName.toLowerCase() == \"embed\" || node.nodeName.toLowerCase() == \"object\") &#038;&#038; view.location ) {\n                if ( (matches = view.location.href.match( this.WATCH_URL_REGEX )) &#038;&#038; matches[ 1 ] ) {\n                    return matches[ 1 ];\n                }\n                else if ( (matches = view.location.href.match( this.USER_CHANNEL_URL_REGEX )) &#038;&#038; matches[ 1 ] &#038;&#038; matches[ 2 ] ) {\n                    return [ matches[ 1 ], matches[ 2 ] ];\n                }\n            }\n            else {\n                var videoNode = this.findVideoNode( node );\n                if ( videoNode ) {\n                    var src = videoNode.getAttribute( \"src\" );\n                    if ( src &#038;&#038; (matches = src.match( this.EMBED_URL_REGEX )) &#038;&#038; matches[ 1 ] ) {\n                        return matches[ 1 ];\n                    }\n                    else if ( src &#038;&#038; (matches = src.match( this.VIDEO_URL_REGEX )) &#038;&#038; matches[ 1 ] ) {\n                        return matches[ 1 ];\n                    }\n                }\n            }\n        }\n    } catch(e) {\n        Evernote.Logger.error(\"failed to YoutubeElementSerializer.extractVideoParamsFromNode due to error \" + e);\n    }\n\n    return null;\n};\n\nEvernote.YoutubeElementSerializer.findVideoNode = function( node ) {\n    Evernote.Logger.debug( \"YoutubeElementSerializer.findVideoNode()\" );\n\n    if ( node &#038;&#038; node.nodeType == Evernote.Node.ELEMENT_NODE ) {\n        if ( Evernote.ArrayExtension.indexOf(this.VIDEO_NODES,  node.nodeName.toUpperCase() ) >= 0 ) {\n            return node;\n        }\n        else if ( Evernote.ArrayExtension.indexOf(this.POSSIBLE_CONTAINER_NODES, node.nodeName.toUpperCase() ) >= 0 ) {\n            try {\n                var it = node.ownerDocument.createNodeIterator( node, NodeFilter.SHOW_ELEMENT, null, false );\n                var next = null;\n\n                while ( next = it.nextNode() ) {\n                    if ( Evernote.ArrayExtension.indexOf(this.VIDEO_NODES, next.nodeName.toUpperCase() ) >= 0 ) {\n                        return next;\n                    }\n                }\n            } catch(e) {\n                \/\/We ignore exception here, because if node iterator is not supported, than we could skip old pages (not Youtube).\n                return null;\n            }\n        }\n    }\n\n    return null;\n};\n\nEvernote.YoutubeElementSerializer.prototype._imageUrl = \"\";\n\nEvernote.YoutubeElementSerializer.prototype.serialize = function( \/*docBase*\/ ) {\n    Evernote.Logger.debug( \"YoutubeElementSerializer.serialize()\" );\n\n    try {\n        var userId = null;\n        var videoId = null;\n        var params = this.constructor.extractVideoParamsFromNode( this._node );\n        if ( params instanceof Array ) {\n            userId = params[ 0 ];\n            videoId = params[ 1 ];\n        }\n        else if ( typeof params == \"string\" ) {\n            videoId = params;\n        }\n\n        if ( videoId ) {\n            var thumbUrl = null;\n            var w = 0;\n            var h = 0;\n\n            if ( this._nodeStyle ) {\n\n                var view = window;\n                try {\n                    view = this._node.ownerDocument.defaultView;\n                }\n                catch ( e ) {\n                }\n\n                var computedStyles = Evernote.ElementExtension.getComputedStyle( this._node, null, view );\n\n                w = parseInt( Evernote.StyleElementExtension.getPropertyValue(computedStyles, \"width\" ) );\n                w = (isNaN( w )) ? 0 : w;\n\n                h = parseInt( Evernote.StyleElementExtension.getPropertyValue(computedStyles, \"height\" ) );\n                h = (isNaN( h )) ? 0 : h;\n\n                if ( w < this.constructor.DEFAULT_THUMB_WIDTH || h < this.constructor.DEFAULT_THUMB_HEIGHT ) {\n                    thumbUrl = this.getDefaultThumbnailUrl( videoId );\n                }\n                else {\n                    thumbUrl = this.getHQThumbnailUrl( videoId );\n                }\n            }\n            else {\n                thumbUrl = this.getDefaultThumbnailUrl( videoId );\n            }\n\n            if ( thumbUrl ) {\n                var styleStr = (this._nodeStyle instanceof Evernote.ClipStyle) ? (\"style=\\\"\" + this._nodeStyle.toString() + \"\\\"\") : \"\";\n                var attrs = this._node.attributes;\n                var attrStr = \"\";\n\n                for ( var i = 0; i < attrs.length; ++i ) {\n                    var attr = attrs[ i ];\n                    if(Evernote.ClipRules.KEEP_NODE_ATTRIBUTES[\"a\"][attr.name]) {\n                        attrStr += attr.name;\n                        if ( attr.value ) {\n                            attrStr += \"=\" + attr.value;\n                        }\n                        attrStr += \" \";\n                    }\n                }\n\n                var href = ( userId ) ? this.getUserChannelUrl( userId, videoId ) : this.getWatchUrl( videoId );\n                var imgAttrStr = \"\";\n\n                if ( w &#038;&#038; h ) {\n                    var k = w \/ h;\n                    \/\/ scale by height\n                    if ( k > this.constructor.DEFAULT_THUMB_WIDTH \/ this.constructor.DEFAULT_THUMB_HEIGHT ) {\n                        imgAttrStr += \"height=\\\"\" + h + \"\\\"\";\n                    }\n                    else { \/\/ scale by width\n                        imgAttrStr += \"width=\\\"\" + w + \"\\\"\";\n                    }\n                }\n\n                this._imageUrl = thumbUrl;\n                return \"<a \" + styleStr + \" \" + attrStr + \" href=\\\"\" + href + \"\\\"><img src=\\\"\" + thumbUrl + \"\\\" \" + imgAttrStr + \"\/><\/a>\";\n            }\n        }\n    }\n    catch ( e ) {\n        Evernote.Logger.error( \"YoutubeElementSerializer.serialize() failed: error = \" + e );\n    }\n\n    return \"\";\n};\n\nEvernote.YoutubeElementSerializer.prototype.getDefaultThumbnailUrl = function( videoId ) {\n    return this.constructor.DEFAULT_THUMB_URL.replace( \/\\$videoId\\$\/, videoId );\n};\n\nEvernote.YoutubeElementSerializer.prototype.getHQThumbnailUrl = function( videoId ) {\n    return this.constructor.HQ_THUMB_URL.replace( \/\\$videoId\\$\/, videoId );\n};\n\nEvernote.YoutubeElementSerializer.prototype.getWatchUrl = function( videoId ) {\n    return this.constructor.WATCH_URL.replace( \/\\$videoId\\$\/, videoId );\n};\n\nEvernote.YoutubeElementSerializer.prototype.getUserChannelUrl = function( userId, videoId ) {\n    return this.constructor.USER_CHANNEL_URL.replace( \/\\$userId\\$\/, userId ).replace( \/\\$videoId\\$\/, videoId );\n};\n\nEvernote.YoutubeElementSerializer.prototype.getImageUrl = function() {\n    return this._imageUrl;\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.IEStylePropertiesMapping = {\n\n    _mapping : {\n        \"background-attachment\" : \"backgroundAttachment\",\n        \"background-color\" : \"backgroundColor\",\n        \"background-image\" : \"backgroundImage\",\n        \"background-repeat\" : \"backgroundRepeat\",\n        \"background-position-x\" : \"backgroundPositionX\",\n        \"background-position-y\" : \"backgroundPositionY\",\n\n        \"border-bottom-color\" : \"borderBottomColor\",\n        \"border-bottom-style\" : \"borderBottomStyle\",\n        \"border-bottom-width\" : \"borderBottomWidth\",\n\n        \"border-left-color\" : \"borderLeftColor\",\n        \"border-left-style\" : \"borderLeftStyle\",\n        \"border-left-width\" : \"borderLeftWidth\",\n\n        \"border-right-color\" : \"borderRightColor\",\n        \"border-right-style\" : \"borderRightStyle\",\n        \"border-right-width\" : \"borderRightWidth\",\n\n        \"border-top-color\" : \"borderTopColor\",\n        \"border-top-style\" : \"borderTopStyle\",\n        \"border-top-width\" : \"borderTopWidth\",\n        \"border-collapse\" : \"borderCollapse\",\n\n        \"font-family\" : \"fontFamily\",\n        \"font-size\" : \"fontSize\",\n        \"font-style\" : \"fontStyle\",\n        \"font-weight\" : \"fontWeight\",\n\n        \"float\" : \"styleFloat\",\n\n        \"ime-mode\" : \"imeMode\",\n\n        \"letter-spacing\" : \"letterSpacing\",\n\n        \"line-height\" : \"lineHeight\",\n\n        \"list-style-image\" : \"listStyleImage\",\n        \"list-style-position\" : \"listStylePosition\",\n        \"list-style-type\" : \"listStyleType\",\n\n        \"margin-bottom\" : \"marginBottom\",\n        \"margin-left\" : \"marginLeft\",\n        \"margin-right\" : \"marginRight\",\n        \"margin-top\" : \"marginTop\",\n\n        \"max-height\" : \"maxHeight\",\n        \"max-width\" : \"maxWidth\",\n        \"min-height\" : \"minHeight\",\n        \"min-width\" : \"minWidth\",\n\n        \"overflow-x\" : \"overflowX\",\n        \"overflow-y\" : \"overflowY\",\n\n        \"padding-bottom\" : \"paddingBottom\",\n        \"padding-left\" : \"paddingLeft\",\n        \"padding-right\" : \"paddingRight\",\n        \"padding-top\" : \"paddingTop\",\n\n        \"page-break-after\" : \"pageBreakAfter\",\n        \"page-break-before\" : \"pageBreakBefore\",\n\n        \"table-layout\" : \"tableLayout\",\n\n        \"text-align\" : \"textAlign\",\n        \"text-decoration\" : \"textDecoration\",\n        \"text-indent\" : \"textIndent\",\n        \"text-overflow\" : \"textOverflow\",\n        \"text-transform\" : \"textTransform\",\n\n        \"vertical-align\" : \"verticalAlign\",\n        \"white-space\" : \"whiteSpace\",\n        \"word-spacing\" : \"wordSpacing\",\n        \"word-wrap\" : \"wordWrap\",\n        \"z-index\" : \"zIndex\"\n    },\n\n    getPropertyNameFor: function(styleName) {\n        return [styleName, this._mapping[styleName]];\n    },\n    getPropertiesList: function() {\n        return this._mapping;\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.StylesReplacementRegistry = {\n\n    registry: [],\n\n    getImplementationFor: function(name) {\n        if(name) {\n            return this.registry[name];\n        }\n        return null;\n    },\n\n    register: function(name, impl) {\n        this.registry[name] = impl;\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.FontSizeReplacement = {\n\n    SUPPORTED_FONT_SIZES: [\"em\", \"%\", \"pt\", \"px\"],\n\n    getValue: function(val) {\n        if(typeof val != \"string\")\n            return val;\n        if(this.isCalculationRequired(val)) {\n            return Evernote.Utils.getFontSizeInPixels(val) + \"px\";\n        } else {\n            \/\/Do not set browser dependant CSS since it does not supported by Evernote Chromium Viewer.\n            return null;\n        }\n    },\n\n    isCalculationRequired: function(val) {\n        for(var i = 0; i < this.SUPPORTED_FONT_SIZES.length; i++) {\n            if(val.indexOf(this.SUPPORTED_FONT_SIZES[i]) != -1) {\n                return true;\n            }\n        }\n        return false;\n    }\n};\n\nEvernote.StylesReplacementRegistry.register(\"font-size\", Evernote.FontSizeReplacement);\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ClipperElementsIdentifiers = {\n\n    _clipperElementsIds : [Constants.CLIP_DIALOG_ID, Constants.OPTIONS_DIALOG_ID, Constants.ATTR_DIALOG_ID, Constants.CLIP_DIALOG_NEW_ID, Constants.POST_CLIP_DIALOG_ID],\n\n    match: function(node) {\n        if(node &#038;&#038; node.id) {\n            var position = Evernote.ArrayExtension.indexOf(this._clipperElementsIds, node.id);\n            if(position) {\n                return position != -1;\n            }\n        }\n        return false;\n    }\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.NotebooksLoader = {\n\n    notebooks: [],\n\n    \/\/ TODO: add cache;\n\n    getNotebookByUid: function(uid) {\n        Evernote.ResponseReceiver.subscribe(this);\n        Evernote.Addin.getNotebooks(document);\n        for(var i = 0; i < this.notebooks.length; i++) {\n            if(this.notebooks[i].uid == uid) {\n                return this.notebooks[i];\n            }\n        }\n        return null;\n    },\n\n    onDataReceived: function(response) {\n        if(response.type) {\n            if(response.type == \"notebooks\") {\n                this.notebooks = this.notebooks.concat(response.data);\n            }\n        }\n    }\n};\n\nEvernote.NotebooksPopupLoader = function( subscriber , doc ) {\n    this.subscriber = subscriber;\n    this.doc = doc;\n    this.cache = [];\n};\n\nEvernote.NotebooksPopupLoader.prototype.getNotebooksAsync = function( onSuccess ) {\n    var self = this;\n    var countNotebooksResponse = 0;\n\n    Evernote.Addin.getNotebooksAsync(function(response, args)\n    {\n        if (Evernote.NotebookResponseParser.canParse(response))\n        {\n            var res = Evernote.NotebookResponseParser.parse(response);\n            countNotebooksResponse++;\n            self.subscriber.updateNotebooks.call(self.subscriber, res.data);\n\n            if (countNotebooksResponse == 3)\n            {\n                onSuccess();\n            }\n        }\n    });\n\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.Notebook = function(type, name, uid, stack, author, hidden, typeText) {\n    this.type = type;\n    this.name = name;\n    this.uid = uid;\n    this.stack = stack;\n    this.author = author;\n    this.hidden = hidden;\n    this.typeText = typeText;\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.Tag = function(name, uid) {\n    this.name = name;\n    this.uid = uid;\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.NotebookTypes = {\n    PERSONAL: 1,\n    PERSONAL_TEXT: 'pers',\n    BUSINESS: 2,\n    BUSINESS_TEXT: 'biz',\n    LINKED: 3,\n    LINKED_TEXT: 'linked'\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.ErrorCodes = {\n    AUTHENTICATION_ERROR: \"LoginFailure\",\n    CLIP_ERROR: \"NoteImportFailure\",\n    CONNECTION_FAILED: \"ConnectionAttemptFailed\"\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\nEvernote.AuthenticatedException = function(msg){\n    this.msg = msg;\n    this.code = Evernote.ErrorCodes.AUTHENTICATION_ERROR;\n};\n\/\/ ]]><\/script><script defer=\"defer\" type=\"text\/javascript\" charset=\"ANSI\">\/\/ <![CDATA[\ntry {\n    Evernote.Addin.init(EvernoteExternal.Addin);\n    Evernote.Addin.resetAuthenticatedState();\n    Evernote.FS.init(EvernoteExternal.Addin);\n    Evernote.Logger = Evernote.LoggerConfigurator.getLogger();\n    if(!Evernote.JQuery)\n        Evernote.JQueryLoader.initJQuery();\n    window.jQueryForClearlyComponent = Evernote.JQuery;\n    initClearly(window);\n\n    \/\/ todo: create bulletproof function for popup close before context-clipping.\n    if (Evernote.evernotePopup) Evernote.evernotePopup.hide();\n    if (Evernote.SkitchController) Evernote.SkitchController.clearSkitch();\n\n    Evernote.Logger.debug(\"Init EnClipper\");\n    Evernote.EnClipper.init();\n    Evernote.Logger.debug(\"EnClipper initialized\");\n    Evernote.pageInfo = new PageInfo();\n    if (!Evernote.contentPreviewer) Evernote.contentPreviewer = new ContentPreview();\n    Evernote.Options.load();\n\n    Evernote.evernotePostClipPopup = new Evernote.PostClipPopup( document );\n\n    if (EvernoteExternal.Addin.isServerAvailable()) {\n        Evernote.Clipper.clipWithOptions(EvernoteExternal.clipOptions);\n    }\n} catch(e) {\n    throw e;\n}\n\/\/ ]]><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Po\u010det\u00ed a zrozen\u00ed Antikrista dle sv. Hildegardy z Bingen Libor Halik 19.2.2013 12:56 Svat\u00e1 Hildegarda z Bingenu (1098-1179) &#8222;Po\u010det\u00ed a zrozen\u00ed Antikrista&#8220; (Hildegardina hlavn\u00ed d\u00edla se skl\u00e1daj\u00ed ze zjeven\u00ed. Ona sama p\u00ed\u0161e, \u017ee tyto vize p\u0159ijala a napsala, to znamen\u00e1&hellip;<\/p>\n<p class=\"more-link-p\"><a class=\"more-link\" href=\"https:\/\/www.nazor.org\/?page_id=256\">Read more &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":254,"menu_order":2,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-256","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.nazor.org\/index.php?rest_route=\/wp\/v2\/pages\/256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nazor.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.nazor.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.nazor.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nazor.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=256"}],"version-history":[{"count":5,"href":"https:\/\/www.nazor.org\/index.php?rest_route=\/wp\/v2\/pages\/256\/revisions"}],"predecessor-version":[{"id":294,"href":"https:\/\/www.nazor.org\/index.php?rest_route=\/wp\/v2\/pages\/256\/revisions\/294"}],"up":[{"embeddable":true,"href":"https:\/\/www.nazor.org\/index.php?rest_route=\/wp\/v2\/pages\/254"}],"wp:attachment":[{"href":"https:\/\/www.nazor.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}