ueditor.all.min.js 593 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 8975 8976 8977 8978 8979 8980 8981 8982 8983 8984 8985 8986 8987 8988 8989 8990 8991 8992 8993 8994 8995 8996 8997 8998 8999 9000 9001 9002 9003 9004 9005 9006 9007 9008 9009 9010 9011 9012 9013 9014 9015 9016 9017 9018 9019 9020 9021 9022 9023 9024 9025 9026 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 9050 9051 9052 9053 9054 9055 9056 9057 9058 9059 9060 9061 9062 9063 9064 9065 9066 9067 9068 9069 9070 9071 9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 9093 9094 9095 9096 9097 9098 9099 9100 9101 9102 9103 9104 9105 9106 9107 9108 9109 9110 9111 9112 9113 9114 9115 9116 9117 9118 9119 9120 9121 9122 9123 9124 9125 9126 9127 9128 9129 9130 9131 9132 9133 9134 9135 9136 9137 9138 9139 9140 9141 9142 9143 9144 9145 9146 9147 9148 9149 9150 9151 9152 9153 9154 9155 9156 9157 9158 9159 9160 9161 9162 9163 9164 9165 9166 9167 9168 9169 9170 9171 9172 9173 9174 9175 9176 9177 9178 9179 9180 9181 9182 9183 9184 9185 9186 9187 9188 9189 9190 9191 9192 9193 9194 9195 9196 9197 9198 9199 9200 9201 9202 9203 9204 9205 9206 9207 9208 9209 9210 9211 9212 9213 9214 9215 9216 9217 9218 9219 9220 9221 9222 9223 9224 9225 9226 9227 9228 9229 9230 9231 9232 9233 9234 9235 9236 9237 9238 9239 9240 9241 9242 9243 9244 9245 9246 9247 9248 9249 9250 9251 9252 9253 9254 9255 9256 9257 9258 9259 9260 9261 9262 9263 9264 9265 9266 9267 9268 9269 9270 9271 9272 9273 9274 9275 9276 9277 9278 9279 9280 9281 9282 9283 9284 9285 9286 9287 9288 9289 9290 9291 9292 9293 9294 9295 9296 9297 9298 9299 9300 9301 9302 9303 9304 9305 9306 9307 9308 9309 9310 9311 9312 9313 9314 9315 9316 9317 9318 9319 9320 9321 9322 9323 9324 9325 9326 9327 9328 9329 9330 9331 9332 9333 9334 9335 9336 9337 9338 9339 9340 9341 9342 9343 9344 9345 9346 9347 9348 9349 9350 9351 9352 9353 9354 9355 9356 9357 9358 9359 9360 9361 9362 9363 9364 9365 9366 9367 9368 9369 9370 9371 9372 9373 9374 9375 9376 9377 9378 9379 9380 9381 9382 9383 9384 9385 9386 9387 9388 9389 9390 9391 9392 9393 9394 9395 9396 9397 9398 9399 9400 9401 9402 9403 9404 9405 9406 9407 9408 9409 9410 9411 9412 9413 9414 9415 9416 9417 9418 9419 9420 9421 9422 9423 9424 9425 9426 9427 9428 9429 9430 9431 9432 9433 9434 9435 9436 9437 9438 9439 9440 9441 9442 9443 9444 9445 9446 9447 9448 9449 9450 9451 9452 9453 9454 9455 9456 9457 9458 9459 9460 9461 9462 9463 9464 9465 9466 9467 9468 9469 9470 9471 9472 9473 9474 9475 9476 9477 9478 9479 9480 9481 9482 9483 9484 9485 9486 9487 9488 9489 9490 9491 9492 9493 9494 9495 9496 9497 9498 9499 9500 9501 9502 9503 9504 9505 9506 9507 9508 9509 9510 9511 9512 9513 9514 9515 9516 9517 9518 9519 9520 9521 9522 9523 9524 9525 9526 9527 9528 9529 9530 9531 9532 9533 9534 9535 9536 9537 9538 9539 9540 9541 9542 9543 9544 9545 9546 9547 9548 9549 9550 9551 9552 9553 9554 9555 9556 9557 9558 9559 9560 9561 9562 9563 9564 9565 9566 9567 9568 9569 9570 9571 9572 9573 9574 9575 9576 9577 9578 9579 9580 9581 9582 9583 9584 9585 9586 9587 9588 9589 9590 9591 9592 9593 9594 9595 9596 9597 9598 9599 9600 9601 9602 9603 9604 9605 9606 9607 9608 9609 9610 9611 9612 9613 9614 9615 9616 9617 9618 9619 9620 9621 9622 9623 9624 9625 9626 9627 9628 9629 9630 9631 9632 9633 9634 9635 9636 9637 9638 9639 9640 9641 9642 9643 9644 9645 9646 9647 9648 9649 9650 9651 9652 9653 9654 9655 9656 9657 9658 9659 9660 9661 9662 9663 9664 9665 9666 9667 9668 9669 9670 9671 9672 9673 9674 9675 9676 9677 9678 9679 9680 9681 9682 9683 9684 9685 9686 9687 9688 9689 9690 9691 9692 9693 9694 9695 9696 9697 9698 9699 9700 9701 9702 9703 9704 9705 9706 9707 9708 9709 9710 9711 9712 9713 9714 9715 9716 9717 9718 9719 9720 9721 9722 9723 9724 9725 9726 9727 9728 9729 9730 9731 9732 9733 9734 9735 9736 9737 9738 9739 9740 9741 9742 9743 9744 9745 9746 9747 9748 9749 9750 9751 9752 9753 9754 9755 9756 9757 9758 9759 9760 9761 9762 9763 9764 9765 9766 9767 9768 9769 9770 9771 9772 9773 9774 9775 9776 9777 9778 9779 9780 9781 9782 9783 9784 9785 9786 9787 9788 9789 9790 9791 9792 9793 9794 9795 9796 9797 9798 9799 9800 9801 9802 9803 9804 9805 9806 9807 9808 9809 9810 9811 9812 9813 9814 9815 9816 9817 9818 9819 9820 9821 9822 9823 9824 9825 9826 9827 9828 9829 9830 9831 9832 9833 9834 9835 9836 9837 9838 9839 9840 9841 9842 9843 9844 9845 9846 9847 9848 9849 9850 9851 9852 9853 9854 9855 9856 9857 9858 9859 9860 9861 9862 9863 9864 9865 9866 9867 9868 9869 9870 9871 9872 9873 9874 9875 9876 9877 9878 9879 9880 9881 9882 9883 9884 9885 9886 9887 9888 9889 9890 9891 9892 9893 9894 9895 9896 9897 9898 9899 9900 9901 9902 9903 9904 9905 9906 9907 9908 9909 9910 9911 9912 9913 9914 9915 9916 9917 9918 9919 9920 9921 9922 9923 9924 9925 9926 9927 9928 9929 9930 9931 9932 9933 9934 9935 9936 9937 9938 9939 9940 9941 9942 9943 9944 9945 9946 9947 9948 9949 9950 9951 9952 9953 9954 9955 9956 9957 9958 9959 9960 9961 9962 9963 9964 9965 9966 9967 9968 9969 9970 9971 9972 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999 10000 10001 10002 10003 10004 10005 10006 10007 10008 10009 10010 10011 10012 10013 10014 10015 10016 10017 10018 10019 10020 10021 10022 10023 10024 10025 10026 10027 10028 10029 10030 10031 10032 10033 10034 10035 10036 10037 10038 10039 10040 10041 10042 10043 10044 10045 10046 10047 10048 10049 10050 10051 10052 10053 10054 10055 10056 10057 10058 10059 10060 10061 10062 10063 10064 10065 10066 10067 10068 10069 10070 10071 10072 10073 10074 10075 10076 10077 10078 10079 10080 10081 10082 10083 10084 10085 10086 10087 10088 10089 10090 10091 10092 10093 10094 10095 10096 10097 10098 10099 10100 10101 10102 10103 10104 10105 10106 10107 10108 10109 10110 10111 10112 10113 10114 10115 10116 10117 10118 10119 10120 10121 10122 10123 10124 10125 10126 10127 10128 10129 10130 10131 10132 10133 10134 10135 10136 10137 10138 10139 10140 10141 10142 10143 10144 10145 10146 10147 10148 10149 10150 10151 10152 10153 10154 10155 10156 10157 10158 10159 10160 10161 10162 10163 10164 10165 10166 10167 10168 10169 10170 10171 10172 10173 10174 10175 10176 10177 10178 10179 10180 10181 10182 10183 10184 10185 10186 10187 10188 10189 10190 10191 10192 10193 10194 10195 10196 10197 10198 10199 10200 10201 10202 10203 10204 10205 10206 10207 10208 10209 10210 10211 10212 10213 10214 10215 10216 10217 10218 10219 10220 10221 10222 10223 10224 10225 10226 10227 10228 10229 10230 10231 10232 10233 10234 10235 10236 10237 10238 10239 10240 10241 10242 10243 10244 10245 10246 10247 10248 10249 10250 10251 10252 10253 10254 10255 10256 10257 10258 10259 10260 10261 10262 10263 10264 10265 10266 10267 10268 10269 10270 10271 10272 10273 10274 10275 10276 10277 10278 10279 10280 10281 10282 10283 10284 10285 10286 10287 10288 10289 10290 10291 10292 10293 10294 10295 10296 10297 10298 10299 10300 10301 10302 10303 10304 10305 10306 10307 10308 10309 10310 10311 10312 10313 10314 10315 10316 10317
/*!
 * UEditor
 * version: ueditor
 * build: Thu Jun 16 2016 12:38:04 GMT+0800 (CST)
 */

!function () {
    function getListener(a, b, c) {
        var d;
        return b = b.toLowerCase(), (d = a.__allListeners || c && (a.__allListeners = {})) && (d[b] || c && (d[b] = []))
    }

    function getDomNode(a, b, c, d, e, f) {
        var g, h = d && a[b];
        for (!h && (h = a[c]); !h && (g = (g || a).parentNode);) {
            if ("BODY" == g.tagName || f && !f(g))return null;
            h = g[c]
        }
        return h && e && !e(h) ? getDomNode(h, b, c, !1, e) : h
    }

    UEDITOR_CONFIG = window.UEDITOR_CONFIG || {};
    var baidu = window.baidu || {};
    window.baidu = baidu, window.UE = baidu.editor = window.UE || {}, UE.plugins = {}, UE.commands = {}, UE.instants = {}, UE.I18N = {}, UE._customizeUI = {}, UE.version = "1.4.3";
    var dom = UE.dom = {}, browser = UE.browser = function () {
        var a = navigator.userAgent.toLowerCase(), b = window.opera, c = {
            ie: /(msie\s|trident.*rv:)([\w.]+)/.test(a),
            opera: !!b && b.version,
            webkit: a.indexOf(" applewebkit/") > -1,
            mac: a.indexOf("macintosh") > -1,
            quirks: "BackCompat" == document.compatMode
        };
        c.gecko = "Gecko" == navigator.product && !c.webkit && !c.opera && !c.ie;
        var d = 0;
        if (c.ie) {
            var e = a.match(/(?:msie\s([\w.]+))/), f = a.match(/(?:trident.*rv:([\w.]+))/);
            d = e && f && e[1] && f[1] ? Math.max(1 * e[1], 1 * f[1]) : e && e[1] ? 1 * e[1] : f && f[1] ? 1 * f[1] : 0, c.ie11Compat = 11 == document.documentMode, c.ie9Compat = 9 == document.documentMode, c.ie8 = !!document.documentMode, c.ie8Compat = 8 == document.documentMode, c.ie7Compat = 7 == d && !document.documentMode || 7 == document.documentMode, c.ie6Compat = 7 > d || c.quirks, c.ie9above = d > 8, c.ie9below = 9 > d, c.ie11above = d > 10, c.ie11below = 11 > d
        }
        if (c.gecko) {
            var g = a.match(/rv:([\d\.]+)/);
            g && (g = g[1].split("."), d = 1e4 * g[0] + 100 * (g[1] || 0) + 1 * (g[2] || 0))
        }
        return /chrome\/(\d+\.\d)/i.test(a) && (c.chrome = +RegExp.$1), /(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i.test(a) && !/chrome/i.test(a) && (c.safari = +(RegExp.$1 || RegExp.$2)), c.opera && (d = parseFloat(b.version())), c.webkit && (d = parseFloat(a.match(/ applewebkit\/(\d+)/)[1])), c.version = d, c.isCompatible = !c.mobile && (c.ie && d >= 6 || c.gecko && d >= 10801 || c.opera && d >= 9.5 || c.air && d >= 1 || c.webkit && d >= 522 || !1), c
    }(), ie = browser.ie, webkit = browser.webkit, gecko = browser.gecko, opera = browser.opera, utils = UE.utils = {
        each: function (a, b, c) {
            if (null != a)if (a.length === +a.length) {
                for (var d = 0, e = a.length; e > d; d++)if (b.call(c, a[d], d, a) === !1)return !1
            } else for (var f in a)if (a.hasOwnProperty(f) && b.call(c, a[f], f, a) === !1)return !1
        }, makeInstance: function (a) {
            var b = new Function;
            return b.prototype = a, a = new b, b.prototype = null, a
        }, extend: function (a, b, c) {
            if (b)for (var d in b)c && a.hasOwnProperty(d) || (a[d] = b[d]);
            return a
        }, extend2: function (a) {
            for (var b = arguments, c = 1; c < b.length; c++) {
                var d = b[c];
                for (var e in d)a.hasOwnProperty(e) || (a[e] = d[e])
            }
            return a
        }, inherits: function (a, b) {
            var c = a.prototype, d = utils.makeInstance(b.prototype);
            return utils.extend(d, c, !0), a.prototype = d, d.constructor = a
        }, bind: function (a, b) {
            return function () {
                return a.apply(b, arguments)
            }
        }, defer: function (a, b, c) {
            var d;
            return function () {
                c && clearTimeout(d), d = setTimeout(a, b)
            }
        }, indexOf: function (a, b, c) {
            var d = -1;
            return c = this.isNumber(c) ? c : 0, this.each(a, function (a, e) {
                return e >= c && a === b ? (d = e, !1) : void 0
            }), d
        }, removeItem: function (a, b) {
            for (var c = 0, d = a.length; d > c; c++)a[c] === b && (a.splice(c, 1), c--)
        }, trim: function (a) {
            return a.replace(/(^[ \t\n\r]+)|([ \t\n\r]+$)/g, "")
        }, listToMap: function (a) {
            if (!a)return {};
            a = utils.isArray(a) ? a : a.split(",");
            for (var b, c = 0, d = {}; b = a[c++];)d[b.toUpperCase()] = d[b] = 1;
            return d
        }, unhtml: function (a, b) {
            return a ? a.replace(b || /[&<">'](?:(amp|lt|quot|gt|#39|nbsp|#\d+);)?/g, function (a, b) {
                return b ? a : {"<": "&lt;", "&": "&amp;", '"': "&quot;", ">": "&gt;", "'": "&#39;"}[a]
            }) : ""
        }, unhtmlForUrl: function (a, b) {
            return a ? a.replace(b || /[<">']/g, function (a) {
                return {"<": "&lt;", "&": "&amp;", '"': "&quot;", ">": "&gt;", "'": "&#39;"}[a]
            }) : ""
        }, html: function (a) {
            return a ? a.replace(/&((g|l|quo)t|amp|#39|nbsp);/g, function (a) {
                return {"&lt;": "<", "&amp;": "&", "&quot;": '"', "&gt;": ">", "&#39;": "'", "&nbsp;": " "}[a]
            }) : ""
        }, cssStyleToDomStyle: function () {
            var a = document.createElement("div").style, b = {"float": void 0 != a.cssFloat ? "cssFloat" : void 0 != a.styleFloat ? "styleFloat" : "float"};
            return function (a) {
                return b[a] || (b[a] = a.toLowerCase().replace(/-./g, function (a) {
                        return a.charAt(1).toUpperCase()
                    }))
            }
        }(), loadFile: function () {
            function a(a, c) {
                try {
                    for (var d, e = 0; d = b[e++];)if (d.doc === a && d.url == (c.src || c.href))return d
                } catch (f) {
                    return null
                }
            }

            var b = [];
            return function (c, d, e) {
                var f = a(c, d);
                if (f)return void(f.ready ? e && e() : f.funs.push(e));
                if (b.push({doc: c, url: d.src || d.href, funs: [e]}), !c.body) {
                    var g = [];
                    for (var h in d)"tag" != h && g.push(h + '="' + d[h] + '"');
                    return void c.write("<" + d.tag + " " + g.join(" ") + " ></" + d.tag + ">")
                }
                if (!d.id || !c.getElementById(d.id)) {
                    var i = c.createElement(d.tag);
                    delete d.tag;
                    for (var h in d)i.setAttribute(h, d[h]);
                    i.onload = i.onreadystatechange = function () {
                        if (!this.readyState || /loaded|complete/.test(this.readyState)) {
                            if (f = a(c, d), f.funs.length > 0) {
                                f.ready = 1;
                                for (var b; b = f.funs.pop();)b()
                            }
                            i.onload = i.onreadystatechange = null
                        }
                    }, i.onerror = function () {
                        throw Error("The load " + (d.href || d.src) + " fails,check the url settings of file ueditor.config.js ")
                    }, c.getElementsByTagName("head")[0].appendChild(i)
                }
            }
        }(), isEmptyObject: function (a) {
            if (null == a)return !0;
            if (this.isArray(a) || this.isString(a))return 0 === a.length;
            for (var b in a)if (a.hasOwnProperty(b))return !1;
            return !0
        }, fixColor: function (a, b) {
            if (/color/i.test(a) && /rgba?/.test(b)) {
                var c = b.split(",");
                if (c.length > 3)return "";
                b = "#";
                for (var d, e = 0; d = c[e++];)d = parseInt(d.replace(/[^\d]/gi, ""), 10).toString(16), b += 1 == d.length ? "0" + d : d;
                b = b.toUpperCase()
            }
            return b
        }, optCss: function (a) {
            function b(a, b) {
                if (!a)return "";
                var c = a.top, d = a.bottom, e = a.left, f = a.right, g = "";
                if (c && e && d && f)g += ";" + b + ":" + (c == d && d == e && e == f ? c : c == d && e == f ? c + " " + e : e == f ? c + " " + e + " " + d : c + " " + f + " " + d + " " + e) + ";"; else for (var h in a)g += ";" + b + "-" + h + ":" + a[h] + ";";
                return g
            }

            var c, d;
            return a = a.replace(/(padding|margin|border)\-([^:]+):([^;]+);?/gi, function (a, b, e, f) {
                if (1 == f.split(" ").length)switch (b) {
                    case"padding":
                        return !c && (c = {}), c[e] = f, "";
                    case"margin":
                        return !d && (d = {}), d[e] = f, "";
                    case"border":
                        return "initial" == f ? "" : a
                }
                return a
            }), a += b(c, "padding") + b(d, "margin"), a.replace(/^[ \n\r\t;]*|[ \n\r\t]*$/, "").replace(/;([ \n\r\t]+)|\1;/g, ";").replace(/(&((l|g)t|quot|#39))?;{2,}/g, function (a, b) {
                return b ? b + ";;" : ";"
            })
        }, clone: function (a, b) {
            var c;
            b = b || {};
            for (var d in a)a.hasOwnProperty(d) && (c = a[d], "object" == typeof c ? (b[d] = utils.isArray(c) ? [] : {}, utils.clone(a[d], b[d])) : b[d] = c);
            return b
        }, transUnitToPx: function (a) {
            if (!/(pt|cm)/.test(a))return a;
            var b;
            switch (a.replace(/([\d.]+)(\w+)/, function (c, d, e) {
                a = d, b = e
            }), b) {
                case"cm":
                    a = 25 * parseFloat(a);
                    break;
                case"pt":
                    a = Math.round(96 * parseFloat(a) / 72)
            }
            return a + (a ? "px" : "")
        }, domReady: function () {
            function a(a) {
                a.isReady = !0;
                for (var c; c = b.pop(); c());
            }

            var b = [];
            return function (c, d) {
                d = d || window;
                var e = d.document;
                c && b.push(c), "complete" === e.readyState ? a(e) : (e.isReady && a(e), browser.ie && 11 != browser.version ? (!function () {
                    if (!e.isReady) {
                        try {
                            e.documentElement.doScroll("left")
                        } catch (b) {
                            return void setTimeout(arguments.callee, 0)
                        }
                        a(e)
                    }
                }(), d.attachEvent("onload", function () {
                    a(e)
                })) : (e.addEventListener("DOMContentLoaded", function () {
                    e.removeEventListener("DOMContentLoaded", arguments.callee, !1), a(e)
                }, !1), d.addEventListener("load", function () {
                    a(e)
                }, !1)))
            }
        }(), cssRule: browser.ie && 11 != browser.version ? function (a, b, c) {
            var d, e;
            if (void 0 === b || b && b.nodeType && 9 == b.nodeType) {
                if (c = b && b.nodeType && 9 == b.nodeType ? b : c || document, d = c.indexList || (c.indexList = {}), e = d[a], void 0 !== e)return c.styleSheets[e].cssText
            } else {
                if (c = c || document, d = c.indexList || (c.indexList = {}), e = d[a], "" === b)return void 0 !== e ? (c.styleSheets[e].cssText = "", delete d[a], !0) : !1;
                void 0 !== e ? sheetStyle = c.styleSheets[e] : (sheetStyle = c.createStyleSheet("", e = c.styleSheets.length), d[a] = e), sheetStyle.cssText = b
            }
        } : function (a, b, c) {
            var d;
            return void 0 === b || b && b.nodeType && 9 == b.nodeType ? (c = b && b.nodeType && 9 == b.nodeType ? b : c || document, d = c.getElementById(a), d ? d.innerHTML : void 0) : (c = c || document, d = c.getElementById(a), "" === b ? d ? (d.parentNode.removeChild(d), !0) : !1 : void(d ? d.innerHTML = b : (d = c.createElement("style"), d.id = a, d.innerHTML = b, c.getElementsByTagName("head")[0].appendChild(d))))
        }, sort: function (a, b) {
            b = b || function (a, b) {
                    return a.localeCompare(b)
                };
            for (var c = 0, d = a.length; d > c; c++)for (var e = c, f = a.length; f > e; e++)if (b(a[c], a[e]) > 0) {
                var g = a[c];
                a[c] = a[e], a[e] = g
            }
            return a
        }, serializeParam: function (a) {
            var b = [];
            for (var c in a)if ("method" != c && "timeout" != c && "async" != c)if ("function" != (typeof a[c]).toLowerCase() && "object" != (typeof a[c]).toLowerCase())b.push(encodeURIComponent(c) + "=" + encodeURIComponent(a[c])); else if (utils.isArray(a[c]))for (var d = 0; d < a[c].length; d++)b.push(encodeURIComponent(c) + "[]=" + encodeURIComponent(a[c][d]));
            return b.join("&")
        }, formatUrl: function (a) {
            var b = a.replace(/&&/g, "&");
            return b = b.replace(/\?&/g, "?"), b = b.replace(/&$/g, ""), b = b.replace(/&#/g, "#"), b = b.replace(/&+/g, "&")
        }, isCrossDomainUrl: function (a) {
            var b = document.createElement("a");
            return b.href = a, browser.ie && (b.href = b.href), !(b.protocol == location.protocol && b.hostname == location.hostname && (b.port == location.port || "80" == b.port && "" == location.port || "" == b.port && "80" == location.port))
        }, clearEmptyAttrs: function (a) {
            for (var b in a)"" === a[b] && delete a[b];
            return a
        }, str2json: function (a) {
            return utils.isString(a) ? window.JSON ? JSON.parse(a) : new Function("return " + utils.trim(a || ""))() : null
        }, json2str: function () {
            function a(a) {
                return /["\\\x00-\x1f]/.test(a) && (a = a.replace(/["\\\x00-\x1f]/g, function (a) {
                    var b = e[a];
                    return b ? b : (b = a.charCodeAt(), "\\u00" + Math.floor(b / 16).toString(16) + (b % 16).toString(16))
                })), '"' + a + '"'
            }

            function b(a) {
                var b, c, d, e = ["["], f = a.length;
                for (c = 0; f > c; c++)switch (d = a[c], typeof d) {
                    case"undefined":
                    case"function":
                    case"unknown":
                        break;
                    default:
                        b && e.push(","), e.push(utils.json2str(d)), b = 1
                }
                return e.push("]"), e.join("")
            }

            function c(a) {
                return 10 > a ? "0" + a : a
            }

            function d(a) {
                return '"' + a.getFullYear() + "-" + c(a.getMonth() + 1) + "-" + c(a.getDate()) + "T" + c(a.getHours()) + ":" + c(a.getMinutes()) + ":" + c(a.getSeconds()) + '"'
            }

            if (window.JSON)return JSON.stringify;
            var e = {"\b": "\\b", "	": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\"};
            return function (c) {
                switch (typeof c) {
                    case"undefined":
                        return "undefined";
                    case"number":
                        return isFinite(c) ? String(c) : "null";
                    case"string":
                        return a(c);
                    case"boolean":
                        return String(c);
                    default:
                        if (null === c)return "null";
                        if (utils.isArray(c))return b(c);
                        if (utils.isDate(c))return d(c);
                        var e, f, g = ["{"], h = utils.json2str;
                        for (var i in c)if (Object.prototype.hasOwnProperty.call(c, i))switch (f = c[i], typeof f) {
                            case"undefined":
                            case"unknown":
                            case"function":
                                break;
                            default:
                                e && g.push(","), e = 1, g.push(h(i) + ":" + h(f))
                        }
                        return g.push("}"), g.join("")
                }
            }
        }()
    };
    utils.each(["String", "Function", "Array", "Number", "RegExp", "Object", "Date"], function (a) {
        UE.utils["is" + a] = function (b) {
            return Object.prototype.toString.apply(b) == "[object " + a + "]"
        }
    });
    var EventBase = UE.EventBase = function () {
    };
    EventBase.prototype = {
        addListener: function (a, b) {
            a = utils.trim(a).split(/\s+/);
            for (var c, d = 0; c = a[d++];)getListener(this, c, !0).push(b)
        }, on: function (a, b) {
            return this.addListener(a, b)
        }, off: function (a, b) {
            return this.removeListener(a, b)
        }, trigger: function () {
            return this.fireEvent.apply(this, arguments)
        }, removeListener: function (a, b) {
            a = utils.trim(a).split(/\s+/);
            for (var c, d = 0; c = a[d++];)utils.removeItem(getListener(this, c) || [], b)
        }, fireEvent: function () {
            var a = arguments[0];
            a = utils.trim(a).split(" ");
            for (var b, c = 0; b = a[c++];) {
                var d, e, f, g = getListener(this, b);
                if (g)for (f = g.length; f--;)if (g[f]) {
                    if (e = g[f].apply(this, arguments), e === !0)return e;
                    void 0 !== e && (d = e)
                }
                (e = this["on" + b.toLowerCase()]) && (d = e.apply(this, arguments))
            }
            return d
        }
    };
    var dtd = dom.dtd = function () {
        function a(a) {
            for (var b in a)a[b.toUpperCase()] = a[b];
            return a
        }

        var b = utils.extend2, c = a({isindex: 1, fieldset: 1}), d = a({
            input: 1,
            button: 1,
            select: 1,
            textarea: 1,
            label: 1
        }), e = b(a({a: 1}), d), f = b({iframe: 1}, e), g = a({
            hr: 1,
            ul: 1,
            menu: 1,
            div: 1,
            blockquote: 1,
            noscript: 1,
            table: 1,
            center: 1,
            address: 1,
            dir: 1,
            pre: 1,
            h5: 1,
            dl: 1,
            h4: 1,
            noframes: 1,
            h6: 1,
            ol: 1,
            h1: 1,
            h3: 1,
            h2: 1
        }), h = a({ins: 1, del: 1, script: 1, style: 1}), i = b(a({
            b: 1,
            acronym: 1,
            bdo: 1,
            "var": 1,
            "#": 1,
            abbr: 1,
            code: 1,
            br: 1,
            i: 1,
            cite: 1,
            kbd: 1,
            u: 1,
            strike: 1,
            s: 1,
            tt: 1,
            strong: 1,
            q: 1,
            samp: 1,
            em: 1,
            dfn: 1,
            span: 1
        }), h), j = b(a({
            sub: 1,
            img: 1,
            embed: 1,
            object: 1,
            sup: 1,
            basefont: 1,
            map: 1,
            applet: 1,
            font: 1,
            big: 1,
            small: 1
        }), i), k = b(a({p: 1}), j), l = b(a({iframe: 1}), j, d), m = a({
            img: 1,
            embed: 1,
            noscript: 1,
            br: 1,
            kbd: 1,
            center: 1,
            button: 1,
            basefont: 1,
            h5: 1,
            h4: 1,
            samp: 1,
            h6: 1,
            ol: 1,
            h1: 1,
            h3: 1,
            h2: 1,
            form: 1,
            font: 1,
            "#": 1,
            select: 1,
            menu: 1,
            ins: 1,
            abbr: 1,
            label: 1,
            code: 1,
            table: 1,
            script: 1,
            cite: 1,
            input: 1,
            iframe: 1,
            strong: 1,
            textarea: 1,
            noframes: 1,
            big: 1,
            small: 1,
            span: 1,
            hr: 1,
            sub: 1,
            bdo: 1,
            "var": 1,
            div: 1,
            object: 1,
            sup: 1,
            strike: 1,
            dir: 1,
            map: 1,
            dl: 1,
            applet: 1,
            del: 1,
            isindex: 1,
            fieldset: 1,
            ul: 1,
            b: 1,
            acronym: 1,
            a: 1,
            blockquote: 1,
            i: 1,
            u: 1,
            s: 1,
            tt: 1,
            address: 1,
            q: 1,
            pre: 1,
            p: 1,
            em: 1,
            dfn: 1
        }), n = b(a({a: 0}), l), o = a({tr: 1}), p = a({"#": 1}), q = b(a({param: 1}), m), r = b(a({form: 1}), c, f, g, k), s = a({
            li: 1,
            ol: 1,
            ul: 1
        }), t = a({style: 1, script: 1}), u = a({base: 1, link: 1, meta: 1, title: 1}), v = b(u, t), w = a({
            head: 1,
            body: 1
        }), x = a({html: 1}), y = a({
            address: 1,
            blockquote: 1,
            center: 1,
            dir: 1,
            div: 1,
            dl: 1,
            fieldset: 1,
            form: 1,
            h1: 1,
            h2: 1,
            h3: 1,
            h4: 1,
            h5: 1,
            h6: 1,
            hr: 1,
            isindex: 1,
            menu: 1,
            noframes: 1,
            ol: 1,
            p: 1,
            pre: 1,
            table: 1,
            ul: 1
        }), z = a({
            area: 1,
            base: 1,
            basefont: 1,
            br: 1,
            col: 1,
            command: 1,
            dialog: 1,
            embed: 1,
            hr: 1,
            img: 1,
            input: 1,
            isindex: 1,
            keygen: 1,
            link: 1,
            meta: 1,
            param: 1,
            source: 1,
            track: 1,
            wbr: 1
        });
        return a({
            $nonBodyContent: b(x, w, u),
            $block: y,
            $inline: n,
            $inlineWithA: b(a({a: 1}), n),
            $body: b(a({script: 1, style: 1}), y),
            $cdata: a({script: 1, style: 1}),
            $empty: z,
            $nonChild: a({iframe: 1, textarea: 1}),
            $listItem: a({dd: 1, dt: 1, li: 1}),
            $list: a({ul: 1, ol: 1, dl: 1}),
            $isNotEmpty: a({
                table: 1,
                ul: 1,
                ol: 1,
                dl: 1,
                iframe: 1,
                area: 1,
                base: 1,
                col: 1,
                hr: 1,
                img: 1,
                embed: 1,
                input: 1,
                link: 1,
                meta: 1,
                param: 1,
                h1: 1,
                h2: 1,
                h3: 1,
                h4: 1,
                h5: 1,
                h6: 1
            }),
            $removeEmpty: a({
                a: 1,
                abbr: 1,
                acronym: 1,
                address: 1,
                b: 1,
                bdo: 1,
                big: 1,
                cite: 1,
                code: 1,
                del: 1,
                dfn: 1,
                em: 1,
                font: 1,
                i: 1,
                ins: 1,
                label: 1,
                kbd: 1,
                q: 1,
                s: 1,
                samp: 1,
                small: 1,
                span: 1,
                strike: 1,
                strong: 1,
                sub: 1,
                sup: 1,
                tt: 1,
                u: 1,
                "var": 1
            }),
            $removeEmptyBlock: a({p: 1, div: 1}),
            $tableContent: a({
                caption: 1,
                col: 1,
                colgroup: 1,
                tbody: 1,
                td: 1,
                tfoot: 1,
                th: 1,
                thead: 1,
                tr: 1,
                table: 1
            }),
            $notTransContent: a({pre: 1, script: 1, style: 1, textarea: 1}),
            html: w,
            head: v,
            style: p,
            script: p,
            body: r,
            base: {},
            link: {},
            meta: {},
            title: p,
            col: {},
            tr: a({td: 1, th: 1}),
            img: {},
            embed: {},
            colgroup: a({thead: 1, col: 1, tbody: 1, tr: 1, tfoot: 1}),
            noscript: r,
            td: r,
            br: {},
            th: r,
            center: r,
            kbd: n,
            button: b(k, g),
            basefont: {},
            h5: n,
            h4: n,
            samp: n,
            h6: n,
            ol: s,
            h1: n,
            h3: n,
            option: p,
            h2: n,
            form: b(c, f, g, k),
            select: a({optgroup: 1, option: 1}),
            font: n,
            ins: n,
            menu: s,
            abbr: n,
            label: n,
            table: a({thead: 1, col: 1, tbody: 1, tr: 1, colgroup: 1, caption: 1, tfoot: 1}),
            code: n,
            tfoot: o,
            cite: n,
            li: r,
            input: {},
            iframe: r,
            strong: n,
            textarea: p,
            noframes: r,
            big: n,
            small: n,
            span: a({"#": 1, br: 1, b: 1, strong: 1, u: 1, i: 1, em: 1, sub: 1, sup: 1, strike: 1, span: 1}),
            hr: n,
            dt: n,
            sub: n,
            optgroup: a({option: 1}),
            param: {},
            bdo: n,
            "var": n,
            div: r,
            object: q,
            sup: n,
            dd: r,
            strike: n,
            area: {},
            dir: s,
            map: b(a({area: 1, form: 1, p: 1}), c, h, g),
            applet: q,
            dl: a({dt: 1, dd: 1}),
            del: n,
            isindex: {},
            fieldset: b(a({legend: 1}), m),
            thead: o,
            ul: s,
            acronym: n,
            b: n,
            a: b(a({a: 1}), l),
            blockquote: b(a({td: 1, tr: 1, tbody: 1, li: 1}), r),
            caption: n,
            i: n,
            u: n,
            tbody: o,
            s: n,
            address: b(f, k),
            tt: n,
            legend: n,
            q: n,
            pre: b(i, e),
            p: b(a({a: 1}), n),
            em: n,
            dfn: n
        })
    }(), attrFix = ie && browser.version < 9 ? {
        tabindex: "tabIndex",
        readonly: "readOnly",
        "for": "htmlFor",
        "class": "className",
        maxlength: "maxLength",
        cellspacing: "cellSpacing",
        cellpadding: "cellPadding",
        rowspan: "rowSpan",
        colspan: "colSpan",
        usemap: "useMap",
        frameborder: "frameBorder"
    } : {
        tabindex: "tabIndex",
        readonly: "readOnly"
    }, styleBlock = utils.listToMap(["-webkit-box", "-moz-box", "block", "list-item", "table", "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group", "table-column", "table-cell", "table-caption"]), domUtils = dom.domUtils = {
        NODE_ELEMENT: 1,
        NODE_DOCUMENT: 9,
        NODE_TEXT: 3,
        NODE_COMMENT: 8,
        NODE_DOCUMENT_FRAGMENT: 11,
        POSITION_IDENTICAL: 0,
        POSITION_DISCONNECTED: 1,
        POSITION_FOLLOWING: 2,
        POSITION_PRECEDING: 4,
        POSITION_IS_CONTAINED: 8,
        POSITION_CONTAINS: 16,
        fillChar: ie && "6" == browser.version ? "\ufeff" : "โ€‹",
        keys: {8: 1, 46: 1, 16: 1, 17: 1, 18: 1, 37: 1, 38: 1, 39: 1, 40: 1, 13: 1},
        getPosition: function (a, b) {
            if (a === b)return 0;
            var c, d = [a], e = [b];
            for (c = a; c = c.parentNode;) {
                if (c === b)return 10;
                d.push(c)
            }
            for (c = b; c = c.parentNode;) {
                if (c === a)return 20;
                e.push(c)
            }
            if (d.reverse(), e.reverse(), d[0] !== e[0])return 1;
            for (var f = -1; f++, d[f] === e[f];);
            for (a = d[f], b = e[f]; a = a.nextSibling;)if (a === b)return 4;
            return 2
        },
        getNodeIndex: function (a, b) {
            for (var c = a, d = 0; c = c.previousSibling;)b && 3 == c.nodeType ? c.nodeType != c.nextSibling.nodeType && d++ : d++;
            return d
        },
        inDoc: function (a, b) {
            return 10 == domUtils.getPosition(a, b)
        },
        findParent: function (a, b, c) {
            if (a && !domUtils.isBody(a))for (a = c ? a : a.parentNode; a;) {
                if (!b || b(a) || domUtils.isBody(a))return b && !b(a) && domUtils.isBody(a) ? null : a;
                a = a.parentNode
            }
            return null
        },
        findParentByTagName: function (a, b, c, d) {
            return b = utils.listToMap(utils.isArray(b) ? b : [b]), domUtils.findParent(a, function (a) {
                return b[a.tagName] && !(d && d(a))
            }, c)
        },
        findParents: function (a, b, c, d) {
            for (var e = b && (c && c(a) || !c) ? [a] : []; a = domUtils.findParent(a, c);)e.push(a);
            return d ? e : e.reverse()
        },
        insertAfter: function (a, b) {
            return a.nextSibling ? a.parentNode.insertBefore(b, a.nextSibling) : a.parentNode.appendChild(b)
        },
        remove: function (a, b) {
            var c, d = a.parentNode;
            if (d) {
                if (b && a.hasChildNodes())for (; c = a.firstChild;)d.insertBefore(c, a);
                d.removeChild(a)
            }
            return a
        },
        getNextDomNode: function (a, b, c, d) {
            return getDomNode(a, "firstChild", "nextSibling", b, c, d)
        },
        getPreDomNode: function (a, b, c, d) {
            return getDomNode(a, "lastChild", "previousSibling", b, c, d)
        },
        isBookmarkNode: function (a) {
            return 1 == a.nodeType && a.id && /^_baidu_bookmark_/i.test(a.id)
        },
        getWindow: function (a) {
            var b = a.ownerDocument || a;
            return b.defaultView || b.parentWindow
        },
        getCommonAncestor: function (a, b) {
            if (a === b)return a;
            for (var c = [a], d = [b], e = a, f = -1; e = e.parentNode;) {
                if (e === b)return e;
                c.push(e)
            }
            for (e = b; e = e.parentNode;) {
                if (e === a)return e;
                d.push(e)
            }
            for (c.reverse(), d.reverse(); f++, c[f] === d[f];);
            return 0 == f ? null : c[f - 1]
        },
        clearEmptySibling: function (a, b, c) {
            function d(a, b) {
                for (var c; a && !domUtils.isBookmarkNode(a) && (domUtils.isEmptyInlineElement(a) || !new RegExp("[^	\n\r" + domUtils.fillChar + "]").test(a.nodeValue));)c = a[b], domUtils.remove(a), a = c
            }

            !b && d(a.nextSibling, "nextSibling"), !c && d(a.previousSibling, "previousSibling")
        },
        split: function (a, b) {
            var c = a.ownerDocument;
            if (browser.ie && b == a.nodeValue.length) {
                var d = c.createTextNode("");
                return domUtils.insertAfter(a, d)
            }
            var e = a.splitText(b);
            if (browser.ie8) {
                var f = c.createTextNode("");
                domUtils.insertAfter(e, f), domUtils.remove(f)
            }
            return e
        },
        isWhitespace: function (a) {
            return !new RegExp("[^ 	\n\r" + domUtils.fillChar + "]").test(a.nodeValue)
        },
        getXY: function (a) {
            for (var b = 0, c = 0; a.offsetParent;)c += a.offsetTop, b += a.offsetLeft, a = a.offsetParent;
            return {x: b, y: c}
        },
        on: function (a, b, c) {
            var d = utils.isArray(b) ? b : utils.trim(b).split(/\s+/), e = d.length;
            if (e)for (; e--;)if (b = d[e], a.addEventListener)a.addEventListener(b, c, !1); else {
                c._d || (c._d = {els: []});
                var f = b + c.toString(), g = utils.indexOf(c._d.els, a);
                c._d[f] && -1 != g || (-1 == g && c._d.els.push(a), c._d[f] || (c._d[f] = function (a) {
                    return c.call(a.srcElement, a || window.event)
                }), a.attachEvent("on" + b, c._d[f]))
            }
            a = null
        },
        un: function (a, b, c) {
            var d = utils.isArray(b) ? b : utils.trim(b).split(/\s+/), e = d.length;
            if (e)for (; e--;)if (b = d[e], a.removeEventListener)a.removeEventListener(b, c, !1); else {
                var f = b + c.toString();
                try {
                    a.detachEvent("on" + b, c._d ? c._d[f] : c)
                } catch (g) {
                }
                if (c._d && c._d[f]) {
                    var h = utils.indexOf(c._d.els, a);
                    -1 != h && c._d.els.splice(h, 1), 0 == c._d.els.length && delete c._d[f]
                }
            }
        },
        isSameElement: function (a, b) {
            if (a.tagName != b.tagName)return !1;
            var c = a.attributes, d = b.attributes;
            if (!ie && c.length != d.length)return !1;
            for (var e, f, g = 0, h = 0, i = 0; e = c[i++];) {
                if ("style" == e.nodeName) {
                    if (e.specified && g++, domUtils.isSameStyle(a, b))continue;
                    return !1
                }
                if (ie) {
                    if (!e.specified)continue;
                    g++, f = d.getNamedItem(e.nodeName)
                } else f = b.attributes[e.nodeName];
                if (!f.specified || e.nodeValue != f.nodeValue)return !1
            }
            if (ie) {
                for (i = 0; f = d[i++];)f.specified && h++;
                if (g != h)return !1
            }
            return !0
        },
        isSameStyle: function (a, b) {
            var c = a.style.cssText.replace(/( ?; ?)/g, ";").replace(/( ?: ?)/g, ":"), d = b.style.cssText.replace(/( ?; ?)/g, ";").replace(/( ?: ?)/g, ":");
            if (browser.opera) {
                if (c = a.style, d = b.style, c.length != d.length)return !1;
                for (var e in c)if (!/^(\d+|csstext)$/i.test(e) && c[e] != d[e])return !1;
                return !0
            }
            if (!c || !d)return c == d;
            if (c = c.split(";"), d = d.split(";"), c.length != d.length)return !1;
            for (var f, g = 0; f = c[g++];)if (-1 == utils.indexOf(d, f))return !1;
            return !0
        },
        isBlockElm: function (a) {
            return 1 == a.nodeType && (dtd.$block[a.tagName] || styleBlock[domUtils.getComputedStyle(a, "display")]) && !dtd.$nonChild[a.tagName]
        },
        isBody: function (a) {
            return a && 1 == a.nodeType && "body" == a.tagName.toLowerCase()
        },
        breakParent: function (a, b) {
            var c, d, e, f = a, g = a;
            do {
                for (f = f.parentNode, d ? (c = f.cloneNode(!1), c.appendChild(d), d = c, c = f.cloneNode(!1), c.appendChild(e), e = c) : (d = f.cloneNode(!1), e = d.cloneNode(!1)); c = g.previousSibling;)d.insertBefore(c, d.firstChild);
                for (; c = g.nextSibling;)e.appendChild(c);
                g = f
            } while (b !== f);
            return c = b.parentNode, c.insertBefore(d, b), c.insertBefore(e, b), c.insertBefore(a, e), domUtils.remove(b), a
        },
        isEmptyInlineElement: function (a) {
            if (1 != a.nodeType || !dtd.$removeEmpty[a.tagName])return 0;
            for (a = a.firstChild; a;) {
                if (domUtils.isBookmarkNode(a))return 0;
                if (1 == a.nodeType && !domUtils.isEmptyInlineElement(a) || 3 == a.nodeType && !domUtils.isWhitespace(a))return 0;
                a = a.nextSibling
            }
            return 1
        },
        trimWhiteTextNode: function (a) {
            function b(b) {
                for (var c; (c = a[b]) && 3 == c.nodeType && domUtils.isWhitespace(c);)a.removeChild(c)
            }

            b("firstChild"), b("lastChild")
        },
        mergeChild: function (a, b, c) {
            for (var d, e = domUtils.getElementsByTagName(a, a.tagName.toLowerCase()), f = 0; d = e[f++];)if (d.parentNode && !domUtils.isBookmarkNode(d))if ("span" != d.tagName.toLowerCase())domUtils.isSameElement(a, d) && domUtils.remove(d, !0); else {
                if (a === d.parentNode && (domUtils.trimWhiteTextNode(a), 1 == a.childNodes.length)) {
                    a.style.cssText = d.style.cssText + ";" + a.style.cssText, domUtils.remove(d, !0);
                    continue
                }
                if (d.style.cssText = a.style.cssText + ";" + d.style.cssText, c) {
                    var g = c.style;
                    if (g) {
                        g = g.split(";");
                        for (var h, i = 0; h = g[i++];)d.style[utils.cssStyleToDomStyle(h.split(":")[0])] = h.split(":")[1]
                    }
                }
                domUtils.isSameStyle(d, a) && domUtils.remove(d, !0)
            }
        },
        getElementsByTagName: function (a, b, c) {
            if (c && utils.isString(c)) {
                var d = c;
                c = function (a) {
                    return domUtils.hasClass(a, d)
                }
            }
            b = utils.trim(b).replace(/[ ]{2,}/g, " ").split(" ");
            for (var e, f = [], g = 0; e = b[g++];)for (var h, i = a.getElementsByTagName(e), j = 0; h = i[j++];)c && !c(h) || f.push(h);
            return f
        },
        mergeToParent: function (a) {
            for (var b = a.parentNode; b && dtd.$removeEmpty[b.tagName];) {
                if (b.tagName == a.tagName || "A" == b.tagName) {
                    if (domUtils.trimWhiteTextNode(b), "SPAN" == b.tagName && !domUtils.isSameStyle(b, a) || "A" == b.tagName && "SPAN" == a.tagName) {
                        if (b.childNodes.length > 1 || b !== a.parentNode) {
                            a.style.cssText = b.style.cssText + ";" + a.style.cssText, b = b.parentNode;
                            continue
                        }
                        b.style.cssText += ";" + a.style.cssText, "A" == b.tagName && (b.style.textDecoration = "underline")
                    }
                    if ("A" != b.tagName) {
                        b === a.parentNode && domUtils.remove(a, !0);
                        break
                    }
                }
                b = b.parentNode
            }
        },
        mergeSibling: function (a, b, c) {
            function d(a, b, c) {
                var d;
                if ((d = c[a]) && !domUtils.isBookmarkNode(d) && 1 == d.nodeType && domUtils.isSameElement(c, d)) {
                    for (; d.firstChild;)"firstChild" == b ? c.insertBefore(d.lastChild, c.firstChild) : c.appendChild(d.firstChild);
                    domUtils.remove(d)
                }
            }

            !b && d("previousSibling", "firstChild", a), !c && d("nextSibling", "lastChild", a)
        },
        unSelectable: ie && browser.ie9below || browser.opera ? function (a) {
            a.onselectstart = function () {
                return !1
            }, a.onclick = a.onkeyup = a.onkeydown = function () {
                return !1
            }, a.unselectable = "on", a.setAttribute("unselectable", "on");
            for (var b, c = 0; b = a.all[c++];)switch (b.tagName.toLowerCase()) {
                case"iframe":
                case"textarea":
                case"input":
                case"select":
                    break;
                default:
                    b.unselectable = "on", a.setAttribute("unselectable", "on")
            }
        } : function (a) {
            a.style.MozUserSelect = a.style.webkitUserSelect = a.style.msUserSelect = a.style.KhtmlUserSelect = "none"
        },
        removeAttributes: function (a, b) {
            b = utils.isArray(b) ? b : utils.trim(b).replace(/[ ]{2,}/g, " ").split(" ");
            for (var c, d = 0; c = b[d++];) {
                switch (c = attrFix[c] || c) {
                    case"className":
                        a[c] = "";
                        break;
                    case"style":
                        a.style.cssText = "";
                        var e = a.getAttributeNode("style");
                        !browser.ie && e && a.removeAttributeNode(e)
                }
                a.removeAttribute(c)
            }
        },
        createElement: function (a, b, c) {
            return domUtils.setAttributes(a.createElement(b), c)
        },
        setAttributes: function (a, b) {
            for (var c in b)if (b.hasOwnProperty(c)) {
                var d = b[c];
                switch (c) {
                    case"class":
                        a.className = d;
                        break;
                    case"style":
                        a.style.cssText = a.style.cssText + ";" + d;
                        break;
                    case"innerHTML":
                        a[c] = d;
                        break;
                    case"value":
                        a.value = d;
                        break;
                    default:
                        a.setAttribute(attrFix[c] || c, d)
                }
            }
            return a
        },
        getComputedStyle: function (a, b) {
            var c = "width height top left";
            if (c.indexOf(b) > -1)return a["offset" + b.replace(/^\w/, function (a) {
                    return a.toUpperCase()
                })] + "px";
            if (3 == a.nodeType && (a = a.parentNode), browser.ie && browser.version < 9 && "font-size" == b && !a.style.fontSize && !dtd.$empty[a.tagName] && !dtd.$nonChild[a.tagName]) {
                var d = a.ownerDocument.createElement("span");
                d.style.cssText = "padding:0;border:0;font-family:simsun;", d.innerHTML = ".", a.appendChild(d);
                var e = d.offsetHeight;
                return a.removeChild(d), d = null, e + "px"
            }
            try {
                var f = domUtils.getStyle(a, b) || (window.getComputedStyle ? domUtils.getWindow(a).getComputedStyle(a, "").getPropertyValue(b) : (a.currentStyle || a.style)[utils.cssStyleToDomStyle(b)])
            } catch (g) {
                return ""
            }
            return utils.transUnitToPx(utils.fixColor(b, f))
        },
        removeClasses: function (a, b) {
            b = utils.isArray(b) ? b : utils.trim(b).replace(/[ ]{2,}/g, " ").split(" ");
            for (var c, d = 0, e = a.className; c = b[d++];)e = e.replace(new RegExp("\\b" + c + "\\b"), "");
            e = utils.trim(e).replace(/[ ]{2,}/g, " "), e ? a.className = e : domUtils.removeAttributes(a, ["class"])
        },
        addClass: function (a, b) {
            if (a) {
                b = utils.trim(b).replace(/[ ]{2,}/g, " ").split(" ");
                for (var c, d = 0, e = a.className; c = b[d++];)new RegExp("\\b" + c + "\\b").test(e) || (e += " " + c);
                a.className = utils.trim(e)
            }
        },
        hasClass: function (a, b) {
            if (utils.isRegExp(b))return b.test(a.className);
            b = utils.trim(b).replace(/[ ]{2,}/g, " ").split(" ");
            for (var c, d = 0, e = a.className; c = b[d++];)if (!new RegExp("\\b" + c + "\\b", "i").test(e))return !1;
            return d - 1 == b.length
        },
        preventDefault: function (a) {
            a.preventDefault ? a.preventDefault() : a.returnValue = !1
        },
        removeStyle: function (a, b) {
            browser.ie ? ("color" == b && (b = "(^|;)" + b), a.style.cssText = a.style.cssText.replace(new RegExp(b + "[^:]*:[^;]+;?", "ig"), "")) : a.style.removeProperty ? a.style.removeProperty(b) : a.style.removeAttribute(utils.cssStyleToDomStyle(b)), a.style.cssText || domUtils.removeAttributes(a, ["style"])
        },
        getStyle: function (a, b) {
            var c = a.style[utils.cssStyleToDomStyle(b)];
            return utils.fixColor(b, c)
        },
        setStyle: function (a, b, c) {
            a.style[utils.cssStyleToDomStyle(b)] = c, utils.trim(a.style.cssText) || this.removeAttributes(a, "style")
        },
        setStyles: function (a, b) {
            for (var c in b)b.hasOwnProperty(c) && domUtils.setStyle(a, c, b[c])
        },
        removeDirtyAttr: function (a) {
            for (var b, c = 0, d = a.getElementsByTagName("*"); b = d[c++];)b.removeAttribute("_moz_dirty");
            a.removeAttribute("_moz_dirty")
        },
        getChildCount: function (a, b) {
            var c = 0, d = a.firstChild;
            for (b = b || function () {
                    return 1
                }; d;)b(d) && c++, d = d.nextSibling;
            return c
        },
        isEmptyNode: function (a) {
            return !a.firstChild || 0 == domUtils.getChildCount(a, function (a) {
                    return !domUtils.isBr(a) && !domUtils.isBookmarkNode(a) && !domUtils.isWhitespace(a)
                })
        },
        clearSelectedArr: function (a) {
            for (var b; b = a.pop();)domUtils.removeAttributes(b, ["class"])
        },
        scrollToView: function (a, b, c) {
            var d = function () {
                var a = b.document, c = "CSS1Compat" == a.compatMode;
                return {
                    width: (c ? a.documentElement.clientWidth : a.body.clientWidth) || 0,
                    height: (c ? a.documentElement.clientHeight : a.body.clientHeight) || 0
                }
            }, e = function (a) {
                if ("pageXOffset" in a)return {x: a.pageXOffset || 0, y: a.pageYOffset || 0};
                var b = a.document;
                return {
                    x: b.documentElement.scrollLeft || b.body.scrollLeft || 0,
                    y: b.documentElement.scrollTop || b.body.scrollTop || 0
                }
            }, f = d().height, g = -1 * f + c;
            g += a.offsetHeight || 0;
            var h = domUtils.getXY(a);
            g += h.y;
            var i = e(b).y;
            (g > i || i - f > g) && b.scrollTo(0, g + (0 > g ? -20 : 20))
        },
        isBr: function (a) {
            return 1 == a.nodeType && "BR" == a.tagName
        },
        isFillChar: function (a, b) {
            if (3 != a.nodeType)return !1;
            var c = a.nodeValue;
            return b ? new RegExp("^" + domUtils.fillChar).test(c) : !c.replace(new RegExp(domUtils.fillChar, "g"), "").length
        },
        isStartInblock: function (a) {
            var b, c = a.cloneRange(), d = 0, e = c.startContainer;
            if (1 == e.nodeType && e.childNodes[c.startOffset]) {
                e = e.childNodes[c.startOffset];
                for (var f = e.previousSibling; f && domUtils.isFillChar(f);)e = f, f = f.previousSibling
            }
            for (this.isFillChar(e, !0) && 1 == c.startOffset && (c.setStartBefore(e), e = c.startContainer); e && domUtils.isFillChar(e);)b = e, e = e.previousSibling;
            for (b && (c.setStartBefore(b), e = c.startContainer), 1 == e.nodeType && domUtils.isEmptyNode(e) && 1 == c.startOffset && c.setStart(e, 0).collapse(!0); !c.startOffset;) {
                if (e = c.startContainer, domUtils.isBlockElm(e) || domUtils.isBody(e)) {
                    d = 1;
                    break
                }
                var g, f = c.startContainer.previousSibling;
                if (f) {
                    for (; f && domUtils.isFillChar(f);)g = f, f = f.previousSibling;
                    g ? c.setStartBefore(g) : c.setStartBefore(c.startContainer)
                } else c.setStartBefore(c.startContainer)
            }
            return d && !domUtils.isBody(c.startContainer) ? 1 : 0
        },
        isEmptyBlock: function (a, b) {
            if (1 != a.nodeType)return 0;
            if (b = b || new RegExp("[ ย 	\r\n" + domUtils.fillChar + "]", "g"), a[browser.ie ? "innerText" : "textContent"].replace(b, "").length > 0)return 0;
            for (var c in dtd.$isNotEmpty)if (a.getElementsByTagName(c).length)return 0;
            return 1
        },
        setViewportOffset: function (a, b) {
            var c = 0 | parseInt(a.style.left), d = 0 | parseInt(a.style.top), e = a.getBoundingClientRect(), f = b.left - e.left, g = b.top - e.top;
            f && (a.style.left = c + f + "px"), g && (a.style.top = d + g + "px")
        },
        fillNode: function (a, b) {
            var c = browser.ie ? a.createTextNode(domUtils.fillChar) : a.createElement("br");
            b.innerHTML = "", b.appendChild(c)
        },
        moveChild: function (a, b, c) {
            for (; a.firstChild;)c && b.firstChild ? b.insertBefore(a.lastChild, b.firstChild) : b.appendChild(a.firstChild)
        },
        hasNoAttributes: function (a) {
            return browser.ie ? /^<\w+\s*?>/.test(a.outerHTML) : 0 == a.attributes.length
        },
        isCustomeNode: function (a) {
            return 1 == a.nodeType && a.getAttribute("_ue_custom_node_")
        },
        isTagNode: function (a, b) {
            return 1 == a.nodeType && new RegExp("\\b" + a.tagName + "\\b", "i").test(b)
        },
        filterNodeList: function (a, b, c) {
            var d = [];
            if (!utils.isFunction(b)) {
                var e = b;
                b = function (a) {
                    return -1 != utils.indexOf(utils.isArray(e) ? e : e.split(" "), a.tagName.toLowerCase())
                }
            }
            return utils.each(a, function (a) {
                b(a) && d.push(a)
            }), 0 == d.length ? null : 1 != d.length && c ? d : d[0]
        },
        isInNodeEndBoundary: function (a, b) {
            var c = a.startContainer;
            if (3 == c.nodeType && a.startOffset != c.nodeValue.length)return 0;
            if (1 == c.nodeType && a.startOffset != c.childNodes.length)return 0;
            for (; c !== b;) {
                if (c.nextSibling)return 0;
                c = c.parentNode
            }
            return 1
        },
        isBoundaryNode: function (a, b) {
            for (var c; !domUtils.isBody(a);)if (c = a, a = a.parentNode, c !== a[b])return !1;
            return !0
        },
        fillHtml: browser.ie11below ? "&nbsp;" : "<br/>"
    }, fillCharReg = new RegExp(domUtils.fillChar, "g");
    !function () {
        function a(a) {
            a.collapsed = a.startContainer && a.endContainer && a.startContainer === a.endContainer && a.startOffset == a.endOffset
        }

        function b(a) {
            return !a.collapsed && 1 == a.startContainer.nodeType && a.startContainer === a.endContainer && a.endOffset - a.startOffset == 1
        }

        function c(b, c, d, e) {
            return 1 == c.nodeType && (dtd.$empty[c.tagName] || dtd.$nonChild[c.tagName]) && (d = domUtils.getNodeIndex(c) + (b ? 0 : 1), c = c.parentNode), b ? (e.startContainer = c, e.startOffset = d, e.endContainer || e.collapse(!0)) : (e.endContainer = c, e.endOffset = d, e.startContainer || e.collapse(!1)), a(e), e
        }

        function d(a, b) {
            var c, d, e = a.startContainer, f = a.endContainer, g = a.startOffset, h = a.endOffset, i = a.document, j = i.createDocumentFragment();
            if (1 == e.nodeType && (e = e.childNodes[g] || (c = e.appendChild(i.createTextNode("")))), 1 == f.nodeType && (f = f.childNodes[h] || (d = f.appendChild(i.createTextNode("")))), e === f && 3 == e.nodeType)return j.appendChild(i.createTextNode(e.substringData(g, h - g))), b && (e.deleteData(g, h - g), a.collapse(!0)), j;
            for (var k, l, m = j, n = domUtils.findParents(e, !0), o = domUtils.findParents(f, !0), p = 0; n[p] == o[p];)p++;
            for (var q, r = p; q = n[r]; r++) {
                for (k = q.nextSibling, q == e ? c || (3 == a.startContainer.nodeType ? (m.appendChild(i.createTextNode(e.nodeValue.slice(g))), b && e.deleteData(g, e.nodeValue.length - g)) : m.appendChild(b ? e : e.cloneNode(!0))) : (l = q.cloneNode(!1), m.appendChild(l)); k && k !== f && k !== o[r];)q = k.nextSibling, m.appendChild(b ? k : k.cloneNode(!0)), k = q;
                m = l
            }
            m = j, n[p] || (m.appendChild(n[p - 1].cloneNode(!1)), m = m.firstChild);
            for (var s, r = p; s = o[r]; r++) {
                if (k = s.previousSibling, s == f ? d || 3 != a.endContainer.nodeType || (m.appendChild(i.createTextNode(f.substringData(0, h))), b && f.deleteData(0, h)) : (l = s.cloneNode(!1), m.appendChild(l)), r != p || !n[p])for (; k && k !== e;)s = k.previousSibling, m.insertBefore(b ? k : k.cloneNode(!0), m.firstChild), k = s;
                m = l
            }
            return b && a.setStartBefore(o[p] ? n[p] ? o[p] : n[p - 1] : o[p - 1]).collapse(!0), c && domUtils.remove(c), d && domUtils.remove(d), j
        }

        function e(a, b) {
            try {
                if (g && domUtils.inDoc(g, a))if (g.nodeValue.replace(fillCharReg, "").length)g.nodeValue = g.nodeValue.replace(fillCharReg, ""); else {
                    var c = g.parentNode;
                    for (domUtils.remove(g); c && domUtils.isEmptyInlineElement(c) && (browser.safari ? !(domUtils.getPosition(c, b) & domUtils.POSITION_CONTAINS) : !c.contains(b));)g = c.parentNode, domUtils.remove(c), c = g
                }
            } catch (d) {
            }
        }

        function f(a, b) {
            var c;
            for (a = a[b]; a && domUtils.isFillChar(a);)c = a[b], domUtils.remove(a), a = c
        }

        var g, h = 0, i = domUtils.fillChar, j = dom.Range = function (a) {
            var b = this;
            b.startContainer = b.startOffset = b.endContainer = b.endOffset = null, b.document = a, b.collapsed = !0
        };
        j.prototype = {
            cloneContents: function () {
                return this.collapsed ? null : d(this, 0)
            }, deleteContents: function () {
                var a;
                return this.collapsed || d(this, 1), browser.webkit && (a = this.startContainer, 3 != a.nodeType || a.nodeValue.length || (this.setStartBefore(a).collapse(!0), domUtils.remove(a))), this
            }, extractContents: function () {
                return this.collapsed ? null : d(this, 2)
            }, setStart: function (a, b) {
                return c(!0, a, b, this)
            }, setEnd: function (a, b) {
                return c(!1, a, b, this)
            }, setStartAfter: function (a) {
                return this.setStart(a.parentNode, domUtils.getNodeIndex(a) + 1)
            }, setStartBefore: function (a) {
                return this.setStart(a.parentNode, domUtils.getNodeIndex(a))
            }, setEndAfter: function (a) {
                return this.setEnd(a.parentNode, domUtils.getNodeIndex(a) + 1)
            }, setEndBefore: function (a) {
                return this.setEnd(a.parentNode, domUtils.getNodeIndex(a))
            }, setStartAtFirst: function (a) {
                return this.setStart(a, 0)
            }, setStartAtLast: function (a) {
                return this.setStart(a, 3 == a.nodeType ? a.nodeValue.length : a.childNodes.length)
            }, setEndAtFirst: function (a) {
                return this.setEnd(a, 0)
            }, setEndAtLast: function (a) {
                return this.setEnd(a, 3 == a.nodeType ? a.nodeValue.length : a.childNodes.length)
            }, selectNode: function (a) {
                return this.setStartBefore(a).setEndAfter(a)
            }, selectNodeContents: function (a) {
                return this.setStart(a, 0).setEndAtLast(a)
            }, cloneRange: function () {
                var a = this;
                return new j(a.document).setStart(a.startContainer, a.startOffset).setEnd(a.endContainer, a.endOffset)
            }, collapse: function (a) {
                var b = this;
                return a ? (b.endContainer = b.startContainer, b.endOffset = b.startOffset) : (b.startContainer = b.endContainer, b.startOffset = b.endOffset), b.collapsed = !0, b
            }, shrinkBoundary: function (a) {
                function b(a) {
                    return 1 == a.nodeType && !domUtils.isBookmarkNode(a) && !dtd.$empty[a.tagName] && !dtd.$nonChild[a.tagName]
                }

                for (var c, d = this, e = d.collapsed; 1 == d.startContainer.nodeType && (c = d.startContainer.childNodes[d.startOffset]) && b(c);)d.setStart(c, 0);
                if (e)return d.collapse(!0);
                if (!a)for (; 1 == d.endContainer.nodeType && d.endOffset > 0 && (c = d.endContainer.childNodes[d.endOffset - 1]) && b(c);)d.setEnd(c, c.childNodes.length);
                return d
            }, getCommonAncestor: function (a, c) {
                var d = this, e = d.startContainer, f = d.endContainer;
                return e === f ? a && b(this) && (e = e.childNodes[d.startOffset], 1 == e.nodeType) ? e : c && 3 == e.nodeType ? e.parentNode : e : domUtils.getCommonAncestor(e, f)
            }, trimBoundary: function (a) {
                this.txtToElmBoundary();
                var b = this.startContainer, c = this.startOffset, d = this.collapsed, e = this.endContainer;
                if (3 == b.nodeType) {
                    if (0 == c)this.setStartBefore(b); else if (c >= b.nodeValue.length)this.setStartAfter(b); else {
                        var f = domUtils.split(b, c);
                        b === e ? this.setEnd(f, this.endOffset - c) : b.parentNode === e && (this.endOffset += 1), this.setStartBefore(f)
                    }
                    if (d)return this.collapse(!0)
                }
                return a || (c = this.endOffset, e = this.endContainer, 3 == e.nodeType && (0 == c ? this.setEndBefore(e) : (c < e.nodeValue.length && domUtils.split(e, c), this.setEndAfter(e)))), this
            }, txtToElmBoundary: function (a) {
                function b(a, b) {
                    var c = a[b + "Container"], d = a[b + "Offset"];
                    3 == c.nodeType && (d ? d >= c.nodeValue.length && a["set" + b.replace(/(\w)/, function (a) {
                        return a.toUpperCase()
                    }) + "After"](c) : a["set" + b.replace(/(\w)/, function (a) {
                        return a.toUpperCase()
                    }) + "Before"](c))
                }

                return !a && this.collapsed || (b(this, "start"), b(this, "end")), this
            }, insertNode: function (a) {
                var b = a, c = 1;
                11 == a.nodeType && (b = a.firstChild, c = a.childNodes.length), this.trimBoundary(!0);
                var d = this.startContainer, e = this.startOffset, f = d.childNodes[e];
                return f ? d.insertBefore(a, f) : d.appendChild(a), b.parentNode === this.endContainer && (this.endOffset = this.endOffset + c), this.setStartBefore(b)
            }, setCursor: function (a, b) {
                return this.collapse(!a).select(b)
            }, createBookmark: function (a, b) {
                var c, d = this.document.createElement("span");
                return d.style.cssText = "display:none;line-height:0px;", d.appendChild(this.document.createTextNode("โ€")), d.id = "_baidu_bookmark_start_" + (b ? "" : h++), this.collapsed || (c = d.cloneNode(!0), c.id = "_baidu_bookmark_end_" + (b ? "" : h++)), this.insertNode(d), c && this.collapse().insertNode(c).setEndBefore(c), this.setStartAfter(d), {
                    start: a ? d.id : d,
                    end: c ? a ? c.id : c : null,
                    id: a
                }
            }, moveToBookmark: function (a) {
                var b = a.id ? this.document.getElementById(a.start) : a.start, c = a.end && a.id ? this.document.getElementById(a.end) : a.end;
                return this.setStartBefore(b), domUtils.remove(b), c ? (this.setEndBefore(c), domUtils.remove(c)) : this.collapse(!0), this
            }, enlarge: function (a, b) {
                var c, d, e = domUtils.isBody, f = this.document.createTextNode("");
                if (a) {
                    for (d = this.startContainer, 1 == d.nodeType ? d.childNodes[this.startOffset] ? c = d = d.childNodes[this.startOffset] : (d.appendChild(f), c = d = f) : c = d; ;) {
                        if (domUtils.isBlockElm(d)) {
                            for (d = c; (c = d.previousSibling) && !domUtils.isBlockElm(c);)d = c;
                            this.setStartBefore(d);
                            break
                        }
                        c = d, d = d.parentNode
                    }
                    for (d = this.endContainer, 1 == d.nodeType ? ((c = d.childNodes[this.endOffset]) ? d.insertBefore(f, c) : d.appendChild(f), c = d = f) : c = d; ;) {
                        if (domUtils.isBlockElm(d)) {
                            for (d = c; (c = d.nextSibling) && !domUtils.isBlockElm(c);)d = c;
                            this.setEndAfter(d);
                            break
                        }
                        c = d, d = d.parentNode
                    }
                    f.parentNode === this.endContainer && this.endOffset--, domUtils.remove(f)
                }
                if (!this.collapsed) {
                    for (; !(0 != this.startOffset || b && b(this.startContainer) || e(this.startContainer));)this.setStartBefore(this.startContainer);
                    for (; !(this.endOffset != (1 == this.endContainer.nodeType ? this.endContainer.childNodes.length : this.endContainer.nodeValue.length) || b && b(this.endContainer) || e(this.endContainer));)this.setEndAfter(this.endContainer)
                }
                return this
            }, enlargeToBlockElm: function (a) {
                for (; !domUtils.isBlockElm(this.startContainer);)this.setStartBefore(this.startContainer);
                if (!a)for (; !domUtils.isBlockElm(this.endContainer);)this.setEndAfter(this.endContainer);
                return this
            }, adjustmentBoundary: function () {
                if (!this.collapsed) {
                    for (; !domUtils.isBody(this.startContainer) && this.startOffset == this.startContainer[3 == this.startContainer.nodeType ? "nodeValue" : "childNodes"].length && this.startContainer[3 == this.startContainer.nodeType ? "nodeValue" : "childNodes"].length;)this.setStartAfter(this.startContainer);
                    for (; !domUtils.isBody(this.endContainer) && !this.endOffset && this.endContainer[3 == this.endContainer.nodeType ? "nodeValue" : "childNodes"].length;)this.setEndBefore(this.endContainer)
                }
                return this
            }, applyInlineStyle: function (a, b, c) {
                if (this.collapsed)return this;
                this.trimBoundary().enlarge(!1, function (a) {
                    return 1 == a.nodeType && domUtils.isBlockElm(a)
                }).adjustmentBoundary();
                for (var d, e, f = this.createBookmark(), g = f.end, h = function (a) {
                    return 1 == a.nodeType ? "br" != a.tagName.toLowerCase() : !domUtils.isWhitespace(a)
                }, i = domUtils.getNextDomNode(f.start, !1, h), j = this.cloneRange(); i && domUtils.getPosition(i, g) & domUtils.POSITION_PRECEDING;)if (3 == i.nodeType || dtd[a][i.tagName]) {
                    for (j.setStartBefore(i), d = i; d && (3 == d.nodeType || dtd[a][d.tagName]) && d !== g;)e = d, d = domUtils.getNextDomNode(d, 1 == d.nodeType, null, function (b) {
                        return dtd[a][b.tagName]
                    });
                    var k, l = j.setEndAfter(e).extractContents();
                    if (c && c.length > 0) {
                        var m, n;
                        n = m = c[0].cloneNode(!1);
                        for (var o, p = 1; o = c[p++];)m.appendChild(o.cloneNode(!1)), m = m.firstChild;
                        k = m
                    } else k = j.document.createElement(a);
                    b && domUtils.setAttributes(k, b), k.appendChild(l), j.insertNode(c ? n : k);
                    var q;
                    if ("span" == a && b.style && /text\-decoration/.test(b.style) && (q = domUtils.findParentByTagName(k, "a", !0)) ? (domUtils.setAttributes(q, b), domUtils.remove(k, !0), k = q) : (domUtils.mergeSibling(k), domUtils.clearEmptySibling(k)), domUtils.mergeChild(k, b), i = domUtils.getNextDomNode(k, !1, h), domUtils.mergeToParent(k), d === g)break
                } else i = domUtils.getNextDomNode(i, !0, h);
                return this.moveToBookmark(f)
            }, removeInlineStyle: function (a) {
                if (this.collapsed)return this;
                a = utils.isArray(a) ? a : [a], this.shrinkBoundary().adjustmentBoundary();
                for (var b = this.startContainer, c = this.endContainer; ;) {
                    if (1 == b.nodeType) {
                        if (utils.indexOf(a, b.tagName.toLowerCase()) > -1)break;
                        if ("body" == b.tagName.toLowerCase()) {
                            b = null;
                            break
                        }
                    }
                    b = b.parentNode
                }
                for (; ;) {
                    if (1 == c.nodeType) {
                        if (utils.indexOf(a, c.tagName.toLowerCase()) > -1)break;
                        if ("body" == c.tagName.toLowerCase()) {
                            c = null;
                            break
                        }
                    }
                    c = c.parentNode
                }
                var d, e, f = this.createBookmark();
                b && (e = this.cloneRange().setEndBefore(f.start).setStartBefore(b), d = e.extractContents(), e.insertNode(d), domUtils.clearEmptySibling(b, !0), b.parentNode.insertBefore(f.start, b)), c && (e = this.cloneRange().setStartAfter(f.end).setEndAfter(c), d = e.extractContents(), e.insertNode(d), domUtils.clearEmptySibling(c, !1, !0), c.parentNode.insertBefore(f.end, c.nextSibling));
                for (var g, h = domUtils.getNextDomNode(f.start, !1, function (a) {
                    return 1 == a.nodeType
                }); h && h !== f.end;)g = domUtils.getNextDomNode(h, !0, function (a) {
                    return 1 == a.nodeType
                }), utils.indexOf(a, h.tagName.toLowerCase()) > -1 && domUtils.remove(h, !0), h = g;
                return this.moveToBookmark(f)
            }, getClosedNode: function () {
                var a;
                if (!this.collapsed) {
                    var c = this.cloneRange().adjustmentBoundary().shrinkBoundary();
                    if (b(c)) {
                        var d = c.startContainer.childNodes[c.startOffset];
                        d && 1 == d.nodeType && (dtd.$empty[d.tagName] || dtd.$nonChild[d.tagName]) && (a = d)
                    }
                }
                return a
            }, select: browser.ie ? function (a, b) {
                var c;
                this.collapsed || this.shrinkBoundary();
                var d = this.getClosedNode();
                if (d && !b) {
                    try {
                        c = this.document.body.createControlRange(), c.addElement(d), c.select()
                    } catch (h) {
                    }
                    return this
                }
                var j, k = this.createBookmark(), l = k.start;
                if (c = this.document.body.createTextRange(), c.moveToElementText(l), c.moveStart("character", 1), this.collapsed) {
                    if (!a && 3 != this.startContainer.nodeType) {
                        var m = this.document.createTextNode(i), n = this.document.createElement("span");
                        n.appendChild(this.document.createTextNode(i)), l.parentNode.insertBefore(n, l), l.parentNode.insertBefore(m, l), e(this.document, m), g = m, f(n, "previousSibling"), f(l, "nextSibling"), c.moveStart("character", -1), c.collapse(!0)
                    }
                } else {
                    var o = this.document.body.createTextRange();
                    j = k.end, o.moveToElementText(j), c.setEndPoint("EndToEnd", o)
                }
                this.moveToBookmark(k), n && domUtils.remove(n);
                try {
                    c.select()
                } catch (h) {
                }
                return this
            } : function (a) {
                function b(a) {
                    function b(b, c, d) {
                        3 == b.nodeType && b.nodeValue.length < c && (a[d + "Offset"] = b.nodeValue.length)
                    }

                    b(a.startContainer, a.startOffset, "start"), b(a.endContainer, a.endOffset, "end")
                }

                var c, d = domUtils.getWindow(this.document), h = d.getSelection();
                if (browser.gecko ? this.document.body.focus() : d.focus(), h) {
                    if (h.removeAllRanges(), this.collapsed && !a) {
                        var j = this.startContainer, k = j;
                        1 == j.nodeType && (k = j.childNodes[this.startOffset]), 3 == j.nodeType && this.startOffset || (k ? k.previousSibling && 3 == k.previousSibling.nodeType : j.lastChild && 3 == j.lastChild.nodeType) || (c = this.document.createTextNode(i), this.insertNode(c), e(this.document, c), f(c, "previousSibling"), f(c, "nextSibling"), g = c, this.setStart(c, browser.webkit ? 1 : 0).collapse(!0))
                    }
                    var l = this.document.createRange();
                    if (this.collapsed && browser.opera && 1 == this.startContainer.nodeType) {
                        var k = this.startContainer.childNodes[this.startOffset];
                        if (k) {
                            for (; k && domUtils.isBlockElm(k) && 1 == k.nodeType && k.childNodes[0];)k = k.childNodes[0];
                            k && this.setStartBefore(k).collapse(!0)
                        } else k = this.startContainer.lastChild, k && domUtils.isBr(k) && this.setStartBefore(k).collapse(!0)
                    }
                    b(this), l.setStart(this.startContainer, this.startOffset), l.setEnd(this.endContainer, this.endOffset), h.addRange(l)
                }
                return this
            }, scrollToView: function (a, b) {
                a = a ? window : domUtils.getWindow(this.document);
                var c = this, d = c.document.createElement("span");
                return d.innerHTML = "&nbsp;", c.cloneRange().insertNode(d), domUtils.scrollToView(d, a, b), domUtils.remove(d), c
            }, inFillChar: function () {
                var a = this.startContainer;
                return !(!this.collapsed || 3 != a.nodeType || a.nodeValue.replace(new RegExp("^" + domUtils.fillChar), "").length + 1 != a.nodeValue.length)
            }, createAddress: function (a, b) {
                function c(a) {
                    for (var c, d = a ? e.startContainer : e.endContainer, f = domUtils.findParents(d, !0, function (a) {
                        return !domUtils.isBody(a)
                    }), g = [], h = 0; c = f[h++];)g.push(domUtils.getNodeIndex(c, b));
                    var i = 0;
                    if (b)if (3 == d.nodeType) {
                        for (var j = d.previousSibling; j && 3 == j.nodeType;)i += j.nodeValue.replace(fillCharReg, "").length, j = j.previousSibling;
                        i += a ? e.startOffset : e.endOffset
                    } else if (d = d.childNodes[a ? e.startOffset : e.endOffset])i = domUtils.getNodeIndex(d, b); else {
                        d = a ? e.startContainer : e.endContainer;
                        for (var k = d.firstChild; k;)if (domUtils.isFillChar(k))k = k.nextSibling; else if (i++, 3 == k.nodeType)for (; k && 3 == k.nodeType;)k = k.nextSibling; else k = k.nextSibling
                    } else i = a ? domUtils.isFillChar(d) ? 0 : e.startOffset : e.endOffset;
                    return 0 > i && (i = 0), g.push(i), g
                }

                var d = {}, e = this;
                return d.startAddress = c(!0), a || (d.endAddress = e.collapsed ? [].concat(d.startAddress) : c()), d
            }, moveToAddress: function (a, b) {
                function c(a, b) {
                    for (var c, e, f, g = d.document.body, h = 0, i = a.length; i > h; h++)if (f = a[h], c = g, g = g.childNodes[f], !g) {
                        e = f;
                        break
                    }
                    b ? g ? d.setStartBefore(g) : d.setStart(c, e) : g ? d.setEndBefore(g) : d.setEnd(c, e)
                }

                var d = this;
                return c(a.startAddress, !0), !b && a.endAddress && c(a.endAddress), d
            }, equals: function (a) {
                for (var b in this)if (this.hasOwnProperty(b) && this[b] !== a[b])return !1;
                return !0
            }, traversal: function (a, b) {
                if (this.collapsed)return this;
                for (var c = this.createBookmark(), d = c.end, e = domUtils.getNextDomNode(c.start, !1, b); e && e !== d && domUtils.getPosition(e, d) & domUtils.POSITION_PRECEDING;) {
                    var f = domUtils.getNextDomNode(e, !1, b);
                    a(e), e = f
                }
                return this.moveToBookmark(c)
            }
        }
    }(), function () {
        function a(a, b) {
            var c = domUtils.getNodeIndex;
            a = a.duplicate(), a.collapse(b);
            var d = a.parentElement();
            if (!d.hasChildNodes())return {container: d, offset: 0};
            for (var e, f, g = d.children, h = a.duplicate(), i = 0, j = g.length - 1, k = -1; j >= i;) {
                k = Math.floor((i + j) / 2), e = g[k], h.moveToElementText(e);
                var l = h.compareEndPoints("StartToStart", a);
                if (l > 0)j = k - 1; else {
                    if (!(0 > l))return {container: d, offset: c(e)};
                    i = k + 1
                }
            }
            if (-1 == k) {
                if (h.moveToElementText(d), h.setEndPoint("StartToStart", a), f = h.text.replace(/(\r\n|\r)/g, "\n").length, g = d.childNodes, !f)return e = g[g.length - 1], {
                    container: e,
                    offset: e.nodeValue.length
                };
                for (var m = g.length; f > 0;)f -= g[--m].nodeValue.length;
                return {container: g[m], offset: -f}
            }
            if (h.collapse(l > 0), h.setEndPoint(l > 0 ? "StartToStart" : "EndToStart", a), f = h.text.replace(/(\r\n|\r)/g, "\n").length, !f)return dtd.$empty[e.tagName] || dtd.$nonChild[e.tagName] ? {
                container: d,
                offset: c(e) + (l > 0 ? 0 : 1)
            } : {container: e, offset: l > 0 ? 0 : e.childNodes.length};
            for (; f > 0;)try {
                var n = e;
                e = e[l > 0 ? "previousSibling" : "nextSibling"], f -= e.nodeValue.length
            } catch (o) {
                return {container: d, offset: c(n)}
            }
            return {container: e, offset: l > 0 ? -f : e.nodeValue.length + f}
        }

        function b(b, c) {
            if (b.item)c.selectNode(b.item(0)); else {
                var d = a(b, !0);
                c.setStart(d.container, d.offset), 0 != b.compareEndPoints("StartToEnd", b) && (d = a(b, !1), c.setEnd(d.container, d.offset))
            }
            return c
        }

        function c(a) {
            var b;
            try {
                b = a.getNative().createRange()
            } catch (c) {
                return null
            }
            var d = b.item ? b.item(0) : b.parentElement();
            return (d.ownerDocument || d) === a.document ? b : null
        }

        var d = dom.Selection = function (a) {
            var b, d = this;
            d.document = a, browser.ie9below && (b = domUtils.getWindow(a).frameElement, domUtils.on(b, "beforedeactivate", function () {
                d._bakIERange = d.getIERange()
            }), domUtils.on(b, "activate", function () {
                try {
                    !c(d) && d._bakIERange && d._bakIERange.select()
                } catch (a) {
                }
                d._bakIERange = null
            })), b = a = null
        };
        d.prototype = {
            rangeInBody: function (a, b) {
                var c = browser.ie9below || b ? a.item ? a.item() : a.parentElement() : a.startContainer;
                return c === this.document.body || domUtils.inDoc(c, this.document)
            }, getNative: function () {
                var a = this.document;
                try {
                    return a ? browser.ie9below ? a.selection : domUtils.getWindow(a).getSelection() : null
                } catch (b) {
                    return null
                }
            }, getIERange: function () {
                var a = c(this);
                return !a && this._bakIERange ? this._bakIERange : a
            }, cache: function () {
                this.clear(), this._cachedRange = this.getRange(), this._cachedStartElement = this.getStart(), this._cachedStartElementPath = this.getStartElementPath()
            }, getStartElementPath: function () {
                if (this._cachedStartElementPath)return this._cachedStartElementPath;
                var a = this.getStart();
                return a ? domUtils.findParents(a, !0, null, !0) : []
            }, clear: function () {
                this._cachedStartElementPath = this._cachedRange = this._cachedStartElement = null
            }, isFocus: function () {
                try {
                    if (browser.ie9below) {
                        var a = c(this);
                        return !(!a || !this.rangeInBody(a))
                    }
                    return !!this.getNative().rangeCount
                } catch (b) {
                    return !1
                }
            }, getRange: function () {
                function a(a) {
                    for (var b = c.document.body.firstChild, d = a.collapsed; b && b.firstChild;)a.setStart(b, 0), b = b.firstChild;
                    a.startContainer || a.setStart(c.document.body, 0), d && a.collapse(!0)
                }

                var c = this;
                if (null != c._cachedRange)return this._cachedRange;
                var d = new baidu.editor.dom.Range(c.document);
                if (browser.ie9below) {
                    var e = c.getIERange();
                    if (e)try {
                        b(e, d)
                    } catch (f) {
                        a(d)
                    } else a(d)
                } else {
                    var g = c.getNative();
                    if (g && g.rangeCount) {
                        var h = g.getRangeAt(0), i = g.getRangeAt(g.rangeCount - 1);
                        d.setStart(h.startContainer, h.startOffset).setEnd(i.endContainer, i.endOffset), d.collapsed && domUtils.isBody(d.startContainer) && !d.startOffset && a(d)
                    } else {
                        if (this._bakRange && domUtils.inDoc(this._bakRange.startContainer, this.document))return this._bakRange;
                        a(d)
                    }
                }
                return this._bakRange = d
            }, getStart: function () {
                if (this._cachedStartElement)return this._cachedStartElement;
                var a, b, c, d, e = browser.ie9below ? this.getIERange() : this.getRange();
                if (browser.ie9below) {
                    if (!e)return this.document.body.firstChild;
                    if (e.item)return e.item(0);
                    for (a = e.duplicate(), a.text.length > 0 && a.moveStart("character", 1), a.collapse(1), b = a.parentElement(), d = c = e.parentElement(); c = c.parentNode;)if (c == b) {
                        b = d;
                        break
                    }
                } else if (e.shrinkBoundary(), b = e.startContainer, 1 == b.nodeType && b.hasChildNodes() && (b = b.childNodes[Math.min(b.childNodes.length - 1, e.startOffset)]), 3 == b.nodeType)return b.parentNode;
                return b
            }, getText: function () {
                var a, b;
                return this.isFocus() && (a = this.getNative()) ? (b = browser.ie9below ? a.createRange() : a.getRangeAt(0), browser.ie9below ? b.text : b.toString()) : ""
            }, clearRange: function () {
                this.getNative()[browser.ie9below ? "empty" : "removeAllRanges"]()
            }
        }
    }(), function () {
        function a(a, b) {
            var c;
            if (b.textarea)if (utils.isString(b.textarea)) {
                for (var d, e = 0, f = domUtils.getElementsByTagName(a, "textarea"); d = f[e++];)if (d.id == "ueditor_textarea_" + b.options.textarea) {
                    c = d;
                    break
                }
            } else c = b.textarea;
            c || (a.appendChild(c = domUtils.createElement(document, "textarea", {
                name: b.options.textarea,
                id: "ueditor_textarea_" + b.options.textarea,
                style: "display:none"
            })), b.textarea = c), !c.getAttribute("name") && c.setAttribute("name", b.options.textarea), c.value = b.hasContents() ? b.options.allHtmlEnabled ? b.getAllHtml() : b.getContent(null, null, !0) : ""
        }

        function b(a) {
            for (var b in a)return b
        }

        function c(a) {
            a.langIsReady = !0, a.fireEvent("langReady")
        }

        var d, e = 0, f = UE.Editor = function (a) {
            var d = this;
            d.uid = e++, EventBase.call(d), d.commands = {}, d.options = utils.extend(utils.clone(a || {}), UEDITOR_CONFIG, !0), d.shortcutkeys = {}, d.inputRules = [], d.outputRules = [], d.setOpt(f.defaultOptions(d)), d.loadServerConfig(), utils.isEmptyObject(UE.I18N) ? utils.loadFile(document, {
                src: d.options.langPath + d.options.lang + "/" + d.options.lang + ".js",
                tag: "script",
                type: "text/javascript",
                defer: "defer"
            }, function () {
                UE.plugin.load(d), c(d)
            }) : (d.options.lang = b(UE.I18N), UE.plugin.load(d), c(d)), UE.instants["ueditorInstant" + d.uid] = d
        };
        f.prototype = {
            registerCommand: function (a, b) {
                this.commands[a] = b
            }, ready: function (a) {
                var b = this;
                a && (b.isReady ? a.apply(b) : b.addListener("ready", a))
            }, setOpt: function (a, b) {
                var c = {};
                utils.isString(a) ? c[a] = b : c = a, utils.extend(this.options, c, !0)
            }, getOpt: function (a) {
                return this.options[a]
            }, destroy: function () {
                var a = this;
                a.fireEvent("destroy");
                var b = a.container.parentNode, c = a.textarea;
                c ? c.style.display = "" : (c = document.createElement("textarea"), b.parentNode.insertBefore(c, b)), c.style.width = a.iframe.offsetWidth + "px", c.style.height = a.iframe.offsetHeight + "px", c.value = a.getContent(), c.id = a.key, b.innerHTML = "", domUtils.remove(b);
                var d = a.key;
                for (var e in a)a.hasOwnProperty(e) && delete this[e];
                UE.delEditor(d)
            }, render: function (a) {
                var b = this, c = b.options, d = function (b) {
                    return parseInt(domUtils.getComputedStyle(a, b))
                };
                if (utils.isString(a) && (a = document.getElementById(a)), a) {
                    c.initialFrameWidth ? c.minFrameWidth = c.initialFrameWidth : c.minFrameWidth = c.initialFrameWidth = a.offsetWidth, c.initialFrameHeight ? c.minFrameHeight = c.initialFrameHeight : c.initialFrameHeight = c.minFrameHeight = a.offsetHeight, a.style.width = /%$/.test(c.initialFrameWidth) ? "100%" : c.initialFrameWidth - d("padding-left") - d("padding-right") + "px", a.style.height = /%$/.test(c.initialFrameHeight) ? "100%" : c.initialFrameHeight - d("padding-top") - d("padding-bottom") + "px", a.style.zIndex = c.zIndex;
                    var e = (ie && browser.version < 9 ? "" : "<!DOCTYPE html>") + "<html xmlns='http://www.w3.org/1999/xhtml' class='view' ><head><style type='text/css'>.view{padding:0;word-wrap:break-word;cursor:text;height:90%;}\nbody{margin:8px;font-family:sans-serif;font-size:16px;}p{margin:5px 0;}</style>" + (c.iframeCssUrl ? "<link rel='stylesheet' type='text/css' href='" + utils.unhtml(c.iframeCssUrl) + "'/>" : "") + (c.initialStyle ? "<style>" + c.initialStyle + "</style>" : "") + "</head><body class='view' ></body><script type='text/javascript' " + (ie ? "defer='defer'" : "") + " id='_initialScript'>setTimeout(function(){editor = window.parent.UE.instants['ueditorInstant" + b.uid + "'];editor._setup(document);},0);var _tmpScript = document.getElementById('_initialScript');_tmpScript.parentNode.removeChild(_tmpScript);</script></html>";
                    a.appendChild(domUtils.createElement(document, "iframe", {
                        id: "ueditor_" + b.uid,
                        width: "100%",
                        height: "100%",
                        frameborder: "0",
                        src: "javascript:void(function(){document.open();" + (c.customDomain && document.domain != location.hostname ? 'document.domain="' + document.domain + '";' : "") + 'document.write("' + e + '");document.close();}())'
                    })), a.style.overflow = "hidden", setTimeout(function () {
                        /%$/.test(c.initialFrameWidth) && (c.minFrameWidth = c.initialFrameWidth = a.offsetWidth), /%$/.test(c.initialFrameHeight) && (c.minFrameHeight = c.initialFrameHeight = a.offsetHeight, a.style.height = c.initialFrameHeight + "px")
                    })
                }
            }, _setup: function (b) {
                var c = this, d = c.options;
                ie ? (b.body.disabled = !0, b.body.contentEditable = !0, b.body.disabled = !1) : b.body.contentEditable = !0, b.body.spellcheck = !1, c.document = b, c.window = b.defaultView || b.parentWindow, c.iframe = c.window.frameElement, c.body = b.body, c.selection = new dom.Selection(b);
                var e;
                browser.gecko && (e = this.selection.getNative()) && e.removeAllRanges(), this._initEvents();
                for (var f = this.iframe.parentNode; !domUtils.isBody(f); f = f.parentNode)if ("FORM" == f.tagName) {
                    c.form = f, c.options.autoSyncData ? domUtils.on(c.window, "blur", function () {
                        a(f, c)
                    }) : domUtils.on(f, "submit", function () {
                        a(this, c)
                    });
                    break
                }
                if (d.initialContent)if (d.autoClearinitialContent) {
                    var g = c.execCommand;
                    c.execCommand = function () {
                        return c.fireEvent("firstBeforeExecCommand"), g.apply(c, arguments)
                    }, this._setDefaultContent(d.initialContent)
                } else this.setContent(d.initialContent, !1, !0);
                domUtils.isEmptyNode(c.body) && (c.body.innerHTML = "<p>" + (browser.ie ? "" : "<br/>") + "</p>"), d.focus && setTimeout(function () {
                    c.focus(c.options.focusInEnd), !c.options.autoClearinitialContent && c._selectionChange()
                }, 0), c.container || (c.container = this.iframe.parentNode), d.fullscreen && c.ui && c.ui.setFullScreen(!0);
                try {
                    c.document.execCommand("2D-position", !1, !1)
                } catch (h) {
                }
                try {
                    c.document.execCommand("enableInlineTableEditing", !1, !1)
                } catch (h) {
                }
                try {
                    c.document.execCommand("enableObjectResizing", !1, !1)
                } catch (h) {
                }
                c._bindshortcutKeys(), c.isReady = 1, c.fireEvent("ready"), d.onready && d.onready.call(c), browser.ie9below || domUtils.on(c.window, ["blur", "focus"], function (a) {
                    if ("blur" == a.type) {
                        c._bakRange = c.selection.getRange();
                        try {
                            c._bakNativeRange = c.selection.getNative().getRangeAt(0), c.selection.getNative().removeAllRanges()
                        } catch (a) {
                            c._bakNativeRange = null
                        }
                    } else try {
                        c._bakRange && c._bakRange.select()
                    } catch (a) {
                    }
                }), browser.gecko && browser.version <= 10902 && (c.body.contentEditable = !1, setTimeout(function () {
                    c.body.contentEditable = !0
                }, 100), setInterval(function () {
                    c.body.style.height = c.iframe.offsetHeight - 20 + "px"
                }, 100)), !d.isShow && c.setHide(), d.readonly && c.setDisabled()
            }, sync: function (b) {
                var c = this, d = b ? document.getElementById(b) : domUtils.findParent(c.iframe.parentNode, function (a) {
                    return "FORM" == a.tagName
                }, !0);
                d && a(d, c)
            }, setHeight: function (a, b) {
                a !== parseInt(this.iframe.parentNode.style.height) && (this.iframe.parentNode.style.height = a + "px"), !b && (this.options.minFrameHeight = this.options.initialFrameHeight = a), this.body.style.height = a + "px", !b && this.trigger("setHeight")
            }, addshortcutkey: function (a, b) {
                var c = {};
                b ? c[a] = b : c = a, utils.extend(this.shortcutkeys, c)
            }, _bindshortcutKeys: function () {
                var a = this, b = this.shortcutkeys;
                a.addListener("keydown", function (c, d) {
                    var e = d.keyCode || d.which;
                    for (var f in b)for (var g, h = b[f].split(","), i = 0; g = h[i++];) {
                        g = g.split(":");
                        var j = g[0], k = g[1];
                        (/^(ctrl)(\+shift)?\+(\d+)$/.test(j.toLowerCase()) || /^(\d+)$/.test(j)) && (("ctrl" == RegExp.$1 ? d.ctrlKey || d.metaKey : 0) && ("" != RegExp.$2 ? d[RegExp.$2.slice(1) + "Key"] : 1) && e == RegExp.$3 || e == RegExp.$1) && (-1 != a.queryCommandState(f, k) && a.execCommand(f, k), domUtils.preventDefault(d))
                    }
                })
            }, getContent: function (a, b, c, d, e) {
                var f = this;
                if (a && utils.isFunction(a) && (b = a, a = ""), b ? !b() : !this.hasContents())return "";
                f.fireEvent("beforegetcontent");
                var g = UE.htmlparser(f.body.innerHTML, d);
                return f.filterOutputRule(g), f.fireEvent("aftergetcontent", a, g), g.toHtml(e)
            }, getAllHtml: function () {
                var a = this, b = [];
                if (a.fireEvent("getAllHtml", b), browser.ie && browser.version > 8) {
                    var c = "";
                    utils.each(a.document.styleSheets, function (a) {
                        c += a.href ? '<link rel="stylesheet" type="text/css" href="' + a.href + '" />' : "<style>" + a.cssText + "</style>"
                    }), utils.each(a.document.getElementsByTagName("script"), function (a) {
                        c += a.outerHTML
                    })
                }
                return "<html><head>" + (a.options.charset ? '<meta http-equiv="Content-Type" content="text/html; charset=' + a.options.charset + '"/>' : "") + (c || a.document.getElementsByTagName("head")[0].innerHTML) + b.join("\n") + "</head><body " + (ie && browser.version < 9 ? 'class="view"' : "") + ">" + a.getContent(null, null, !0) + "</body></html>"
            }, getPlainTxt: function () {
                var a = new RegExp(domUtils.fillChar, "g"), b = this.body.innerHTML.replace(/[\n\r]/g, "");
                return b = b.replace(/<(p|div)[^>]*>(<br\/?>|&nbsp;)<\/\1>/gi, "\n").replace(/<br\/?>/gi, "\n").replace(/<[^>\/]+>/g, "").replace(/(\n)?<\/([^>]+)>/g, function (a, b, c) {
                    return dtd.$block[c] ? "\n" : b ? b : ""
                }), b.replace(a, "").replace(/\u00a0/g, " ").replace(/&nbsp;/g, " ")
            }, getContentTxt: function () {
                var a = new RegExp(domUtils.fillChar, "g");
                return this.body[browser.ie ? "innerText" : "textContent"].replace(a, "").replace(/\u00a0/g, " ")
            }, setContent: function (b, c, d) {
                function e(a) {
                    return "DIV" == a.tagName && a.getAttribute("cdata_tag")
                }

                var f = this;
                f.fireEvent("beforesetcontent", b);
                var g = UE.htmlparser(b);
                if (f.filterInputRule(g), b = g.toHtml(), f.body.innerHTML = (c ? f.body.innerHTML : "") + b, "p" == f.options.enterTag) {
                    var h, i = this.body.firstChild;
                    if (!i || 1 == i.nodeType && (dtd.$cdata[i.tagName] || e(i) || domUtils.isCustomeNode(i)) && i === this.body.lastChild)this.body.innerHTML = "<p>" + (browser.ie ? "&nbsp;" : "<br/>") + "</p>" + this.body.innerHTML; else for (var j = f.document.createElement("p"); i;) {
                        for (; i && (3 == i.nodeType || 1 == i.nodeType && dtd.p[i.tagName] && !dtd.$cdata[i.tagName]);)h = i.nextSibling, j.appendChild(i), i = h;
                        if (j.firstChild) {
                            if (!i) {
                                f.body.appendChild(j);
                                break
                            }
                            i.parentNode.insertBefore(j, i), j = f.document.createElement("p")
                        }
                        i = i.nextSibling
                    }
                }
                f.fireEvent("aftersetcontent"), f.fireEvent("contentchange"), !d && f._selectionChange(), f._bakRange = f._bakIERange = f._bakNativeRange = null;
                var k;
                browser.gecko && (k = this.selection.getNative()) && k.removeAllRanges(), f.options.autoSyncData && f.form && a(f.form, f)
            }, focus: function (a) {
                try {
                    var b = this, c = b.selection.getRange();
                    if (a) {
                        var d = b.body.lastChild;
                        d && 1 == d.nodeType && !dtd.$empty[d.tagName] && (domUtils.isEmptyBlock(d) ? c.setStartAtFirst(d) : c.setStartAtLast(d), c.collapse(!0)), c.setCursor(!0)
                    } else {
                        if (!c.collapsed && domUtils.isBody(c.startContainer) && 0 == c.startOffset) {
                            var d = b.body.firstChild;
                            d && 1 == d.nodeType && !dtd.$empty[d.tagName] && c.setStartAtFirst(d).collapse(!0)
                        }
                        c.select(!0)
                    }
                    this.fireEvent("focus selectionchange")
                } catch (e) {
                }
            }, isFocus: function () {
                return this.selection.isFocus()
            }, blur: function () {
                var a = this.selection.getNative();
                if (a.empty && browser.ie) {
                    var b = document.body.createTextRange();
                    b.moveToElementText(document.body), b.collapse(!0), b.select(), a.empty()
                } else a.removeAllRanges()
            }, _initEvents: function () {
                var a = this, b = a.document, c = a.window;
                a._proxyDomEvent = utils.bind(a._proxyDomEvent, a), domUtils.on(b, ["click", "contextmenu", "mousedown", "keydown", "keyup", "keypress", "mouseup", "mouseover", "mouseout", "selectstart"], a._proxyDomEvent), domUtils.on(c, ["focus", "blur"], a._proxyDomEvent), domUtils.on(a.body, "drop", function (b) {
                    browser.gecko && b.stopPropagation && b.stopPropagation(), a.fireEvent("contentchange")
                }), domUtils.on(b, ["mouseup", "keydown"], function (b) {
                    "keydown" == b.type && (b.ctrlKey || b.metaKey || b.shiftKey || b.altKey) || 2 != b.button && a._selectionChange(250, b)
                })
            }, _proxyDomEvent: function (a) {
                return this.fireEvent("before" + a.type.replace(/^on/, "").toLowerCase()) === !1 ? !1 : this.fireEvent(a.type.replace(/^on/, ""), a) === !1 ? !1 : this.fireEvent("after" + a.type.replace(/^on/, "").toLowerCase())
            }, _selectionChange: function (a, b) {
                var c, e, f = this, g = !1;
                if (browser.ie && browser.version < 9 && b && "mouseup" == b.type) {
                    var h = this.selection.getRange();
                    h.collapsed || (g = !0, c = b.clientX, e = b.clientY)
                }
                clearTimeout(d), d = setTimeout(function () {
                    if (f.selection && f.selection.getNative()) {
                        var a;
                        if (g && "None" == f.selection.getNative().type) {
                            a = f.document.body.createTextRange();
                            try {
                                a.moveToPoint(c, e)
                            } catch (d) {
                                a = null
                            }
                        }
                        var h;
                        a && (h = f.selection.getIERange, f.selection.getIERange = function () {
                            return a
                        }), f.selection.cache(), h && (f.selection.getIERange = h), f.selection._cachedRange && f.selection._cachedStartElement && (f.fireEvent("beforeselectionchange"), f.fireEvent("selectionchange", !!b), f.fireEvent("afterselectionchange"), f.selection.clear())
                    }
                }, a || 50)
            }, _callCmdFn: function (a, b) {
                var c, d, e = b[0].toLowerCase();
                return c = this.commands[e] || UE.commands[e], d = c && c[a], c && d || "queryCommandState" != a ? d ? d.apply(this, b) : void 0 : 0
            }, execCommand: function (a) {
                a = a.toLowerCase();
                var b, c = this, d = c.commands[a] || UE.commands[a];
                return d && d.execCommand ? (d.notNeedUndo || c.__hasEnterExecCommand ? (b = this._callCmdFn("execCommand", arguments), !c.__hasEnterExecCommand && !d.ignoreContentChange && !c._ignoreContentChange && c.fireEvent("contentchange")) : (c.__hasEnterExecCommand = !0, -1 != c.queryCommandState.apply(c, arguments) && (c.fireEvent("saveScene"), c.fireEvent.apply(c, ["beforeexeccommand", a].concat(arguments)), b = this._callCmdFn("execCommand", arguments), c.fireEvent.apply(c, ["afterexeccommand", a].concat(arguments)), c.fireEvent("saveScene")), c.__hasEnterExecCommand = !1), !c.__hasEnterExecCommand && !d.ignoreContentChange && !c._ignoreContentChange && c._selectionChange(), b) : null
            }, queryCommandState: function (a) {
                return this._callCmdFn("queryCommandState", arguments)
            }, queryCommandValue: function (a) {
                return this._callCmdFn("queryCommandValue", arguments)
            }, hasContents: function (a) {
                if (a)for (var b, c = 0; b = a[c++];)if (this.document.getElementsByTagName(b).length > 0)return !0;
                if (!domUtils.isEmptyBlock(this.body))return !0;
                for (a = ["div"], c = 0; b = a[c++];)for (var d, e = domUtils.getElementsByTagName(this.document, b), f = 0; d = e[f++];)if (domUtils.isCustomeNode(d))return !0;
                return !1
            }, reset: function () {
                this.fireEvent("reset")
            }, setEnabled: function () {
                var a, b = this;
                if ("false" == b.body.contentEditable) {
                    b.body.contentEditable = !0, a = b.selection.getRange();
                    try {
                        a.moveToBookmark(b.lastBk), delete b.lastBk
                    } catch (c) {
                        a.setStartAtFirst(b.body).collapse(!0)
                    }
                    a.select(!0), b.bkqueryCommandState && (b.queryCommandState = b.bkqueryCommandState, delete b.bkqueryCommandState), b.bkqueryCommandValue && (b.queryCommandValue = b.bkqueryCommandValue, delete b.bkqueryCommandValue), b.fireEvent("selectionchange")
                }
            }, enable: function () {
                return this.setEnabled()
            }, setDisabled: function (a) {
                var b = this;
                a = a ? utils.isArray(a) ? a : [a] : [], "true" == b.body.contentEditable && (b.lastBk || (b.lastBk = b.selection.getRange().createBookmark(!0)), b.body.contentEditable = !1, b.bkqueryCommandState = b.queryCommandState, b.bkqueryCommandValue = b.queryCommandValue, b.queryCommandState = function (c) {
                    return -1 != utils.indexOf(a, c) ? b.bkqueryCommandState.apply(b, arguments) : -1
                }, b.queryCommandValue = function (c) {
                    return -1 != utils.indexOf(a, c) ? b.bkqueryCommandValue.apply(b, arguments) : null
                }, b.fireEvent("selectionchange"))
            }, disable: function (a) {
                return this.setDisabled(a)
            }, _setDefaultContent: function () {
                function a() {
                    var b = this;
                    b.document.getElementById("initContent") && (b.body.innerHTML = "<p>" + (ie ? "" : "<br/>") + "</p>", b.removeListener("firstBeforeExecCommand focus", a), setTimeout(function () {
                        b.focus(), b._selectionChange()
                    }, 0))
                }

                return function (b) {
                    var c = this;
                    c.body.innerHTML = '<p id="initContent">' + b + "</p>", c.addListener("firstBeforeExecCommand focus", a)
                }
            }(), setShow: function () {
                var a = this, b = a.selection.getRange();
                if ("none" == a.container.style.display) {
                    try {
                        b.moveToBookmark(a.lastBk), delete a.lastBk
                    } catch (c) {
                        b.setStartAtFirst(a.body).collapse(!0)
                    }
                    setTimeout(function () {
                        b.select(!0)
                    }, 100), a.container.style.display = ""
                }
            }, show: function () {
                return this.setShow()
            }, setHide: function () {
                var a = this;
                a.lastBk || (a.lastBk = a.selection.getRange().createBookmark(!0)), a.container.style.display = "none"
            }, hide: function () {
                return this.setHide()
            }, getLang: function (a) {
                var b = UE.I18N[this.options.lang];
                if (!b)throw Error("not import language file");
                a = (a || "").split(".");
                for (var c, d = 0; (c = a[d++]) && (b = b[c], b););
                return b
            }, getContentLength: function (a, b) {
                var c = this.getContent(!1, !1, !0).length;
                if (a) {
                    b = (b || []).concat(["hr", "img", "iframe"]), c = this.getContentTxt().replace(/[\t\r\n]+/g, "").length;
                    for (var d, e = 0; d = b[e++];)c += this.document.getElementsByTagName(d).length
                }
                return c
            }, addInputRule: function (a) {
                this.inputRules.push(a)
            }, filterInputRule: function (a) {
                for (var b, c = 0; b = this.inputRules[c++];)b.call(this, a)
            }, addOutputRule: function (a) {
                this.outputRules.push(a)
            }, filterOutputRule: function (a) {
                for (var b, c = 0; b = this.outputRules[c++];)b.call(this, a)
            }, getActionUrl: function (a) {
                var b = this.getOpt(a) || a, c = this.getOpt("imageUrl"), d = this.getOpt("serverUrl");
                return !d && c && (d = c.replace(/^(.*[\/]).+([\.].+)$/, "$1controller$2")), d ? (d = d + (-1 == d.indexOf("?") ? "?" : "&") + "action=" + (b || ""), utils.formatUrl(d)) : ""
            }
        }, utils.inherits(f, EventBase)
    }(), UE.Editor.defaultOptions = function (a) {
        var b = a.options.UEDITOR_HOME_URL;
        return {
            isShow: !0,
            initialContent: "",
            initialStyle: "",
            autoClearinitialContent: !1,
            iframeCssUrl: b + "themes/iframe.css",
            textarea: "editorValue",
            focus: !1,
            focusInEnd: !0,
            autoClearEmptyNode: !0,
            fullscreen: !1,
            readonly: !1,
            zIndex: 999,
            imagePopup: !0,
            enterTag: "p",
            customDomain: !1,
            lang: "zh-cn",
            langPath: b + "lang/",
            theme: "default",
            themePath: b + "themes/",
            allHtmlEnabled: !1,
            scaleEnabled: !1,
            tableNativeEditInFF: !1,
            autoSyncData: !0,
            fileNameFormat: "{time}{rand:6}"
        }
    }, function () {
        UE.Editor.prototype.loadServerConfig = function () {
            function showErrorMsg(a) {
                console && console.error(a)
            }

            var me = this;
            setTimeout(function () {
                try {
                    me.options.imageUrl && me.setOpt("serverUrl", me.options.imageUrl.replace(/^(.*[\/]).+([\.].+)$/, "$1controller$2"));
                    var configUrl = me.getActionUrl("config"), isJsonp = utils.isCrossDomainUrl(configUrl);
                    me._serverConfigLoaded = !1, configUrl && UE.ajax.request(configUrl, {
                        method: "GET",
                        dataType: isJsonp ? "jsonp" : "",
                        onsuccess: function (r) {
                            try {
                                var config = isJsonp ? r : eval("(" + r.responseText + ")");
                                utils.extend(me.options, config), me.fireEvent("serverConfigLoaded"), me._serverConfigLoaded = !0
                            } catch (e) {
                                showErrorMsg(me.getLang("loadconfigFormatError"))
                            }
                        },
                        onerror: function () {
                            showErrorMsg(me.getLang("loadconfigHttpError"))
                        }
                    })
                } catch (e) {
                    showErrorMsg(me.getLang("loadconfigError"))
                }
            })
        }, UE.Editor.prototype.isServerConfigLoaded = function () {
            var a = this;
            return a._serverConfigLoaded || !1
        }, UE.Editor.prototype.afterConfigReady = function (a) {
            if (a && utils.isFunction(a)) {
                var b = this, c = function () {
                    a.apply(b, arguments), b.removeListener("serverConfigLoaded", c)
                };
                b.isServerConfigLoaded() ? a.call(b, "serverConfigLoaded") : b.addListener("serverConfigLoaded", c)
            }
        }
    }(), UE.ajax = function () {
        function a(a) {
            var b = [];
            for (var c in a)if ("method" != c && "timeout" != c && "async" != c && "dataType" != c && "callback" != c && void 0 != a[c] && null != a[c])if ("function" != (typeof a[c]).toLowerCase() && "object" != (typeof a[c]).toLowerCase())b.push(encodeURIComponent(c) + "=" + encodeURIComponent(a[c])); else if (utils.isArray(a[c]))for (var d = 0; d < a[c].length; d++)b.push(encodeURIComponent(c) + "[]=" + encodeURIComponent(a[c][d]));
            return b.join("&")
        }

        function b(b, c) {
            var d = f(), e = !1, g = {
                method: "POST", timeout: 5e3, async: !0, data: {}, onsuccess: function () {
                }, onerror: function () {
                }
            };
            if ("object" == typeof b && (c = b, b = c.url), d && b) {
                var h = c ? utils.extend(g, c) : g, i = a(h);
                utils.isEmptyObject(h.data) || (i += (i ? "&" : "") + a(h.data));
                var j = setTimeout(function () {
                    4 != d.readyState && (e = !0, d.abort(), clearTimeout(j))
                }, h.timeout), k = h.method.toUpperCase(), l = b + (-1 == b.indexOf("?") ? "?" : "&") + ("POST" == k ? "" : i + "&noCache=" + +new Date);
                d.open(k, l, h.async), d.onreadystatechange = function () {
                    4 == d.readyState && (e || 200 != d.status ? h.onerror(d) : h.onsuccess(d))
                }, "POST" == k ? (d.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), d.send(i)) : d.send(null)
            }
        }

        function c(b, c) {
            function d(a, b, c) {
                a.setAttribute("type", "text/javascript"), a.setAttribute("defer", "defer"), c && a.setAttribute("charset", c), a.setAttribute("src", b), document.getElementsByTagName("head")[0].appendChild(a)
            }

            function e(a) {
                return function () {
                    try {
                        if (a)k.onerror && k.onerror(); else try {
                            clearTimeout(g), i.apply(window, arguments)
                        } catch (b) {
                        }
                    } catch (c) {
                        k.onerror && k.onerror.call(window, c)
                    } finally {
                        k.oncomplete && k.oncomplete.apply(window, arguments), j.parentNode && j.parentNode.removeChild(j), window[f] = null;
                        try {
                            delete window[f]
                        } catch (b) {
                        }
                    }
                }
            }

            var f, g, h, i = c.onsuccess || function () {
                }, j = document.createElement("SCRIPT"), k = c || {}, l = k.charset, m = k.jsonp || "callback", n = k.timeOut || 0, o = new RegExp("(\\?|&)" + m + "=([^&]*)");
            utils.isFunction(i) ? (f = "bd__editor__" + Math.floor(2147483648 * Math.random()).toString(36), window[f] = e(0)) : utils.isString(i) ? f = i : (h = o.exec(b)) && (f = h[2]), b = b.replace(o, "$1" + m + "=" + f), b.search(o) < 0 && (b += (b.indexOf("?") < 0 ? "?" : "&") + m + "=" + f);
            var p = a(c);
            utils.isEmptyObject(c.data) || (p += (p ? "&" : "") + a(c.data)), p && (b = b.replace(/\?/, "?" + p + "&")), j.onerror = e(1), n && (g = setTimeout(e(1), n)), d(j, b, l)
        }

        var d = "XMLHttpRequest()";
        try {
            new ActiveXObject("Msxml2.XMLHTTP"), d = "ActiveXObject('Msxml2.XMLHTTP')"
        } catch (e) {
            try {
                new ActiveXObject("Microsoft.XMLHTTP"), d = "ActiveXObject('Microsoft.XMLHTTP')"
            } catch (e) {
            }
        }
        var f = new Function("return new " + d);
        return {
            request: function (a, d) {
                d && "jsonp" == d.dataType ? c(a, d) : b(a, d)
            }, getJSONP: function (a, b, d) {
                var e = {data: b, oncomplete: d};
                c(a, e)
            }
        }
    }();
    var filterWord = UE.filterWord = function () {
        function a(a) {
            return /(class="?Mso|style="[^"]*\bmso\-|w:WordDocument|<(v|o):|lang=)/gi.test(a)
        }

        function b(a) {
            return a = a.replace(/[\d.]+\w+/g, function (a) {
                return utils.transUnitToPx(a)
            })
        }

        function c(a) {
            return a.replace(/[\t\r\n]+/g, " ").replace(/<!--[\s\S]*?-->/gi, "").replace(/<v:shape [^>]*>[\s\S]*?.<\/v:shape>/gi, function (a) {
                if (browser.opera)return "";
                try {
                    if (/Bitmap/i.test(a))return "";
                    var c = a.match(/width:([ \d.]*p[tx])/i)[1], d = a.match(/height:([ \d.]*p[tx])/i)[1], e = a.match(/src=\s*"([^"]*)"/i)[1];
                    return '<img width="' + b(c) + '" height="' + b(d) + '" src="' + e + '" />'
                } catch (f) {
                    return ""
                }
            }).replace(/<\/?div[^>]*>/g, "").replace(/v:\w+=(["']?)[^'"]+\1/g, "").replace(/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|xml|meta|link|style|\w+:\w+)(?=[\s\/>]))[^>]*>/gi, "").replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "<p><strong>$1</strong></p>").replace(/\s+(class|lang|align)\s*=\s*(['"]?)([\w-]+)\2/gi, function (a, b, c, d) {
                return "class" == b && "MsoListParagraph" == d ? a : ""
            }).replace(/<(font|span)[^>]*>(\s*)<\/\1>/gi, function (a, b, c) {
                return c.replace(/[\t\r\n ]+/g, " ")
            }).replace(/(<[a-z][^>]*)\sstyle=(["'])([^\2]*?)\2/gi, function (a, c, d, e) {
                for (var f, g = [], h = e.replace(/^\s+|\s+$/, "").replace(/&#39;/g, "'").replace(/&quot;/gi, "'").replace(/[\d.]+(cm|pt)/g, function (a) {
                    return utils.transUnitToPx(a)
                }).split(/;\s*/g), i = 0; f = h[i]; i++) {
                    var j, k, l = f.split(":");
                    if (2 == l.length) {
                        if (j = l[0].toLowerCase(), k = l[1].toLowerCase(), /^(background)\w*/.test(j) && 0 == k.replace(/(initial|\s)/g, "").length || /^(margin)\w*/.test(j) && /^0\w+$/.test(k))continue;
                        switch (j) {
                            case"mso-padding-alt":
                            case"mso-padding-top-alt":
                            case"mso-padding-right-alt":
                            case"mso-padding-bottom-alt":
                            case"mso-padding-left-alt":
                            case"mso-margin-alt":
                            case"mso-margin-top-alt":
                            case"mso-margin-right-alt":
                            case"mso-margin-bottom-alt":
                            case"mso-margin-left-alt":
                            case"mso-height":
                            case"mso-width":
                            case"mso-vertical-align-alt":
                                /<table/.test(c) || (g[i] = j.replace(/^mso-|-alt$/g, "") + ":" + b(k));
                                continue;
                            case"horiz-align":
                                g[i] = "text-align:" + k;
                                continue;
                            case"vert-align":
                                g[i] = "vertical-align:" + k;
                                continue;
                            case"font-color":
                            case"mso-foreground":
                                g[i] = "color:" + k;
                                continue;
                            case"mso-background":
                            case"mso-highlight":
                                g[i] = "background:" + k;
                                continue;
                            case"mso-default-height":
                                g[i] = "min-height:" + b(k);
                                continue;
                            case"mso-default-width":
                                g[i] = "min-width:" + b(k);
                                continue;
                            case"mso-padding-between-alt":
                                g[i] = "border-collapse:separate;border-spacing:" + b(k);
                                continue;
                            case"text-line-through":
                                "single" != k && "double" != k || (g[i] = "text-decoration:line-through");
                                continue;
                            case"mso-zero-height":
                                "yes" == k && (g[i] = "display:none");
                                continue;
                            case"margin":
                                if (!/[1-9]/.test(k))continue
                        }
                        if (/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?:decor|trans)|top-bar|version|vnd|word-break)/.test(j) || /text\-indent|padding|margin/.test(j) && /\-[\d.]+/.test(k))continue;
                        g[i] = j + ":" + l[1]
                    }
                }
                return c + (g.length ? ' style="' + g.join(";").replace(/;{2,}/g, ";") + '"' : "")
            })
        }

        return function (b) {
            return a(b) ? c(b) : b
        }
    }();
    !function () {
        function a(a, b, c) {
            return a.push(n), b + (c ? 1 : -1)
        }

        function b(a, b) {
            for (var c = 0; b > c; c++)a.push(m)
        }

        function c(g, h, i, j) {
            switch (g.type) {
                case"root":
                    for (var k, l = 0; k = g.children[l++];)i && "element" == k.type && !dtd.$inlineWithA[k.tagName] && l > 1 && (a(h, j, !0), b(h, j)), c(k, h, i, j);
                    break;
                case"text":
                    d(g, h);
                    break;
                case"element":
                    e(g, h, i, j);
                    break;
                case"comment":
                    f(g, h, i)
            }
            return h
        }

        function d(a, b) {
            "pre" == a.parentNode.tagName ? b.push(a.data) : b.push(l[a.parentNode.tagName] ? utils.html(a.data) : a.data.replace(/[ ]{2}/g, " &nbsp;"))
        }

        function e(d, e, f, g) {
            var h = "";
            if (d.attrs) {
                h = [];
                var i = d.attrs;
                for (var j in i)h.push(j + (void 0 !== i[j] ? '="' + (k[j] ? utils.html(i[j]).replace(/["]/g, function (a) {
                        return "&quot;"
                    }) : utils.unhtml(i[j])) + '"' : ""));
                h = h.join(" ")
            }
            if (e.push("<" + d.tagName + (h ? " " + h : "") + (dtd.$empty[d.tagName] ? "/" : "") + ">"), f && !dtd.$inlineWithA[d.tagName] && "pre" != d.tagName && d.children && d.children.length && (g = a(e, g, !0), b(e, g)), d.children && d.children.length)for (var l, m = 0; l = d.children[m++];)f && "element" == l.type && !dtd.$inlineWithA[l.tagName] && m > 1 && (a(e, g), b(e, g)), c(l, e, f, g);
            dtd.$empty[d.tagName] || (f && !dtd.$inlineWithA[d.tagName] && "pre" != d.tagName && d.children && d.children.length && (g = a(e, g), b(e, g)), e.push("</" + d.tagName + ">"))
        }

        function f(a, b) {
            b.push("<!--" + a.data + "-->")
        }

        function g(a, b) {
            var c;
            if ("element" == a.type && a.getAttr("id") == b)return a;
            if (a.children && a.children.length)for (var d, e = 0; d = a.children[e++];)if (c = g(d, b))return c
        }

        function h(a, b, c) {
            if ("element" == a.type && a.tagName == b && c.push(a), a.children && a.children.length)for (var d, e = 0; d = a.children[e++];)h(d, b, c)
        }

        function i(a, b) {
            if (a.children && a.children.length)for (var c, d = 0; c = a.children[d];)i(c, b), c.parentNode && (c.children && c.children.length && b(c), c.parentNode && d++); else b(a)
        }

        var j = UE.uNode = function (a) {
            this.type = a.type, this.data = a.data, this.tagName = a.tagName, this.parentNode = a.parentNode, this.attrs = a.attrs || {}, this.children = a.children
        }, k = {href: 1, src: 1, _src: 1, _href: 1, cdata_data: 1}, l = {style: 1, script: 1}, m = "    ", n = "\n";
        j.createElement = function (a) {
            return /[<>]/.test(a) ? UE.htmlparser(a).children[0] : new j({type: "element", children: [], tagName: a})
        }, j.createText = function (a, b) {
            return new UE.uNode({type: "text", data: b ? a : utils.unhtml(a || "")})
        }, j.prototype = {
            toHtml: function (a) {
                var b = [];
                return c(this, b, a, 0), b.join("")
            }, innerHTML: function (a) {
                if ("element" != this.type || dtd.$empty[this.tagName])return this;
                if (utils.isString(a)) {
                    if (this.children)for (var b, c = 0; b = this.children[c++];)b.parentNode = null;
                    this.children = [];
                    for (var b, d = UE.htmlparser(a), c = 0; b = d.children[c++];)this.children.push(b), b.parentNode = this;
                    return this
                }
                var d = new UE.uNode({type: "root", children: this.children});
                return d.toHtml()
            }, innerText: function (a, b) {
                if ("element" != this.type || dtd.$empty[this.tagName])return this;
                if (a) {
                    if (this.children)for (var c, d = 0; c = this.children[d++];)c.parentNode = null;
                    return this.children = [], this.appendChild(j.createText(a, b)), this
                }
                return this.toHtml().replace(/<[^>]+>/g, "")
            }, getData: function () {
                return "element" == this.type ? "" : this.data
            }, firstChild: function () {
                return this.children ? this.children[0] : null
            }, lastChild: function () {
                return this.children ? this.children[this.children.length - 1] : null
            }, previousSibling: function () {
                for (var a, b = this.parentNode, c = 0; a = b.children[c]; c++)if (a === this)return 0 == c ? null : b.children[c - 1]
            }, nextSibling: function () {
                for (var a, b = this.parentNode, c = 0; a = b.children[c++];)if (a === this)return b.children[c]
            }, replaceChild: function (a, b) {
                if (this.children) {
                    a.parentNode && a.parentNode.removeChild(a);
                    for (var c, d = 0; c = this.children[d]; d++)if (c === b)return this.children.splice(d, 1, a), b.parentNode = null, a.parentNode = this, a
                }
            }, appendChild: function (a) {
                if ("root" == this.type || "element" == this.type && !dtd.$empty[this.tagName]) {
                    this.children || (this.children = []), a.parentNode && a.parentNode.removeChild(a);
                    for (var b, c = 0; b = this.children[c]; c++)if (b === a) {
                        this.children.splice(c, 1);
                        break
                    }
                    return this.children.push(a), a.parentNode = this, a
                }
            }, insertBefore: function (a, b) {
                if (this.children) {
                    a.parentNode && a.parentNode.removeChild(a);
                    for (var c, d = 0; c = this.children[d]; d++)if (c === b)return this.children.splice(d, 0, a), a.parentNode = this, a
                }
            }, insertAfter: function (a, b) {
                if (this.children) {
                    a.parentNode && a.parentNode.removeChild(a);
                    for (var c, d = 0; c = this.children[d]; d++)if (c === b)return this.children.splice(d + 1, 0, a), a.parentNode = this, a
                }
            }, removeChild: function (a, b) {
                if (this.children)for (var c, d = 0; c = this.children[d]; d++)if (c === a) {
                    if (this.children.splice(d, 1), c.parentNode = null, b && c.children && c.children.length)for (var e, f = 0; e = c.children[f]; f++)this.children.splice(d + f, 0, e), e.parentNode = this;
                    return c
                }
            }, getAttr: function (a) {
                return this.attrs && this.attrs[a.toLowerCase()]
            }, setAttr: function (a, b) {
                if (!a)return void delete this.attrs;
                if (this.attrs || (this.attrs = {}), utils.isObject(a))for (var c in a)a[c] ? this.attrs[c.toLowerCase()] = a[c] : delete this.attrs[c]; else b ? this.attrs[a.toLowerCase()] = b : delete this.attrs[a]
            }, getIndex: function () {
                for (var a, b = this.parentNode, c = 0; a = b.children[c]; c++)if (a === this)return c;
                return -1
            }, getNodeById: function (a) {
                var b;
                if (this.children && this.children.length)for (var c, d = 0; c = this.children[d++];)if (b = g(c, a))return b
            }, getNodesByTagName: function (a) {
                a = utils.trim(a).replace(/[ ]{2,}/g, " ").split(" ");
                var b = [], c = this;
                return utils.each(a, function (a) {
                    if (c.children && c.children.length)for (var d, e = 0; d = c.children[e++];)h(d, a, b)
                }), b
            }, getStyle: function (a) {
                var b = this.getAttr("style");
                if (!b)return "";
                var c = new RegExp("(^|;)\\s*" + a + ":([^;]+)", "i"), d = b.match(c);
                return d && d[0] ? d[2] : ""
            }, setStyle: function (a, b) {
                function c(a, b) {
                    var c = new RegExp("(^|;)\\s*" + a + ":([^;]+;?)", "gi");
                    d = d.replace(c, "$1"), b && (d = a + ":" + utils.unhtml(b) + ";" + d)
                }

                var d = this.getAttr("style");
                if (d || (d = ""), utils.isObject(a))for (var e in a)c(e, a[e]); else c(a, b);
                this.setAttr("style", utils.trim(d))
            }, traversal: function (a) {
                return this.children && this.children.length && i(this, a), this
            }
        }
    }();
    var htmlparser = UE.htmlparser = function (a, b) {
        function c(a, b) {
            if (m[a.tagName]) {
                var c = k.createElement(m[a.tagName]);
                a.appendChild(c), c.appendChild(k.createText(b)), a = c
            } else a.appendChild(k.createText(b))
        }

        function d(a, b, c) {
            var e;
            if (e = l[b]) {
                for (var f, h = a; "root" != h.type;) {
                    if (utils.isArray(e) ? -1 != utils.indexOf(e, h.tagName) : e == h.tagName) {
                        a = h, f = !0;
                        break
                    }
                    h = h.parentNode
                }
                f || (a = d(a, utils.isArray(e) ? e[0] : e))
            }
            var i = new k({
                parentNode: a,
                type: "element",
                tagName: b.toLowerCase(),
                children: dtd.$empty[b] ? null : []
            });
            if (c) {
                for (var m, n = {}; m = g.exec(c);)n[m[1].toLowerCase()] = j[m[1].toLowerCase()] ? m[2] || m[3] || m[4] : utils.unhtml(m[2] || m[3] || m[4]);
                i.attrs = n
            }
            return a.children.push(i), dtd.$empty[b] ? a : i
        }

        function e(a, b) {
            a.children.push(new k({type: "comment", data: b, parentNode: a}))
        }

        var f = /<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)-->)|(?:([^\s\/<>]+)\s*((?:(?:"[^"]*")|(?:'[^']*')|[^"'<>])*)\/?>))/g, g = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g, h = {
            b: 1,
            code: 1,
            i: 1,
            u: 1,
            strike: 1,
            s: 1,
            tt: 1,
            strong: 1,
            q: 1,
            samp: 1,
            em: 1,
            span: 1,
            sub: 1,
            img: 1,
            sup: 1,
            font: 1,
            big: 1,
            small: 1,
            iframe: 1,
            a: 1,
            br: 1,
            pre: 1
        };
        a = a.replace(new RegExp(domUtils.fillChar, "g"), ""), b || (a = a.replace(new RegExp("[\\r\\t\\n" + (b ? "" : " ") + "]*</?(\\w+)\\s*(?:[^>]*)>[\\r\\t\\n" + (b ? "" : " ") + "]*", "g"), function (a, c) {
            return c && h[c.toLowerCase()] ? a.replace(/(^[\n\r]+)|([\n\r]+$)/g, "") : a.replace(new RegExp("^[\\r\\n" + (b ? "" : " ") + "]+"), "").replace(new RegExp("[\\r\\n" + (b ? "" : " ") + "]+$"), "")
        }));
        for (var i, j = {href: 1, src: 1}, k = UE.uNode, l = {
            td: "tr",
            tr: ["tbody", "thead", "tfoot"],
            tbody: "table",
            th: "tr",
            thead: "table",
            tfoot: "table",
            caption: "table",
            li: ["ul", "ol"],
            dt: "dl",
            dd: "dl",
            option: "select"
        }, m = {ol: "li", ul: "li"}, n = 0, o = 0, p = new k({type: "root", children: []}), q = p; i = f.exec(a);) {
            n = i.index;
            try {
                if (n > o && c(q, a.slice(o, n)), i[3])dtd.$cdata[q.tagName] ? c(q, i[0]) : q = d(q, i[3].toLowerCase(), i[4]); else if (i[1]) {
                    if ("root" != q.type)if (dtd.$cdata[q.tagName] && !dtd.$cdata[i[1]])c(q, i[0]); else {
                        for (var r = q; "element" == q.type && q.tagName != i[1].toLowerCase();)if (q = q.parentNode, "root" == q.type)throw q = r, "break";
                        q = q.parentNode
                    }
                } else i[2] && e(q, i[2])
            } catch (s) {
            }
            o = f.lastIndex
        }
        return o < a.length && c(q, a.slice(o)), p
    }, filterNode = UE.filterNode = function () {
        function a(b, c) {
            switch (b.type) {
                case"text":
                    break;
                case"element":
                    var d;
                    if (d = c[b.tagName])if ("-" === d)b.parentNode.removeChild(b); else if (utils.isFunction(d)) {
                        var e = b.parentNode, f = b.getIndex();
                        if (d(b), b.parentNode) {
                            if (b.children)for (var g, h = 0; g = b.children[h];)a(g, c), g.parentNode && h++
                        } else for (var g, h = f; g = e.children[h];)a(g, c), g.parentNode && h++
                    } else {
                        var i = d.$;
                        if (i && b.attrs) {
                            var j, k = {};
                            for (var l in i) {
                                if (j = b.getAttr(l), "style" == l && utils.isArray(i[l])) {
                                    var m = [];
                                    utils.each(i[l], function (a) {
                                        var c;
                                        (c = b.getStyle(a)) && m.push(a + ":" + c)
                                    }), j = m.join(";")
                                }
                                j && (k[l] = j)
                            }
                            b.attrs = k
                        }
                        if (b.children)for (var g, h = 0; g = b.children[h];)a(g, c), g.parentNode && h++
                    } else if (dtd.$cdata[b.tagName])b.parentNode.removeChild(b); else {
                        var e = b.parentNode, f = b.getIndex();
                        b.parentNode.removeChild(b, !0);
                        for (var g, h = f; g = e.children[h];)a(g, c), g.parentNode && h++
                    }
                    break;
                case"comment":
                    b.parentNode.removeChild(b)
            }
        }

        return function (b, c) {
            if (utils.isEmptyObject(c))return b;
            var d;
            (d = c["-"]) && utils.each(d.split(" "), function (a) {
                c[a] = "-"
            });
            for (var e, f = 0; e = b.children[f];)a(e, c), e.parentNode && f++;
            return b
        }
    }();
    UE.plugin = function () {
        var a = {};
        return {
            register: function (b, c, d, e) {
                d && utils.isFunction(d) && (e = d, d = null), a[b] = {optionName: d || b, execFn: c, afterDisabled: e}
            }, load: function (b) {
                utils.each(a, function (a) {
                    var c = a.execFn.call(b);
                    b.options[a.optionName] !== !1 ? c && utils.each(c, function (a, c) {
                        switch (c.toLowerCase()) {
                            case"shortcutkey":
                                b.addshortcutkey(a);
                                break;
                            case"bindevents":
                                utils.each(a, function (a, c) {
                                    b.addListener(c, a)
                                });
                                break;
                            case"bindmultievents":
                                utils.each(utils.isArray(a) ? a : [a], function (a) {
                                    var c = utils.trim(a.type).split(/\s+/);
                                    utils.each(c, function (c) {
                                        b.addListener(c, a.handler)
                                    })
                                });
                                break;
                            case"commands":
                                utils.each(a, function (a, c) {
                                    b.commands[c] = a
                                });
                                break;
                            case"outputrule":
                                b.addOutputRule(a);
                                break;
                            case"inputrule":
                                b.addInputRule(a);
                                break;
                            case"defaultoptions":
                                b.setOpt(a)
                        }
                    }) : a.afterDisabled && a.afterDisabled.call(b)
                }), utils.each(UE.plugins, function (a) {
                    a.call(b)
                })
            }, run: function (b, c) {
                var d = a[b];
                d && d.exeFn.call(c)
            }
        }
    }();
    var keymap = UE.keymap = {
        Backspace: 8,
        Tab: 9,
        Enter: 13,
        Shift: 16,
        Control: 17,
        Alt: 18,
        CapsLock: 20,
        Esc: 27,
        Spacebar: 32,
        PageUp: 33,
        PageDown: 34,
        End: 35,
        Home: 36,
        Left: 37,
        Up: 38,
        Right: 39,
        Down: 40,
        Insert: 45,
        Del: 46,
        NumLock: 144,
        Cmd: 91,
        "=": 187,
        "-": 189,
        b: 66,
        i: 73,
        z: 90,
        y: 89,
        v: 86,
        x: 88,
        s: 83,
        n: 78
    }, LocalStorage = UE.LocalStorage = function () {
        function a() {
            var a = document.createElement("div");
            return a.style.display = "none", a.addBehavior ? (a.addBehavior("#default#userdata"), {
                getItem: function (b) {
                    var d = null;
                    try {
                        document.body.appendChild(a), a.load(c), d = a.getAttribute(b), document.body.removeChild(a)
                    } catch (e) {
                    }
                    return d
                }, setItem: function (b, d) {
                    document.body.appendChild(a), a.setAttribute(b, d), a.save(c), document.body.removeChild(a)
                }, removeItem: function (b) {
                    document.body.appendChild(a), a.removeAttribute(b), a.save(c), document.body.removeChild(a)
                }
            }) : null
        }

        var b = window.localStorage || a() || null, c = "localStorage";
        return {
            saveLocalData: function (a, c) {
                return b && c ? (b.setItem(a, c), !0) : !1
            }, getLocalData: function (a) {
                return b ? b.getItem(a) : null
            }, removeItem: function (a) {
                b && b.removeItem(a)
            }
        }
    }();
    !function () {
        var a = "ueditor_preference";
        UE.Editor.prototype.setPreferences = function (b, c) {
            var d = {};
            utils.isString(b) ? d[b] = c : d = b;
            var e = LocalStorage.getLocalData(a);
            e && (e = utils.str2json(e)) ? utils.extend(e, d) : e = d, e && LocalStorage.saveLocalData(a, utils.json2str(e))
        }, UE.Editor.prototype.getPreferences = function (b) {
            var c = LocalStorage.getLocalData(a);
            return c && (c = utils.str2json(c)) ? b ? c[b] : c : null
        }, UE.Editor.prototype.removePreferences = function (b) {
            var c = LocalStorage.getLocalData(a);
            c && (c = utils.str2json(c)) && (c[b] = void 0, delete c[b]), c && LocalStorage.saveLocalData(a, utils.json2str(c))
        }
    }(), UE.plugins.defaultfilter = function () {
        var a = this;
        a.setOpt({allowDivTransToP: !0, disabledTableInTable: !0}), a.addInputRule(function (b) {
            function c(a) {
                for (; a && "element" == a.type;) {
                    if ("td" == a.tagName)return !0;
                    a = a.parentNode
                }
                return !1
            }

            var d, e = this.options.allowDivTransToP;
            b.traversal(function (b) {
                if ("element" == b.type) {
                    if (!dtd.$cdata[b.tagName] && a.options.autoClearEmptyNode && dtd.$inline[b.tagName] && !dtd.$empty[b.tagName] && (!b.attrs || utils.isEmptyObject(b.attrs)))return void(b.firstChild() ? "span" != b.tagName || b.attrs && !utils.isEmptyObject(b.attrs) || b.parentNode.removeChild(b, !0) : b.parentNode.removeChild(b));
                    switch (b.tagName) {
                        case"style":
                        case"script":
                            b.setAttr({
                                cdata_tag: b.tagName,
                                cdata_data: b.innerHTML() || "",
                                _ue_custom_node_: "true"
                            }), b.tagName = "div", b.innerHTML("");
                            break;
                        case"a":
                            (d = b.getAttr("href")) && b.setAttr("_href", d);
                            break;
                        case"img":
                            if ((d = b.getAttr("src")) && /^data:/.test(d)) {
                                b.parentNode.removeChild(b);
                                break
                            }
                            b.setAttr("_src", b.getAttr("src"));
                            break;
                        case"span":
                            browser.webkit && (d = b.getStyle("white-space")) && /nowrap|normal/.test(d) && (b.setStyle("white-space", ""), a.options.autoClearEmptyNode && utils.isEmptyObject(b.attrs) && b.parentNode.removeChild(b, !0)), d = b.getAttr("id"), d && /^_baidu_bookmark_/i.test(d) && b.parentNode.removeChild(b);
                            break;
                        case"p":
                            (d = b.getAttr("align")) && (b.setAttr("align"), b.setStyle("text-align", d)), utils.each(b.children, function (a) {
                                if ("element" == a.type && "p" == a.tagName) {
                                    var c = a.nextSibling();
                                    b.parentNode.insertAfter(a, b);
                                    for (var d = a; c;) {
                                        var e = c.nextSibling();
                                        b.parentNode.insertAfter(c, d), d = c, c = e
                                    }
                                    return !1
                                }
                            }), b.firstChild() || b.innerHTML(browser.ie ? "&nbsp;" : "<br/>");
                            break;
                        case"div":
                            if (b.getAttr("cdata_tag"))break;
                            if (d = b.getAttr("class"), d && /^line number\d+/.test(d))break;
                            if (!e)break;
                            for (var f, g = UE.uNode.createElement("p"); f = b.firstChild();)"text" != f.type && UE.dom.dtd.$block[f.tagName] ? g.firstChild() ? (b.parentNode.insertBefore(g, b), g = UE.uNode.createElement("p")) : b.parentNode.insertBefore(f, b) : g.appendChild(f);
                            g.firstChild() && b.parentNode.insertBefore(g, b), b.parentNode.removeChild(b);
                            break;
                        case"dl":
                            b.tagName = "ul";
                            break;
                        case"dt":
                        case"dd":
                            b.tagName = "li";
                            break;
                        case"li":
                            var h = b.getAttr("class");
                            h && /list\-/.test(h) || b.setAttr();
                            var i = b.getNodesByTagName("ol ul");
                            UE.utils.each(i, function (a) {
                                b.parentNode.insertAfter(a, b)
                            });
                            break;
                        case"td":
                        case"th":
                        case"caption":
                            b.children && b.children.length || b.appendChild(browser.ie11below ? UE.uNode.createText(" ") : UE.uNode.createElement("br"));
                            break;
                        case"table":
                            a.options.disabledTableInTable && c(b) && (b.parentNode.insertBefore(UE.uNode.createText(b.innerText()), b), b.parentNode.removeChild(b))
                    }
                }
            })
        }), a.addOutputRule(function (b) {
            var c;
            b.traversal(function (b) {
                if ("element" == b.type) {
                    if (a.options.autoClearEmptyNode && dtd.$inline[b.tagName] && !dtd.$empty[b.tagName] && (!b.attrs || utils.isEmptyObject(b.attrs)))return void(b.firstChild() ? "span" != b.tagName || b.attrs && !utils.isEmptyObject(b.attrs) || b.parentNode.removeChild(b, !0) : b.parentNode.removeChild(b));
                    switch (b.tagName) {
                        case"div":
                            (c = b.getAttr("cdata_tag")) && (b.tagName = c, b.appendChild(UE.uNode.createText(b.getAttr("cdata_data"))), b.setAttr({
                                cdata_tag: "",
                                cdata_data: "",
                                _ue_custom_node_: ""
                            }));
                            break;
                        case"a":
                            (c = b.getAttr("_href")) && b.setAttr({href: utils.html(c), _href: ""});
                            break;
                        case"span":
                            c = b.getAttr("id"), c && /^_baidu_bookmark_/i.test(c) && b.parentNode.removeChild(b);
                            break;
                        case"img":
                            (c = b.getAttr("_src")) && b.setAttr({src: b.getAttr("_src"), _src: ""})
                    }
                }
            })
        })
    }, UE.commands.inserthtml = {
        execCommand: function (a, b, c) {
            var d, e, f = this;
            if (b && f.fireEvent("beforeinserthtml", b) !== !0) {
                if (d = f.selection.getRange(), e = d.document.createElement("div"), e.style.display = "inline", !c) {
                    var g = UE.htmlparser(b);
                    f.options.filterRules && UE.filterNode(g, f.options.filterRules), f.filterInputRule(g), b = g.toHtml()
                }
                if (e.innerHTML = utils.trim(b), !d.collapsed) {
                    var h = d.startContainer;
                    if (domUtils.isFillChar(h) && d.setStartBefore(h), h = d.endContainer, domUtils.isFillChar(h) && d.setEndAfter(h), d.txtToElmBoundary(), d.endContainer && 1 == d.endContainer.nodeType && (h = d.endContainer.childNodes[d.endOffset], h && domUtils.isBr(h) && d.setEndAfter(h)), 0 == d.startOffset && (h = d.startContainer, domUtils.isBoundaryNode(h, "firstChild") && (h = d.endContainer, d.endOffset == (3 == h.nodeType ? h.nodeValue.length : h.childNodes.length) && domUtils.isBoundaryNode(h, "lastChild") && (f.body.innerHTML = "<p>" + (browser.ie ? "" : "<br/>") + "</p>", d.setStart(f.body.firstChild, 0).collapse(!0)))), !d.collapsed && d.deleteContents(), 1 == d.startContainer.nodeType) {
                        var i, j = d.startContainer.childNodes[d.startOffset];
                        if (j && domUtils.isBlockElm(j) && (i = j.previousSibling) && domUtils.isBlockElm(i)) {
                            for (d.setEnd(i, i.childNodes.length).collapse(); j.firstChild;)i.appendChild(j.firstChild);
                            domUtils.remove(j)
                        }
                    }
                }
                var j, k, i, l, m, n = 0;
                d.inFillChar() && (j = d.startContainer, domUtils.isFillChar(j) ? (d.setStartBefore(j).collapse(!0), domUtils.remove(j)) : domUtils.isFillChar(j, !0) && (j.nodeValue = j.nodeValue.replace(fillCharReg, ""), d.startOffset--, d.collapsed && d.collapse(!0)));
                var o = domUtils.findParentByTagName(d.startContainer, "li", !0);
                if (o) {
                    for (var p, q; j = e.firstChild;) {
                        for (; j && (3 == j.nodeType || !domUtils.isBlockElm(j) || "HR" == j.tagName);)p = j.nextSibling, d.insertNode(j).collapse(), q = j, j = p;
                        if (j)if (/^(ol|ul)$/i.test(j.tagName)) {
                            for (; j.firstChild;)q = j.firstChild, domUtils.insertAfter(o, j.firstChild), o = o.nextSibling;
                            domUtils.remove(j)
                        } else {
                            var r;
                            p = j.nextSibling, r = f.document.createElement("li"), domUtils.insertAfter(o, r), r.appendChild(j), q = j, j = p, o = r
                        }
                    }
                    o = domUtils.findParentByTagName(d.startContainer, "li", !0), domUtils.isEmptyBlock(o) && domUtils.remove(o), q && d.setStartAfter(q).collapse(!0).select(!0)
                } else {
                    for (; j = e.firstChild;) {
                        if (n) {
                            for (var s = f.document.createElement("p"); j && (3 == j.nodeType || !dtd.$block[j.tagName]);)m = j.nextSibling, s.appendChild(j), j = m;
                            s.firstChild && (j = s)
                        }
                        if (d.insertNode(j), m = j.nextSibling, !n && j.nodeType == domUtils.NODE_ELEMENT && domUtils.isBlockElm(j) && (k = domUtils.findParent(j, function (a) {
                                return domUtils.isBlockElm(a)
                            }), k && "body" != k.tagName.toLowerCase() && (!dtd[k.tagName][j.nodeName] || j.parentNode !== k))) {
                            if (dtd[k.tagName][j.nodeName])for (l = j.parentNode; l !== k;)i = l, l = l.parentNode; else i = k;
                            domUtils.breakParent(j, i || l);
                            var i = j.previousSibling;
                            domUtils.trimWhiteTextNode(i), i.childNodes.length || domUtils.remove(i), !browser.ie && (p = j.nextSibling) && domUtils.isBlockElm(p) && p.lastChild && !domUtils.isBr(p.lastChild) && p.appendChild(f.document.createElement("br")), n = 1
                        }
                        var p = j.nextSibling;
                        if (!e.firstChild && p && domUtils.isBlockElm(p)) {
                            d.setStart(p, 0).collapse(!0);
                            break
                        }
                        d.setEndAfter(j).collapse()
                    }
                    if (j = d.startContainer, m && domUtils.isBr(m) && domUtils.remove(m), domUtils.isBlockElm(j) && domUtils.isEmptyNode(j))if (m = j.nextSibling)domUtils.remove(j), 1 == m.nodeType && dtd.$block[m.tagName] && d.setStart(m, 0).collapse(!0).shrinkBoundary(); else try {
                        j.innerHTML = browser.ie ? domUtils.fillChar : "<br/>"
                    } catch (t) {
                        d.setStartBefore(j), domUtils.remove(j)
                    }
                    try {
                        d.select(!0)
                    } catch (t) {
                    }
                }
                setTimeout(function () {
                    d = f.selection.getRange(), d.scrollToView(f.autoHeightEnabled, f.autoHeightEnabled ? domUtils.getXY(f.iframe).y : 0), f.fireEvent("afterinserthtml", b)
                }, 200)
            }
        }
    }, UE.plugins.autotypeset = function () {
        function a(a, b) {
            return a && 3 != a.nodeType ? domUtils.isBr(a) ? 1 : a && a.parentNode && l[a.tagName.toLowerCase()] ? g && g.contains(a) || a.getAttribute("pagebreak") ? 0 : b ? !domUtils.isEmptyBlock(a) : domUtils.isEmptyBlock(a, new RegExp("[\\s" + domUtils.fillChar + "]", "g")) : void 0 : 0
        }

        function b(a) {
            a.style.cssText || (domUtils.removeAttributes(a, ["style"]), "span" == a.tagName.toLowerCase() && domUtils.hasNoAttributes(a) && domUtils.remove(a, !0))
        }

        function c(c, f) {
            var h, l = this;
            if (f) {
                if (!i.pasteFilter)return;
                h = l.document.createElement("div"), h.innerHTML = f.html
            } else h = l.document.body;
            for (var m, n = domUtils.getElementsByTagName(h, "*"), o = 0; m = n[o++];)if (l.fireEvent("excludeNodeinautotype", m) !== !0) {
                if (i.clearFontSize && m.style.fontSize && (domUtils.removeStyle(m, "font-size"), b(m)), i.clearFontFamily && m.style.fontFamily && (domUtils.removeStyle(m, "font-family"), b(m)), a(m)) {
                    if (i.mergeEmptyline)for (var p, q = m.nextSibling, r = domUtils.isBr(m); a(q) && (p = q, q = p.nextSibling, !r || q && (!q || domUtils.isBr(q)));)domUtils.remove(p);
                    if (i.removeEmptyline && domUtils.inDoc(m, h) && !k[m.parentNode.tagName.toLowerCase()]) {
                        if (domUtils.isBr(m) && (q = m.nextSibling, q && !domUtils.isBr(q)))continue;
                        domUtils.remove(m);
                        continue
                    }
                }
                if (a(m, !0) && "SPAN" != m.tagName && (i.indent && (m.style.textIndent = i.indentValue), i.textAlign && (m.style.textAlign = i.textAlign)), i.removeClass && m.className && !j[m.className.toLowerCase()]) {
                    if (g && g.contains(m))continue;
                    domUtils.removeAttributes(m, ["class"])
                }
                if (i.imageBlockLine && "img" == m.tagName.toLowerCase() && !m.getAttribute("emotion"))if (f) {
                    var s = m;
                    switch (i.imageBlockLine) {
                        case"left":
                        case"right":
                        case"none":
                            for (var p, t, q, u = s.parentNode; dtd.$inline[u.tagName] || "A" == u.tagName;)u = u.parentNode;
                            if (p = u, "P" == p.tagName && "center" == domUtils.getStyle(p, "text-align") && !domUtils.isBody(p) && 1 == domUtils.getChildCount(p, function (a) {
                                    return !domUtils.isBr(a) && !domUtils.isWhitespace(a)
                                }))if (t = p.previousSibling, q = p.nextSibling, t && q && 1 == t.nodeType && 1 == q.nodeType && t.tagName == q.tagName && domUtils.isBlockElm(t)) {
                                for (t.appendChild(p.firstChild); q.firstChild;)t.appendChild(q.firstChild);
                                domUtils.remove(p), domUtils.remove(q)
                            } else domUtils.setStyle(p, "text-align", "");
                            domUtils.setStyle(s, "float", i.imageBlockLine);
                            break;
                        case"center":
                            if ("center" != l.queryCommandValue("imagefloat")) {
                                for (u = s.parentNode, domUtils.setStyle(s, "float", "none"), p = s; u && 1 == domUtils.getChildCount(u, function (a) {
                                    return !domUtils.isBr(a) && !domUtils.isWhitespace(a)
                                }) && (dtd.$inline[u.tagName] || "A" == u.tagName);)p = u, u = u.parentNode;
                                var v = l.document.createElement("p");
                                domUtils.setAttributes(v, {style: "text-align:center"}), p.parentNode.insertBefore(v, p), v.appendChild(p), domUtils.setStyle(p, "float", "")
                            }
                    }
                } else {
                    var w = l.selection.getRange();
                    w.selectNode(m).select(), l.execCommand("imagefloat", i.imageBlockLine)
                }
                i.removeEmptyNode && i.removeTagNames[m.tagName.toLowerCase()] && domUtils.hasNoAttributes(m) && domUtils.isEmptyBlock(m) && domUtils.remove(m)
            }
            if (i.tobdc) {
                var x = UE.htmlparser(h.innerHTML);
                x.traversal(function (a) {
                    "text" == a.type && (a.data = e(a.data))
                }), h.innerHTML = x.toHtml()
            }
            if (i.bdc2sb) {
                var x = UE.htmlparser(h.innerHTML);
                x.traversal(function (a) {
                    "text" == a.type && (a.data = d(a.data))
                }), h.innerHTML = x.toHtml()
            }
            f && (f.html = h.innerHTML)
        }

        function d(a) {
            for (var b = "", c = 0; c < a.length; c++) {
                var d = a.charCodeAt(c);
                b += d >= 65281 && 65373 >= d ? String.fromCharCode(a.charCodeAt(c) - 65248) : 12288 == d ? String.fromCharCode(a.charCodeAt(c) - 12288 + 32) : a.charAt(c)
            }
            return b
        }

        function e(a) {
            a = utils.html(a);
            for (var b = "", c = 0; c < a.length; c++)b += 32 == a.charCodeAt(c) ? String.fromCharCode(12288) : a.charCodeAt(c) < 127 ? String.fromCharCode(a.charCodeAt(c) + 65248) : a.charAt(c);
            return b
        }

        function f() {
            var a = h.getPreferences("autotypeset");
            utils.extend(h.options.autotypeset, a)
        }

        this.setOpt({
            autotypeset: {
                mergeEmptyline: !0,
                removeClass: !0,
                removeEmptyline: !1,
                textAlign: "left",
                imageBlockLine: "center",
                pasteFilter: !1,
                clearFontSize: !1,
                clearFontFamily: !1,
                removeEmptyNode: !1,
                removeTagNames: utils.extend({div: 1}, dtd.$removeEmpty),
                indent: !1,
                indentValue: "2em",
                bdc2sb: !1,
                tobdc: !1
            }
        });
        var g, h = this, i = h.options.autotypeset, j = {
            selectTdClass: 1,
            pagebreak: 1,
            anchorclass: 1
        }, k = {li: 1}, l = {div: 1, p: 1, blockquote: 1, center: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, span: 1};
        i && (f(), i.pasteFilter && h.addListener("beforepaste", c), h.commands.autotypeset = {
            execCommand: function () {
                h.removeListener("beforepaste", c), i.pasteFilter && h.addListener("beforepaste", c), c.call(h)
            }
        })
    }, UE.plugin.register("autosubmit", function () {
        return {
            shortcutkey: {autosubmit: "ctrl+13"}, commands: {
                autosubmit: {
                    execCommand: function () {
                        var a = this, b = domUtils.findParentByTagName(a.iframe, "form", !1);
                        if (b) {
                            if (a.fireEvent("beforesubmit") === !1)return;
                            a.sync(), b.submit()
                        }
                    }
                }
            }
        }
    }), UE.plugin.register("background", function () {
        function a(a) {
            var b = {}, c = a.split(";");
            return utils.each(c, function (a) {
                var c = a.indexOf(":"), d = utils.trim(a.substr(0, c)).toLowerCase();
                d && (b[d] = utils.trim(a.substr(c + 1) || ""))
            }), b
        }

        function b(a) {
            if (a) {
                var b = [];
                for (var c in a)a.hasOwnProperty(c) && b.push(c + ":" + a[c] + "; ");
                utils.cssRule(e, b.length ? "body{" + b.join("") + "}" : "", d.document)
            } else utils.cssRule(e, "", d.document)
        }

        var c, d = this, e = "editor_background", f = new RegExp("body[\\s]*\\{(.+)\\}", "i"), g = d.hasContents;
        return d.hasContents = function () {
            return d.queryCommandValue("background") ? !0 : g.apply(d, arguments)
        }, {
            bindEvents: {
                getAllHtml: function (a, b) {
                    var c = this.body, e = domUtils.getComputedStyle(c, "background-image"), f = "";
                    f = e.indexOf(d.options.imagePath) > 0 ? e.substring(e.indexOf(d.options.imagePath), e.length - 1).replace(/"|\(|\)/gi, "") : "none" != e ? e.replace(/url\("?|"?\)/gi, "") : "";
                    var g = '<style type="text/css">body{', h = {
                        "background-color": domUtils.getComputedStyle(c, "background-color") || "#ffffff",
                        "background-image": f ? "url(" + f + ")" : "",
                        "background-repeat": domUtils.getComputedStyle(c, "background-repeat") || "",
                        "background-position": browser.ie ? domUtils.getComputedStyle(c, "background-position-x") + " " + domUtils.getComputedStyle(c, "background-position-y") : domUtils.getComputedStyle(c, "background-position"),
                        height: domUtils.getComputedStyle(c, "height")
                    };
                    for (var i in h)h.hasOwnProperty(i) && (g += i + ":" + h[i] + "; ");
                    g += "}</style> ", b.push(g)
                }, aftersetcontent: function () {
                    0 == c && b()
                }
            }, inputRule: function (d) {
                c = !1, utils.each(d.getNodesByTagName("p"), function (d) {
                    var e = d.getAttr("data-background");
                    e && (c = !0, b(a(e)), d.parentNode.removeChild(d))
                })
            }, outputRule: function (a) {
                var b = this, c = (utils.cssRule(e, b.document) || "").replace(/[\n\r]+/g, "").match(f);
                c && a.appendChild(UE.uNode.createElement('<p style="display:none;" data-background="' + utils.trim(c[1].replace(/"/g, "").replace(/[\s]+/g, " ")) + '"><br/></p>'))
            }, commands: {
                background: {
                    execCommand: function (a, c) {
                        b(c)
                    }, queryCommandValue: function () {
                        var b = this, c = (utils.cssRule(e, b.document) || "").replace(/[\n\r]+/g, "").match(f);
                        return c ? a(c[1]) : null
                    }, notNeedUndo: !0
                }
            }
        }
    }), UE.commands.imagefloat = {
        execCommand: function (a, b) {
            var c = this, d = c.selection.getRange();
            if (!d.collapsed) {
                var e = d.getClosedNode();
                if (e && "IMG" == e.tagName)switch (b) {
                    case"left":
                    case"right":
                    case"none":
                        for (var f, g, h, i = e.parentNode; dtd.$inline[i.tagName] || "A" == i.tagName;)i = i.parentNode;
                        if (f = i, "P" == f.tagName && "center" == domUtils.getStyle(f, "text-align")) {
                            if (!domUtils.isBody(f) && 1 == domUtils.getChildCount(f, function (a) {
                                    return !domUtils.isBr(a) && !domUtils.isWhitespace(a)
                                }))if (g = f.previousSibling, h = f.nextSibling, g && h && 1 == g.nodeType && 1 == h.nodeType && g.tagName == h.tagName && domUtils.isBlockElm(g)) {
                                for (g.appendChild(f.firstChild); h.firstChild;)g.appendChild(h.firstChild);
                                domUtils.remove(f), domUtils.remove(h)
                            } else domUtils.setStyle(f, "text-align", "");
                            d.selectNode(e).select()
                        }
                        domUtils.setStyle(e, "float", "none" == b ? "" : b), "none" == b && domUtils.removeAttributes(e, "align");
                        break;
                    case"center":
                        if ("center" != c.queryCommandValue("imagefloat")) {
                            for (i = e.parentNode, domUtils.setStyle(e, "float", ""), domUtils.removeAttributes(e, "align"), f = e; i && 1 == domUtils.getChildCount(i, function (a) {
                                return !domUtils.isBr(a) && !domUtils.isWhitespace(a)
                            }) && (dtd.$inline[i.tagName] || "A" == i.tagName);)f = i, i = i.parentNode;
                            d.setStartBefore(f).setCursor(!1), i = c.document.createElement("div"), i.appendChild(f), domUtils.setStyle(f, "float", ""), c.execCommand("insertHtml", '<p id="_img_parent_tmp" style="text-align:center">' + i.innerHTML + "</p>"), f = c.document.getElementById("_img_parent_tmp"), f.removeAttribute("id"), f = f.firstChild, d.selectNode(f).select(), h = f.parentNode.nextSibling, h && domUtils.isEmptyNode(h) && domUtils.remove(h)
                        }
                }
            }
        }, queryCommandValue: function () {
            var a, b, c = this.selection.getRange();
            return c.collapsed ? "none" : (a = c.getClosedNode(), a && 1 == a.nodeType && "IMG" == a.tagName ? (b = domUtils.getComputedStyle(a, "float") || a.getAttribute("align"), "none" == b && (b = "center" == domUtils.getComputedStyle(a.parentNode, "text-align") ? "center" : b), {
                left: 1,
                right: 1,
                center: 1
            }[b] ? b : "none") : "none")
        }, queryCommandState: function () {
            var a, b = this.selection.getRange();
            return b.collapsed ? -1 : (a = b.getClosedNode(), a && 1 == a.nodeType && "IMG" == a.tagName ? 0 : -1)
        }
    }, UE.commands.insertimage = {
        execCommand: function (a, b) {
            function c(a) {
                utils.each("width,height,border,hspace,vspace".split(","), function (b) {
                    a[b] && (a[b] = parseInt(a[b], 10) || 0)
                }), utils.each("src,_src".split(","), function (b) {
                    a[b] && (a[b] = utils.unhtmlForUrl(a[b]))
                }), utils.each("title,alt".split(","), function (b) {
                    a[b] && (a[b] = utils.unhtml(a[b]))
                })
            }

            if (b = utils.isArray(b) ? b : [b], b.length) {
                var d = this, e = d.selection.getRange(), f = e.getClosedNode();
                if (d.fireEvent("beforeinsertimage", b) !== !0) {
                    if (!f || !/img/i.test(f.tagName) || "edui-faked-video" == f.className && -1 == f.className.indexOf("edui-upload-video") || f.getAttribute("word_img")) {
                        var g, h = [], i = "";
                        if (g = b[0], 1 == b.length)c(g), i = '<img src="' + g.src + '" ' + (g._src ? ' _src="' + g._src + '" ' : "") + (g.width ? 'width="' + g.width + '" ' : "") + (g.height ? ' height="' + g.height + '" ' : "") + ("left" == g.floatStyle || "right" == g.floatStyle ? ' style="float:' + g.floatStyle + ';"' : "") + (g.title && "" != g.title ? ' title="' + g.title + '"' : "") + (g.border && "0" != g.border ? ' border="' + g.border + '"' : "") + (g.alt && "" != g.alt ? ' alt="' + g.alt + '"' : "") + (g.hspace && "0" != g.hspace ? ' hspace = "' + g.hspace + '"' : "") + (g.vspace && "0" != g.vspace ? ' vspace = "' + g.vspace + '"' : "") + "/>", "center" == g.floatStyle && (i = '<p style="text-align: center">' + i + "</p>"), h.push(i); else for (var j = 0; g = b[j++];)c(g), i = "<p " + ("center" == g.floatStyle ? 'style="text-align: center" ' : "") + '><img src="' + g.src + '" ' + (g.width ? 'width="' + g.width + '" ' : "") + (g._src ? ' _src="' + g._src + '" ' : "") + (g.height ? ' height="' + g.height + '" ' : "") + ' style="' + (g.floatStyle && "center" != g.floatStyle ? "float:" + g.floatStyle + ";" : "") + (g.border || "") + '" ' + (g.title ? ' title="' + g.title + '"' : "") + " /></p>", h.push(i);
                        d.execCommand("insertHtml", h.join(""))
                    } else {
                        var k = b.shift(), l = k.floatStyle;
                        delete k.floatStyle, domUtils.setAttributes(f, k), d.execCommand("imagefloat", l), b.length > 0 && (e.setStartAfter(f).setCursor(!1, !0), d.execCommand("insertimage", b))
                    }
                    d.fireEvent("afterinsertimage", b)
                }
            }
        }
    }, UE.plugins.justify = function () {
        var a = domUtils.isBlockElm, b = {left: 1, right: 1, center: 1, justify: 1}, c = function (b, c) {
            var d = b.createBookmark(), e = function (a) {
                return 1 == a.nodeType ? "br" != a.tagName.toLowerCase() && !domUtils.isBookmarkNode(a) : !domUtils.isWhitespace(a)
            };
            b.enlarge(!0);
            for (var f, g = b.createBookmark(), h = domUtils.getNextDomNode(g.start, !1, e), i = b.cloneRange(); h && !(domUtils.getPosition(h, g.end) & domUtils.POSITION_FOLLOWING);)if (3 != h.nodeType && a(h))h = domUtils.getNextDomNode(h, !0, e); else {
                for (i.setStartBefore(h); h && h !== g.end && !a(h);)f = h, h = domUtils.getNextDomNode(h, !1, null, function (b) {
                    return !a(b)
                });
                i.setEndAfter(f);
                var j = i.getCommonAncestor();
                if (!domUtils.isBody(j) && a(j))domUtils.setStyles(j, utils.isString(c) ? {"text-align": c} : c), h = j; else {
                    var k = b.document.createElement("p");
                    domUtils.setStyles(k, utils.isString(c) ? {"text-align": c} : c);
                    var l = i.extractContents();
                    k.appendChild(l), i.insertNode(k), h = k
                }
                h = domUtils.getNextDomNode(h, !1, e)
            }
            return b.moveToBookmark(g).moveToBookmark(d)
        };
        UE.commands.justify = {
            execCommand: function (a, b) {
                var d, e = this.selection.getRange();
                return e.collapsed && (d = this.document.createTextNode("p"), e.insertNode(d)), c(e, b), d && (e.setStartBefore(d).collapse(!0), domUtils.remove(d)), e.select(), !0
            }, queryCommandValue: function () {
                var a = this.selection.getStart(), c = domUtils.getComputedStyle(a, "text-align");
                return b[c] ? c : "left"
            }, queryCommandState: function () {
                var a = this.selection.getStart(), b = a && domUtils.findParentByTagName(a, ["td", "th", "caption"], !0);
                return b ? -1 : 0
            }
        }
    }, UE.plugins.font = function () {
        function a(a) {
            for (var b; (b = a.parentNode) && "SPAN" == b.tagName && 1 == domUtils.getChildCount(b, function (a) {
                return !domUtils.isBookmarkNode(a) && !domUtils.isBr(a)
            });)b.style.cssText += a.style.cssText, domUtils.remove(a, !0), a = b
        }

        function b(a, b, c) {
            if (g[b] && (a.adjustmentBoundary(), !a.collapsed && 1 == a.startContainer.nodeType)) {
                var d = a.startContainer.childNodes[a.startOffset];
                if (d && domUtils.isTagNode(d, "span")) {
                    var e = a.createBookmark();
                    utils.each(domUtils.getElementsByTagName(d, "span"), function (a) {
                        a.parentNode && !domUtils.isBookmarkNode(a) && ("backcolor" == b && domUtils.getComputedStyle(a, "background-color").toLowerCase() === c || (domUtils.removeStyle(a, g[b]), 0 == a.style.cssText.replace(/^\s+$/, "").length && domUtils.remove(a, !0)))
                    }), a.moveToBookmark(e)
                }
            }
        }

        function c(c, d, e) {
            var f, g = c.collapsed, h = c.createBookmark();
            if (g)for (f = h.start.parentNode; dtd.$inline[f.tagName];)f = f.parentNode; else f = domUtils.getCommonAncestor(h.start, h.end);
            utils.each(domUtils.getElementsByTagName(f, "span"), function (b) {
                if (b.parentNode && !domUtils.isBookmarkNode(b)) {
                    if (/\s*border\s*:\s*none;?\s*/i.test(b.style.cssText))return void(/^\s*border\s*:\s*none;?\s*$/.test(b.style.cssText) ? domUtils.remove(b, !0) : domUtils.removeStyle(b, "border"));
                    if (/border/i.test(b.style.cssText) && "SPAN" == b.parentNode.tagName && /border/i.test(b.parentNode.style.cssText) && (b.style.cssText = b.style.cssText.replace(/border[^:]*:[^;]+;?/gi, "")), "fontborder" != d || "none" != e)for (var c = b.nextSibling; c && 1 == c.nodeType && "SPAN" == c.tagName;)if (domUtils.isBookmarkNode(c) && "fontborder" == d)b.appendChild(c), c = b.nextSibling; else {
                        if (c.style.cssText == b.style.cssText && (domUtils.moveChild(c, b), domUtils.remove(c)), b.nextSibling === c)break;
                        c = b.nextSibling
                    }
                    if (a(b), browser.ie && browser.version > 8) {
                        var f = domUtils.findParent(b, function (a) {
                            return "SPAN" == a.tagName && /background-color/.test(a.style.cssText)
                        });
                        f && !/background-color/.test(b.style.cssText) && (b.style.backgroundColor = f.style.backgroundColor)
                    }
                }
            }), c.moveToBookmark(h), b(c, d, e)
        }

        var d = this, e = {
            forecolor: "color",
            backcolor: "background-color",
            fontsize: "font-size",
            fontfamily: "font-family",
            underline: "text-decoration",
            strikethrough: "text-decoration",
            fontborder: "border"
        }, f = {underline: 1, strikethrough: 1, fontborder: 1}, g = {
            forecolor: "color",
            backcolor: "background-color",
            fontsize: "font-size",
            fontfamily: "font-family"
        };
        d.setOpt({
            fontfamily: [{name: "songti", val: "ๅฎ‹ไฝ“,SimSun"}, {
                name: "yahei",
                val: "ๅพฎ่ฝฏ้›…้ป‘,Microsoft YaHei"
            }, {name: "kaiti", val: "ๆฅทไฝ“,ๆฅทไฝ“_GB2312, SimKai"}, {name: "heiti", val: "้ป‘ไฝ“, SimHei"}, {
                name: "lishu",
                val: "้šถไนฆ, SimLi"
            }, {name: "andaleMono", val: "andale mono"}, {
                name: "arial",
                val: "arial, helvetica,sans-serif"
            }, {name: "arialBlack", val: "arial black,avant garde"}, {
                name: "comicSansMs",
                val: "comic sans ms"
            }, {name: "impact", val: "impact,chicago"}, {name: "timesNewRoman", val: "times new roman"}],
            fontsize: [10, 11, 12, 14, 16, 18, 20, 24, 36]
        }), d.addInputRule(function (a) {
            utils.each(a.getNodesByTagName("u s del font strike"), function (a) {
                if ("font" == a.tagName) {
                    var b = [];
                    for (var c in a.attrs)switch (c) {
                        case"size":
                            b.push("font-size:" + ({
                                    1: "10",
                                    2: "12",
                                    3: "16",
                                    4: "18",
                                    5: "24",
                                    6: "32",
                                    7: "48"
                                }[a.attrs[c]] || a.attrs[c]) + "px");
                            break;
                        case"color":
                            b.push("color:" + a.attrs[c]);
                            break;
                        case"face":
                            b.push("font-family:" + a.attrs[c]);
                            break;
                        case"style":
                            b.push(a.attrs[c])
                    }
                    a.attrs = {style: b.join(";")}
                } else {
                    var d = "u" == a.tagName ? "underline" : "line-through";
                    a.attrs = {style: (a.getAttr("style") || "") + "text-decoration:" + d + ";"}
                }
                a.tagName = "span"
            })
        });
        for (var h in e)!function (a, b) {
            UE.commands[a] = {
                execCommand: function (d, e) {
                    e = e || (this.queryCommandState(d) ? "none" : "underline" == d ? "underline" : "fontborder" == d ? "1px solid #000" : "line-through");
                    var g, h = this, i = this.selection.getRange();
                    if ("default" == e)i.collapsed && (g = h.document.createTextNode("font"), i.insertNode(g).select()), h.execCommand("removeFormat", "span,a", b), g && (i.setStartBefore(g).collapse(!0), domUtils.remove(g)), c(i, d, e), i.select(); else if (i.collapsed) {
                        var j = domUtils.findParentByTagName(i.startContainer, "span", !0);
                        if (g = h.document.createTextNode("font"), !j || j.children.length || j[browser.ie ? "innerText" : "textContent"].replace(fillCharReg, "").length) {
                            if (i.insertNode(g), i.selectNode(g).select(), j = i.document.createElement("span"), f[a]) {
                                if (domUtils.findParentByTagName(g, "a", !0))return i.setStartBefore(g).setCursor(), void domUtils.remove(g);
                                h.execCommand("removeFormat", "span,a", b)
                            }
                            if (j.style.cssText = b + ":" + e, g.parentNode.insertBefore(j, g), !browser.ie || browser.ie && 9 == browser.version)for (var k = j.parentNode; !domUtils.isBlockElm(k);)"SPAN" == k.tagName && (j.style.cssText = k.style.cssText + ";" + j.style.cssText), k = k.parentNode;
                            opera ? setTimeout(function () {
                                i.setStart(j, 0).collapse(!0), c(i, d, e), i.select()
                            }) : (i.setStart(j, 0).collapse(!0), c(i, d, e), i.select())
                        } else i.insertNode(g), f[a] && (i.selectNode(g).select(), h.execCommand("removeFormat", "span,a", b, null), j = domUtils.findParentByTagName(g, "span", !0), i.setStartBefore(g)), j && (j.style.cssText += ";" + b + ":" + e), i.collapse(!0).select();
                        domUtils.remove(g)
                    } else f[a] && h.queryCommandValue(a) && h.execCommand("removeFormat", "span,a", b), i = h.selection.getRange(), i.applyInlineStyle("span", {style: b + ":" + e}), c(i, d, e), i.select();
                    return !0
                }, queryCommandValue: function (a) {
                    var c = this.selection.getStart();
                    if ("underline" == a || "strikethrough" == a) {
                        for (var d, e = c; e && !domUtils.isBlockElm(e) && !domUtils.isBody(e);) {
                            if (1 == e.nodeType && (d = domUtils.getComputedStyle(e, b), "none" != d))return d;
                            e = e.parentNode
                        }
                        return "none"
                    }
                    if ("fontborder" == a) {
                        for (var f, g = c; g && dtd.$inline[g.tagName];) {
                            if ((f = domUtils.getComputedStyle(g, "border")) && /1px/.test(f) && /solid/.test(f))return f;
                            g = g.parentNode
                        }
                        return ""
                    }
                    if ("FontSize" == a) {
                        var h = domUtils.getComputedStyle(c, b), g = /^([\d\.]+)(\w+)$/.exec(h);
                        return g ? Math.floor(g[1]) + g[2] : h
                    }
                    return domUtils.getComputedStyle(c, b)
                }, queryCommandState: function (a) {
                    if (!f[a])return 0;
                    var b = this.queryCommandValue(a);
                    return "fontborder" == a ? /1px/.test(b) && /solid/.test(b) : "underline" == a ? /underline/.test(b) : /line\-through/.test(b)
                }
            }
        }(h, e[h])
    }, UE.plugins.link = function () {
        function a(a) {
            var b = a.startContainer, c = a.endContainer;
            (b = domUtils.findParentByTagName(b, "a", !0)) && a.setStartBefore(b), (c = domUtils.findParentByTagName(c, "a", !0)) && a.setEndAfter(c)
        }

        function b(b, c, d) {
            var e = b.cloneRange(), f = d.queryCommandValue("link");
            a(b = b.adjustmentBoundary());
            var g = b.startContainer;
            if (1 == g.nodeType && f && (g = g.childNodes[b.startOffset], g && 1 == g.nodeType && "A" == g.tagName && /^(?:https?|ftp|file)\s*:\s*\/\//.test(g[browser.ie ? "innerText" : "textContent"]) && (g[browser.ie ? "innerText" : "textContent"] = utils.html(c.textValue || c.href))), e.collapsed && !f || (b.removeInlineStyle("a"), e = b.cloneRange()), e.collapsed) {
                var h = b.document.createElement("a"), i = "";
                c.textValue ? (i = utils.html(c.textValue), delete c.textValue) : i = utils.html(c.href), domUtils.setAttributes(h, c), g = domUtils.findParentByTagName(e.startContainer, "a", !0), g && domUtils.isInNodeEndBoundary(e, g) && b.setStartAfter(g).collapse(!0), h[browser.ie ? "innerText" : "textContent"] = i, b.insertNode(h).selectNode(h)
            } else b.applyInlineStyle("a", c)
        }

        UE.commands.unlink = {
            execCommand: function () {
                var b, c = this.selection.getRange();
                c.collapsed && !domUtils.findParentByTagName(c.startContainer, "a", !0) || (b = c.createBookmark(), a(c), c.removeInlineStyle("a").moveToBookmark(b).select())
            }, queryCommandState: function () {
                return !this.highlight && this.queryCommandValue("link") ? 0 : -1
            }
        }, UE.commands.link = {
            execCommand: function (a, c) {
                var d;
                c._href && (c._href = utils.unhtml(c._href, /[<">]/g)), c.href && (c.href = utils.unhtml(c.href, /[<">]/g)), c.textValue && (c.textValue = utils.unhtml(c.textValue, /[<">]/g)), b(d = this.selection.getRange(), c, this), d.collapse().select(!0)
            }, queryCommandValue: function () {
                var a, b = this.selection.getRange();
                if (!b.collapsed) {
                    b.shrinkBoundary();
                    var c = 3 != b.startContainer.nodeType && b.startContainer.childNodes[b.startOffset] ? b.startContainer.childNodes[b.startOffset] : b.startContainer, d = 3 == b.endContainer.nodeType || 0 == b.endOffset ? b.endContainer : b.endContainer.childNodes[b.endOffset - 1], e = b.getCommonAncestor();
                    if (a = domUtils.findParentByTagName(e, "a", !0), !a && 1 == e.nodeType)for (var f, g, h, i = e.getElementsByTagName("a"), j = 0; h = i[j++];)if (f = domUtils.getPosition(h, c), g = domUtils.getPosition(h, d), (f & domUtils.POSITION_FOLLOWING || f & domUtils.POSITION_CONTAINS) && (g & domUtils.POSITION_PRECEDING || g & domUtils.POSITION_CONTAINS)) {
                        a = h;
                        break
                    }
                    return a
                }
                return a = b.startContainer, a = 1 == a.nodeType ? a : a.parentNode, a && (a = domUtils.findParentByTagName(a, "a", !0)) && !domUtils.isInNodeEndBoundary(b, a) ? a : void 0
            }, queryCommandState: function () {
                var a = this.selection.getRange().getClosedNode(), b = a && ("edui-faked-video" == a.className || -1 != a.className.indexOf("edui-upload-video"));
                return b ? -1 : 0
            }
        }
    }, UE.plugins.insertframe = function () {
        function a() {
            b._iframe && delete b._iframe
        }

        var b = this;
        b.addListener("selectionchange", function () {
            a()
        })
    }, UE.commands.scrawl = {
        queryCommandState: function () {
            return browser.ie && browser.version <= 8 ? -1 : 0
        }
    }, UE.plugins.removeformat = function () {
        var a = this;
        a.setOpt({
            removeFormatTags: "b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var",
            removeFormatAttributes: "class,style,lang,width,height,align,hspace,valign"
        }), a.commands.removeformat = {
            execCommand: function (a, b, c, d, e) {
                function f(a) {
                    if (3 == a.nodeType || "span" != a.tagName.toLowerCase())return 0;
                    if (browser.ie) {
                        var b = a.attributes;
                        if (b.length) {
                            for (var c = 0, d = b.length; d > c; c++)if (b[c].specified)return 0;
                            return 1
                        }
                    }
                    return !a.attributes.length
                }

                function g(a) {
                    var b = a.createBookmark();
                    if (a.collapsed && a.enlarge(!0), !e) {
                        var d = domUtils.findParentByTagName(a.startContainer, "a", !0);
                        d && a.setStartBefore(d), d = domUtils.findParentByTagName(a.endContainer, "a", !0), d && a.setEndAfter(d)
                    }
                    for (h = a.createBookmark(), p = h.start; (i = p.parentNode) && !domUtils.isBlockElm(i);)domUtils.breakParent(p, i), domUtils.clearEmptySibling(p);
                    if (h.end) {
                        for (p = h.end; (i = p.parentNode) && !domUtils.isBlockElm(i);)domUtils.breakParent(p, i), domUtils.clearEmptySibling(p);
                        for (var g, l = domUtils.getNextDomNode(h.start, !1, m); l && l != h.end;)g = domUtils.getNextDomNode(l, !0, m), dtd.$empty[l.tagName.toLowerCase()] || domUtils.isBookmarkNode(l) || (j.test(l.tagName) ? c ? (domUtils.removeStyle(l, c), f(l) && "text-decoration" != c && domUtils.remove(l, !0)) : domUtils.remove(l, !0) : dtd.$tableContent[l.tagName] || dtd.$list[l.tagName] || (domUtils.removeAttributes(l, k), f(l) && domUtils.remove(l, !0))), l = g
                    }
                    var n = h.start.parentNode;
                    !domUtils.isBlockElm(n) || dtd.$tableContent[n.tagName] || dtd.$list[n.tagName] || domUtils.removeAttributes(n, k), n = h.end.parentNode, h.end && domUtils.isBlockElm(n) && !dtd.$tableContent[n.tagName] && !dtd.$list[n.tagName] && domUtils.removeAttributes(n, k), a.moveToBookmark(h).moveToBookmark(b);
                    for (var o, p = a.startContainer, q = a.collapsed; 1 == p.nodeType && domUtils.isEmptyNode(p) && dtd.$removeEmpty[p.tagName];)o = p.parentNode, a.setStartBefore(p), a.startContainer === a.endContainer && a.endOffset--, domUtils.remove(p), p = o;
                    if (!q)for (p = a.endContainer; 1 == p.nodeType && domUtils.isEmptyNode(p) && dtd.$removeEmpty[p.tagName];)o = p.parentNode, a.setEndBefore(p), domUtils.remove(p), p = o
                }

                var h, i, j = new RegExp("^(?:" + (b || this.options.removeFormatTags).replace(/,/g, "|") + ")$", "i"), k = c ? [] : (d || this.options.removeFormatAttributes).split(","), l = new dom.Range(this.document), m = function (a) {
                    return 1 == a.nodeType
                };
                l = this.selection.getRange(), g(l), l.select()
            }
        }
    }, UE.plugins.blockquote = function () {
        function a(a) {
            return domUtils.filterNodeList(a.selection.getStartElementPath(), "blockquote")
        }

        var b = this;
        b.commands.blockquote = {
            execCommand: function (b, c) {
                var d = this.selection.getRange(), e = a(this), f = dtd.blockquote, g = d.createBookmark();
                if (e) {
                    var h = d.startContainer, i = domUtils.isBlockElm(h) ? h : domUtils.findParent(h, function (a) {
                        return domUtils.isBlockElm(a)
                    }), j = d.endContainer, k = domUtils.isBlockElm(j) ? j : domUtils.findParent(j, function (a) {
                        return domUtils.isBlockElm(a)
                    });
                    i = domUtils.findParentByTagName(i, "li", !0) || i, k = domUtils.findParentByTagName(k, "li", !0) || k, "LI" == i.tagName || "TD" == i.tagName || i === e || domUtils.isBody(i) ? domUtils.remove(e, !0) : domUtils.breakParent(i, e), i !== k && (e = domUtils.findParentByTagName(k, "blockquote"), e && ("LI" == k.tagName || "TD" == k.tagName || domUtils.isBody(k) ? e.parentNode && domUtils.remove(e, !0) : domUtils.breakParent(k, e)));
                    for (var l, m = domUtils.getElementsByTagName(this.document, "blockquote"), n = 0; l = m[n++];)l.childNodes.length ? domUtils.getPosition(l, i) & domUtils.POSITION_FOLLOWING && domUtils.getPosition(l, k) & domUtils.POSITION_PRECEDING && domUtils.remove(l, !0) : domUtils.remove(l)
                } else {
                    for (var o = d.cloneRange(), p = 1 == o.startContainer.nodeType ? o.startContainer : o.startContainer.parentNode, q = p, r = 1; ;) {
                        if (domUtils.isBody(p)) {
                            q !== p ? d.collapsed ? (o.selectNode(q), r = 0) : o.setStartBefore(q) : o.setStart(p, 0);
                            break
                        }
                        if (!f[p.tagName]) {
                            d.collapsed ? o.selectNode(q) : o.setStartBefore(q);
                            break
                        }
                        q = p, p = p.parentNode
                    }
                    if (r)for (q = p = p = 1 == o.endContainer.nodeType ? o.endContainer : o.endContainer.parentNode; ;) {
                        if (domUtils.isBody(p)) {
                            q !== p ? o.setEndAfter(q) : o.setEnd(p, p.childNodes.length);
                            break
                        }
                        if (!f[p.tagName]) {
                            o.setEndAfter(q);
                            break
                        }
                        q = p, p = p.parentNode
                    }
                    p = d.document.createElement("blockquote"), domUtils.setAttributes(p, c), p.appendChild(o.extractContents()), o.insertNode(p);
                    for (var s, t = domUtils.getElementsByTagName(p, "blockquote"), n = 0; s = t[n++];)s.parentNode && domUtils.remove(s, !0)
                }
                d.moveToBookmark(g).select()
            }, queryCommandState: function () {
                return a(this) ? 1 : 0
            }
        }
    }, UE.commands.touppercase = UE.commands.tolowercase = {
        execCommand: function (a) {
            var b = this, c = b.selection.getRange();
            if (c.collapsed)return c;
            for (var d = c.createBookmark(), e = d.end, f = function (a) {
                return !domUtils.isBr(a) && !domUtils.isWhitespace(a)
            }, g = domUtils.getNextDomNode(d.start, !1, f); g && domUtils.getPosition(g, e) & domUtils.POSITION_PRECEDING && (3 == g.nodeType && (g.nodeValue = g.nodeValue["touppercase" == a ? "toUpperCase" : "toLowerCase"]()), g = domUtils.getNextDomNode(g, !0, f), g !== e););
            c.moveToBookmark(d).select()
        }
    }, UE.commands.indent = {
        execCommand: function () {
            var a = this, b = a.queryCommandState("indent") ? "0em" : a.options.indentValue || "2em";
            a.execCommand("Paragraph", "p", {style: "text-indent:" + b})
        }, queryCommandState: function () {
            var a = domUtils.filterNodeList(this.selection.getStartElementPath(), "p h1 h2 h3 h4 h5 h6");
            return a && a.style.textIndent && parseInt(a.style.textIndent) ? 1 : 0
        }
    }, UE.commands.print = {
        execCommand: function () {
            this.window.print()
        }, notNeedUndo: 1
    }, UE.commands.preview = {
        execCommand: function () {
            var a = window.open("", "_blank", ""), b = a.document;
            b.open(), b.write('<!DOCTYPE html><html><head><meta charset="utf-8"/><script src="' + this.options.UEDITOR_HOME_URL + "ueditor.parse.js\"></script><script>setTimeout(function(){uParse('div',{rootPath: '" + this.options.UEDITOR_HOME_URL + "'})},300)</script></head><body><div>" + this.getContent(null, null, !0) + "</div></body></html>"), b.close()
        }, notNeedUndo: 1
    }, UE.plugins.selectall = function () {
        var a = this;
        a.commands.selectall = {
            execCommand: function () {
                var a = this, b = a.body, c = a.selection.getRange();
                c.selectNodeContents(b), domUtils.isEmptyBlock(b) && (browser.opera && b.firstChild && 1 == b.firstChild.nodeType && c.setStartAtFirst(b.firstChild), c.collapse(!0)), c.select(!0)
            }, notNeedUndo: 1
        }, a.addshortcutkey({selectAll: "ctrl+65"})
    }, UE.plugins.paragraph = function () {
        var a = this, b = domUtils.isBlockElm, c = ["TD", "LI", "PRE"], d = function (a, d, e, f) {
            var g, h = a.createBookmark(), i = function (a) {
                return 1 == a.nodeType ? "br" != a.tagName.toLowerCase() && !domUtils.isBookmarkNode(a) : !domUtils.isWhitespace(a)
            };
            a.enlarge(!0);
            for (var j, k = a.createBookmark(), l = domUtils.getNextDomNode(k.start, !1, i), m = a.cloneRange(); l && !(domUtils.getPosition(l, k.end) & domUtils.POSITION_FOLLOWING);)if (3 != l.nodeType && b(l))l = domUtils.getNextDomNode(l, !0, i); else {
                for (m.setStartBefore(l); l && l !== k.end && !b(l);)j = l, l = domUtils.getNextDomNode(l, !1, null, function (a) {
                    return !b(a)
                });
                m.setEndAfter(j), g = a.document.createElement(d), e && (domUtils.setAttributes(g, e), f && "customstyle" == f && e.style && (g.style.cssText = e.style)), g.appendChild(m.extractContents()), domUtils.isEmptyNode(g) && domUtils.fillChar(a.document, g), m.insertNode(g);
                var n = g.parentNode;
                b(n) && !domUtils.isBody(g.parentNode) && -1 == utils.indexOf(c, n.tagName) && (f && "customstyle" == f || (n.getAttribute("dir") && g.setAttribute("dir", n.getAttribute("dir")), n.style.cssText && (g.style.cssText = n.style.cssText + ";" + g.style.cssText), n.style.textAlign && !g.style.textAlign && (g.style.textAlign = n.style.textAlign), n.style.textIndent && !g.style.textIndent && (g.style.textIndent = n.style.textIndent), n.style.padding && !g.style.padding && (g.style.padding = n.style.padding)), e && /h\d/i.test(n.tagName) && !/h\d/i.test(g.tagName) ? (domUtils.setAttributes(n, e), f && "customstyle" == f && e.style && (n.style.cssText = e.style), domUtils.remove(g, !0), g = n) : domUtils.remove(g.parentNode, !0)), l = -1 != utils.indexOf(c, n.tagName) ? n : g, l = domUtils.getNextDomNode(l, !1, i)
            }
            return a.moveToBookmark(k).moveToBookmark(h)
        };
        a.setOpt("paragraph", {
            p: "",
            h1: "",
            h2: "",
            h3: "",
            h4: "",
            h5: "",
            h6: ""
        }), a.commands.paragraph = {
            execCommand: function (a, b, c, e) {
                var f = this.selection.getRange();
                if (f.collapsed) {
                    var g = this.document.createTextNode("p");
                    if (f.insertNode(g), browser.ie) {
                        var h = g.previousSibling;
                        h && domUtils.isWhitespace(h) && domUtils.remove(h), h = g.nextSibling, h && domUtils.isWhitespace(h) && domUtils.remove(h)
                    }
                }
                if (f = d(f, b, c, e), g && (f.setStartBefore(g).collapse(!0), pN = g.parentNode, domUtils.remove(g), domUtils.isBlockElm(pN) && domUtils.isEmptyNode(pN) && domUtils.fillNode(this.document, pN)), browser.gecko && f.collapsed && 1 == f.startContainer.nodeType) {
                    var i = f.startContainer.childNodes[f.startOffset];
                    i && 1 == i.nodeType && i.tagName.toLowerCase() == b && f.setStart(i, 0).collapse(!0)
                }
                return f.select(), !0
            }, queryCommandValue: function () {
                var a = domUtils.filterNodeList(this.selection.getStartElementPath(), "p h1 h2 h3 h4 h5 h6");
                return a ? a.tagName.toLowerCase() : ""
            }
        }
    }, function () {
        var a = domUtils.isBlockElm, b = function (a) {
            return domUtils.filterNodeList(a.selection.getStartElementPath(), function (a) {
                return a && 1 == a.nodeType && a.getAttribute("dir")
            })
        }, c = function (c, d, e) {
            var f, g = function (a) {
                return 1 == a.nodeType ? !domUtils.isBookmarkNode(a) : !domUtils.isWhitespace(a)
            }, h = b(d);
            if (h && c.collapsed)return h.setAttribute("dir", e), c;
            f = c.createBookmark(), c.enlarge(!0);
            for (var i, j = c.createBookmark(), k = domUtils.getNextDomNode(j.start, !1, g), l = c.cloneRange(); k && !(domUtils.getPosition(k, j.end) & domUtils.POSITION_FOLLOWING);)if (3 != k.nodeType && a(k))k = domUtils.getNextDomNode(k, !0, g); else {
                for (l.setStartBefore(k); k && k !== j.end && !a(k);)i = k, k = domUtils.getNextDomNode(k, !1, null, function (b) {
                    return !a(b)
                });
                l.setEndAfter(i);
                var m = l.getCommonAncestor();
                if (!domUtils.isBody(m) && a(m))m.setAttribute("dir", e), k = m; else {
                    var n = c.document.createElement("p");
                    n.setAttribute("dir", e);
                    var o = l.extractContents();
                    n.appendChild(o), l.insertNode(n), k = n
                }
                k = domUtils.getNextDomNode(k, !1, g)
            }
            return c.moveToBookmark(j).moveToBookmark(f)
        };
        UE.commands.directionality = {
            execCommand: function (a, b) {
                var d = this.selection.getRange();
                if (d.collapsed) {
                    var e = this.document.createTextNode("d");
                    d.insertNode(e)
                }
                return c(d, this, b), e && (d.setStartBefore(e).collapse(!0), domUtils.remove(e)), d.select(), !0
            }, queryCommandValue: function () {
                var a = b(this);
                return a ? a.getAttribute("dir") : "ltr"
            }
        }
    }(), UE.plugins.horizontal = function () {
        var a = this;
        a.commands.horizontal = {
            execCommand: function (a) {
                var b = this;
                if (-1 !== b.queryCommandState(a)) {
                    b.execCommand("insertHtml", "<hr>");
                    var c = b.selection.getRange(), d = c.startContainer;
                    if (1 == d.nodeType && !d.childNodes[c.startOffset]) {
                        var e;
                        (e = d.childNodes[c.startOffset - 1]) && 1 == e.nodeType && "HR" == e.tagName && ("p" == b.options.enterTag ? (e = b.document.createElement("p"), c.insertNode(e), c.setStart(e, 0).setCursor()) : (e = b.document.createElement("br"), c.insertNode(e), c.setStartBefore(e).setCursor()))
                    }
                    return !0
                }
            }, queryCommandState: function () {
                return domUtils.filterNodeList(this.selection.getStartElementPath(), "table") ? -1 : 0
            }
        }, a.addListener("delkeydown", function (a, b) {
            var c = this.selection.getRange();
            if (c.txtToElmBoundary(!0), domUtils.isStartInblock(c)) {
                var d = c.startContainer, e = d.previousSibling;
                if (e && domUtils.isTagNode(e, "hr"))return domUtils.remove(e), c.select(), domUtils.preventDefault(b), !0
            }
        })
    }, UE.commands.time = UE.commands.date = {
        execCommand: function (a, b) {
            function c(a, b) {
                var c = ("0" + a.getHours()).slice(-2), d = ("0" + a.getMinutes()).slice(-2), e = ("0" + a.getSeconds()).slice(-2);
                return b = b || "hh:ii:ss", b.replace(/hh/gi, c).replace(/ii/gi, d).replace(/ss/gi, e)
            }

            function d(a, b) {
                var c = ("000" + a.getFullYear()).slice(-4), d = c.slice(-2), e = ("0" + (a.getMonth() + 1)).slice(-2), f = ("0" + a.getDate()).slice(-2);
                return b = b || "yyyy-mm-dd", b.replace(/yyyy/gi, c).replace(/yy/gi, d).replace(/mm/gi, e).replace(/dd/gi, f)
            }

            var e = new Date;
            this.execCommand("insertHtml", "time" == a ? c(e, b) : d(e, b))
        }
    }, UE.plugins.rowspacing = function () {
        var a = this;
        a.setOpt({
            rowspacingtop: ["5", "10", "15", "20", "25"],
            rowspacingbottom: ["5", "10", "15", "20", "25"]
        }), a.commands.rowspacing = {
            execCommand: function (a, b, c) {
                return this.execCommand("paragraph", "p", {style: "margin-" + c + ":" + b + "px"}), !0
            }, queryCommandValue: function (a, b) {
                var c, d = domUtils.filterNodeList(this.selection.getStartElementPath(), function (a) {
                    return domUtils.isBlockElm(a)
                });
                return d ? (c = domUtils.getComputedStyle(d, "margin-" + b).replace(/[^\d]/g, ""), c ? c : 0) : 0
            }
        }
    }, UE.plugins.lineheight = function () {
        var a = this;
        a.setOpt({lineheight: ["1", "1.5", "1.75", "2", "3", "4", "5"]}), a.commands.lineheight = {
            execCommand: function (a, b) {
                return this.execCommand("paragraph", "p", {style: "line-height:" + ("1" == b ? "normal" : b + "em")}), !0
            }, queryCommandValue: function () {
                var a = domUtils.filterNodeList(this.selection.getStartElementPath(), function (a) {
                    return domUtils.isBlockElm(a)
                });
                if (a) {
                    var b = domUtils.getComputedStyle(a, "line-height");
                    return "normal" == b ? 1 : b.replace(/[^\d.]*/gi, "")
                }
            }
        }
    }, UE.plugins.insertcode = function () {
        var a = this;
        a.ready(function () {
            utils.cssRule("pre", "pre{margin:.5em 0;padding:.4em .6em;border-radius:8px;background:#f8f8f8;}", a.document)
        }), a.setOpt("insertcode", {
            as3: "ActionScript3",
            bash: "Bash/Shell",
            cpp: "C/C++",
            css: "Css",
            cf: "CodeFunction",
            "c#": "C#",
            delphi: "Delphi",
            diff: "Diff",
            erlang: "Erlang",
            groovy: "Groovy",
            html: "Html",
            java: "Java",
            jfx: "JavaFx",
            js: "Javascript",
            pl: "Perl",
            php: "Php",
            plain: "Plain Text",
            ps: "PowerShell",
            python: "Python",
            ruby: "Ruby",
            scala: "Scala",
            sql: "Sql",
            vb: "Vb",
            xml: "Xml"
        }), a.commands.insertcode = {
            execCommand: function (a, b) {
                var c = this, d = c.selection.getRange(), e = domUtils.findParentByTagName(d.startContainer, "pre", !0);
                if (e)e.className = "brush:" + b + ";toolbar:false;"; else {
                    var f = "";
                    if (d.collapsed)f = browser.ie && browser.ie11below ? browser.version <= 8 ? "&nbsp;" : "" : "<br/>"; else {
                        var g = d.extractContents(), h = c.document.createElement("div");
                        h.appendChild(g), utils.each(UE.filterNode(UE.htmlparser(h.innerHTML.replace(/[\r\t]/g, "")), c.options.filterTxtRules).children, function (a) {
                            if (browser.ie && browser.ie11below && browser.version > 8)"element" == a.type ? "br" == a.tagName ? f += "\n" : dtd.$empty[a.tagName] || (utils.each(a.children, function (b) {
                                "element" == b.type ? "br" == b.tagName ? f += "\n" : dtd.$empty[a.tagName] || (f += b.innerText()) : f += b.data
                            }), /\n$/.test(f) || (f += "\n")) : f += a.data + "\n", !a.nextSibling() && /\n$/.test(f) && (f = f.replace(/\n$/, "")); else if (browser.ie && browser.ie11below)"element" == a.type ? "br" == a.tagName ? f += "<br>" : dtd.$empty[a.tagName] || (utils.each(a.children, function (b) {
                                "element" == b.type ? "br" == b.tagName ? f += "<br>" : dtd.$empty[a.tagName] || (f += b.innerText()) : f += b.data
                            }), /br>$/.test(f) || (f += "<br>")) : f += a.data + "<br>", !a.nextSibling() && /<br>$/.test(f) && (f = f.replace(/<br>$/, "")); else if (f += "element" == a.type ? dtd.$empty[a.tagName] ? "" : a.innerText() : a.data, !/br\/?\s*>$/.test(f)) {
                                if (!a.nextSibling())return;
                                f += "<br>"
                            }
                        })
                    }
                    c.execCommand("inserthtml", '<pre id="coder"class="brush:' + b + ';toolbar:false">' + f + "</pre>", !0), e = c.document.getElementById("coder"), domUtils.removeAttributes(e, "id");
                    var i = e.previousSibling;
                    i && (3 == i.nodeType && 1 == i.nodeValue.length && browser.ie && 6 == browser.version || domUtils.isEmptyBlock(i)) && domUtils.remove(i);
                    var d = c.selection.getRange();
                    domUtils.isEmptyBlock(e) ? d.setStart(e, 0).setCursor(!1, !0) : d.selectNodeContents(e).select()
                }
            }, queryCommandValue: function () {
                var a = this.selection.getStartElementPath(), b = "";
                return utils.each(a, function (a) {
                    if ("PRE" == a.nodeName) {
                        var c = a.className.match(/brush:([^;]+)/);
                        return b = c && c[1] ? c[1] : "", !1
                    }
                }), b
            }
        }, a.addInputRule(function (a) {
            utils.each(a.getNodesByTagName("pre"), function (a) {
                var b = a.getNodesByTagName("br");
                if (b.length)return void(browser.ie && browser.ie11below && browser.version > 8 && utils.each(b, function (a) {
                    var b = UE.uNode.createText("\n");
                    a.parentNode.insertBefore(b, a), a.parentNode.removeChild(a)
                }));
                if (!(browser.ie && browser.ie11below && browser.version > 8)) {
                    var c = a.innerText().split(/\n/);
                    a.innerHTML(""), utils.each(c, function (b) {
                        b.length && a.appendChild(UE.uNode.createText(b)), a.appendChild(UE.uNode.createElement("br"))
                    })
                }
            })
        }), a.addOutputRule(function (a) {
            utils.each(a.getNodesByTagName("pre"), function (a) {
                var b = "";
                utils.each(a.children, function (a) {
                    b += "text" == a.type ? a.data.replace(/[ ]/g, "&nbsp;").replace(/\n$/, "") : "br" == a.tagName ? "\n" : dtd.$empty[a.tagName] ? a.innerText() : ""
                }), a.innerText(b.replace(/(&nbsp;|\n)+$/, ""))
            })
        }), a.notNeedCodeQuery = {
            help: 1,
            undo: 1,
            redo: 1,
            source: 1,
            print: 1,
            searchreplace: 1,
            fullscreen: 1,
            preview: 1,
            insertparagraph: 1,
            elementpath: 1,
            insertcode: 1,
            inserthtml: 1,
            selectall: 1
        };
        a.queryCommandState;
        a.queryCommandState = function (a) {
            var b = this;
            return !b.notNeedCodeQuery[a.toLowerCase()] && b.selection && b.queryCommandValue("insertcode") ? -1 : UE.Editor.prototype.queryCommandState.apply(this, arguments)
        }, a.addListener("beforeenterkeydown", function () {
            var b = a.selection.getRange(), c = domUtils.findParentByTagName(b.startContainer, "pre", !0);
            if (c) {
                if (a.fireEvent("saveScene"), b.collapsed || b.deleteContents(), !browser.ie || browser.ie9above) {
                    var c, d = a.document.createElement("br");
                    b.insertNode(d).setStartAfter(d).collapse(!0);
                    var e = d.nextSibling;
                    e || browser.ie && !(browser.version > 10) ? b.setStartAfter(d) : b.insertNode(d.cloneNode(!1)),
                        c = d.previousSibling;
                    for (var f; c;)if (f = c, c = c.previousSibling, !c || "BR" == c.nodeName) {
                        c = f;
                        break
                    }
                    if (c) {
                        for (var g = ""; c && "BR" != c.nodeName && new RegExp("^[\\s" + domUtils.fillChar + "]*$").test(c.nodeValue);)g += c.nodeValue, c = c.nextSibling;
                        if ("BR" != c.nodeName) {
                            var h = c.nodeValue.match(new RegExp("^([\\s" + domUtils.fillChar + "]+)"));
                            h && h[1] && (g += h[1])
                        }
                        g && (g = a.document.createTextNode(g), b.insertNode(g).setStartAfter(g))
                    }
                    b.collapse(!0).select(!0)
                } else if (browser.version > 8) {
                    var i = a.document.createTextNode("\n"), j = b.startContainer;
                    if (0 == b.startOffset) {
                        var k = j.previousSibling;
                        if (k) {
                            b.insertNode(i);
                            var l = a.document.createTextNode(" ");
                            b.setStartAfter(i).insertNode(l).setStart(l, 0).collapse(!0).select(!0)
                        }
                    } else {
                        b.insertNode(i).setStartAfter(i);
                        var l = a.document.createTextNode(" ");
                        j = b.startContainer.childNodes[b.startOffset], j && !/^\n/.test(j.nodeValue) && b.setStartBefore(i), b.insertNode(l).setStart(l, 0).collapse(!0).select(!0)
                    }
                } else {
                    var d = a.document.createElement("br");
                    b.insertNode(d), b.insertNode(a.document.createTextNode(domUtils.fillChar)), b.setStartAfter(d), c = d.previousSibling;
                    for (var f; c;)if (f = c, c = c.previousSibling, !c || "BR" == c.nodeName) {
                        c = f;
                        break
                    }
                    if (c) {
                        for (var g = ""; c && "BR" != c.nodeName && new RegExp("^[ " + domUtils.fillChar + "]*$").test(c.nodeValue);)g += c.nodeValue, c = c.nextSibling;
                        if ("BR" != c.nodeName) {
                            var h = c.nodeValue.match(new RegExp("^([ " + domUtils.fillChar + "]+)"));
                            h && h[1] && (g += h[1])
                        }
                        g = a.document.createTextNode(g), b.insertNode(g).setStartAfter(g)
                    }
                    b.collapse(!0).select()
                }
                return a.fireEvent("saveScene"), !0
            }
        }), a.addListener("tabkeydown", function (b, c) {
            var d = a.selection.getRange(), e = domUtils.findParentByTagName(d.startContainer, "pre", !0);
            if (e) {
                if (a.fireEvent("saveScene"), c.shiftKey); else if (d.collapsed) {
                    var f = a.document.createTextNode("    ");
                    d.insertNode(f).setStartAfter(f).collapse(!0).select(!0)
                } else {
                    for (var g = d.createBookmark(), h = g.start.previousSibling; h;) {
                        if (e.firstChild === h && !domUtils.isBr(h)) {
                            e.insertBefore(a.document.createTextNode("    "), h);
                            break
                        }
                        if (domUtils.isBr(h)) {
                            e.insertBefore(a.document.createTextNode("    "), h.nextSibling);
                            break
                        }
                        h = h.previousSibling
                    }
                    var i = g.end;
                    for (h = g.start.nextSibling, e.firstChild === g.start && e.insertBefore(a.document.createTextNode("    "), h.nextSibling); h && h !== i;) {
                        if (domUtils.isBr(h) && h.nextSibling) {
                            if (h.nextSibling === i)break;
                            e.insertBefore(a.document.createTextNode("    "), h.nextSibling)
                        }
                        h = h.nextSibling
                    }
                    d.moveToBookmark(g).select()
                }
                return a.fireEvent("saveScene"), !0
            }
        }), a.addListener("beforeinserthtml", function (a, b) {
            var c = this, d = c.selection.getRange(), e = domUtils.findParentByTagName(d.startContainer, "pre", !0);
            if (e) {
                d.collapsed || d.deleteContents();
                var f = "";
                if (browser.ie && browser.version > 8) {
                    utils.each(UE.filterNode(UE.htmlparser(b), c.options.filterTxtRules).children, function (a) {
                        "element" == a.type ? "br" == a.tagName ? f += "\n" : dtd.$empty[a.tagName] || (utils.each(a.children, function (b) {
                            "element" == b.type ? "br" == b.tagName ? f += "\n" : dtd.$empty[a.tagName] || (f += b.innerText()) : f += b.data
                        }), /\n$/.test(f) || (f += "\n")) : f += a.data + "\n", !a.nextSibling() && /\n$/.test(f) && (f = f.replace(/\n$/, ""))
                    });
                    var g = c.document.createTextNode(utils.html(f.replace(/&nbsp;/g, " ")));
                    d.insertNode(g).selectNode(g).select()
                } else {
                    var h = c.document.createDocumentFragment();
                    utils.each(UE.filterNode(UE.htmlparser(b), c.options.filterTxtRules).children, function (a) {
                        "element" == a.type ? "br" == a.tagName ? h.appendChild(c.document.createElement("br")) : dtd.$empty[a.tagName] || (utils.each(a.children, function (b) {
                            "element" == b.type ? "br" == b.tagName ? h.appendChild(c.document.createElement("br")) : dtd.$empty[a.tagName] || h.appendChild(c.document.createTextNode(utils.html(b.innerText().replace(/&nbsp;/g, " ")))) : h.appendChild(c.document.createTextNode(utils.html(b.data.replace(/&nbsp;/g, " "))))
                        }), "BR" != h.lastChild.nodeName && h.appendChild(c.document.createElement("br"))) : h.appendChild(c.document.createTextNode(utils.html(a.data.replace(/&nbsp;/g, " ")))), a.nextSibling() || "BR" != h.lastChild.nodeName || h.removeChild(h.lastChild)
                    }), d.insertNode(h).select()
                }
                return !0
            }
        }), a.addListener("keydown", function (a, b) {
            var c = this, d = b.keyCode || b.which;
            if (40 == d) {
                var e, f = c.selection.getRange(), g = f.startContainer;
                if (f.collapsed && (e = domUtils.findParentByTagName(f.startContainer, "pre", !0)) && !e.nextSibling) {
                    for (var h = e.lastChild; h && "BR" == h.nodeName;)h = h.previousSibling;
                    (h === g || f.startContainer === e && f.startOffset == e.childNodes.length) && (c.execCommand("insertparagraph"), domUtils.preventDefault(b))
                }
            }
        }), a.addListener("delkeydown", function (b, c) {
            var d = this.selection.getRange();
            d.txtToElmBoundary(!0);
            var e = d.startContainer;
            if (domUtils.isTagNode(e, "pre") && d.collapsed && domUtils.isStartInblock(d)) {
                var f = a.document.createElement("p");
                return domUtils.fillNode(a.document, f), e.parentNode.insertBefore(f, e), domUtils.remove(e), d.setStart(f, 0).setCursor(!1, !0), domUtils.preventDefault(c), !0
            }
        })
    }, UE.commands.cleardoc = {
        execCommand: function (a) {
            var b = this, c = b.options.enterTag, d = b.selection.getRange();
            "br" == c ? (b.body.innerHTML = "<br/>", d.setStart(b.body, 0).setCursor()) : (b.body.innerHTML = "<p>" + (ie ? "" : "<br/>") + "</p>", d.setStart(b.body.firstChild, 0).setCursor(!1, !0)), setTimeout(function () {
                b.fireEvent("clearDoc")
            }, 0)
        }
    }, UE.plugin.register("anchor", function () {
        return {
            bindEvents: {
                ready: function () {
                    utils.cssRule("anchor", ".anchorclass{background: url('" + this.options.themePath + this.options.theme + "/images/anchor.gif') no-repeat scroll left center transparent;cursor: auto;display: inline-block;height: 16px;width: 15px;}", this.document)
                }
            }, outputRule: function (a) {
                utils.each(a.getNodesByTagName("img"), function (a) {
                    var b;
                    (b = a.getAttr("anchorname")) && (a.tagName = "a", a.setAttr({
                        anchorname: "",
                        name: b,
                        "class": ""
                    }))
                })
            }, inputRule: function (a) {
                utils.each(a.getNodesByTagName("a"), function (a) {
                    var b;
                    (b = a.getAttr("name")) && !a.getAttr("href") && (a.tagName = "img", a.setAttr({
                        anchorname: a.getAttr("name"),
                        "class": "anchorclass"
                    }), a.setAttr("name"))
                })
            }, commands: {
                anchor: {
                    execCommand: function (a, b) {
                        var c = this.selection.getRange(), d = c.getClosedNode();
                        if (d && d.getAttribute("anchorname"))b ? d.setAttribute("anchorname", b) : (c.setStartBefore(d).setCursor(), domUtils.remove(d)); else if (b) {
                            var e = this.document.createElement("img");
                            c.collapse(!0), domUtils.setAttributes(e, {
                                anchorname: b,
                                "class": "anchorclass"
                            }), c.insertNode(e).setStartAfter(e).setCursor(!1, !0)
                        }
                    }
                }
            }
        }
    }), UE.plugins.wordcount = function () {
        var a = this;
        a.setOpt("wordCount", !0), a.addListener("contentchange", function () {
            a.fireEvent("wordcount")
        });
        var b;
        a.addListener("ready", function () {
            var a = this;
            domUtils.on(a.body, "keyup", function (c) {
                var d = c.keyCode || c.which, e = {16: 1, 18: 1, 20: 1, 37: 1, 38: 1, 39: 1, 40: 1};
                d in e || (clearTimeout(b), b = setTimeout(function () {
                    a.fireEvent("wordcount")
                }, 200))
            })
        })
    }, UE.plugins.pagebreak = function () {
        function a(a) {
            if (domUtils.isEmptyBlock(a)) {
                for (var b, d = a.firstChild; d && 1 == d.nodeType && domUtils.isEmptyBlock(d);)b = d, d = d.firstChild;
                !b && (b = a), domUtils.fillNode(c.document, b)
            }
        }

        function b(a) {
            return a && 1 == a.nodeType && "HR" == a.tagName && "pagebreak" == a.className
        }

        var c = this, d = ["td"];
        c.setOpt("pageBreakTag", "_ueditor_page_break_tag_"), c.ready(function () {
            utils.cssRule("pagebreak", ".pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}", c.document)
        }), c.addInputRule(function (a) {
            a.traversal(function (a) {
                if ("text" == a.type && a.data == c.options.pageBreakTag) {
                    var b = UE.uNode.createElement('<hr class="pagebreak" noshade="noshade" size="5" style="-webkit-user-select: none;">');
                    a.parentNode.insertBefore(b, a), a.parentNode.removeChild(a)
                }
            })
        }), c.addOutputRule(function (a) {
            utils.each(a.getNodesByTagName("hr"), function (a) {
                if ("pagebreak" == a.getAttr("class")) {
                    var b = UE.uNode.createText(c.options.pageBreakTag);
                    a.parentNode.insertBefore(b, a), a.parentNode.removeChild(a)
                }
            })
        }), c.commands.pagebreak = {
            execCommand: function () {
                var e = c.selection.getRange(), f = c.document.createElement("hr");
                domUtils.setAttributes(f, {
                    "class": "pagebreak",
                    noshade: "noshade",
                    size: "5"
                }), domUtils.unSelectable(f);
                var g, h = domUtils.findParentByTagName(e.startContainer, d, !0), i = [];
                if (h)switch (h.tagName) {
                    case"TD":
                        if (g = h.parentNode, g.previousSibling)g.parentNode.insertBefore(f, g), i = domUtils.findParents(f); else {
                            var j = domUtils.findParentByTagName(g, "table");
                            j.parentNode.insertBefore(f, j), i = domUtils.findParents(f, !0)
                        }
                        g = i[1], f !== g && domUtils.breakParent(f, g), c.fireEvent("afteradjusttable", c.document)
                } else {
                    if (!e.collapsed) {
                        e.deleteContents();
                        for (var k = e.startContainer; !domUtils.isBody(k) && domUtils.isBlockElm(k) && domUtils.isEmptyNode(k);)e.setStartBefore(k).collapse(!0), domUtils.remove(k), k = e.startContainer
                    }
                    e.insertNode(f);
                    for (var l, g = f.parentNode; !domUtils.isBody(g);)domUtils.breakParent(f, g), l = f.nextSibling, l && domUtils.isEmptyBlock(l) && domUtils.remove(l), g = f.parentNode;
                    l = f.nextSibling;
                    var m = f.previousSibling;
                    if (b(m) ? domUtils.remove(m) : m && a(m), l)b(l) ? domUtils.remove(l) : a(l), e.setEndAfter(f).collapse(!1); else {
                        var n = c.document.createElement("p");
                        f.parentNode.appendChild(n), domUtils.fillNode(c.document, n), e.setStart(n, 0).collapse(!0)
                    }
                    e.select(!0)
                }
            }
        }
    }, UE.plugin.register("wordimage", function () {
        var a = this, b = [];
        return {
            commands: {
                wordimage: {
                    execCommand: function () {
                        for (var b, c = domUtils.getElementsByTagName(a.body, "img"), d = [], e = 0; b = c[e++];) {
                            var f = b.getAttribute("word_img");
                            f && d.push(f)
                        }
                        return d
                    }, queryCommandState: function () {
                        b = domUtils.getElementsByTagName(a.body, "img");
                        for (var c, d = 0; c = b[d++];)if (c.getAttribute("word_img"))return 1;
                        return -1
                    }, notNeedUndo: !0
                }
            }, inputRule: function (b) {
                utils.each(b.getNodesByTagName("img"), function (b) {
                    var c = b.attrs, d = parseInt(c.width) < 128 || parseInt(c.height) < 43, e = a.options, f = e.UEDITOR_HOME_URL + "themes/default/images/spacer.gif";
                    c.src && /^(?:(file:\/+))/.test(c.src) && b.setAttr({
                        width: c.width,
                        height: c.height,
                        alt: c.alt,
                        word_img: c.src,
                        src: f,
                        style: "background:url(" + (d ? e.themePath + e.theme + "/images/word.gif" : e.langPath + e.lang + "/images/localimage.png") + ") no-repeat center center;border:1px solid #ddd"
                    })
                })
            }
        }
    }), UE.plugins.dragdrop = function () {
        var a = this;
        a.ready(function () {
            domUtils.on(this.body, "dragend", function () {
                var b = a.selection.getRange(), c = b.getClosedNode() || a.selection.getStart();
                if (c && "IMG" == c.tagName) {
                    for (var d, e = c.previousSibling; (d = c.nextSibling) && 1 == d.nodeType && "SPAN" == d.tagName && !d.firstChild;)domUtils.remove(d);
                    (!e || 1 != e.nodeType || domUtils.isEmptyBlock(e)) && e || d && (!d || domUtils.isEmptyBlock(d)) || (e && "P" == e.tagName && !domUtils.isEmptyBlock(e) ? (e.appendChild(c), domUtils.moveChild(d, e), domUtils.remove(d)) : d && "P" == d.tagName && !domUtils.isEmptyBlock(d) && d.insertBefore(c, d.firstChild), e && "P" == e.tagName && domUtils.isEmptyBlock(e) && domUtils.remove(e), d && "P" == d.tagName && domUtils.isEmptyBlock(d) && domUtils.remove(d), b.selectNode(c).select(), a.fireEvent("saveScene"))
                }
            })
        }), a.addListener("keyup", function (b, c) {
            var d = c.keyCode || c.which;
            if (13 == d) {
                var e, f = a.selection.getRange();
                (e = domUtils.findParentByTagName(f.startContainer, "p", !0)) && "center" == domUtils.getComputedStyle(e, "text-align") && domUtils.removeStyle(e, "text-align")
            }
        })
    }, UE.plugins.undo = function () {
        function a(a, b) {
            if (a.length != b.length)return 0;
            for (var c = 0, d = a.length; d > c; c++)if (a[c] != b[c])return 0;
            return 1
        }

        function b(b, c) {
            return b.collapsed != c.collapsed ? 0 : a(b.startAddress, c.startAddress) && a(b.endAddress, c.endAddress) ? 1 : 0
        }

        function c() {
            this.list = [], this.index = 0, this.hasUndo = !1, this.hasRedo = !1, this.undo = function () {
                if (this.hasUndo) {
                    if (!this.list[this.index - 1] && 1 == this.list.length)return void this.reset();
                    for (; this.list[this.index].content == this.list[this.index - 1].content;)if (this.index--, 0 == this.index)return this.restore(0);
                    this.restore(--this.index)
                }
            }, this.redo = function () {
                if (this.hasRedo) {
                    for (; this.list[this.index].content == this.list[this.index + 1].content;)if (this.index++, this.index == this.list.length - 1)return this.restore(this.index);
                    this.restore(++this.index)
                }
            }, this.restore = function () {
                var a = this.editor, b = this.list[this.index], c = UE.htmlparser(b.content.replace(h, ""));
                a.options.autoClearEmptyNode = !1, a.filterInputRule(c), a.options.autoClearEmptyNode = j, a.document.body.innerHTML = c.toHtml(), a.fireEvent("afterscencerestore"), browser.ie && utils.each(domUtils.getElementsByTagName(a.document, "td th caption p"), function (b) {
                    domUtils.isEmptyNode(b) && domUtils.fillNode(a.document, b)
                });
                try {
                    var d = new dom.Range(a.document).moveToAddress(b.address);
                    d.select(i[d.startContainer.nodeName.toLowerCase()])
                } catch (e) {
                }
                this.update(), this.clearKey(), a.fireEvent("reset", !0)
            }, this.getScene = function () {
                var a = this.editor, b = a.selection.getRange(), c = b.createAddress(!1, !0);
                a.fireEvent("beforegetscene");
                var d = UE.htmlparser(a.body.innerHTML);
                a.options.autoClearEmptyNode = !1, a.filterOutputRule(d), a.options.autoClearEmptyNode = j;
                var e = d.toHtml();
                return a.fireEvent("aftergetscene"), {address: c, content: e}
            }, this.save = function (a, c) {
                clearTimeout(d);
                var g = this.getScene(c), h = this.list[this.index];
                h && h.content != g.content && e.trigger("contentchange"), h && h.content == g.content && (a ? 1 : b(h.address, g.address)) || (this.list = this.list.slice(0, this.index + 1), this.list.push(g), this.list.length > f && this.list.shift(), this.index = this.list.length - 1, this.clearKey(), this.update())
            }, this.update = function () {
                this.hasRedo = !!this.list[this.index + 1], this.hasUndo = !!this.list[this.index - 1]
            }, this.reset = function () {
                this.list = [], this.index = 0, this.hasUndo = !1, this.hasRedo = !1, this.clearKey()
            }, this.clearKey = function () {
                m = 0, k = null
            }
        }

        var d, e = this, f = e.options.maxUndoCount || 20, g = e.options.maxInputCount || 20, h = new RegExp(domUtils.fillChar + "|</hr>", "gi"), i = {
            ol: 1,
            ul: 1,
            table: 1,
            tbody: 1,
            tr: 1,
            body: 1
        }, j = e.options.autoClearEmptyNode;
        e.undoManger = new c, e.undoManger.editor = e, e.addListener("saveScene", function () {
            var a = Array.prototype.splice.call(arguments, 1);
            this.undoManger.save.apply(this.undoManger, a)
        }), e.addListener("reset", function (a, b) {
            b || this.undoManger.reset()
        }), e.commands.redo = e.commands.undo = {
            execCommand: function (a) {
                this.undoManger[a]()
            }, queryCommandState: function (a) {
                return this.undoManger["has" + ("undo" == a.toLowerCase() ? "Undo" : "Redo")] ? 0 : -1
            }, notNeedUndo: 1
        };
        var k, l = {16: 1, 17: 1, 18: 1, 37: 1, 38: 1, 39: 1, 40: 1}, m = 0, n = !1;
        e.addListener("ready", function () {
            domUtils.on(this.body, "compositionstart", function () {
                n = !0
            }), domUtils.on(this.body, "compositionend", function () {
                n = !1
            })
        }), e.addshortcutkey({Undo: "ctrl+90", Redo: "ctrl+89"});
        var o = !0;
        e.addListener("keydown", function (a, b) {
            function c(a) {
                a.undoManger.save(!1, !0), a.fireEvent("selectionchange")
            }

            var e = this, f = b.keyCode || b.which;
            if (!(l[f] || b.ctrlKey || b.metaKey || b.shiftKey || b.altKey)) {
                if (n)return;
                if (!e.selection.getRange().collapsed)return e.undoManger.save(!1, !0), void(o = !1);
                0 == e.undoManger.list.length && e.undoManger.save(!0), clearTimeout(d), d = setTimeout(function () {
                    if (n)var a = setInterval(function () {
                        n || (c(e), clearInterval(a))
                    }, 300); else c(e)
                }, 200), k = f, m++, m >= g && c(e)
            }
        }), e.addListener("keyup", function (a, b) {
            var c = b.keyCode || b.which;
            if (!(l[c] || b.ctrlKey || b.metaKey || b.shiftKey || b.altKey)) {
                if (n)return;
                o || (this.undoManger.save(!1, !0), o = !0)
            }
        }), e.stopCmdUndo = function () {
            e.__hasEnterExecCommand = !0
        }, e.startCmdUndo = function () {
            e.__hasEnterExecCommand = !1
        }
    }, UE.plugin.register("copy", function () {
        function a() {
            ZeroClipboard.config({
                debug: !1,
                swfPath: b.options.UEDITOR_HOME_URL + "third-party/zeroclipboard/ZeroClipboard.swf"
            });
            var a = b.zeroclipboard = new ZeroClipboard;
            a.on("copy", function (a) {
                var c = a.client, d = b.selection.getRange(), e = document.createElement("div");
                e.appendChild(d.cloneContents()), c.setText(e.innerText || e.textContent), c.setHtml(e.innerHTML), d.select()
            }), a.on("mouseover mouseout", function (a) {
                var b = a.target;
                "mouseover" == a.type ? domUtils.addClass(b, "edui-state-hover") : "mouseout" == a.type && domUtils.removeClasses(b, "edui-state-hover")
            }), a.on("wrongflash noflash", function () {
                ZeroClipboard.destroy()
            })
        }

        var b = this;
        return {
            bindEvents: {
                ready: function () {
                    browser.ie || (window.ZeroClipboard ? a() : utils.loadFile(document, {
                        src: b.options.UEDITOR_HOME_URL + "third-party/zeroclipboard/ZeroClipboard.js",
                        tag: "script",
                        type: "text/javascript",
                        defer: "defer"
                    }, function () {
                        a()
                    }))
                }
            }, commands: {
                copy: {
                    execCommand: function (a) {
                        b.document.execCommand("copy") || alert(b.getLang("copymsg"))
                    }
                }
            }
        }
    }), UE.plugins.paste = function () {
        function a(a) {
            var b = this.document;
            if (!b.getElementById("baidu_pastebin")) {
                var c = this.selection.getRange(), d = c.createBookmark(), e = b.createElement("div");
                e.id = "baidu_pastebin", browser.webkit && e.appendChild(b.createTextNode(domUtils.fillChar + domUtils.fillChar)), b.body.appendChild(e), d.start.style.display = "", e.style.cssText = "position:absolute;width:1px;height:1px;overflow:hidden;left:-1000px;white-space:nowrap;top:" + domUtils.getXY(d.start).y + "px", c.selectNodeContents(e).select(!0), setTimeout(function () {
                    if (browser.webkit)for (var f, g = 0, h = b.querySelectorAll("#baidu_pastebin"); f = h[g++];) {
                        if (!domUtils.isEmptyNode(f)) {
                            e = f;
                            break
                        }
                        domUtils.remove(f)
                    }
                    try {
                        e.parentNode.removeChild(e)
                    } catch (i) {
                    }
                    c.moveToBookmark(d).select(!0), a(e)
                }, 0)
            }
        }

        function b(a) {
            return a.replace(/<(\/?)([\w\-]+)([^>]*)>/gi, function (a, b, c, d) {
                return c = c.toLowerCase(), {img: 1}[c] ? a : (d = d.replace(/([\w\-]*?)\s*=\s*(("([^"]*)")|('([^']*)')|([^\s>]+))/gi, function (a, b, c) {
                    return {src: 1, href: 1, name: 1}[b.toLowerCase()] ? b + "=" + c + " " : ""
                }), {span: 1, div: 1}[c] ? "" : "<" + b + c + " " + utils.trim(d) + ">")
            })
        }

        function c(a) {
            var c;
            if (a.firstChild) {
                for (var h, i = domUtils.getElementsByTagName(a, "span"), j = 0; h = i[j++];)"_baidu_cut_start" != h.id && "_baidu_cut_end" != h.id || domUtils.remove(h);
                if (browser.webkit) {
                    for (var k, l = a.querySelectorAll("div br"), j = 0; k = l[j++];) {
                        var m = k.parentNode;
                        "DIV" == m.tagName && 1 == m.childNodes.length && (m.innerHTML = "<p><br/></p>", domUtils.remove(m))
                    }
                    for (var n, o = a.querySelectorAll("#baidu_pastebin"), j = 0; n = o[j++];) {
                        var p = d.document.createElement("p");
                        for (n.parentNode.insertBefore(p, n); n.firstChild;)p.appendChild(n.firstChild);
                        domUtils.remove(n)
                    }
                    for (var q, r = a.querySelectorAll("meta"), j = 0; q = r[j++];)domUtils.remove(q);
                    var l = a.querySelectorAll("br");
                    for (j = 0; q = l[j++];)/^apple-/i.test(q.className) && domUtils.remove(q)
                }
                if (browser.gecko) {
                    var s = a.querySelectorAll("[_moz_dirty]");
                    for (j = 0; q = s[j++];)q.removeAttribute("_moz_dirty")
                }
                if (!browser.ie)for (var q, t = a.querySelectorAll("span.Apple-style-span"), j = 0; q = t[j++];)domUtils.remove(q, !0);
                c = a.innerHTML, c = UE.filterWord(c);
                var u = UE.htmlparser(c);
                if (d.options.filterRules && UE.filterNode(u, d.options.filterRules), d.filterInputRule(u), browser.webkit) {
                    var v = u.lastChild();
                    v && "element" == v.type && "br" == v.tagName && u.removeChild(v), utils.each(d.body.querySelectorAll("div"), function (a) {
                        domUtils.isEmptyBlock(a) && domUtils.remove(a, !0)
                    })
                }
                if (c = {html: u.toHtml()}, d.fireEvent("beforepaste", c, u), !c.html)return;
                u = UE.htmlparser(c.html, !0), 1 === d.queryCommandState("pasteplain") ? d.execCommand("insertHtml", UE.filterNode(u, d.options.filterTxtRules).toHtml(), !0) : (UE.filterNode(u, d.options.filterTxtRules), e = u.toHtml(), f = c.html, g = d.selection.getRange().createAddress(!0), d.execCommand("insertHtml", d.getOpt("retainOnlyLabelPasted") === !0 ? b(f) : f, !0)), d.fireEvent("afterpaste", c)
            }
        }

        var d = this;
        d.setOpt({retainOnlyLabelPasted: !1});
        var e, f, g;
        d.addListener("pasteTransfer", function (a, c) {
            if (g && e && f && e != f) {
                var h = d.selection.getRange();
                if (h.moveToAddress(g, !0), !h.collapsed) {
                    for (; !domUtils.isBody(h.startContainer);) {
                        var i = h.startContainer;
                        if (1 == i.nodeType) {
                            if (i = i.childNodes[h.startOffset], !i) {
                                h.setStartBefore(h.startContainer);
                                continue
                            }
                            var j = i.previousSibling;
                            j && 3 == j.nodeType && new RegExp("^[\n\r	 " + domUtils.fillChar + "]*$").test(j.nodeValue) && h.setStartBefore(j)
                        }
                        if (0 != h.startOffset)break;
                        h.setStartBefore(h.startContainer)
                    }
                    for (; !domUtils.isBody(h.endContainer);) {
                        var k = h.endContainer;
                        if (1 == k.nodeType) {
                            if (k = k.childNodes[h.endOffset], !k) {
                                h.setEndAfter(h.endContainer);
                                continue
                            }
                            var l = k.nextSibling;
                            l && 3 == l.nodeType && new RegExp("^[\n\r	" + domUtils.fillChar + "]*$").test(l.nodeValue) && h.setEndAfter(l)
                        }
                        if (h.endOffset != h.endContainer[3 == h.endContainer.nodeType ? "nodeValue" : "childNodes"].length)break;
                        h.setEndAfter(h.endContainer)
                    }
                }
                h.deleteContents(), h.select(!0), d.__hasEnterExecCommand = !0;
                var m = f;
                2 === c ? m = b(m) : c && (m = e), d.execCommand("inserthtml", m, !0), d.__hasEnterExecCommand = !1;
                for (var n = d.selection.getRange(); !domUtils.isBody(n.startContainer) && !n.startOffset && n.startContainer[3 == n.startContainer.nodeType ? "nodeValue" : "childNodes"].length;)n.setStartBefore(n.startContainer);
                var o = n.createAddress(!0);
                g.endAddress = o.startAddress
            }
        }), d.addListener("ready", function () {
            domUtils.on(d.body, "cut", function () {
                var a = d.selection.getRange();
                !a.collapsed && d.undoManger && d.undoManger.save()
            }), domUtils.on(d.body, browser.ie || browser.opera ? "keydown" : "paste", function (b) {
                (!browser.ie && !browser.opera || (b.ctrlKey || b.metaKey) && "86" == b.keyCode) && a.call(d, function (a) {
                    c(a)
                })
            })
        }), d.commands.paste = {
            execCommand: function (b) {
                browser.ie ? (a.call(d, function (a) {
                    c(a)
                }), d.document.execCommand("paste")) : alert(d.getLang("pastemsg"))
            }
        }
    }, UE.plugins.pasteplain = function () {
        var a = this;
        a.setOpt({
            pasteplain: !1, filterTxtRules: function () {
                function a(a) {
                    a.tagName = "p", a.setStyle()
                }

                function b(a) {
                    a.parentNode.removeChild(a, !0)
                }

                return {
                    "-": "script style object iframe embed input select",
                    p: {$: {}},
                    br: {$: {}},
                    div: function (a) {
                        for (var b, c = UE.uNode.createElement("p"); b = a.firstChild();)"text" != b.type && UE.dom.dtd.$block[b.tagName] ? c.firstChild() ? (a.parentNode.insertBefore(c, a), c = UE.uNode.createElement("p")) : a.parentNode.insertBefore(b, a) : c.appendChild(b);
                        c.firstChild() && a.parentNode.insertBefore(c, a), a.parentNode.removeChild(a)
                    },
                    ol: b,
                    ul: b,
                    dl: b,
                    dt: b,
                    dd: b,
                    li: b,
                    caption: a,
                    th: a,
                    tr: a,
                    h1: a,
                    h2: a,
                    h3: a,
                    h4: a,
                    h5: a,
                    h6: a,
                    td: function (a) {
                        var b = !!a.innerText();
                        b && a.parentNode.insertAfter(UE.uNode.createText(" &nbsp; &nbsp;"), a), a.parentNode.removeChild(a, a.innerText())
                    }
                }
            }()
        });
        var b = a.options.pasteplain;
        a.commands.pasteplain = {
            queryCommandState: function () {
                return b ? 1 : 0
            }, execCommand: function () {
                b = 0 | !b
            }, notNeedUndo: 1
        }
    }, UE.plugins.list = function () {
        function a(a) {
            var b = [];
            for (var c in a)b.push(c);
            return b
        }

        function b(a) {
            var b = a.className;
            return domUtils.hasClass(a, /custom_/) ? b.match(/custom_(\w+)/)[1] : domUtils.getStyle(a, "list-style-type")
        }

        function c(a, c) {
            utils.each(domUtils.getElementsByTagName(a, "ol ul"), function (f) {
                if (domUtils.inDoc(f, a)) {
                    var g = f.parentNode;
                    if (g.tagName == f.tagName) {
                        var h = b(f) || ("OL" == f.tagName ? "decimal" : "disc"), i = b(g) || ("OL" == g.tagName ? "decimal" : "disc");
                        if (h == i) {
                            var l = utils.indexOf(k[f.tagName], h);
                            l = l + 1 == k[f.tagName].length ? 0 : l + 1, e(f, k[f.tagName][l])
                        }
                    }
                    var m = 0, n = 2;
                    domUtils.hasClass(f, /custom_/) ? /[ou]l/i.test(g.tagName) && domUtils.hasClass(g, /custom_/) || (n = 1) : /[ou]l/i.test(g.tagName) && domUtils.hasClass(g, /custom_/) && (n = 3);
                    var o = domUtils.getStyle(f, "list-style-type");
                    o && (f.style.cssText = "list-style-type:" + o), f.className = utils.trim(f.className.replace(/list-paddingleft-\w+/, "")) + " list-paddingleft-" + n, utils.each(domUtils.getElementsByTagName(f, "li"), function (a) {
                        if (a.style.cssText && (a.style.cssText = ""), !a.firstChild)return void domUtils.remove(a);
                        if (a.parentNode === f) {
                            if (m++, domUtils.hasClass(f, /custom_/)) {
                                var c = 1, d = b(f);
                                if ("OL" == f.tagName) {
                                    if (d)switch (d) {
                                        case"cn":
                                        case"cn1":
                                        case"cn2":
                                            m > 10 && (m % 10 == 0 || m > 10 && 20 > m) ? c = 2 : m > 20 && (c = 3);
                                            break;
                                        case"num2":
                                            m > 9 && (c = 2)
                                    }
                                    a.className = "list-" + j[d] + m + " list-" + d + "-paddingleft-" + c
                                } else a.className = "list-" + j[d] + " list-" + d + "-paddingleft"
                            } else a.className = a.className.replace(/list-[\w\-]+/gi, "");
                            var e = a.getAttribute("class");
                            null === e || e.replace(/\s/g, "") || domUtils.removeAttributes(a, "class")
                        }
                    }), !c && d(f, f.tagName.toLowerCase(), b(f) || domUtils.getStyle(f, "list-style-type"), !0)
                }
            })
        }

        function d(a, d, e, f) {
            var g = a.nextSibling;
            g && 1 == g.nodeType && g.tagName.toLowerCase() == d && (b(g) || domUtils.getStyle(g, "list-style-type") || ("ol" == d ? "decimal" : "disc")) == e && (domUtils.moveChild(g, a), 0 == g.childNodes.length && domUtils.remove(g)), g && domUtils.isFillChar(g) && domUtils.remove(g);
            var h = a.previousSibling;
            h && 1 == h.nodeType && h.tagName.toLowerCase() == d && (b(h) || domUtils.getStyle(h, "list-style-type") || ("ol" == d ? "decimal" : "disc")) == e && domUtils.moveChild(a, h), h && domUtils.isFillChar(h) && domUtils.remove(h), !f && domUtils.isEmptyBlock(a) && domUtils.remove(a), b(a) && c(a.ownerDocument, !0)
        }

        function e(a, b) {
            j[b] && (a.className = "custom_" + b);
            try {
                domUtils.setStyle(a, "list-style-type", b)
            } catch (c) {
            }
        }

        function f(a) {
            var b = a.previousSibling;
            b && domUtils.isEmptyBlock(b) && domUtils.remove(b), b = a.nextSibling, b && domUtils.isEmptyBlock(b) && domUtils.remove(b)
        }

        function g(a) {
            for (; a && !domUtils.isBody(a);) {
                if ("TABLE" == a.nodeName)return null;
                if ("LI" == a.nodeName)return a;
                a = a.parentNode
            }
        }

        var h = this, i = {TD: 1, PRE: 1, BLOCKQUOTE: 1}, j = {
            cn: "cn-1-",
            cn1: "cn-2-",
            cn2: "cn-3-",
            num: "num-1-",
            num1: "num-2-",
            num2: "num-3-",
            dash: "dash",
            dot: "dot"
        };
        h.setOpt({
            autoTransWordToList: !1,
            insertorderedlist: {
                num: "",
                num1: "",
                num2: "",
                cn: "",
                cn1: "",
                cn2: "",
                decimal: "",
                "lower-alpha": "",
                "lower-roman": "",
                "upper-alpha": "",
                "upper-roman": ""
            },
            insertunorderedlist: {circle: "", disc: "", square: "", dash: "", dot: ""},
            listDefaultPaddingLeft: "30",
            listiconpath: "http://bs.baidu.com/listicon/",
            maxListLevel: -1,
            disablePInList: !1
        });
        var k = {OL: a(h.options.insertorderedlist), UL: a(h.options.insertunorderedlist)}, l = h.options.listiconpath;
        for (var m in j)h.options.insertorderedlist.hasOwnProperty(m) || h.options.insertunorderedlist.hasOwnProperty(m) || delete j[m];
        h.ready(function () {
            var a = [];
            for (var b in j) {
                if ("dash" == b || "dot" == b)a.push("li.list-" + j[b] + "{background-image:url(" + l + j[b] + ".gif)}"), a.push("ul.custom_" + b + "{list-style:none;}ul.custom_" + b + " li{background-position:0 3px;background-repeat:no-repeat}"); else {
                    for (var c = 0; 99 > c; c++)a.push("li.list-" + j[b] + c + "{background-image:url(" + l + "list-" + j[b] + c + ".gif)}");
                    a.push("ol.custom_" + b + "{list-style:none;}ol.custom_" + b + " li{background-position:0 3px;background-repeat:no-repeat}")
                }
                switch (b) {
                    case"cn":
                        a.push("li.list-" + b + "-paddingleft-1{padding-left:25px}"), a.push("li.list-" + b + "-paddingleft-2{padding-left:40px}"), a.push("li.list-" + b + "-paddingleft-3{padding-left:55px}");
                        break;
                    case"cn1":
                        a.push("li.list-" + b + "-paddingleft-1{padding-left:30px}"), a.push("li.list-" + b + "-paddingleft-2{padding-left:40px}"), a.push("li.list-" + b + "-paddingleft-3{padding-left:55px}");
                        break;
                    case"cn2":
                        a.push("li.list-" + b + "-paddingleft-1{padding-left:40px}"), a.push("li.list-" + b + "-paddingleft-2{padding-left:55px}"), a.push("li.list-" + b + "-paddingleft-3{padding-left:68px}");
                        break;
                    case"num":
                    case"num1":
                        a.push("li.list-" + b + "-paddingleft-1{padding-left:25px}");
                        break;
                    case"num2":
                        a.push("li.list-" + b + "-paddingleft-1{padding-left:35px}"), a.push("li.list-" + b + "-paddingleft-2{padding-left:40px}");
                        break;
                    case"dash":
                        a.push("li.list-" + b + "-paddingleft{padding-left:35px}");
                        break;
                    case"dot":
                        a.push("li.list-" + b + "-paddingleft{padding-left:20px}")
                }
            }
            a.push(".list-paddingleft-1{padding-left:0}"), a.push(".list-paddingleft-2{padding-left:" + h.options.listDefaultPaddingLeft + "px}"), a.push(".list-paddingleft-3{padding-left:" + 2 * h.options.listDefaultPaddingLeft + "px}"), utils.cssRule("list", "ol,ul{margin:0;pading:0;" + (browser.ie ? "" : "width:95%") + "}li{clear:both;}" + a.join("\n"), h.document)
        }), h.ready(function () {
            domUtils.on(h.body, "cut", function () {
                setTimeout(function () {
                    var a, b = h.selection.getRange();
                    if (!b.collapsed && (a = domUtils.findParentByTagName(b.startContainer, "li", !0)) && !a.nextSibling && domUtils.isEmptyBlock(a)) {
                        var c, d = a.parentNode;
                        if (c = d.previousSibling)domUtils.remove(d), b.setStartAtLast(c).collapse(!0), b.select(!0); else if (c = d.nextSibling)domUtils.remove(d), b.setStartAtFirst(c).collapse(!0), b.select(!0); else {
                            var e = h.document.createElement("p");
                            domUtils.fillNode(h.document, e), d.parentNode.insertBefore(e, d), domUtils.remove(d), b.setStart(e, 0).collapse(!0), b.select(!0)
                        }
                    }
                })
            })
        }), h.addListener("beforepaste", function (a, c) {
            var d, e = this, f = e.selection.getRange(), g = UE.htmlparser(c.html, !0);
            if (d = domUtils.findParentByTagName(f.startContainer, "li", !0)) {
                var h = d.parentNode, i = "OL" == h.tagName ? "ul" : "ol";
                utils.each(g.getNodesByTagName(i), function (c) {
                    if (c.tagName = h.tagName, c.setAttr(), c.parentNode === g)a = b(h) || ("OL" == h.tagName ? "decimal" : "disc"); else {
                        var d = c.parentNode.getAttr("class");
                        a = d && /custom_/.test(d) ? d.match(/custom_(\w+)/)[1] : c.parentNode.getStyle("list-style-type"), a || (a = "OL" == h.tagName ? "decimal" : "disc")
                    }
                    var e = utils.indexOf(k[h.tagName], a);
                    c.parentNode !== g && (e = e + 1 == k[h.tagName].length ? 0 : e + 1);
                    var f = k[h.tagName][e];
                    j[f] ? c.setAttr("class", "custom_" + f) : c.setStyle("list-style-type", f)
                })
            }
            c.html = g.toHtml()
        }), h.getOpt("disablePInList") === !0 && h.addOutputRule(function (a) {
            utils.each(a.getNodesByTagName("li"), function (a) {
                var b = [], c = 0;
                utils.each(a.children, function (d) {
                    if ("p" == d.tagName) {
                        for (var e; e = d.children.pop();)b.splice(c, 0, e), e.parentNode = a, lastNode = e;
                        if (e = b[b.length - 1], !e || "element" != e.type || "br" != e.tagName) {
                            var f = UE.uNode.createElement("br");
                            f.parentNode = a, b.push(f)
                        }
                        c = b.length
                    }
                }), b.length && (a.children = b)
            })
        }), h.addInputRule(function (a) {
            function b(a, b) {
                var e = b.firstChild();
                if (e && "element" == e.type && "span" == e.tagName && /Wingdings|Symbol/.test(e.getStyle("font-family"))) {
                    for (var f in d)if (d[f] == e.data)return f;
                    return "disc"
                }
                for (var f in c)if (c[f].test(a))return f
            }

            if (utils.each(a.getNodesByTagName("li"), function (a) {
                    for (var b, c = UE.uNode.createElement("p"), d = 0; b = a.children[d];)"text" == b.type || dtd.p[b.tagName] ? c.appendChild(b) : c.firstChild() ? (a.insertBefore(c, b), c = UE.uNode.createElement("p"), d += 2) : d++;
                    (c.firstChild() && !c.parentNode || !a.firstChild()) && a.appendChild(c), c.firstChild() || c.innerHTML(browser.ie ? "&nbsp;" : "<br/>");
                    var e = a.firstChild(), f = e.lastChild();
                    f && "text" == f.type && /^\s*$/.test(f.data) && e.removeChild(f)
                }), h.options.autoTransWordToList) {
                var c = {
                    num1: /^\d+\)/,
                    decimal: /^\d+\./,
                    "lower-alpha": /^[a-z]+\)/,
                    "upper-alpha": /^[A-Z]+\./,
                    cn: /^[\u4E00\u4E8C\u4E09\u56DB\u516d\u4e94\u4e03\u516b\u4e5d]+[\u3001]/,
                    cn2: /^\([\u4E00\u4E8C\u4E09\u56DB\u516d\u4e94\u4e03\u516b\u4e5d]+\)/
                }, d = {square: "n"};
                utils.each(a.getNodesByTagName("p"), function (a) {
                    function d(a, b, d) {
                        if ("ol" == a.tagName)if (browser.ie) {
                            var e = b.firstChild();
                            "element" == e.type && "span" == e.tagName && c[d].test(e.innerText()) && b.removeChild(e)
                        } else b.innerHTML(b.innerHTML().replace(c[d], "")); else b.removeChild(b.firstChild());
                        var f = UE.uNode.createElement("li");
                        f.appendChild(b), a.appendChild(f)
                    }

                    if ("MsoListParagraph" == a.getAttr("class")) {
                        a.setStyle("margin", ""), a.setStyle("margin-left", ""), a.setAttr("class", "");
                        var e, f = a, g = a;
                        if ("li" != a.parentNode.tagName && (e = b(a.innerText(), a))) {
                            var i = UE.uNode.createElement(h.options.insertorderedlist.hasOwnProperty(e) ? "ol" : "ul");
                            for (j[e] ? i.setAttr("class", "custom_" + e) : i.setStyle("list-style-type", e); a && "li" != a.parentNode.tagName && b(a.innerText(), a);)f = a.nextSibling(), f || a.parentNode.insertBefore(i, a), d(i, a, e), a = f;
                            !i.parentNode && a && a.parentNode && a.parentNode.insertBefore(i, a)
                        }
                        var k = g.firstChild();
                        k && "element" == k.type && "span" == k.tagName && /^\s*(&nbsp;)+\s*$/.test(k.innerText()) && k.parentNode.removeChild(k)
                    }
                })
            }
        }), h.addListener("contentchange", function () {
            c(h.document)
        }), h.addListener("keydown", function (a, b) {
            function c() {
                b.preventDefault ? b.preventDefault() : b.returnValue = !1, h.fireEvent("contentchange"), h.undoManger && h.undoManger.save()
            }

            function d(a, b) {
                for (; a && !domUtils.isBody(a);) {
                    if (b(a))return null;
                    if (1 == a.nodeType && /[ou]l/i.test(a.tagName))return a;
                    a = a.parentNode
                }
                return null
            }

            var e = b.keyCode || b.which;
            if (13 == e && !b.shiftKey) {
                var g = h.selection.getRange(), i = domUtils.findParent(g.startContainer, function (a) {
                    return domUtils.isBlockElm(a)
                }, !0), j = domUtils.findParentByTagName(g.startContainer, "li", !0);
                if (i && "PRE" != i.tagName && !j) {
                    var k = i.innerHTML.replace(new RegExp(domUtils.fillChar, "g"), "");
                    /^\s*1\s*\.[^\d]/.test(k) && (i.innerHTML = k.replace(/^\s*1\s*\./, ""), g.setStartAtLast(i).collapse(!0).select(), h.__hasEnterExecCommand = !0, h.execCommand("insertorderedlist"), h.__hasEnterExecCommand = !1)
                }
                var l = h.selection.getRange(), m = d(l.startContainer, function (a) {
                    return "TABLE" == a.tagName
                }), n = l.collapsed ? m : d(l.endContainer, function (a) {
                    return "TABLE" == a.tagName
                });
                if (m && n && m === n) {
                    if (!l.collapsed) {
                        if (m = domUtils.findParentByTagName(l.startContainer, "li", !0), n = domUtils.findParentByTagName(l.endContainer, "li", !0), !m || !n || m !== n) {
                            var o = l.cloneRange(), p = o.collapse(!1).createBookmark();
                            l.deleteContents(), o.moveToBookmark(p);
                            var j = domUtils.findParentByTagName(o.startContainer, "li", !0);
                            return f(j), o.select(), void c()
                        }
                        if (l.deleteContents(), j = domUtils.findParentByTagName(l.startContainer, "li", !0), j && domUtils.isEmptyBlock(j))return v = j.previousSibling, next = j.nextSibling, s = h.document.createElement("p"), domUtils.fillNode(h.document, s), q = j.parentNode, v && next ? (l.setStart(next, 0).collapse(!0).select(!0), domUtils.remove(j)) : ((v || next) && v ? j.parentNode.parentNode.insertBefore(s, q.nextSibling) : q.parentNode.insertBefore(s, q), domUtils.remove(j), q.firstChild || domUtils.remove(q), l.setStart(s, 0).setCursor()), void c()
                    }
                    if (j = domUtils.findParentByTagName(l.startContainer, "li", !0)) {
                        if (domUtils.isEmptyBlock(j)) {
                            p = l.createBookmark();
                            var q = j.parentNode;
                            if (j !== q.lastChild ? (domUtils.breakParent(j, q), f(j)) : (q.parentNode.insertBefore(j, q.nextSibling), domUtils.isEmptyNode(q) && domUtils.remove(q)), !dtd.$list[j.parentNode.tagName])if (domUtils.isBlockElm(j.firstChild))domUtils.remove(j, !0); else {
                                for (s = h.document.createElement("p"), j.parentNode.insertBefore(s, j); j.firstChild;)s.appendChild(j.firstChild);
                                domUtils.remove(j)
                            }
                            l.moveToBookmark(p).select()
                        } else {
                            var r = j.firstChild;
                            if (!r || !domUtils.isBlockElm(r)) {
                                var s = h.document.createElement("p");
                                for (!j.firstChild && domUtils.fillNode(h.document, s); j.firstChild;)s.appendChild(j.firstChild);
                                j.appendChild(s), r = s
                            }
                            var t = h.document.createElement("span");
                            l.insertNode(t), domUtils.breakParent(t, j);
                            var u = t.nextSibling;
                            r = u.firstChild, r || (s = h.document.createElement("p"), domUtils.fillNode(h.document, s), u.appendChild(s), r = s), domUtils.isEmptyNode(r) && (r.innerHTML = "", domUtils.fillNode(h.document, r)), l.setStart(r, 0).collapse(!0).shrinkBoundary().select(), domUtils.remove(t);
                            var v = u.previousSibling;
                            v && domUtils.isEmptyBlock(v) && (v.innerHTML = "<p></p>", domUtils.fillNode(h.document, v.firstChild))
                        }
                        c()
                    }
                }
            }
            if (8 == e && (l = h.selection.getRange(), l.collapsed && domUtils.isStartInblock(l) && (o = l.cloneRange().trimBoundary(), j = domUtils.findParentByTagName(l.startContainer, "li", !0), j && domUtils.isStartInblock(o)))) {
                if (m = domUtils.findParentByTagName(l.startContainer, "p", !0), m && m !== j.firstChild) {
                    var q = domUtils.findParentByTagName(m, ["ol", "ul"]);
                    return domUtils.breakParent(m, q), f(m), h.fireEvent("contentchange"), l.setStart(m, 0).setCursor(!1, !0), h.fireEvent("saveScene"), void domUtils.preventDefault(b)
                }
                if (j && (v = j.previousSibling)) {
                    if (46 == e && j.childNodes.length)return;
                    if (dtd.$list[v.tagName] && (v = v.lastChild), h.undoManger && h.undoManger.save(), r = j.firstChild, domUtils.isBlockElm(r))if (domUtils.isEmptyNode(r))for (v.appendChild(r), l.setStart(r, 0).setCursor(!1, !0); j.firstChild;)v.appendChild(j.firstChild); else t = h.document.createElement("span"), l.insertNode(t), domUtils.isEmptyBlock(v) && (v.innerHTML = ""), domUtils.moveChild(j, v), l.setStartBefore(t).collapse(!0).select(!0), domUtils.remove(t); else if (domUtils.isEmptyNode(j)) {
                        var s = h.document.createElement("p");
                        v.appendChild(s), l.setStart(s, 0).setCursor()
                    } else for (l.setEnd(v, v.childNodes.length).collapse().select(!0); j.firstChild;)v.appendChild(j.firstChild);
                    return domUtils.remove(j), h.fireEvent("contentchange"), h.fireEvent("saveScene"), void domUtils.preventDefault(b)
                }
                if (j && !j.previousSibling) {
                    var q = j.parentNode, p = l.createBookmark();
                    if (domUtils.isTagNode(q.parentNode, "ol ul"))q.parentNode.insertBefore(j, q), domUtils.isEmptyNode(q) && domUtils.remove(q); else {
                        for (; j.firstChild;)q.parentNode.insertBefore(j.firstChild, q);
                        domUtils.remove(j), domUtils.isEmptyNode(q) && domUtils.remove(q)
                    }
                    return l.moveToBookmark(p).setCursor(!1, !0), h.fireEvent("contentchange"), h.fireEvent("saveScene"), void domUtils.preventDefault(b)
                }
            }
        }), h.addListener("keyup", function (a, c) {
            var e = c.keyCode || c.which;
            if (8 == e) {
                var f, g = h.selection.getRange();
                (f = domUtils.findParentByTagName(g.startContainer, ["ol", "ul"], !0)) && d(f, f.tagName.toLowerCase(), b(f) || domUtils.getComputedStyle(f, "list-style-type"), !0)
            }
        }), h.addListener("tabkeydown", function () {
            function a(a) {
                if (-1 != h.options.maxListLevel) {
                    for (var b = a.parentNode, c = 0; /[ou]l/i.test(b.tagName);)c++, b = b.parentNode;
                    if (c >= h.options.maxListLevel)return !0
                }
            }

            var c = h.selection.getRange(), f = domUtils.findParentByTagName(c.startContainer, "li", !0);
            if (f) {
                var g;
                if (!c.collapsed) {
                    h.fireEvent("saveScene"), g = c.createBookmark();
                    for (var i, j, l = 0, m = domUtils.findParents(f); j = m[l++];)if (domUtils.isTagNode(j, "ol ul")) {
                        i = j;
                        break
                    }
                    var n = f;
                    if (g.end)for (; n && !(domUtils.getPosition(n, g.end) & domUtils.POSITION_FOLLOWING);)if (a(n))n = domUtils.getNextDomNode(n, !1, null, function (a) {
                        return a !== i
                    }); else {
                        var o = n.parentNode, p = h.document.createElement(o.tagName), q = utils.indexOf(k[p.tagName], b(o) || domUtils.getComputedStyle(o, "list-style-type")), r = q + 1 == k[p.tagName].length ? 0 : q + 1, s = k[p.tagName][r];
                        for (e(p, s), o.insertBefore(p, n); n && !(domUtils.getPosition(n, g.end) & domUtils.POSITION_FOLLOWING);) {
                            if (f = n.nextSibling, p.appendChild(n), !f || domUtils.isTagNode(f, "ol ul")) {
                                if (f)for (; (f = f.firstChild) && "LI" != f.tagName;); else f = domUtils.getNextDomNode(n, !1, null, function (a) {
                                    return a !== i
                                });
                                break
                            }
                            n = f
                        }
                        d(p, p.tagName.toLowerCase(), s), n = f
                    }
                    return h.fireEvent("contentchange"), c.moveToBookmark(g).select(), !0
                }
                if (a(f))return !0;
                var o = f.parentNode, p = h.document.createElement(o.tagName), q = utils.indexOf(k[p.tagName], b(o) || domUtils.getComputedStyle(o, "list-style-type"));
                q = q + 1 == k[p.tagName].length ? 0 : q + 1;
                var s = k[p.tagName][q];
                if (e(p, s), domUtils.isStartInblock(c))return h.fireEvent("saveScene"), g = c.createBookmark(), o.insertBefore(p, f), p.appendChild(f), d(p, p.tagName.toLowerCase(), s), h.fireEvent("contentchange"), c.moveToBookmark(g).select(!0), !0
            }
        }), h.commands.insertorderedlist = h.commands.insertunorderedlist = {
            execCommand: function (a, c) {
                c || (c = "insertorderedlist" == a.toLowerCase() ? "decimal" : "disc");
                var f = this, h = this.selection.getRange(), j = function (a) {
                    return 1 == a.nodeType ? "br" != a.tagName.toLowerCase() : !domUtils.isWhitespace(a)
                }, k = "insertorderedlist" == a.toLowerCase() ? "ol" : "ul", l = f.document.createDocumentFragment();
                h.adjustmentBoundary().shrinkBoundary();
                var m, n, o, p, q = h.createBookmark(!0), r = g(f.document.getElementById(q.start)), s = 0, t = g(f.document.getElementById(q.end)), u = 0;
                if (r || t) {
                    if (r && (m = r.parentNode), q.end || (t = r), t && (n = t.parentNode), m === n) {
                        for (; r !== t;) {
                            if (p = r, r = r.nextSibling, !domUtils.isBlockElm(p.firstChild)) {
                                for (var v = f.document.createElement("p"); p.firstChild;)v.appendChild(p.firstChild);
                                p.appendChild(v)
                            }
                            l.appendChild(p)
                        }
                        if (p = f.document.createElement("span"), m.insertBefore(p, t), !domUtils.isBlockElm(t.firstChild)) {
                            for (v = f.document.createElement("p"); t.firstChild;)v.appendChild(t.firstChild);
                            t.appendChild(v)
                        }
                        l.appendChild(t), domUtils.breakParent(p, m), domUtils.isEmptyNode(p.previousSibling) && domUtils.remove(p.previousSibling), domUtils.isEmptyNode(p.nextSibling) && domUtils.remove(p.nextSibling);
                        var w = b(m) || domUtils.getComputedStyle(m, "list-style-type") || ("insertorderedlist" == a.toLowerCase() ? "decimal" : "disc");
                        if (m.tagName.toLowerCase() == k && w == c) {
                            for (var x, y = 0, z = f.document.createDocumentFragment(); x = l.firstChild;)if (domUtils.isTagNode(x, "ol ul"))z.appendChild(x); else for (; x.firstChild;)z.appendChild(x.firstChild), domUtils.remove(x);
                            p.parentNode.insertBefore(z, p)
                        } else o = f.document.createElement(k), e(o, c), o.appendChild(l), p.parentNode.insertBefore(o, p);
                        return domUtils.remove(p), o && d(o, k, c), void h.moveToBookmark(q).select()
                    }
                    if (r) {
                        for (; r;) {
                            if (p = r.nextSibling, domUtils.isTagNode(r, "ol ul"))l.appendChild(r); else {
                                for (var A = f.document.createDocumentFragment(), B = 0; r.firstChild;)domUtils.isBlockElm(r.firstChild) && (B = 1), A.appendChild(r.firstChild);
                                if (B)l.appendChild(A); else {
                                    var C = f.document.createElement("p");
                                    C.appendChild(A), l.appendChild(C)
                                }
                                domUtils.remove(r)
                            }
                            r = p
                        }
                        m.parentNode.insertBefore(l, m.nextSibling), domUtils.isEmptyNode(m) ? (h.setStartBefore(m), domUtils.remove(m)) : h.setStartAfter(m), s = 1
                    }
                    if (t && domUtils.inDoc(n, f.document)) {
                        for (r = n.firstChild; r && r !== t;) {
                            if (p = r.nextSibling, domUtils.isTagNode(r, "ol ul"))l.appendChild(r); else {
                                for (A = f.document.createDocumentFragment(), B = 0; r.firstChild;)domUtils.isBlockElm(r.firstChild) && (B = 1), A.appendChild(r.firstChild);
                                B ? l.appendChild(A) : (C = f.document.createElement("p"), C.appendChild(A), l.appendChild(C)), domUtils.remove(r)
                            }
                            r = p
                        }
                        var D = domUtils.createElement(f.document, "div", {tmpDiv: 1});
                        domUtils.moveChild(t, D), l.appendChild(D), domUtils.remove(t), n.parentNode.insertBefore(l, n), h.setEndBefore(n), domUtils.isEmptyNode(n) && domUtils.remove(n), u = 1
                    }
                }
                s || h.setStartBefore(f.document.getElementById(q.start)), q.end && !u && h.setEndAfter(f.document.getElementById(q.end)), h.enlarge(!0, function (a) {
                    return i[a.tagName]
                }), l = f.document.createDocumentFragment();
                for (var E, F = h.createBookmark(), G = domUtils.getNextDomNode(F.start, !1, j), H = h.cloneRange(), I = domUtils.isBlockElm; G && G !== F.end && domUtils.getPosition(G, F.end) & domUtils.POSITION_PRECEDING;)if (3 == G.nodeType || dtd.li[G.tagName]) {
                    if (1 == G.nodeType && dtd.$list[G.tagName]) {
                        for (; G.firstChild;)l.appendChild(G.firstChild);
                        E = domUtils.getNextDomNode(G, !1, j), domUtils.remove(G), G = E;
                        continue
                    }
                    for (E = G, H.setStartBefore(G); G && G !== F.end && (!I(G) || domUtils.isBookmarkNode(G));)E = G, G = domUtils.getNextDomNode(G, !1, null, function (a) {
                        return !i[a.tagName]
                    });
                    G && I(G) && (p = domUtils.getNextDomNode(E, !1, j), p && domUtils.isBookmarkNode(p) && (G = domUtils.getNextDomNode(p, !1, j), E = p)), H.setEndAfter(E), G = domUtils.getNextDomNode(E, !1, j);
                    var J = h.document.createElement("li");
                    if (J.appendChild(H.extractContents()), domUtils.isEmptyNode(J)) {
                        for (var E = h.document.createElement("p"); J.firstChild;)E.appendChild(J.firstChild);
                        J.appendChild(E)
                    }
                    l.appendChild(J)
                } else G = domUtils.getNextDomNode(G, !0, j);
                h.moveToBookmark(F).collapse(!0), o = f.document.createElement(k), e(o, c), o.appendChild(l), h.insertNode(o), d(o, k, c);
                for (var x, y = 0, K = domUtils.getElementsByTagName(o, "div"); x = K[y++];)x.getAttribute("tmpDiv") && domUtils.remove(x, !0);
                h.moveToBookmark(q).select()
            }, queryCommandState: function (a) {
                for (var b, c = "insertorderedlist" == a.toLowerCase() ? "ol" : "ul", d = this.selection.getStartElementPath(), e = 0; b = d[e++];) {
                    if ("TABLE" == b.nodeName)return 0;
                    if (c == b.nodeName.toLowerCase())return 1
                }
                return 0
            }, queryCommandValue: function (a) {
                for (var c, d, e = "insertorderedlist" == a.toLowerCase() ? "ol" : "ul", f = this.selection.getStartElementPath(), g = 0; d = f[g++];) {
                    if ("TABLE" == d.nodeName) {
                        c = null;
                        break
                    }
                    if (e == d.nodeName.toLowerCase()) {
                        c = d;
                        break
                    }
                }
                return c ? b(c) || domUtils.getComputedStyle(c, "list-style-type") : null
            }
        }
    }, function () {
        var a = {
            textarea: function (a, b) {
                var c = b.ownerDocument.createElement("textarea");
                return c.style.cssText = "position:absolute;resize:none;width:100%;height:100%;border:0;padding:0;margin:0;overflow-y:auto;", browser.ie && browser.version < 8 && (c.style.width = b.offsetWidth + "px", c.style.height = b.offsetHeight + "px", b.onresize = function () {
                    c.style.width = b.offsetWidth + "px", c.style.height = b.offsetHeight + "px"
                }), b.appendChild(c), {
                    setContent: function (a) {
                        c.value = a
                    }, getContent: function () {
                        return c.value
                    }, select: function () {
                        var a;
                        browser.ie ? (a = c.createTextRange(), a.collapse(!0), a.select()) : (c.setSelectionRange(0, 0), c.focus())
                    }, dispose: function () {
                        b.removeChild(c), b.onresize = null, c = null, b = null
                    }
                }
            }, codemirror: function (a, b) {
                var c = window.CodeMirror(b, {
                    mode: "text/html",
                    tabMode: "indent",
                    lineNumbers: !0,
                    lineWrapping: !0
                }), d = c.getWrapperElement();
                return d.style.cssText = 'position:absolute;left:0;top:0;width:100%;height:100%;font-family:consolas,"Courier new",monospace;font-size:13px;', c.getScrollerElement().style.cssText = "position:absolute;left:0;top:0;width:100%;height:100%;", c.refresh(), {
                    getCodeMirror: function () {
                        return c
                    }, setContent: function (a) {
                        c.setValue(a)
                    }, getContent: function () {
                        return c.getValue()
                    }, select: function () {
                        c.focus()
                    }, dispose: function () {
                        b.removeChild(d), d = null, c = null
                    }
                }
            }
        };
        UE.plugins.source = function () {
            function b(b) {
                return a["codemirror" == f.sourceEditor && window.CodeMirror ? "codemirror" : "textarea"](e, b)
            }

            var c, d, e = this, f = this.options, g = !1;
            f.sourceEditor = browser.ie ? "textarea" : f.sourceEditor || "codemirror", e.setOpt({sourceEditorFirst: !1});
            var h, i, j;
            e.commands.source = {
                execCommand: function () {
                    if (g = !g) {
                        j = e.selection.getRange().createAddress(!1, !0), e.undoManger && e.undoManger.save(!0), browser.gecko && (e.body.contentEditable = !1), h = e.iframe.style.cssText, e.iframe.style.cssText += "position:absolute;left:-32768px;top:-32768px;", e.fireEvent("beforegetcontent");
                        var a = UE.htmlparser(e.body.innerHTML);
                        e.filterOutputRule(a), a.traversal(function (a) {
                            if ("element" == a.type)switch (a.tagName) {
                                case"td":
                                case"th":
                                case"caption":
                                    a.children && 1 == a.children.length && "br" == a.firstChild().tagName && a.removeChild(a.firstChild());
                                    break;
                                case"pre":
                                    a.innerText(a.innerText().replace(/&nbsp;/g, " "))
                            }
                        }), e.fireEvent("aftergetcontent");
                        var f = a.toHtml(!0);
                        c = b(e.iframe.parentNode), c.setContent(f), d = e.setContent, e.setContent = function (a) {
                            var b = UE.htmlparser(a);
                            e.filterInputRule(b), a = b.toHtml(), c.setContent(a)
                        }, setTimeout(function () {
                            c.select(), e.addListener("fullscreenchanged", function () {
                                try {
                                    c.getCodeMirror().refresh()
                                } catch (a) {
                                }
                            })
                        }), i = e.getContent, e.getContent = function () {
                            return c.getContent() || "<p>" + (browser.ie ? "" : "<br/>") + "</p>"
                        }
                    } else {
                        e.iframe.style.cssText = h;
                        var k = c.getContent() || "<p>" + (browser.ie ? "" : "<br/>") + "</p>";
                        k = k.replace(new RegExp("[\\r\\t\\n ]*</?(\\w+)\\s*(?:[^>]*)>", "g"), function (a, b) {
                            return b && !dtd.$inlineWithA[b.toLowerCase()] ? a.replace(/(^[\n\r\t ]*)|([\n\r\t ]*$)/g, "") : a.replace(/(^[\n\r\t]*)|([\n\r\t]*$)/g, "")
                        }), e.setContent = d, e.setContent(k), c.dispose(), c = null, e.getContent = i;
                        var l = e.body.firstChild;
                        if (l || (e.body.innerHTML = "<p>" + (browser.ie ? "" : "<br/>") + "</p>", l = e.body.firstChild), e.undoManger && e.undoManger.save(!0), browser.gecko) {
                            var m = document.createElement("input");
                            m.style.cssText = "position:absolute;left:0;top:-32768px", document.body.appendChild(m), e.body.contentEditable = !1, setTimeout(function () {
                                domUtils.setViewportOffset(m, {
                                    left: -32768,
                                    top: 0
                                }), m.focus(), setTimeout(function () {
                                    e.body.contentEditable = !0, e.selection.getRange().moveToAddress(j).select(!0), domUtils.remove(m)
                                })
                            })
                        } else try {
                            e.selection.getRange().moveToAddress(j).select(!0)
                        } catch (n) {
                        }
                    }
                    this.fireEvent("sourcemodechanged", g)
                }, queryCommandState: function () {
                    return 0 | g
                }, notNeedUndo: 1
            };
            var k = e.queryCommandState;
            e.queryCommandState = function (a) {
                return a = a.toLowerCase(), g ? a in {source: 1, fullscreen: 1} ? 1 : -1 : k.apply(this, arguments)
            }, "codemirror" == f.sourceEditor && e.addListener("ready", function () {
                utils.loadFile(document, {
                    src: f.codeMirrorJsUrl || f.UEDITOR_HOME_URL + "third-party/codemirror/codemirror.js",
                    tag: "script",
                    type: "text/javascript",
                    defer: "defer"
                }, function () {
                    f.sourceEditorFirst && setTimeout(function () {
                        e.execCommand("source")
                    }, 0)
                }), utils.loadFile(document, {
                    tag: "link",
                    rel: "stylesheet",
                    type: "text/css",
                    href: f.codeMirrorCssUrl || f.UEDITOR_HOME_URL + "third-party/codemirror/codemirror.css"
                })
            })
        }
    }(), UE.plugins.enterkey = function () {
        var a, b = this, c = b.options.enterTag;
        b.addListener("keyup", function (c, d) {
            var e = d.keyCode || d.which;
            if (13 == e) {
                var f, g = b.selection.getRange(), h = g.startContainer;
                if (browser.ie)b.fireEvent("saveScene", !0, !0); else {
                    if (/h\d/i.test(a)) {
                        if (browser.gecko) {
                            var i = domUtils.findParentByTagName(h, ["h1", "h2", "h3", "h4", "h5", "h6", "blockquote", "caption", "table"], !0);
                            i || (b.document.execCommand("formatBlock", !1, "<p>"), f = 1)
                        } else if (1 == h.nodeType) {
                            var j, k = b.document.createTextNode("");
                            if (g.insertNode(k), j = domUtils.findParentByTagName(k, "div", !0)) {
                                for (var l = b.document.createElement("p"); j.firstChild;)l.appendChild(j.firstChild);
                                j.parentNode.insertBefore(l, j), domUtils.remove(j), g.setStartBefore(k).setCursor(), f = 1
                            }
                            domUtils.remove(k)
                        }
                        b.undoManger && f && b.undoManger.save()
                    }
                    browser.opera && g.select()
                }
            }
        }), b.addListener("keydown", function (d, e) {
            var f = e.keyCode || e.which;
            if (13 == f) {
                if (b.fireEvent("beforeenterkeydown"))return void domUtils.preventDefault(e);
                b.fireEvent("saveScene", !0, !0), a = "";
                var g = b.selection.getRange();
                if (!g.collapsed) {
                    var h = g.startContainer, i = g.endContainer, j = domUtils.findParentByTagName(h, "td", !0), k = domUtils.findParentByTagName(i, "td", !0);
                    if (j && k && j !== k || !j && k || j && !k)return void(e.preventDefault ? e.preventDefault() : e.returnValue = !1)
                }
                if ("p" == c)browser.ie || (h = domUtils.findParentByTagName(g.startContainer, ["ol", "ul", "p", "h1", "h2", "h3", "h4", "h5", "h6", "blockquote", "caption"], !0), h || browser.opera ? (a = h.tagName, "p" == h.tagName.toLowerCase() && browser.gecko && domUtils.removeDirtyAttr(h)) : (b.document.execCommand("formatBlock", !1, "<p>"), browser.gecko && (g = b.selection.getRange(), h = domUtils.findParentByTagName(g.startContainer, "p", !0), h && domUtils.removeDirtyAttr(h)))); else if (e.preventDefault ? e.preventDefault() : e.returnValue = !1, g.collapsed) {
                    m = g.document.createElement("br"), g.insertNode(m);
                    var l = m.parentNode;
                    l.lastChild === m ? (m.parentNode.insertBefore(m.cloneNode(!0), m), g.setStartBefore(m)) : g.setStartAfter(m), g.setCursor()
                } else if (g.deleteContents(), h = g.startContainer, 1 == h.nodeType && (h = h.childNodes[g.startOffset])) {
                    for (; 1 == h.nodeType;) {
                        if (dtd.$empty[h.tagName])return g.setStartBefore(h).setCursor(), b.undoManger && b.undoManger.save(), !1;
                        if (!h.firstChild) {
                            var m = g.document.createElement("br");
                            return h.appendChild(m), g.setStart(h, 0).setCursor(), b.undoManger && b.undoManger.save(), !1
                        }
                        h = h.firstChild
                    }
                    h === g.startContainer.childNodes[g.startOffset] ? (m = g.document.createElement("br"), g.insertNode(m).setCursor()) : g.setStart(h, 0).setCursor()
                } else m = g.document.createElement("br"), g.insertNode(m).setStartAfter(m).setCursor()
            }
        })
    }, UE.plugins.keystrokes = function () {
        var a = this, b = !0;
        a.addListener("keydown", function (c, d) {
            var e = d.keyCode || d.which, f = a.selection.getRange();
            if (!f.collapsed && !(d.ctrlKey || d.shiftKey || d.altKey || d.metaKey) && (e >= 65 && 90 >= e || e >= 48 && 57 >= e || e >= 96 && 111 >= e || {
                    13: 1,
                    8: 1,
                    46: 1
                }[e])) {
                var g = f.startContainer;
                if (domUtils.isFillChar(g) && f.setStartBefore(g), g = f.endContainer, domUtils.isFillChar(g) && f.setEndAfter(g), f.txtToElmBoundary(), f.endContainer && 1 == f.endContainer.nodeType && (g = f.endContainer.childNodes[f.endOffset], g && domUtils.isBr(g) && f.setEndAfter(g)), 0 == f.startOffset && (g = f.startContainer, domUtils.isBoundaryNode(g, "firstChild") && (g = f.endContainer, f.endOffset == (3 == g.nodeType ? g.nodeValue.length : g.childNodes.length) && domUtils.isBoundaryNode(g, "lastChild"))))return a.fireEvent("saveScene"), a.body.innerHTML = "<p>" + (browser.ie ? "" : "<br/>") + "</p>", f.setStart(a.body.firstChild, 0).setCursor(!1, !0), void a._selectionChange()
            }
            if (e == keymap.Backspace) {
                if (f = a.selection.getRange(), b = f.collapsed, a.fireEvent("delkeydown", d))return;
                var h, i;
                if (f.collapsed && f.inFillChar() && (h = f.startContainer, domUtils.isFillChar(h) ? (f.setStartBefore(h).shrinkBoundary(!0).collapse(!0), domUtils.remove(h)) : (h.nodeValue = h.nodeValue.replace(new RegExp("^" + domUtils.fillChar), ""), f.startOffset--, f.collapse(!0).select(!0))), h = f.getClosedNode())return a.fireEvent("saveScene"), f.setStartBefore(h), domUtils.remove(h), f.setCursor(), a.fireEvent("saveScene"), void domUtils.preventDefault(d);
                if (!browser.ie && (h = domUtils.findParentByTagName(f.startContainer, "table", !0), i = domUtils.findParentByTagName(f.endContainer, "table", !0), h && !i || !h && i || h !== i))return void d.preventDefault()
            }
            if (e == keymap.Tab) {
                var j = {ol: 1, ul: 1, table: 1};
                if (a.fireEvent("tabkeydown", d))return void domUtils.preventDefault(d);
                var k = a.selection.getRange();
                a.fireEvent("saveScene");
                for (var l = 0, m = "", n = a.options.tabSize || 4, o = a.options.tabNode || "&nbsp;"; n > l; l++)m += o;
                var p = a.document.createElement("span");
                if (p.innerHTML = m + domUtils.fillChar, k.collapsed)k.insertNode(p.cloneNode(!0).firstChild).setCursor(!0); else {
                    var q = function (a) {
                        return domUtils.isBlockElm(a) && !j[a.tagName.toLowerCase()]
                    };
                    if (h = domUtils.findParent(k.startContainer, q, !0), i = domUtils.findParent(k.endContainer, q, !0), h && i && h === i)k.deleteContents(), k.insertNode(p.cloneNode(!0).firstChild).setCursor(!0); else {
                        var r = k.createBookmark();
                        k.enlarge(!0);
                        for (var s = k.createBookmark(), t = domUtils.getNextDomNode(s.start, !1, q); t && !(domUtils.getPosition(t, s.end) & domUtils.POSITION_FOLLOWING);)t.insertBefore(p.cloneNode(!0).firstChild, t.firstChild), t = domUtils.getNextDomNode(t, !1, q);
                        k.moveToBookmark(s).moveToBookmark(r).select()
                    }
                }
                domUtils.preventDefault(d)
            }
            if (browser.gecko && 46 == e && (k = a.selection.getRange(), k.collapsed && (h = k.startContainer, domUtils.isEmptyBlock(h)))) {
                for (var u = h.parentNode; 1 == domUtils.getChildCount(u) && !domUtils.isBody(u);)h = u, u = u.parentNode;
                return void(h === u.lastChild && d.preventDefault())
            }
        }), a.addListener("keyup", function (a, c) {
            var d, e = c.keyCode || c.which, f = this;
            if (e == keymap.Backspace) {
                if (f.fireEvent("delkeyup"))return;
                if (d = f.selection.getRange(), d.collapsed) {
                    var g, h = ["h1", "h2", "h3", "h4", "h5", "h6"];
                    if ((g = domUtils.findParentByTagName(d.startContainer, h, !0)) && domUtils.isEmptyBlock(g)) {
                        var i = g.previousSibling;
                        if (i && "TABLE" != i.nodeName)return domUtils.remove(g), void d.setStartAtLast(i).setCursor(!1, !0);
                        var j = g.nextSibling;
                        if (j && "TABLE" != j.nodeName)return domUtils.remove(g), void d.setStartAtFirst(j).setCursor(!1, !0)
                    }
                    if (domUtils.isBody(d.startContainer)) {
                        var g = domUtils.createElement(f.document, "p", {innerHTML: browser.ie ? domUtils.fillChar : "<br/>"});
                        d.insertNode(g).setStart(g, 0).setCursor(!1, !0)
                    }
                }
                if (!b && (3 == d.startContainer.nodeType || 1 == d.startContainer.nodeType && domUtils.isEmptyBlock(d.startContainer)))if (browser.ie) {
                    var k = d.document.createElement("span");
                    d.insertNode(k).setStartBefore(k).collapse(!0), d.select(), domUtils.remove(k)
                } else d.select()
            }
        })
    }, UE.plugins.fiximgclick = function () {
        function a() {
            this.editor = null, this.resizer = null, this.cover = null, this.doc = document, this.prePos = {
                x: 0,
                y: 0
            }, this.startPos = {x: 0, y: 0}
        }

        var b = !1;
        return function () {
            var c = [[0, 0, -1, -1], [0, 0, 0, -1], [0, 0, 1, -1], [0, 0, -1, 0], [0, 0, 1, 0], [0, 0, -1, 1], [0, 0, 0, 1], [0, 0, 1, 1]];
            a.prototype = {
                init: function (a) {
                    var b = this;
                    b.editor = a, b.startPos = this.prePos = {x: 0, y: 0}, b.dragId = -1;
                    var c = [], d = b.cover = document.createElement("div"), e = b.resizer = document.createElement("div");
                    for (d.id = b.editor.ui.id + "_imagescale_cover", d.style.cssText = "position:absolute;display:none;z-index:" + b.editor.options.zIndex + ";filter:alpha(opacity=0); opacity:0;background:#CCC;", domUtils.on(d, "mousedown click", function () {
                        b.hide()
                    }), i = 0; i < 8; i++)c.push('<span class="edui-editor-imagescale-hand' + i + '"></span>');
                    e.id = b.editor.ui.id + "_imagescale", e.className = "edui-editor-imagescale", e.innerHTML = c.join(""), e.style.cssText += ";display:none;border:1px solid #3b77ff;z-index:" + b.editor.options.zIndex + ";", b.editor.ui.getDom().appendChild(d), b.editor.ui.getDom().appendChild(e), b.initStyle(), b.initEvents()
                }, initStyle: function () {
                    utils.cssRule("imagescale", ".edui-editor-imagescale{display:none;position:absolute;border:1px solid #38B2CE;cursor:hand;-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;}.edui-editor-imagescale span{position:absolute;width:6px;height:6px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}.edui-editor-imagescale .edui-editor-imagescale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}.edui-editor-imagescale .edui-editor-imagescale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}.edui-editor-imagescale .edui-editor-imagescale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}")
                }, initEvents: function () {
                    var a = this;
                    a.startPos.x = a.startPos.y = 0, a.isDraging = !1
                }, _eventHandler: function (a) {
                    var c = this;
                    switch (a.type) {
                        case"mousedown":
                            var d, d = a.target || a.srcElement;
                            -1 != d.className.indexOf("edui-editor-imagescale-hand") && -1 == c.dragId && (c.dragId = d.className.slice(-1), c.startPos.x = c.prePos.x = a.clientX, c.startPos.y = c.prePos.y = a.clientY, domUtils.on(c.doc, "mousemove", c.proxy(c._eventHandler, c)));
                            break;
                        case"mousemove":
                            -1 != c.dragId && (c.updateContainerStyle(c.dragId, {
                                x: a.clientX - c.prePos.x,
                                y: a.clientY - c.prePos.y
                            }), c.prePos.x = a.clientX, c.prePos.y = a.clientY, b = !0, c.updateTargetElement());
                            break;
                        case"mouseup":
                            -1 != c.dragId && (c.updateContainerStyle(c.dragId, {
                                x: a.clientX - c.prePos.x,
                                y: a.clientY - c.prePos.y
                            }), c.updateTargetElement(), c.target.parentNode && c.attachTo(c.target), c.dragId = -1), domUtils.un(c.doc, "mousemove", c.proxy(c._eventHandler, c)), b && (b = !1, c.editor.fireEvent("contentchange"))
                    }
                }, updateTargetElement: function () {
                    var a = this;
                    domUtils.setStyles(a.target, {
                        width: a.resizer.style.width,
                        height: a.resizer.style.height
                    }), a.target.width = parseInt(a.resizer.style.width), a.target.height = parseInt(a.resizer.style.height), a.attachTo(a.target)
                }, updateContainerStyle: function (a, b) {
                    var d, e = this, f = e.resizer;
                    0 != c[a][0] && (d = parseInt(f.style.left) + b.x, f.style.left = e._validScaledProp("left", d) + "px"), 0 != c[a][1] && (d = parseInt(f.style.top) + b.y, f.style.top = e._validScaledProp("top", d) + "px"), 0 != c[a][2] && (d = f.clientWidth + c[a][2] * b.x, f.style.width = e._validScaledProp("width", d) + "px"), 0 != c[a][3] && (d = f.clientHeight + c[a][3] * b.y, f.style.height = e._validScaledProp("height", d) + "px")
                }, _validScaledProp: function (a, b) {
                    var c = this.resizer, d = document;
                    switch (b = isNaN(b) ? 0 : b, a) {
                        case"left":
                            return 0 > b ? 0 : b + c.clientWidth > d.clientWidth ? d.clientWidth - c.clientWidth : b;
                        case"top":
                            return 0 > b ? 0 : b + c.clientHeight > d.clientHeight ? d.clientHeight - c.clientHeight : b;
                        case"width":
                            return 0 >= b ? 1 : b + c.offsetLeft > d.clientWidth ? d.clientWidth - c.offsetLeft : b;
                        case"height":
                            return 0 >= b ? 1 : b + c.offsetTop > d.clientHeight ? d.clientHeight - c.offsetTop : b
                    }
                }, hideCover: function () {
                    this.cover.style.display = "none"
                }, showCover: function () {
                    var a = this, b = domUtils.getXY(a.editor.ui.getDom()), c = domUtils.getXY(a.editor.iframe);
                    domUtils.setStyles(a.cover, {
                        width: a.editor.iframe.offsetWidth + "px",
                        height: a.editor.iframe.offsetHeight + "px",
                        top: c.y - b.y + "px",
                        left: c.x - b.x + "px",
                        position: "absolute",
                        display: ""
                    })
                }, show: function (a) {
                    var b = this;
                    b.resizer.style.display = "block", a && b.attachTo(a), domUtils.on(this.resizer, "mousedown", b.proxy(b._eventHandler, b)), domUtils.on(b.doc, "mouseup", b.proxy(b._eventHandler, b)), b.showCover(), b.editor.fireEvent("afterscaleshow", b), b.editor.fireEvent("saveScene")
                }, hide: function () {
                    var a = this;
                    a.hideCover(), a.resizer.style.display = "none", domUtils.un(a.resizer, "mousedown", a.proxy(a._eventHandler, a)), domUtils.un(a.doc, "mouseup", a.proxy(a._eventHandler, a)), a.editor.fireEvent("afterscalehide", a)
                }, proxy: function (a, b) {
                    return function (c) {
                        return a.apply(b || this, arguments)
                    }
                }, attachTo: function (a) {
                    var b = this, c = b.target = a, d = this.resizer, e = domUtils.getXY(c), f = domUtils.getXY(b.editor.iframe), g = domUtils.getXY(d.parentNode);
                    domUtils.setStyles(d, {
                        width: c.width + "px",
                        height: c.height + "px",
                        left: f.x + e.x - b.editor.document.body.scrollLeft - g.x - parseInt(d.style.borderLeftWidth) + "px",
                        top: f.y + e.y - b.editor.document.body.scrollTop - g.y - parseInt(d.style.borderTopWidth) + "px"
                    })
                }
            }
        }(), function () {
            var b, c = this;
            c.setOpt("imageScaleEnabled", !0), !browser.ie && c.options.imageScaleEnabled && c.addListener("click", function (d, e) {
                var f = c.selection.getRange(), g = f.getClosedNode();
                if (g && "IMG" == g.tagName && "false" != c.body.contentEditable) {
                    if (-1 != g.className.indexOf("edui-faked-music") || g.getAttribute("anchorname") || domUtils.hasClass(g, "loadingclass") || domUtils.hasClass(g, "loaderrorclass"))return;
                    if (!b) {
                        b = new a, b.init(c), c.ui.getDom().appendChild(b.resizer);
                        var h, i = function (a) {
                            b.hide(), b.target && c.selection.getRange().selectNode(b.target).select()
                        }, j = function (a) {
                            var b = a.target || a.srcElement;
                            !b || void 0 !== b.className && -1 != b.className.indexOf("edui-editor-imagescale") || i(a)
                        };
                        c.addListener("afterscaleshow", function (a) {
                            c.addListener("beforekeydown", i), c.addListener("beforemousedown", j), domUtils.on(document, "keydown", i), domUtils.on(document, "mousedown", j), c.selection.getNative().removeAllRanges()
                        }), c.addListener("afterscalehide", function (a) {
                            c.removeListener("beforekeydown", i), c.removeListener("beforemousedown", j), domUtils.un(document, "keydown", i), domUtils.un(document, "mousedown", j);
                            var d = b.target;
                            d.parentNode && c.selection.getRange().selectNode(d).select()
                        }), domUtils.on(b.resizer, "mousedown", function (a) {
                            c.selection.getNative().removeAllRanges();
                            var d = a.target || a.srcElement;
                            d && -1 == d.className.indexOf("edui-editor-imagescale-hand") && (h = setTimeout(function () {
                                b.hide(), b.target && c.selection.getRange().selectNode(d).select()
                            }, 200))
                        }), domUtils.on(b.resizer, "mouseup", function (a) {
                            var b = a.target || a.srcElement;
                            b && -1 == b.className.indexOf("edui-editor-imagescale-hand") && clearTimeout(h)
                        })
                    }
                    b.show(g)
                } else b && "none" != b.resizer.style.display && b.hide()
            }), browser.webkit && c.addListener("click", function (a, b) {
                if ("IMG" == b.target.tagName && "false" != c.body.contentEditable) {
                    var d = new dom.Range(c.document);
                    d.selectNode(b.target).select()
                }
            })
        }
    }(), UE.plugin.register("autolink", function () {
        var a = 0;
        return browser.ie ? {} : {
            bindEvents: {
                reset: function () {
                    a = 0
                }, keydown: function (a, b) {
                    var c = this, d = b.keyCode || b.which;
                    if (32 == d || 13 == d) {
                        for (var e, f, g = c.selection.getNative(), h = g.getRangeAt(0).cloneRange(), i = h.startContainer; 1 == i.nodeType && h.startOffset > 0 && (i = h.startContainer.childNodes[h.startOffset - 1]);)h.setStart(i, 1 == i.nodeType ? i.childNodes.length : i.nodeValue.length), h.collapse(!0), i = h.startContainer;
                        do {
                            if (0 == h.startOffset) {
                                for (i = h.startContainer.previousSibling; i && 1 == i.nodeType;)i = i.lastChild;
                                if (!i || domUtils.isFillChar(i))break;
                                e = i.nodeValue.length
                            } else i = h.startContainer, e = h.startOffset;
                            h.setStart(i, e - 1), f = h.toString().charCodeAt(0)
                        } while (160 != f && 32 != f);
                        if (h.toString().replace(new RegExp(domUtils.fillChar, "g"), "").match(/(?:https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)/i)) {
                            for (; h.toString().length && !/^(?:https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)/i.test(h.toString());)try {
                                h.setStart(h.startContainer, h.startOffset + 1)
                            } catch (j) {
                                for (var i = h.startContainer; !(next = i.nextSibling);) {
                                    if (domUtils.isBody(i))return;
                                    i = i.parentNode
                                }
                                h.setStart(next, 0)
                            }
                            if (domUtils.findParentByTagName(h.startContainer, "a", !0))return;
                            var k, l = c.document.createElement("a"), m = c.document.createTextNode(" ");
                            c.undoManger && c.undoManger.save(), l.appendChild(h.extractContents()), l.href = l.innerHTML = l.innerHTML.replace(/<[^>]+>/g, ""), k = l.getAttribute("href").replace(new RegExp(domUtils.fillChar, "g"), ""), k = /^(?:https?:\/\/)/gi.test(k) ? k : "http://" + k, l.setAttribute("_src", utils.html(k)), l.href = utils.html(k), h.insertNode(l), l.parentNode.insertBefore(m, l.nextSibling), h.setStart(m, 0), h.collapse(!0), g.removeAllRanges(), g.addRange(h), c.undoManger && c.undoManger.save()
                        }
                    }
                }
            }
        }
    }, function () {
        function a(a) {
            if (3 == a.nodeType)return null;
            if ("A" == a.nodeName)return a;
            for (var b = a.lastChild; b;) {
                if ("A" == b.nodeName)return b;
                if (3 == b.nodeType) {
                    if (domUtils.isWhitespace(b)) {
                        b = b.previousSibling;
                        continue
                    }
                    return null
                }
                b = b.lastChild
            }
        }

        var b = {37: 1, 38: 1, 39: 1, 40: 1, 13: 1, 32: 1};
        browser.ie && this.addListener("keyup", function (c, d) {
            var e = this, f = d.keyCode;
            if (b[f]) {
                var g = e.selection.getRange(), h = g.startContainer;
                if (13 == f) {
                    for (; h && !domUtils.isBody(h) && !domUtils.isBlockElm(h);)h = h.parentNode;
                    if (h && !domUtils.isBody(h) && "P" == h.nodeName) {
                        var i = h.previousSibling;
                        if (i && 1 == i.nodeType) {
                            var i = a(i);
                            i && !i.getAttribute("_href") && domUtils.remove(i, !0)
                        }
                    }
                } else if (32 == f)3 == h.nodeType && /^\s$/.test(h.nodeValue) && (h = h.previousSibling, h && "A" == h.nodeName && !h.getAttribute("_href") && domUtils.remove(h, !0)); else if (h = domUtils.findParentByTagName(h, "a", !0), h && !h.getAttribute("_href")) {
                    var j = g.createBookmark();
                    domUtils.remove(h, !0), g.moveToBookmark(j).select(!0)
                }
            }
        })
    }), UE.plugins.autoheight = function () {
        function a() {
            var a = this;
            clearTimeout(e), f || (!a.queryCommandState || a.queryCommandState && 1 != a.queryCommandState("source")) && (e = setTimeout(function () {
                for (var b = a.body.lastChild; b && 1 != b.nodeType;)b = b.previousSibling;
                b && 1 == b.nodeType && (b.style.clear = "both", d = Math.max(domUtils.getXY(b).y + b.offsetHeight + 25, Math.max(h.minFrameHeight, h.initialFrameHeight)), d != g && (d !== parseInt(a.iframe.parentNode.style.height) && (a.iframe.parentNode.style.height = d + "px"), a.body.style.height = d + "px", g = d), domUtils.removeStyle(b, "clear"))
            }, 50))
        }

        var b = this;
        if (b.autoHeightEnabled = b.options.autoHeightEnabled !== !1, b.autoHeightEnabled) {
            var c, d, e, f, g = 0, h = b.options;
            b.addListener("fullscreenchanged", function (a, b) {
                f = b
            }), b.addListener("destroy", function () {
                b.removeListener("contentchange afterinserthtml keyup mouseup", a)
            }), b.enableAutoHeight = function () {
                var b = this;
                if (b.autoHeightEnabled) {
                    var d = b.document;
                    b.autoHeightEnabled = !0, c = d.body.style.overflowY, d.body.style.overflowY = "hidden", b.addListener("contentchange afterinserthtml keyup mouseup", a), setTimeout(function () {
                        a.call(b)
                    }, browser.gecko ? 100 : 0), b.fireEvent("autoheightchanged", b.autoHeightEnabled)
                }
            }, b.disableAutoHeight = function () {
                b.body.style.overflowY = c || "", b.removeListener("contentchange", a), b.removeListener("keyup", a), b.removeListener("mouseup", a), b.autoHeightEnabled = !1, b.fireEvent("autoheightchanged", b.autoHeightEnabled)
            }, b.on("setHeight", function () {
                b.disableAutoHeight()
            }), b.addListener("ready", function () {
                b.enableAutoHeight();
                var c;
                domUtils.on(browser.ie ? b.body : b.document, browser.webkit ? "dragover" : "drop", function () {
                    clearTimeout(c), c = setTimeout(function () {
                        a.call(b)
                    }, 100)
                });
                var d;
                window.onscroll = function () {
                    null === d ? d = this.scrollY : 0 == this.scrollY && 0 != d && (b.window.scrollTo(0, 0), d = null)
                }
            })
        }
    }, UE.plugins.autofloat = function () {
        function a() {
            return UE.ui ? 1 : (alert(g.autofloatMsg), 0)
        }

        function b() {
            var a = document.body.style;
            a.backgroundImage = 'url("about:blank")', a.backgroundAttachment = "fixed"
        }

        function c() {
            var a = domUtils.getXY(k), b = domUtils.getComputedStyle(k, "position"), c = domUtils.getComputedStyle(k, "left");
            k.style.width = k.offsetWidth + "px", k.style.zIndex = 1 * f.options.zIndex + 1, k.parentNode.insertBefore(q, k), o || p && browser.ie ? ("absolute" != k.style.position && (k.style.position = "absolute"), k.style.top = (document.body.scrollTop || document.documentElement.scrollTop) - l + i + "px") : (browser.ie7Compat && r && (r = !1, k.style.left = domUtils.getXY(k).x - document.documentElement.getBoundingClientRect().left + 2 + "px"), "fixed" != k.style.position && (k.style.position = "fixed", k.style.top = i + "px", ("absolute" == b || "relative" == b) && parseFloat(c) && (k.style.left = a.x + "px")))
        }

        function d() {
            r = !0, q.parentNode && q.parentNode.removeChild(q), k.style.cssText = j
        }

        function e() {
            var a = m(f.container), b = f.options.toolbarTopOffset || 0;
            a.top < 0 && a.bottom - k.offsetHeight > b ? c() : d()
        }

        var f = this, g = f.getLang();
        f.setOpt({topOffset: 0});
        var h = f.options.autoFloatEnabled !== !1, i = f.options.topOffset;
        if (h) {
            var j, k, l, m, n = UE.ui.uiUtils, o = browser.ie && browser.version <= 6, p = browser.quirks, q = document.createElement("div"), r = !0, s = utils.defer(function () {
                e()
            }, browser.ie ? 200 : 100, !0);
            f.addListener("destroy", function () {
                domUtils.un(window, ["scroll", "resize"], e), f.removeListener("keydown", s)
            }), f.addListener("ready", function () {
                if (a(f)) {
                    if (!f.ui)return;
                    m = n.getClientRect, k = f.ui.getDom("toolbarbox"), l = m(k).top, j = k.style.cssText, q.style.height = k.offsetHeight + "px", o && b(), domUtils.on(window, ["scroll", "resize"], e), f.addListener("keydown", s), f.addListener("beforefullscreenchange", function (a, b) {
                        b && d()
                    }), f.addListener("fullscreenchanged", function (a, b) {
                        b || e()
                    }), f.addListener("sourcemodechanged", function (a, b) {
                        setTimeout(function () {
                            e()
                        }, 0)
                    }), f.addListener("clearDoc", function () {
                        setTimeout(function () {
                            e()
                        }, 0)
                    })
                }
            })
        }
    }, UE.plugins.video = function () {
        function a(a, b, d, e, f, g, h) {
            a = utils.unhtmlForUrl(a), f = utils.unhtml(f), g = utils.unhtml(g), b = parseInt(b, 10) || 0, d = parseInt(d, 10) || 0;
            var i;
            switch (h) {
                case"image":
                    i = "<img " + (e ? 'id="' + e + '"' : "") + ' width="' + b + '" height="' + d + '" _url="' + a + '" class="' + g.replace(/\bvideo-js\b/, "") + '" src="' + c.options.UEDITOR_HOME_URL + 'themes/default/images/spacer.gif" style="background:url(' + c.options.UEDITOR_HOME_URL + "themes/default/images/videologo.gif) no-repeat center center; border:1px solid gray;" + (f ? "float:" + f + ";" : "") + '" />';
                    break;
                case"embed":
                    i = '<embed type="application/x-shockwave-flash" class="' + g + '" pluginspage="http://www.macromedia.com/go/getflashplayer" src="' + utils.html(a) + '" width="' + b + '" height="' + d + '"' + (f ? ' style="float:' + f + '"' : "") + ' wmode="transparent" play="true" loop="false" menu="false" allowscriptaccess="never" allowfullscreen="true" >';
                    break;
                case"video":
                    var j = a.substr(a.lastIndexOf(".") + 1);
                    "ogv" == j && (j = "ogg"), i = "<video" + (e ? ' id="' + e + '"' : "") + ' class="' + g + ' video-js" ' + (f ? ' style="float:' + f + '"' : "") + ' controls preload="none" width="' + b + '" height="' + d + '" src="' + a + '" data-setup="{}"><source src="' + a + '" type="video/' + j + '" /></video>'
            }
            return i
        }

        function b(b, c) {
            utils.each(b.getNodesByTagName(c ? "img" : "embed video"), function (b) {
                var d = b.getAttr("class");
                if (d && -1 != d.indexOf("edui-faked-video")) {
                    var e = a(c ? b.getAttr("_url") : b.getAttr("src"), b.getAttr("width"), b.getAttr("height"), null, b.getStyle("float") || "", d, c ? "embed" : "image");
                    b.parentNode.replaceChild(UE.uNode.createElement(e), b)
                }
                if (d && -1 != d.indexOf("edui-upload-video")) {
                    var e = a(c ? b.getAttr("_url") : b.getAttr("src"), b.getAttr("width"), b.getAttr("height"), null, b.getStyle("float") || "", d, c ? "video" : "image");
                    b.parentNode.replaceChild(UE.uNode.createElement(e), b)
                }
            })
        }

        var c = this;
        c.addOutputRule(function (a) {
            b(a, !0)
        }), c.addInputRule(function (a) {
            b(a)
        }), c.commands.insertvideo = {
            execCommand: function (b, d, e) {
                d = utils.isArray(d) ? d : [d];
                for (var f, g, h = [], i = "tmpVedio", j = 0, k = d.length; k > j; j++)g = d[j], f = "upload" == e ? "edui-upload-video video-js vjs-default-skin" : "edui-faked-video", h.push(a(g.url, g.width || 420, g.height || 280, i + j, null, f, "image"));
                c.execCommand("inserthtml", h.join(""), !0);
                for (var l = this.selection.getRange(), j = 0, k = d.length; k > j; j++) {
                    var m = this.document.getElementById("tmpVedio" + j);
                    domUtils.removeAttributes(m, "id"), l.selectNode(m).select(), c.execCommand("imagefloat", d[j].align)
                }
            }, queryCommandState: function () {
                var a = c.selection.getRange().getClosedNode(), b = a && ("edui-faked-video" == a.className || -1 != a.className.indexOf("edui-upload-video"));
                return b ? 1 : 0
            }
        }
    }, function () {
        function a(a) {
        }

        var b = UE.UETable = function (a) {
            this.table = a, this.indexTable = [], this.selectedTds = [], this.cellsRange = {}, this.update(a)
        };
        b.removeSelectedClass = function (a) {
            utils.each(a, function (a) {
                domUtils.removeClasses(a, "selectTdClass")
            })
        }, b.addSelectedClass = function (a) {
            utils.each(a, function (a) {
                domUtils.addClass(a, "selectTdClass")
            })
        }, b.isEmptyBlock = function (a) {
            var b = new RegExp(domUtils.fillChar, "g");
            if (a[browser.ie ? "innerText" : "textContent"].replace(/^\s*$/, "").replace(b, "").length > 0)return 0;
            for (var c in dtd.$isNotEmpty)if (dtd.$isNotEmpty.hasOwnProperty(c) && a.getElementsByTagName(c).length)return 0;
            return 1
        }, b.getWidth = function (a) {
            return a ? parseInt(domUtils.getComputedStyle(a, "width"), 10) : 0
        }, b.getTableCellAlignState = function (a) {
            !utils.isArray(a) && (a = [a]);
            var b = {}, c = ["align", "valign"], d = null, e = !0;
            return utils.each(a, function (a) {
                return utils.each(c, function (c) {
                    if (d = a.getAttribute(c), !b[c] && d)b[c] = d; else if (!b[c] || d !== b[c])return e = !1, !1
                }), e
            }), e ? b : null
        }, b.getTableItemsByRange = function (a) {
            var b = a.selection.getStart();
            b && b.id && 0 === b.id.indexOf("_baidu_bookmark_start_") && b.nextSibling && (b = b.nextSibling);
            var c = b && domUtils.findParentByTagName(b, ["td", "th"], !0), d = c && c.parentNode, e = b && domUtils.findParentByTagName(b, "caption", !0), f = e ? e.parentNode : d && d.parentNode.parentNode;
            return {cell: c, tr: d, table: f, caption: e}
        }, b.getUETableBySelected = function (a) {
            var c = b.getTableItemsByRange(a).table;
            return c && c.ueTable && c.ueTable.selectedTds.length ? c.ueTable : null
        }, b.getDefaultValue = function (a, b) {
            var c, d, e, f, g = {thin: "0px", medium: "1px", thick: "2px"};
            if (b)return h = b.getElementsByTagName("td")[0], f = domUtils.getComputedStyle(b, "border-left-width"), c = parseInt(g[f] || f, 10), f = domUtils.getComputedStyle(h, "padding-left"), d = parseInt(g[f] || f, 10), f = domUtils.getComputedStyle(h, "border-left-width"), e = parseInt(g[f] || f, 10), {
                tableBorder: c,
                tdPadding: d,
                tdBorder: e
            };
            b = a.document.createElement("table"), b.insertRow(0).insertCell(0).innerHTML = "xxx", a.body.appendChild(b);
            var h = b.getElementsByTagName("td")[0];
            return f = domUtils.getComputedStyle(b, "border-left-width"), c = parseInt(g[f] || f, 10), f = domUtils.getComputedStyle(h, "padding-left"), d = parseInt(g[f] || f, 10), f = domUtils.getComputedStyle(h, "border-left-width"), e = parseInt(g[f] || f, 10), domUtils.remove(b), {
                tableBorder: c,
                tdPadding: d,
                tdBorder: e
            }
        }, b.getUETable = function (a) {
            var c = a.tagName.toLowerCase();
            return a = "td" == c || "th" == c || "caption" == c ? domUtils.findParentByTagName(a, "table", !0) : a, a.ueTable || (a.ueTable = new b(a)), a.ueTable
        }, b.cloneCell = function (a, b, c) {
            if (!a || utils.isString(a))return this.table.ownerDocument.createElement(a || "td");
            var d = domUtils.hasClass(a, "selectTdClass");
            d && domUtils.removeClasses(a, "selectTdClass");
            var e = a.cloneNode(!0);
            return b && (e.rowSpan = e.colSpan = 1), !c && domUtils.removeAttributes(e, "width height"), !c && domUtils.removeAttributes(e, "style"), e.style.borderLeftStyle = "", e.style.borderTopStyle = "", e.style.borderLeftColor = a.style.borderRightColor, e.style.borderLeftWidth = a.style.borderRightWidth, e.style.borderTopColor = a.style.borderBottomColor, e.style.borderTopWidth = a.style.borderBottomWidth, d && domUtils.addClass(a, "selectTdClass"), e
        }, b.prototype = {
            getMaxRows: function () {
                for (var a, b = this.table.rows, c = 1, d = 0; a = b[d]; d++) {
                    for (var e, f = 1, g = 0; e = a.cells[g++];)f = Math.max(e.rowSpan || 1, f);
                    c = Math.max(f + d, c)
                }
                return c
            }, getMaxCols: function () {
                for (var a, b = this.table.rows, c = 0, d = {}, e = 0; a = b[e]; e++) {
                    for (var f, g = 0, h = 0; f = a.cells[h++];)if (g += f.colSpan || 1, f.rowSpan && f.rowSpan > 1)for (var i = 1; i < f.rowSpan; i++)d["row_" + (e + i)] ? d["row_" + (e + i)]++ : d["row_" + (e + i)] = f.colSpan || 1;
                    g += d["row_" + e] || 0, c = Math.max(g, c)
                }
                return c
            }, getCellColIndex: function (a) {
            }, getHSideCell: function (b, c) {
                try {
                    var d, e, f = this.getCellInfo(b), g = this.selectedTds.length, h = this.cellsRange;
                    return !c && (g ? !h.beginColIndex : !f.colIndex) || c && (g ? h.endColIndex == this.colsNum - 1 : f.colIndex == this.colsNum - 1) ? null : (d = g ? h.beginRowIndex : f.rowIndex, e = c ? g ? h.endColIndex + 1 : f.colIndex + 1 : g ? h.beginColIndex - 1 : f.colIndex < 1 ? 0 : f.colIndex - 1, this.getCell(this.indexTable[d][e].rowIndex, this.indexTable[d][e].cellIndex))
                } catch (i) {
                    a(i)
                }
            }, getTabNextCell: function (a, b) {
                var c, d = this.getCellInfo(a), e = b || d.rowIndex, f = d.colIndex + 1 + (d.colSpan - 1);
                try {
                    c = this.getCell(this.indexTable[e][f].rowIndex, this.indexTable[e][f].cellIndex)
                } catch (g) {
                    try {
                        e = 1 * e + 1, f = 0, c = this.getCell(this.indexTable[e][f].rowIndex, this.indexTable[e][f].cellIndex)
                    } catch (g) {
                    }
                }
                return c
            }, getVSideCell: function (b, c, d) {
                try {
                    var e, f, g = this.getCellInfo(b), h = this.selectedTds.length && !d, i = this.cellsRange;
                    return !c && 0 == g.rowIndex || c && (h ? i.endRowIndex == this.rowsNum - 1 : g.rowIndex + g.rowSpan > this.rowsNum - 1) ? null : (e = c ? h ? i.endRowIndex + 1 : g.rowIndex + g.rowSpan : h ? i.beginRowIndex - 1 : g.rowIndex - 1, f = h ? i.beginColIndex : g.colIndex, this.getCell(this.indexTable[e][f].rowIndex, this.indexTable[e][f].cellIndex))
                } catch (j) {
                    a(j)
                }
            }, getSameEndPosCells: function (b, c) {
                try {
                    for (var d = "x" === c.toLowerCase(), e = domUtils.getXY(b)[d ? "x" : "y"] + b["offset" + (d ? "Width" : "Height")], f = this.table.rows, g = null, h = [], i = 0; i < this.rowsNum; i++) {
                        g = f[i].cells;
                        for (var j, k = 0; j = g[k++];) {
                            var l = domUtils.getXY(j)[d ? "x" : "y"] + j["offset" + (d ? "Width" : "Height")];
                            if (l > e && d)break;
                            if ((b == j || e == l) && (1 == j[d ? "colSpan" : "rowSpan"] && h.push(j), d))break
                        }
                    }
                    return h
                } catch (m) {
                    a(m)
                }
            }, setCellContent: function (a, b) {
                a.innerHTML = b || (browser.ie ? domUtils.fillChar : "<br />")
            }, cloneCell: b.cloneCell, getSameStartPosXCells: function (b) {
                try {
                    for (var c, d = domUtils.getXY(b).x + b.offsetWidth, e = this.table.rows, f = [], g = 0; g < this.rowsNum; g++) {
                        c = e[g].cells;
                        for (var h, i = 0; h = c[i++];) {
                            var j = domUtils.getXY(h).x;
                            if (j > d)break;
                            if (j == d && 1 == h.colSpan) {
                                f.push(h);
                                break
                            }
                        }
                    }
                    return f
                } catch (k) {
                    a(k)
                }
            }, update: function (a) {
                this.table = a || this.table, this.selectedTds = [], this.cellsRange = {}, this.indexTable = [];
                for (var b = this.table.rows, c = this.getMaxRows(), d = c - b.length, e = this.getMaxCols(); d--;)this.table.insertRow(b.length);
                this.rowsNum = c, this.colsNum = e;
                for (var f = 0, g = b.length; g > f; f++)this.indexTable[f] = new Array(e);
                for (var h, i = 0; h = b[i]; i++)for (var j, k = 0, l = h.cells; j = l[k]; k++) {
                    j.rowSpan > c && (j.rowSpan = c);
                    for (var m = k, n = j.rowSpan || 1, o = j.colSpan || 1; this.indexTable[i][m];)m++;
                    for (var p = 0; n > p; p++)for (var q = 0; o > q; q++)this.indexTable[i + p][m + q] = {
                        rowIndex: i,
                        cellIndex: k,
                        colIndex: m,
                        rowSpan: n,
                        colSpan: o
                    }
                }
                for (p = 0; c > p; p++)for (q = 0; e > q; q++)void 0 === this.indexTable[p][q] && (h = b[p], j = h.cells[h.cells.length - 1], j = j ? j.cloneNode(!0) : this.table.ownerDocument.createElement("td"), this.setCellContent(j), 1 !== j.colSpan && (j.colSpan = 1), 1 !== j.rowSpan && (j.rowSpan = 1), h.appendChild(j), this.indexTable[p][q] = {
                    rowIndex: p,
                    cellIndex: j.cellIndex,
                    colIndex: q,
                    rowSpan: 1,
                    colSpan: 1
                });
                var r = domUtils.getElementsByTagName(this.table, "td"), s = [];
                if (utils.each(r, function (a) {
                        domUtils.hasClass(a, "selectTdClass") && s.push(a)
                    }), s.length) {
                    var t = s[0], u = s[s.length - 1], v = this.getCellInfo(t), w = this.getCellInfo(u);
                    this.selectedTds = s, this.cellsRange = {
                        beginRowIndex: v.rowIndex,
                        beginColIndex: v.colIndex,
                        endRowIndex: w.rowIndex + w.rowSpan - 1,
                        endColIndex: w.colIndex + w.colSpan - 1
                    }
                }
                if (!domUtils.hasClass(this.table.rows[0], "firstRow")) {
                    domUtils.addClass(this.table.rows[0], "firstRow");
                    for (var f = 1; f < this.table.rows.length; f++)domUtils.removeClasses(this.table.rows[f], "firstRow")
                }
            }, getCellInfo: function (a) {
                if (a)for (var b = a.cellIndex, c = a.parentNode.rowIndex, d = this.indexTable[c], e = this.colsNum, f = b; e > f; f++) {
                    var g = d[f];
                    if (g.rowIndex === c && g.cellIndex === b)return g
                }
            }, getCell: function (a, b) {
                return a < this.rowsNum && this.table.rows[a].cells[b] || null
            }, deleteCell: function (a, b) {
                b = "number" == typeof b ? b : a.parentNode.rowIndex;
                var c = this.table.rows[b];
                c.deleteCell(a.cellIndex)
            }, getCellsRange: function (a, b) {
                function c(a, b, e, f) {
                    var g, h, i, j = a, k = b, l = e, m = f;
                    if (a > 0)for (h = b; f > h; h++)g = d.indexTable[a][h], i = g.rowIndex, a > i && (j = Math.min(i, j));
                    if (f < d.colsNum)for (i = a; e > i; i++)g = d.indexTable[i][f], h = g.colIndex + g.colSpan - 1, h > f && (m = Math.max(h, m));
                    if (e < d.rowsNum)for (h = b; f > h; h++)g = d.indexTable[e][h], i = g.rowIndex + g.rowSpan - 1, i > e && (l = Math.max(i, l));
                    if (b > 0)for (i = a; e > i; i++)g = d.indexTable[i][b], h = g.colIndex, b > h && (k = Math.min(g.colIndex, k));
                    return j != a || k != b || l != e || m != f ? c(j, k, l, m) : {
                        beginRowIndex: a,
                        beginColIndex: b,
                        endRowIndex: e,
                        endColIndex: f
                    }
                }

                try {
                    var d = this, e = d.getCellInfo(a);
                    if (a === b)return {
                        beginRowIndex: e.rowIndex,
                        beginColIndex: e.colIndex,
                        endRowIndex: e.rowIndex + e.rowSpan - 1,
                        endColIndex: e.colIndex + e.colSpan - 1
                    };
                    var f = d.getCellInfo(b), g = Math.min(e.rowIndex, f.rowIndex), h = Math.min(e.colIndex, f.colIndex), i = Math.max(e.rowIndex + e.rowSpan - 1, f.rowIndex + f.rowSpan - 1), j = Math.max(e.colIndex + e.colSpan - 1, f.colIndex + f.colSpan - 1);
                    return c(g, h, i, j)
                } catch (k) {
                }
            }, getCells: function (a) {
                this.clearSelected();
                for (var b, c, d, e = a.beginRowIndex, f = a.beginColIndex, g = a.endRowIndex, h = a.endColIndex, i = {}, j = [], k = e; g >= k; k++)for (var l = f; h >= l; l++) {
                    b = this.indexTable[k][l], c = b.rowIndex, d = b.colIndex;
                    var m = c + "|" + d;
                    if (!i[m]) {
                        if (i[m] = 1, k > c || l > d || c + b.rowSpan - 1 > g || d + b.colSpan - 1 > h)return null;
                        j.push(this.getCell(c, b.cellIndex))
                    }
                }
                return j
            }, clearSelected: function () {
                b.removeSelectedClass(this.selectedTds), this.selectedTds = [], this.cellsRange = {}
            }, setSelected: function (a) {
                var c = this.getCells(a);
                b.addSelectedClass(c), this.selectedTds = c, this.cellsRange = a
            }, isFullRow: function () {
                var a = this.cellsRange;
                return a.endColIndex - a.beginColIndex + 1 == this.colsNum
            }, isFullCol: function () {
                var a = this.cellsRange, b = this.table, c = b.getElementsByTagName("th"), d = a.endRowIndex - a.beginRowIndex + 1;
                return c.length ? d == this.rowsNum || d == this.rowsNum - 1 : d == this.rowsNum
            }, getNextCell: function (b, c, d) {
                try {
                    var e, f, g = this.getCellInfo(b), h = this.selectedTds.length && !d, i = this.cellsRange;
                    return !c && 0 == g.rowIndex || c && (h ? i.endRowIndex == this.rowsNum - 1 : g.rowIndex + g.rowSpan > this.rowsNum - 1) ? null : (e = c ? h ? i.endRowIndex + 1 : g.rowIndex + g.rowSpan : h ? i.beginRowIndex - 1 : g.rowIndex - 1, f = h ? i.beginColIndex : g.colIndex, this.getCell(this.indexTable[e][f].rowIndex, this.indexTable[e][f].cellIndex))
                } catch (j) {
                    a(j)
                }
            }, getPreviewCell: function (b, c) {
                try {
                    var d, e, f = this.getCellInfo(b), g = this.selectedTds.length, h = this.cellsRange;
                    return !c && (g ? !h.beginColIndex : !f.colIndex) || c && (g ? h.endColIndex == this.colsNum - 1 : f.rowIndex > this.colsNum - 1) ? null : (d = c ? g ? h.beginRowIndex : f.rowIndex < 1 ? 0 : f.rowIndex - 1 : g ? h.beginRowIndex : f.rowIndex, e = c ? g ? h.endColIndex + 1 : f.colIndex : g ? h.beginColIndex - 1 : f.colIndex < 1 ? 0 : f.colIndex - 1, this.getCell(this.indexTable[d][e].rowIndex, this.indexTable[d][e].cellIndex))
                } catch (i) {
                    a(i)
                }
            }, moveContent: function (a, c) {
                if (!b.isEmptyBlock(c)) {
                    if (b.isEmptyBlock(a))return void(a.innerHTML = c.innerHTML);
                    var d = a.lastChild;
                    for (3 != d.nodeType && dtd.$block[d.tagName] || a.appendChild(a.ownerDocument.createElement("br")); d = c.firstChild;)a.appendChild(d)
                }
            }, mergeRight: function (a) {
                var b = this.getCellInfo(a), c = b.colIndex + b.colSpan, d = this.indexTable[b.rowIndex][c], e = this.getCell(d.rowIndex, d.cellIndex);
                a.colSpan = b.colSpan + d.colSpan, a.removeAttribute("width"), this.moveContent(a, e), this.deleteCell(e, d.rowIndex), this.update()
            }, mergeDown: function (a) {
                var b = this.getCellInfo(a), c = b.rowIndex + b.rowSpan, d = this.indexTable[c][b.colIndex], e = this.getCell(d.rowIndex, d.cellIndex);
                a.rowSpan = b.rowSpan + d.rowSpan, a.removeAttribute("height"), this.moveContent(a, e), this.deleteCell(e, d.rowIndex), this.update()
            }, mergeRange: function () {
                var a = this.cellsRange, b = this.getCell(a.beginRowIndex, this.indexTable[a.beginRowIndex][a.beginColIndex].cellIndex);
                if ("TH" == b.tagName && a.endRowIndex !== a.beginRowIndex) {
                    var c = this.indexTable, d = this.getCellInfo(b);
                    b = this.getCell(1, c[1][d.colIndex].cellIndex), a = this.getCellsRange(b, this.getCell(c[this.rowsNum - 1][d.colIndex].rowIndex, c[this.rowsNum - 1][d.colIndex].cellIndex))
                }
                for (var e, f = this.getCells(a), g = 0; e = f[g++];)e !== b && (this.moveContent(b, e), this.deleteCell(e));
                if (b.rowSpan = a.endRowIndex - a.beginRowIndex + 1, b.rowSpan > 1 && b.removeAttribute("height"), b.colSpan = a.endColIndex - a.beginColIndex + 1, b.colSpan > 1 && b.removeAttribute("width"), b.rowSpan == this.rowsNum && 1 != b.colSpan && (b.colSpan = 1), b.colSpan == this.colsNum && 1 != b.rowSpan) {
                    var h = b.parentNode.rowIndex;
                    if (this.table.deleteRow)for (var g = h + 1, i = h + 1, j = b.rowSpan; j > g; g++)this.table.deleteRow(i); else for (var g = 0, j = b.rowSpan - 1; j > g; g++) {
                        var k = this.table.rows[h + 1];
                        k.parentNode.removeChild(k)
                    }
                    b.rowSpan = 1
                }
                this.update()
            }, insertRow: function (a, b) {
                function c(a, b, c) {
                    if (0 == a) {
                        var d = c.nextSibling || c.previousSibling, e = d.cells[a];
                        "TH" == e.tagName && (e = b.ownerDocument.createElement("th"), e.appendChild(b.firstChild), c.insertBefore(e, b), domUtils.remove(b))
                    } else if ("TH" == b.tagName) {
                        var f = b.ownerDocument.createElement("td");
                        f.appendChild(b.firstChild), c.insertBefore(f, b), domUtils.remove(b)
                    }
                }

                var d, e = this.colsNum, f = this.table, g = f.insertRow(a), h = "string" == typeof b && "TH" == b.toUpperCase();
                if (0 == a || a == this.rowsNum)for (var i = 0; e > i; i++)d = this.cloneCell(b, !0), this.setCellContent(d), d.getAttribute("vAlign") && d.setAttribute("vAlign", d.getAttribute("vAlign")), g.appendChild(d), h || c(i, d, g); else {
                    var j = this.indexTable[a];
                    for (i = 0; e > i; i++) {
                        var k = j[i];
                        k.rowIndex < a ? (d = this.getCell(k.rowIndex, k.cellIndex), d.rowSpan = k.rowSpan + 1) : (d = this.cloneCell(b, !0), this.setCellContent(d), g.appendChild(d)), h || c(i, d, g)
                    }
                }
                return this.update(), g
            }, deleteRow: function (a) {
                for (var b = this.table.rows[a], c = this.indexTable[a], d = this.colsNum, e = 0, f = 0; d > f;) {
                    var g = c[f], h = this.getCell(g.rowIndex, g.cellIndex);
                    if (h.rowSpan > 1 && g.rowIndex == a) {
                        var i = h.cloneNode(!0);
                        i.rowSpan = h.rowSpan - 1, i.innerHTML = "", h.rowSpan = 1;
                        var j, k = a + 1, l = this.table.rows[k], m = this.getPreviewMergedCellsNum(k, f) - e;
                        f > m ? (j = f - m - 1, domUtils.insertAfter(l.cells[j], i)) : l.cells.length && l.insertBefore(i, l.cells[0]), e += 1
                    }
                    f += h.colSpan || 1
                }
                var n = [], o = {};
                for (f = 0; d > f; f++) {
                    var p = c[f].rowIndex, q = c[f].cellIndex, r = p + "_" + q;
                    o[r] || (o[r] = 1, h = this.getCell(p, q), n.push(h))
                }
                var s = [];
                utils.each(n, function (a) {
                    1 == a.rowSpan ? a.parentNode.removeChild(a) : s.push(a)
                }), utils.each(s, function (a) {
                    a.rowSpan--
                }), b.parentNode.removeChild(b), this.update()
            }, insertCol: function (a, b, c) {
                function d(a, b, c) {
                    if (0 == a) {
                        var d = b.nextSibling || b.previousSibling;
                        "TH" == d.tagName && (d = b.ownerDocument.createElement("th"), d.appendChild(b.firstChild), c.insertBefore(d, b), domUtils.remove(b))
                    } else if ("TH" == b.tagName) {
                        var e = b.ownerDocument.createElement("td");
                        e.appendChild(b.firstChild), c.insertBefore(e, b), domUtils.remove(b)
                    }
                }

                var e, f, g, h = this.rowsNum, i = 0, j = parseInt((this.table.offsetWidth - 20 * (this.colsNum + 1) - (this.colsNum + 1)) / (this.colsNum + 1), 10), k = "string" == typeof b && "TH" == b.toUpperCase();
                if (0 == a || a == this.colsNum)for (; h > i; i++)e = this.table.rows[i], g = e.cells[0 == a ? a : e.cells.length], f = this.cloneCell(b, !0), this.setCellContent(f), f.setAttribute("vAlign", f.getAttribute("vAlign")), g && f.setAttribute("width", g.getAttribute("width")), a ? domUtils.insertAfter(e.cells[e.cells.length - 1], f) : e.insertBefore(f, e.cells[0]), k || d(i, f, e); else for (; h > i; i++) {
                    var l = this.indexTable[i][a];
                    l.colIndex < a ? (f = this.getCell(l.rowIndex, l.cellIndex), f.colSpan = l.colSpan + 1) : (e = this.table.rows[i], g = e.cells[l.cellIndex], f = this.cloneCell(b, !0), this.setCellContent(f), f.setAttribute("vAlign", f.getAttribute("vAlign")), g && f.setAttribute("width", g.getAttribute("width")), g ? e.insertBefore(f, g) : e.appendChild(f)), k || d(i, f, e)
                }
                this.update(), this.updateWidth(j, c || {tdPadding: 10, tdBorder: 1})
            }, updateWidth: function (a, c) {
                var d = this.table, e = b.getWidth(d) - 2 * c.tdPadding - c.tdBorder + a;
                if (e < d.ownerDocument.body.offsetWidth)return void d.setAttribute("width", e);
                var f = domUtils.getElementsByTagName(this.table, "td th");
                utils.each(f, function (b) {
                    b.setAttribute("width", a)
                })
            }, deleteCol: function (a) {
                for (var b = this.indexTable, c = this.table.rows, d = this.table.getAttribute("width"), e = 0, f = this.rowsNum, g = {}, h = 0; f > h;) {
                    var i = b[h], j = i[a], k = j.rowIndex + "_" + j.colIndex;
                    if (!g[k]) {
                        g[k] = 1;
                        var l = this.getCell(j.rowIndex, j.cellIndex);
                        e || (e = l && parseInt(l.offsetWidth / l.colSpan, 10).toFixed(0)), l.colSpan > 1 ? l.colSpan-- : c[h].deleteCell(j.cellIndex), h += j.rowSpan || 1
                    }
                }
                this.table.setAttribute("width", d - e), this.update()
            }, splitToCells: function (a) {
                var b = this, c = this.splitToRows(a);
                utils.each(c, function (a) {
                    b.splitToCols(a)
                })
            }, splitToRows: function (a) {
                var b = this.getCellInfo(a), c = b.rowIndex, d = b.colIndex, e = [];
                a.rowSpan = 1, e.push(a);
                for (var f = c, g = c + b.rowSpan; g > f; f++)if (f != c) {
                    var h = this.table.rows[f], i = h.insertCell(d - this.getPreviewMergedCellsNum(f, d));
                    i.colSpan = b.colSpan, this.setCellContent(i), i.setAttribute("vAlign", a.getAttribute("vAlign")), i.setAttribute("align", a.getAttribute("align")), a.style.cssText && (i.style.cssText = a.style.cssText), e.push(i)
                }
                return this.update(), e
            }, getPreviewMergedCellsNum: function (a, b) {
                for (var c = this.indexTable[a], d = 0, e = 0; b > e;) {
                    var f = c[e].colSpan, g = c[e].rowIndex;
                    d += f - (g == a ? 1 : 0), e += f
                }
                return d
            }, splitToCols: function (a) {
                var b = (a.offsetWidth / a.colSpan - 22).toFixed(0), c = this.getCellInfo(a), d = c.rowIndex, e = c.colIndex, f = [];
                a.colSpan = 1, a.setAttribute("width", b), f.push(a);
                for (var g = e, h = e + c.colSpan; h > g; g++)if (g != e) {
                    var i = this.table.rows[d], j = i.insertCell(this.indexTable[d][g].cellIndex + 1);
                    if (j.rowSpan = c.rowSpan, this.setCellContent(j), j.setAttribute("vAlign", a.getAttribute("vAlign")), j.setAttribute("align", a.getAttribute("align")), j.setAttribute("width", b), a.style.cssText && (j.style.cssText = a.style.cssText), "TH" == a.tagName) {
                        var k = a.ownerDocument.createElement("th");
                        k.appendChild(j.firstChild), k.setAttribute("vAlign", a.getAttribute("vAlign")), k.rowSpan = j.rowSpan, i.insertBefore(k, j), domUtils.remove(j)
                    }
                    f.push(j)
                }
                return this.update(), f
            }, isLastCell: function (a, b, c) {
                b = b || this.rowsNum, c = c || this.colsNum;
                var d = this.getCellInfo(a);
                return d.rowIndex + d.rowSpan == b && d.colIndex + d.colSpan == c
            }, getLastCell: function (a) {
                a = a || this.table.getElementsByTagName("td");
                var b, c = (this.getCellInfo(a[0]), this), d = a[0], e = d.parentNode, f = 0, g = 0;
                return utils.each(a, function (a) {
                    a.parentNode == e && (g += a.colSpan || 1), f += a.rowSpan * a.colSpan || 1
                }), b = f / g, utils.each(a, function (a) {
                    return c.isLastCell(a, b, g) ? (d = a, !1) : void 0
                }), d
            }, selectRow: function (a) {
                var b = this.indexTable[a], c = this.getCell(b[0].rowIndex, b[0].cellIndex), d = this.getCell(b[this.colsNum - 1].rowIndex, b[this.colsNum - 1].cellIndex), e = this.getCellsRange(c, d);
                this.setSelected(e)
            }, selectTable: function () {
                var a = this.table.getElementsByTagName("td"), b = this.getCellsRange(a[0], a[a.length - 1]);
                this.setSelected(b)
            }, setBackground: function (a, b) {
                if ("string" == typeof b)utils.each(a, function (a) {
                    a.style.backgroundColor = b
                }); else if ("object" == typeof b) {
                    b = utils.extend({repeat: !0, colorList: ["#ddd", "#fff"]}, b);
                    for (var c, d = this.getCellInfo(a[0]).rowIndex, e = 0, f = b.colorList, g = function (a, b, c) {
                        return a[b] ? a[b] : c ? a[b % a.length] : ""
                    }, h = 0; c = a[h++];) {
                        var i = this.getCellInfo(c);
                        c.style.backgroundColor = g(f, d + e == i.rowIndex ? e : ++e, b.repeat)
                    }
                }
            }, removeBackground: function (a) {
                utils.each(a, function (a) {
                    a.style.backgroundColor = ""
                })
            }
        }
    }(), function () {
        function a(a, c) {
            var d = domUtils.getElementsByTagName(a, "td th");
            utils.each(d, function (a) {
                a.removeAttribute("width")
            }), a.setAttribute("width", b(c, !0, g(c, a)));
            var e = [];
            setTimeout(function () {
                utils.each(d, function (a) {
                    1 == a.colSpan && e.push(a.offsetWidth)
                }), utils.each(d, function (a, b) {
                    1 == a.colSpan && a.setAttribute("width", e[b] + "")
                })
            }, 0)
        }

        function b(a, b, c) {
            var d = a.body;
            return d.offsetWidth - (b ? 2 * parseInt(domUtils.getComputedStyle(d, "margin-left"), 10) : 0) - 2 * c.tableBorder - (a.options.offsetWidth || 0)
        }

        function c(a) {
            var b = e(a).cell;
            if (b) {
                var c = h(b);
                return c.selectedTds.length ? c.selectedTds : [b]
            }
            return []
        }

        var d = UE.UETable, e = function (a) {
            return d.getTableItemsByRange(a)
        }, f = function (a) {
            return d.getUETableBySelected(a)
        }, g = function (a, b) {
            return d.getDefaultValue(a, b)
        }, h = function (a) {
            return d.getUETable(a)
        };
        UE.commands.inserttable = {
            queryCommandState: function () {
                return e(this).table ? -1 : 0
            }, execCommand: function (a, b) {
                function c(a, b) {
                    for (var c = [], d = a.numRows, e = a.numCols, f = 0; d > f; f++) {
                        c.push("<tr" + (0 == f ? ' class="firstRow"' : "") + ">");
                        for (var g = 0; e > g; g++)c.push('<td width="' + b + '"  vAlign="' + a.tdvalign + '" >' + (browser.ie && browser.version < 11 ? domUtils.fillChar : "<br/>") + "</td>");
                        c.push("</tr>")
                    }
                    return "<table><tbody>" + c.join("") + "</tbody></table>"
                }

                b || (b = utils.extend({}, {
                    numCols: this.options.defaultCols,
                    numRows: this.options.defaultRows,
                    tdvalign: this.options.tdvalign
                }));
                var d = this, e = this.selection.getRange(), f = e.startContainer, h = domUtils.findParent(f, function (a) {
                        return domUtils.isBlockElm(a)
                    }, !0) || d.body, i = g(d), j = h.offsetWidth, k = Math.floor(j / b.numCols - 2 * i.tdPadding - i.tdBorder);
                !b.tdvalign && (b.tdvalign = d.options.tdvalign), d.execCommand("inserthtml", c(b, k))
            }
        }, UE.commands.insertparagraphbeforetable = {
            queryCommandState: function () {
                return e(this).cell ? 0 : -1
            }, execCommand: function () {
                var a = e(this).table;
                if (a) {
                    var b = this.document.createElement("p");
                    b.innerHTML = browser.ie ? "&nbsp;" : "<br />", a.parentNode.insertBefore(b, a), this.selection.getRange().setStart(b, 0).setCursor()
                }
            }
        }, UE.commands.deletetable = {
            queryCommandState: function () {
                var a = this.selection.getRange();
                return domUtils.findParentByTagName(a.startContainer, "table", !0) ? 0 : -1
            }, execCommand: function (a, b) {
                var c = this.selection.getRange();
                if (b = b || domUtils.findParentByTagName(c.startContainer, "table", !0)) {
                    var d = b.nextSibling;
                    d || (d = domUtils.createElement(this.document, "p", {innerHTML: browser.ie ? domUtils.fillChar : "<br/>"}), b.parentNode.insertBefore(d, b)), domUtils.remove(b), c = this.selection.getRange(), 3 == d.nodeType ? c.setStartBefore(d) : c.setStart(d, 0), c.setCursor(!1, !0), this.fireEvent("tablehasdeleted")
                }
            }
        }, UE.commands.cellalign = {
            queryCommandState: function () {
                return c(this).length ? 0 : -1
            }, execCommand: function (a, b) {
                var d = c(this);
                if (d.length)for (var e, f = 0; e = d[f++];)e.setAttribute("align", b)
            }
        }, UE.commands.cellvalign = {
            queryCommandState: function () {
                return c(this).length ? 0 : -1
            }, execCommand: function (a, b) {
                var d = c(this);
                if (d.length)for (var e, f = 0; e = d[f++];)e.setAttribute("vAlign", b)
            }
        }, UE.commands.insertcaption = {
            queryCommandState: function () {
                var a = e(this).table;
                return a && 0 == a.getElementsByTagName("caption").length ? 1 : -1
            }, execCommand: function () {
                var a = e(this).table;
                if (a) {
                    var b = this.document.createElement("caption");
                    b.innerHTML = browser.ie ? domUtils.fillChar : "<br/>", a.insertBefore(b, a.firstChild);
                    var c = this.selection.getRange();
                    c.setStart(b, 0).setCursor()
                }
            }
        }, UE.commands.deletecaption = {
            queryCommandState: function () {
                var a = this.selection.getRange(), b = domUtils.findParentByTagName(a.startContainer, "table");
                return b ? 0 == b.getElementsByTagName("caption").length ? -1 : 1 : -1
            }, execCommand: function () {
                var a = this.selection.getRange(), b = domUtils.findParentByTagName(a.startContainer, "table");
                if (b) {
                    domUtils.remove(b.getElementsByTagName("caption")[0]);
                    var c = this.selection.getRange();
                    c.setStart(b.rows[0].cells[0], 0).setCursor()
                }
            }
        }, UE.commands.inserttitle = {
            queryCommandState: function () {
                var a = e(this).table;
                if (a) {
                    var b = a.rows[0];
                    return "th" != b.cells[b.cells.length - 1].tagName.toLowerCase() ? 0 : -1
                }
                return -1
            }, execCommand: function () {
                var a = e(this).table;
                a && h(a).insertRow(0, "th");
                var b = a.getElementsByTagName("th")[0];
                this.selection.getRange().setStart(b, 0).setCursor(!1, !0)
            }
        }, UE.commands.deletetitle = {
            queryCommandState: function () {
                var a = e(this).table;
                if (a) {
                    var b = a.rows[0];
                    return "th" == b.cells[b.cells.length - 1].tagName.toLowerCase() ? 0 : -1
                }
                return -1
            }, execCommand: function () {
                var a = e(this).table;
                a && domUtils.remove(a.rows[0]);
                var b = a.getElementsByTagName("td")[0];
                this.selection.getRange().setStart(b, 0).setCursor(!1, !0)
            }
        }, UE.commands.inserttitlecol = {
            queryCommandState: function () {
                var a = e(this).table;
                if (a) {
                    var b = a.rows[a.rows.length - 1];
                    return b.getElementsByTagName("th").length ? -1 : 0
                }
                return -1
            }, execCommand: function (b) {
                var c = e(this).table;
                c && h(c).insertCol(0, "th"), a(c, this);
                var d = c.getElementsByTagName("th")[0];
                this.selection.getRange().setStart(d, 0).setCursor(!1, !0)
            }
        }, UE.commands.deletetitlecol = {
            queryCommandState: function () {
                var a = e(this).table;
                if (a) {
                    var b = a.rows[a.rows.length - 1];
                    return b.getElementsByTagName("th").length ? 0 : -1
                }
                return -1
            }, execCommand: function () {
                var b = e(this).table;
                if (b)for (var c = 0; c < b.rows.length; c++)domUtils.remove(b.rows[c].children[0]);
                a(b, this);
                var d = b.getElementsByTagName("td")[0];
                this.selection.getRange().setStart(d, 0).setCursor(!1, !0)
            }
        }, UE.commands.mergeright = {
            queryCommandState: function (a) {
                var b = e(this), c = b.table, d = b.cell;
                if (!c || !d)return -1;
                var f = h(c);
                if (f.selectedTds.length)return -1;
                var g = f.getCellInfo(d), i = g.colIndex + g.colSpan;
                if (i >= f.colsNum)return -1;
                var j = f.indexTable[g.rowIndex][i], k = c.rows[j.rowIndex].cells[j.cellIndex];
                return k && d.tagName == k.tagName && j.rowIndex == g.rowIndex && j.rowSpan == g.rowSpan ? 0 : -1
            }, execCommand: function (a) {
                var b = this.selection.getRange(), c = b.createBookmark(!0), d = e(this).cell, f = h(d);
                f.mergeRight(d), b.moveToBookmark(c).select()
            }
        }, UE.commands.mergedown = {
            queryCommandState: function (a) {
                var b = e(this), c = b.table, d = b.cell;
                if (!c || !d)return -1;
                var f = h(c);
                if (f.selectedTds.length)return -1;
                var g = f.getCellInfo(d), i = g.rowIndex + g.rowSpan;
                if (i >= f.rowsNum)return -1;
                var j = f.indexTable[i][g.colIndex], k = c.rows[j.rowIndex].cells[j.cellIndex];
                return k && d.tagName == k.tagName && j.colIndex == g.colIndex && j.colSpan == g.colSpan ? 0 : -1
            }, execCommand: function () {
                var a = this.selection.getRange(), b = a.createBookmark(!0), c = e(this).cell, d = h(c);
                d.mergeDown(c), a.moveToBookmark(b).select()
            }
        }, UE.commands.mergecells = {
            queryCommandState: function () {
                return f(this) ? 0 : -1
            }, execCommand: function () {
                var a = f(this);
                if (a && a.selectedTds.length) {
                    var b = a.selectedTds[0];
                    a.mergeRange();
                    var c = this.selection.getRange();
                    domUtils.isEmptyBlock(b) ? c.setStart(b, 0).collapse(!0) : c.selectNodeContents(b), c.select()
                }
            }
        }, UE.commands.insertrow = {
            queryCommandState: function () {
                var a = e(this), b = a.cell;
                return b && ("TD" == b.tagName || "TH" == b.tagName && a.tr !== a.table.rows[0]) && h(a.table).rowsNum < this.options.maxRowNum ? 0 : -1
            }, execCommand: function () {
                var a = this.selection.getRange(), b = a.createBookmark(!0), c = e(this), d = c.cell, f = c.table, g = h(f), i = g.getCellInfo(d);
                if (g.selectedTds.length)for (var j = g.cellsRange, k = 0, l = j.endRowIndex - j.beginRowIndex + 1; l > k; k++)g.insertRow(j.beginRowIndex, d); else g.insertRow(i.rowIndex, d);
                a.moveToBookmark(b).select(), "enabled" === f.getAttribute("interlaced") && this.fireEvent("interlacetable", f)
            }
        }, UE.commands.insertrownext = {
            queryCommandState: function () {
                var a = e(this), b = a.cell;
                return b && "TD" == b.tagName && h(a.table).rowsNum < this.options.maxRowNum ? 0 : -1
            }, execCommand: function () {
                var a = this.selection.getRange(), b = a.createBookmark(!0), c = e(this), d = c.cell, f = c.table, g = h(f), i = g.getCellInfo(d);
                if (g.selectedTds.length)for (var j = g.cellsRange, k = 0, l = j.endRowIndex - j.beginRowIndex + 1; l > k; k++)g.insertRow(j.endRowIndex + 1, d); else g.insertRow(i.rowIndex + i.rowSpan, d);
                a.moveToBookmark(b).select(), "enabled" === f.getAttribute("interlaced") && this.fireEvent("interlacetable", f)
            }
        }, UE.commands.deleterow = {
            queryCommandState: function () {
                var a = e(this);
                return a.cell ? 0 : -1
            }, execCommand: function () {
                var a = e(this).cell, b = h(a), c = b.cellsRange, d = b.getCellInfo(a), f = b.getVSideCell(a), g = b.getVSideCell(a, !0), i = this.selection.getRange();
                if (utils.isEmptyObject(c))b.deleteRow(d.rowIndex); else for (var j = c.beginRowIndex; j < c.endRowIndex + 1; j++)b.deleteRow(c.beginRowIndex);
                var k = b.table;
                if (k.getElementsByTagName("td").length)if (1 == d.rowSpan || d.rowSpan == c.endRowIndex - c.beginRowIndex + 1)(g || f) && i.selectNodeContents(g || f).setCursor(!1, !0); else {
                    var l = b.getCell(d.rowIndex, b.indexTable[d.rowIndex][d.colIndex].cellIndex);
                    l && i.selectNodeContents(l).setCursor(!1, !0)
                } else {
                    var m = k.nextSibling;
                    domUtils.remove(k), m && i.setStart(m, 0).setCursor(!1, !0)
                }
                "enabled" === k.getAttribute("interlaced") && this.fireEvent("interlacetable", k)
            }
        }, UE.commands.insertcol = {
            queryCommandState: function (a) {
                var b = e(this), c = b.cell;
                return c && ("TD" == c.tagName || "TH" == c.tagName && c !== b.tr.cells[0]) && h(b.table).colsNum < this.options.maxColNum ? 0 : -1
            }, execCommand: function (a) {
                var b = this.selection.getRange(), c = b.createBookmark(!0);
                if (-1 != this.queryCommandState(a)) {
                    var d = e(this).cell, f = h(d), g = f.getCellInfo(d);
                    if (f.selectedTds.length)for (var i = f.cellsRange, j = 0, k = i.endColIndex - i.beginColIndex + 1; k > j; j++)f.insertCol(i.beginColIndex, d); else f.insertCol(g.colIndex, d);
                    b.moveToBookmark(c).select(!0)
                }
            }
        }, UE.commands.insertcolnext = {
            queryCommandState: function () {
                var a = e(this), b = a.cell;
                return b && h(a.table).colsNum < this.options.maxColNum ? 0 : -1
            }, execCommand: function () {
                var a = this.selection.getRange(), b = a.createBookmark(!0), c = e(this).cell, d = h(c), f = d.getCellInfo(c);
                if (d.selectedTds.length)for (var g = d.cellsRange, i = 0, j = g.endColIndex - g.beginColIndex + 1; j > i; i++)d.insertCol(g.endColIndex + 1, c); else d.insertCol(f.colIndex + f.colSpan, c);
                a.moveToBookmark(b).select()
            }
        }, UE.commands.deletecol = {
            queryCommandState: function () {
                var a = e(this);
                return a.cell ? 0 : -1
            }, execCommand: function () {
                var a = e(this).cell, b = h(a), c = b.cellsRange, d = b.getCellInfo(a), f = b.getHSideCell(a), g = b.getHSideCell(a, !0);
                if (utils.isEmptyObject(c))b.deleteCol(d.colIndex); else for (var i = c.beginColIndex; i < c.endColIndex + 1; i++)b.deleteCol(c.beginColIndex);
                var j = b.table, k = this.selection.getRange();
                if (j.getElementsByTagName("td").length)domUtils.inDoc(a, this.document) ? k.setStart(a, 0).setCursor(!1, !0) : g && domUtils.inDoc(g, this.document) ? k.selectNodeContents(g).setCursor(!1, !0) : f && domUtils.inDoc(f, this.document) && k.selectNodeContents(f).setCursor(!0, !0); else {
                    var l = j.nextSibling;
                    domUtils.remove(j), l && k.setStart(l, 0).setCursor(!1, !0)
                }
            }
        }, UE.commands.splittocells = {
            queryCommandState: function () {
                var a = e(this), b = a.cell;
                if (!b)return -1;
                var c = h(a.table);
                return c.selectedTds.length > 0 ? -1 : b && (b.colSpan > 1 || b.rowSpan > 1) ? 0 : -1
            }, execCommand: function () {
                var a = this.selection.getRange(), b = a.createBookmark(!0), c = e(this).cell, d = h(c);
                d.splitToCells(c), a.moveToBookmark(b).select()
            }
        }, UE.commands.splittorows = {
            queryCommandState: function () {
                var a = e(this), b = a.cell;
                if (!b)return -1;
                var c = h(a.table);
                return c.selectedTds.length > 0 ? -1 : b && b.rowSpan > 1 ? 0 : -1
            }, execCommand: function () {
                var a = this.selection.getRange(), b = a.createBookmark(!0), c = e(this).cell, d = h(c);
                d.splitToRows(c), a.moveToBookmark(b).select()
            }
        }, UE.commands.splittocols = {
            queryCommandState: function () {
                var a = e(this), b = a.cell;
                if (!b)return -1;
                var c = h(a.table);
                return c.selectedTds.length > 0 ? -1 : b && b.colSpan > 1 ? 0 : -1
            }, execCommand: function () {
                var a = this.selection.getRange(), b = a.createBookmark(!0), c = e(this).cell, d = h(c);
                d.splitToCols(c), a.moveToBookmark(b).select()
            }
        }, UE.commands.adaptbytext = UE.commands.adaptbywindow = {
            queryCommandState: function () {
                return e(this).table ? 0 : -1
            }, execCommand: function (b) {
                var c = e(this), d = c.table;
                if (d)if ("adaptbywindow" == b)a(d, this); else {
                    var f = domUtils.getElementsByTagName(d, "td th");
                    utils.each(f, function (a) {
                        a.removeAttribute("width")
                    }), d.removeAttribute("width")
                }
            }
        }, UE.commands.averagedistributecol = {
            queryCommandState: function () {
                var a = f(this);
                return a && (a.isFullRow() || a.isFullCol()) ? 0 : -1
            }, execCommand: function (a) {
                function b() {
                    var a, b = e.table, c = 0, f = 0, h = g(d, b);
                    if (e.isFullRow())c = b.offsetWidth, f = e.colsNum; else for (var i, j = e.cellsRange.beginColIndex, k = e.cellsRange.endColIndex, l = j; k >= l;)i = e.selectedTds[l], c += i.offsetWidth, l += i.colSpan, f += 1;
                    return a = Math.ceil(c / f) - 2 * h.tdBorder - 2 * h.tdPadding
                }

                function c(a) {
                    utils.each(domUtils.getElementsByTagName(e.table, "th"), function (a) {
                        a.setAttribute("width", "")
                    });
                    var b = e.isFullRow() ? domUtils.getElementsByTagName(e.table, "td") : e.selectedTds;
                    utils.each(b, function (b) {
                        1 == b.colSpan && b.setAttribute("width", a)
                    })
                }

                var d = this, e = f(d);
                e && e.selectedTds.length && c(b())
            }
        }, UE.commands.averagedistributerow = {
            queryCommandState: function () {
                var a = f(this);
                return a ? a.selectedTds && /th/gi.test(a.selectedTds[0].tagName) ? -1 : a.isFullRow() || a.isFullCol() ? 0 : -1 : -1
            }, execCommand: function (a) {
                function b() {
                    var a, b, c = 0, f = e.table, h = g(d, f), i = parseInt(domUtils.getComputedStyle(f.getElementsByTagName("td")[0], "padding-top"));
                    if (e.isFullCol()) {
                        var j, k, l = domUtils.getElementsByTagName(f, "caption"), m = domUtils.getElementsByTagName(f, "th");
                        l.length > 0 && (j = l[0].offsetHeight), m.length > 0 && (k = m[0].offsetHeight), c = f.offsetHeight - (j || 0) - (k || 0), b = 0 == m.length ? e.rowsNum : e.rowsNum - 1
                    } else {
                        for (var n = e.cellsRange.beginRowIndex, o = e.cellsRange.endRowIndex, p = 0, q = domUtils.getElementsByTagName(f, "tr"), r = n; o >= r; r++)c += q[r].offsetHeight, p += 1;
                        b = p
                    }
                    return a = browser.ie && browser.version < 9 ? Math.ceil(c / b) : Math.ceil(c / b) - 2 * h.tdBorder - 2 * i
                }

                function c(a) {
                    var b = e.isFullCol() ? domUtils.getElementsByTagName(e.table, "td") : e.selectedTds;
                    utils.each(b, function (b) {
                        1 == b.rowSpan && b.setAttribute("height", a)
                    })
                }

                var d = this, e = f(d);
                e && e.selectedTds.length && c(b())
            }
        }, UE.commands.cellalignment = {
            queryCommandState: function () {
                return e(this).table ? 0 : -1
            }, execCommand: function (a, b) {
                var c = this, d = f(c);
                if (d)utils.each(d.selectedTds, function (a) {
                    domUtils.setAttributes(a, b)
                }); else {
                    var e = c.selection.getStart(), g = e && domUtils.findParentByTagName(e, ["td", "th", "caption"], !0);
                    /caption/gi.test(g.tagName) ? (g.style.textAlign = b.align, g.style.verticalAlign = b.vAlign) : domUtils.setAttributes(g, b), c.selection.getRange().setCursor(!0)
                }
            }, queryCommandValue: function (a) {
                var b = e(this).cell;
                if (b || (b = c(this)[0]), b) {
                    var d = UE.UETable.getUETable(b).selectedTds;
                    return !d.length && (d = b), UE.UETable.getTableCellAlignState(d)
                }
                return null
            }
        }, UE.commands.tablealignment = {
            queryCommandState: function () {
                return browser.ie && browser.version < 8 ? -1 : e(this).table ? 0 : -1
            }, execCommand: function (a, b) {
                var c = this, d = c.selection.getStart(), e = d && domUtils.findParentByTagName(d, ["table"], !0);
                e && e.setAttribute("align", b)
            }
        }, UE.commands.edittable = {
            queryCommandState: function () {
                return e(this).table ? 0 : -1
            }, execCommand: function (a, b) {
                var c = this.selection.getRange(), d = domUtils.findParentByTagName(c.startContainer, "table");
                if (d) {
                    var e = domUtils.getElementsByTagName(d, "td").concat(domUtils.getElementsByTagName(d, "th"), domUtils.getElementsByTagName(d, "caption"));
                    utils.each(e, function (a) {
                        a.style.borderColor = b
                    })
                }
            }
        }, UE.commands.edittd = {
            queryCommandState: function () {
                return e(this).table ? 0 : -1
            }, execCommand: function (a, b) {
                var c = this, d = f(c);
                if (d)utils.each(d.selectedTds, function (a) {
                    a.style.backgroundColor = b
                }); else {
                    var e = c.selection.getStart(), g = e && domUtils.findParentByTagName(e, ["td", "th", "caption"], !0);
                    g && (g.style.backgroundColor = b)
                }
            }
        }, UE.commands.settablebackground = {
            queryCommandState: function () {
                return c(this).length > 1 ? 0 : -1
            }, execCommand: function (a, b) {
                var d, e;
                d = c(this), e = h(d[0]), e.setBackground(d, b)
            }
        }, UE.commands.cleartablebackground = {
            queryCommandState: function () {
                var a = c(this);
                if (!a.length)return -1;
                for (var b, d = 0; b = a[d++];)if ("" !== b.style.backgroundColor)return 0;
                return -1
            }, execCommand: function () {
                var a = c(this), b = h(a[0]);
                b.removeBackground(a)
            }
        }, UE.commands.interlacetable = UE.commands.uninterlacetable = {
            queryCommandState: function (a) {
                var b = e(this).table;
                if (!b)return -1;
                var c = b.getAttribute("interlaced");
                return "interlacetable" == a ? "enabled" === c ? -1 : 0 : c && "disabled" !== c ? 0 : -1
            }, execCommand: function (a, b) {
                var c = e(this).table;
                "interlacetable" == a ? (c.setAttribute("interlaced", "enabled"), this.fireEvent("interlacetable", c, b)) : (c.setAttribute("interlaced", "disabled"), this.fireEvent("uninterlacetable", c))
            }
        }, UE.commands.setbordervisible = {
            queryCommandState: function (a) {
                var b = e(this).table;
                return b ? 0 : -1
            }, execCommand: function () {
                var a = e(this).table;
                utils.each(domUtils.getElementsByTagName(a, "td"), function (a) {
                    a.style.borderWidth = "1px", a.style.borderStyle = "solid"
                })
            }
        }
    }(), UE.plugins.table = function () {
        function a(a) {
        }

        function b(a, b) {
            c(a, "width", !0), c(a, "height", !0)
        }

        function c(a, b, c) {
            a.style[b] && (c && a.setAttribute(b, parseInt(a.style[b], 10)), a.style[b] = "")
        }

        function d(a) {
            if ("TD" == a.tagName || "TH" == a.tagName)return a;
            var b;
            return (b = domUtils.findParentByTagName(a, "td", !0) || domUtils.findParentByTagName(a, "th", !0)) ? b : null
        }

        function e(a) {
            var b = new RegExp(domUtils.fillChar, "g");
            if (a[browser.ie ? "innerText" : "textContent"].replace(/^\s*$/, "").replace(b, "").length > 0)return 0;
            for (var c in dtd.$isNotEmpty)if (a.getElementsByTagName(c).length)return 0;
            return 1
        }

        function f(a) {
            return a.pageX || a.pageY ? {
                x: a.pageX,
                y: a.pageY
            } : {
                x: a.clientX + N.document.body.scrollLeft - N.document.body.clientLeft,
                y: a.clientY + N.document.body.scrollTop - N.document.body.clientTop
            }
        }

        function g(b) {
            if (!A())try {
                var c, e = d(b.target || b.srcElement);
                if (R && (N.body.style.webkitUserSelect = "none", (Math.abs(V.x - b.clientX) > T || Math.abs(V.y - b.clientY) > T) && (t(), R = !1, U = 0, v(b))), ca && ha)return U = 0, N.body.style.webkitUserSelect = "none", N.selection.getNative()[browser.ie9below ? "empty" : "removeAllRanges"](), c = f(b), m(N, !0, ca, c, e), void("h" == ca ? ga.style.left = k(ha, b) + "px" : "v" == ca && (ga.style.top = l(ha, b) + "px"));
                if (e) {
                    if (N.fireEvent("excludetable", e) === !0)return;
                    c = f(b);
                    var g = n(e, c), i = domUtils.findParentByTagName(e, "table", !0);
                    if (j(i, e, b, !0)) {
                        if (N.fireEvent("excludetable", i) === !0)return;
                        N.body.style.cursor = "url(" + N.options.cursorpath + "h.png),pointer"
                    } else if (j(i, e, b)) {
                        if (N.fireEvent("excludetable", i) === !0)return;
                        N.body.style.cursor = "url(" + N.options.cursorpath + "v.png),pointer"
                    } else {
                        N.body.style.cursor = "text";
                        /\d/.test(g) && (g = g.replace(/\d/, ""), e = Y(e).getPreviewCell(e, "v" == g)), m(N, e ? !!g : !1, e ? g : "", c, e)
                    }
                } else h(!1, i, N)
            } catch (o) {
                a(o)
            }
        }

        function h(a, b, c) {
            if (a)i(b, c); else {
                if (fa)return;
                la = setTimeout(function () {
                    !fa && ea && ea.parentNode && ea.parentNode.removeChild(ea)
                }, 2e3)
            }
        }

        function i(a, b) {
            function c(c, d) {
                clearTimeout(g), g = setTimeout(function () {
                    b.fireEvent("tableClicked", a, d)
                }, 300)
            }

            function d(c) {
                clearTimeout(g);
                var d = Y(a), e = a.rows[0].cells[0], f = d.getLastCell(), h = d.getCellsRange(e, f);
                b.selection.getRange().setStart(e, 0).setCursor(!1, !0), d.setSelected(h)
            }

            var e = domUtils.getXY(a), f = a.ownerDocument;
            if (ea && ea.parentNode)return ea;
            ea = f.createElement("div"), ea.contentEditable = !1, ea.innerHTML = "", ea.style.cssText = "width:15px;height:15px;background-image:url(" + b.options.UEDITOR_HOME_URL + "dialogs/table/dragicon.png);position: absolute;cursor:move;top:" + (e.y - 15) + "px;left:" + e.x + "px;", domUtils.unSelectable(ea), ea.onmouseover = function (a) {
                fa = !0
            }, ea.onmouseout = function (a) {
                fa = !1
            }, domUtils.on(ea, "click", function (a, b) {
                c(b, this)
            }), domUtils.on(ea, "dblclick", function (a, b) {
                d(b)
            }), domUtils.on(ea, "dragstart", function (a, b) {
                domUtils.preventDefault(b)
            });
            var g;
            f.body.appendChild(ea)
        }

        function j(a, b, c, d) {
            var e = f(c), g = n(b, e);
            if (d) {
                var h = a.getElementsByTagName("caption")[0], i = h ? h.offsetHeight : 0;
                return "v1" == g && e.y - domUtils.getXY(a).y - i < 8
            }
            return "h1" == g && e.x - domUtils.getXY(a).x < 8
        }

        function k(a, b) {
            var c = Y(a);
            if (c) {
                var d = c.getSameEndPosCells(a, "x")[0], e = c.getSameStartPosXCells(a)[0], g = f(b).x, h = (d ? domUtils.getXY(d).x : domUtils.getXY(c.table).x) + 20, i = e ? domUtils.getXY(e).x + e.offsetWidth - 20 : N.body.offsetWidth + 5 || parseInt(domUtils.getComputedStyle(N.body, "width"), 10);
                return h += Q, i -= Q, h > g ? h : g > i ? i : g
            }
        }

        function l(b, c) {
            try {
                var d = domUtils.getXY(b).y, e = f(c).y;
                return d > e ? d : e
            } catch (g) {
                a(g)
            }
        }

        function m(b, c, d, e, f) {
            try {
                b.body.style.cursor = "h" == d ? "col-resize" : "v" == d ? "row-resize" : "text", browser.ie && (!d || ia || Z(b) ? I(b) : (H(b, b.document), J(d, f))), da = c
            } catch (g) {
                a(g)
            }
        }

        function n(a, b) {
            var c = domUtils.getXY(a);
            return c ? c.x + a.offsetWidth - b.x < S ? "h" : b.x - c.x < S ? "h1" : c.y + a.offsetHeight - b.y < S ? "v" : b.y - c.y < S ? "v1" : "" : ""
        }

        function o(a, b) {
            if (!A())if (V = {x: b.clientX, y: b.clientY}, 2 == b.button) {
                var c = Z(N), d = !1;
                if (c) {
                    var e = M(N, b);
                    utils.each(c.selectedTds, function (a) {
                        a === e && (d = !0)
                    }), d ? (e = c.selectedTds[0], setTimeout(function () {
                        N.selection.getRange().setStart(e, 0).setCursor(!1, !0)
                    }, 0)) : (_(domUtils.getElementsByTagName(N.body, "th td")), c.clearSelected())
                }
            } else q(b)
        }

        function p(a) {
            U = 0, a = a || N.window.event;
            var b = d(a.target || a.srcElement);
            if (b) {
                var c;
                if (c = n(b, f(a))) {
                    if (I(N), "h1" == c)if (c = "h", j(domUtils.findParentByTagName(b, "table"), b, a))N.execCommand("adaptbywindow"); else if (b = Y(b).getPreviewCell(b)) {
                        var e = N.selection.getRange();
                        e.selectNodeContents(b).setCursor(!0, !0)
                    }
                    if ("h" == c) {
                        var g = Y(b), h = g.table, i = C(b, h, !0);
                        i = s(i, "left"), g.width = g.offsetWidth;
                        var k = [], l = [];
                        utils.each(i, function (a) {
                            k.push(a.offsetWidth)
                        }), utils.each(i, function (a) {
                            a.removeAttribute("width")
                        }), window.setTimeout(function () {
                            var a = !0;
                            utils.each(i, function (b, c) {
                                var d = b.offsetWidth;
                                return d > k[c] ? (a = !1, !1) : void l.push(d)
                            });
                            var b = a ? l : k;
                            utils.each(i, function (a, c) {
                                a.width = b[c] - G()
                            })
                        }, 0)
                    }
                }
            }
        }

        function q(a) {
            if (_(domUtils.getElementsByTagName(N.body, "td th")), utils.each(N.document.getElementsByTagName("table"), function (a) {
                    a.ueTable = null
                }), aa = M(N, a)) {
                var b = domUtils.findParentByTagName(aa, "table", !0);
                ut = Y(b), ut && ut.clearSelected(), da ? r(a) : (N.document.body.style.webkitUserSelect = "", ia = !0, N.addListener("mouseover", x))
            }
        }

        function r(a) {
            browser.ie && (a = u(a)), t(), R = !0, O = setTimeout(function () {
                v(a)
            }, W)
        }

        function s(a, b) {
            for (var c = [], d = null, e = 0, f = a.length; f > e; e++)d = a[e][b], d && c.push(d);
            return c
        }

        function t() {
            O && clearTimeout(O), O = null
        }

        function u(a) {
            var b = ["pageX", "pageY", "clientX", "clientY", "srcElement", "target"], c = {};
            if (a)for (var d, e, f = 0; d = b[f]; f++)e = a[d], e && (c[d] = e);
            return c
        }

        function v(a) {
            if (R = !1, aa = a.target || a.srcElement) {
                var b = n(aa, f(a));
                /\d/.test(b) && (b = b.replace(/\d/, ""), aa = Y(aa).getPreviewCell(aa, "v" == b)), I(N), H(N, N.document), N.fireEvent("saveScene"), J(b, aa), ia = !0, ca = b, ha = aa
            }
        }

        function w(a, b) {
            if (!A()) {
                if (t(), R = !1, da && (U = ++U % 3, V = {x: b.clientX, y: b.clientY}, P = setTimeout(function () {
                        U > 0 && U--
                    }, W), 2 === U))return U = 0, void p(b);
                if (2 != b.button) {
                    var c = this, d = c.selection.getRange(), e = domUtils.findParentByTagName(d.startContainer, "table", !0), f = domUtils.findParentByTagName(d.endContainer, "table", !0);
                    if ((e || f) && (e === f ? (e = domUtils.findParentByTagName(d.startContainer, ["td", "th", "caption"], !0), f = domUtils.findParentByTagName(d.endContainer, ["td", "th", "caption"], !0), e !== f && c.selection.clearRange()) : c.selection.clearRange()), ia = !1, c.document.body.style.webkitUserSelect = "", ca && ha && (c.selection.getNative()[browser.ie9below ? "empty" : "removeAllRanges"](), U = 0, ga = c.document.getElementById("ue_tableDragLine"))) {
                        var g = domUtils.getXY(ha), h = domUtils.getXY(ga);
                        switch (ca) {
                            case"h":
                                z(ha, h.x - g.x);
                                break;
                            case"v":
                                B(ha, h.y - g.y - ha.offsetHeight)
                        }
                        return ca = "", ha = null, I(c), void c.fireEvent("saveScene")
                    }
                    if (aa) {
                        var i = Y(aa), j = i ? i.selectedTds[0] : null;
                        if (j)d = new dom.Range(c.document), domUtils.isEmptyBlock(j) ? d.setStart(j, 0).setCursor(!1, !0) : d.selectNodeContents(j).shrinkBoundary().setCursor(!1, !0); else if (d = c.selection.getRange().shrinkBoundary(), !d.collapsed) {
                            var e = domUtils.findParentByTagName(d.startContainer, ["td", "th"], !0), f = domUtils.findParentByTagName(d.endContainer, ["td", "th"], !0);
                            (e && !f || !e && f || e && f && e !== f) && d.setCursor(!1, !0)
                        }
                        aa = null, c.removeListener("mouseover", x)
                    } else {
                        var k = domUtils.findParentByTagName(b.target || b.srcElement, "td", !0);
                        if (k || (k = domUtils.findParentByTagName(b.target || b.srcElement, "th", !0)), k && ("TD" == k.tagName || "TH" == k.tagName)) {
                            if (c.fireEvent("excludetable", k) === !0)return;
                            d = new dom.Range(c.document), d.setStart(k, 0).setCursor(!1, !0)
                        }
                    }
                    c._selectionChange(250, b)
                }
            }
        }

        function x(a, b) {
            if (!A()) {
                var c = this, d = b.target || b.srcElement;
                if (ba = domUtils.findParentByTagName(d, "td", !0) || domUtils.findParentByTagName(d, "th", !0), aa && ba && ("TD" == aa.tagName && "TD" == ba.tagName || "TH" == aa.tagName && "TH" == ba.tagName) && domUtils.findParentByTagName(aa, "table") == domUtils.findParentByTagName(ba, "table")) {
                    var e = Y(ba);
                    if (aa != ba) {
                        c.document.body.style.webkitUserSelect = "none", c.selection.getNative()[browser.ie9below ? "empty" : "removeAllRanges"]();
                        var f = e.getCellsRange(aa, ba);
                        e.setSelected(f)
                    } else c.document.body.style.webkitUserSelect = "", e.clearSelected()
                }
                b.preventDefault ? b.preventDefault() : b.returnValue = !1
            }
        }

        function y(a, b, c) {
            var d = parseInt(domUtils.getComputedStyle(a, "line-height"), 10), e = c + b;
            b = d > e ? d : e, a.style.height && (a.style.height = ""), 1 == a.rowSpan ? a.setAttribute("height", b) : a.removeAttribute && a.removeAttribute("height")
        }

        function z(a, b) {
            var c = Y(a);
            if (c) {
                var d = c.table, e = C(a, d);
                if (d.style.width = "", d.removeAttribute("width"), b = D(b, a, e), a.nextSibling) {
                    utils.each(e, function (a) {
                        a.left.width = +a.left.width + b, a.right && (a.right.width = +a.right.width - b)
                    })
                } else utils.each(e, function (a) {
                    a.left.width -= -b
                })
            }
        }

        function A() {
            return "false" === N.body.contentEditable
        }

        function B(a, b) {
            if (!(Math.abs(b) < 10)) {
                var c = Y(a);
                if (c)for (var d, e = c.getSameEndPosCells(a, "y"), f = e[0] ? e[0].offsetHeight : 0, g = 0; d = e[g++];)y(d, b, f)
            }
        }

        function C(a, b, c) {
            if (b || (b = domUtils.findParentByTagName(a, "table")), !b)return null;
            for (var d = (domUtils.getNodeIndex(a), a), e = b.rows, f = 0; d;)1 === d.nodeType && (f += d.colSpan || 1), d = d.previousSibling;
            d = null;
            var g = [];
            return utils.each(e, function (a) {
                var b = a.cells, d = 0;
                utils.each(b, function (a) {
                    return d += a.colSpan || 1, d === f ? (g.push({
                        left: a,
                        right: a.nextSibling || null
                    }), !1) : d > f ? (c && g.push({left: a}), !1) : void 0
                })
            }), g
        }

        function D(a, b, c) {
            if (a -= G(), 0 > a)return 0;
            a -= E(b);
            var d = 0 > a ? "left" : "right";
            return a = Math.abs(a), utils.each(c, function (b) {
                var c = b[d];
                c && (a = Math.min(a, E(c) - Q))
            }), a = 0 > a ? 0 : a, "left" === d ? -a : a
        }

        function E(a) {
            var b = 0, b = a.offsetWidth - G();
            a.nextSibling || (b -= F(a)), b = 0 > b ? 0 : b;
            try {
                a.width = b
            } catch (c) {
            }
            return b
        }

        function F(a) {
            if (tab = domUtils.findParentByTagName(a, "table", !1), void 0 === tab.offsetVal) {
                var b = a.previousSibling;
                b ? tab.offsetVal = a.offsetWidth - b.offsetWidth === X.borderWidth ? X.borderWidth : 0 : tab.offsetVal = 0
            }
            return tab.offsetVal
        }

        function G() {
            if (void 0 === X.tabcellSpace) {
                var a = N.document.createElement("table"), b = N.document.createElement("tbody"), c = N.document.createElement("tr"), d = N.document.createElement("td"), e = null;
                d.style.cssText = "border: 0;", d.width = 1, c.appendChild(d), c.appendChild(e = d.cloneNode(!1)), b.appendChild(c), a.appendChild(b), a.style.cssText = "visibility: hidden;", N.body.appendChild(a), X.paddingSpace = d.offsetWidth - 1;
                var f = a.offsetWidth;
                d.style.cssText = "", e.style.cssText = "", X.borderWidth = (a.offsetWidth - f) / 3, X.tabcellSpace = X.paddingSpace + X.borderWidth, N.body.removeChild(a)
            }
            return G = function () {
                return X.tabcellSpace
            }, X.tabcellSpace
        }

        function H(a, b) {
            ia || (ga = a.document.createElement("div"), domUtils.setAttributes(ga, {
                id: "ue_tableDragLine",
                unselectable: "on",
                contenteditable: !1,
                onresizestart: "return false",
                ondragstart: "return false",
                onselectstart: "return false",
                style: "background-color:blue;position:absolute;padding:0;margin:0;background-image:none;border:0px none;opacity:0;filter:alpha(opacity=0)"
            }), a.body.appendChild(ga))
        }

        function I(a) {
            if (!ia)for (var b; b = a.document.getElementById("ue_tableDragLine");)domUtils.remove(b)
        }

        function J(a, b) {
            if (b) {
                var c, d = domUtils.findParentByTagName(b, "table"), e = d.getElementsByTagName("caption"), f = d.offsetWidth, g = d.offsetHeight - (e.length > 0 ? e[0].offsetHeight : 0), h = domUtils.getXY(d), i = domUtils.getXY(b);
                switch (a) {
                    case"h":
                        c = "height:" + g + "px;top:" + (h.y + (e.length > 0 ? e[0].offsetHeight : 0)) + "px;left:" + (i.x + b.offsetWidth), ga.style.cssText = c + "px;position: absolute;display:block;background-color:blue;width:1px;border:0; color:blue;opacity:.3;filter:alpha(opacity=30)";
                        break;
                    case"v":
                        c = "width:" + f + "px;left:" + h.x + "px;top:" + (i.y + b.offsetHeight), ga.style.cssText = c + "px;overflow:hidden;position: absolute;display:block;background-color:blue;height:1px;border:0;color:blue;opacity:.2;filter:alpha(opacity=20)"
                }
            }
        }

        function K(a, b) {
            for (var c, d, e = domUtils.getElementsByTagName(a.body, "table"), f = 0; d = e[f++];) {
                var g = domUtils.getElementsByTagName(d, "td");
                g[0] && (b ? (c = g[0].style.borderColor.replace(/\s/g, ""), /(#ffffff)|(rgb\(255,255,255\))/gi.test(c) && domUtils.addClass(d, "noBorderTable")) : domUtils.removeClasses(d, "noBorderTable"))
            }
        }

        function L(a, b, c) {
            var d = a.body;
            return d.offsetWidth - (b ? 2 * parseInt(domUtils.getComputedStyle(d, "margin-left"), 10) : 0) - 2 * c.tableBorder - (a.options.offsetWidth || 0)
        }

        function M(a, b) {
            var c = domUtils.findParentByTagName(b.target || b.srcElement, ["td", "th"], !0), d = null;
            if (!c)return null;
            if (d = n(c, f(b)), !c)return null;
            if ("h1" === d && c.previousSibling) {
                var e = domUtils.getXY(c), g = c.offsetWidth;
                Math.abs(e.x + g - b.clientX) > g / 3 && (c = c.previousSibling)
            } else if ("v1" === d && c.parentNode.previousSibling) {
                var e = domUtils.getXY(c), h = c.offsetHeight;
                Math.abs(e.y + h - b.clientY) > h / 3 && (c = c.parentNode.previousSibling.firstChild)
            }
            return c && a.fireEvent("excludetable", c) !== !0 ? c : null
        }

        var N = this, O = null, P = null, Q = 5, R = !1, S = 5, T = 10, U = 0, V = null, W = 360, X = UE.UETable, Y = function (a) {
            return X.getUETable(a)
        }, Z = function (a) {
            return X.getUETableBySelected(a)
        }, $ = function (a, b) {
            return X.getDefaultValue(a, b)
        }, _ = function (a) {
            return X.removeSelectedClass(a)
        };
        N.ready(function () {
            var a = this, b = a.selection.getText;
            a.selection.getText = function () {
                var c = Z(a);
                if (c) {
                    var d = "";
                    return utils.each(c.selectedTds, function (a) {
                        d += a[browser.ie ? "innerText" : "textContent"]
                    }), d
                }
                return b.call(a.selection)
            }
        });
        var aa = null, ba = null, ca = "", da = !1, ea = null, fa = !1, ga = null, ha = null, ia = !1, ja = !0;
        N.setOpt({
            maxColNum: 20,
            maxRowNum: 100,
            defaultCols: 5,
            defaultRows: 5,
            tdvalign: "top",
            cursorpath: N.options.UEDITOR_HOME_URL + "themes/default/images/cursor_",
            tableDragable: !1,
            classList: ["ue-table-interlace-color-single", "ue-table-interlace-color-double"]
        }), N.getUETable = Y;
        var ka = {
            deletetable: 1,
            inserttable: 1,
            cellvalign: 1,
            insertcaption: 1,
            deletecaption: 1,
            inserttitle: 1,
            deletetitle: 1,
            mergeright: 1,
            mergedown: 1,
            mergecells: 1,
            insertrow: 1,
            insertrownext: 1,
            deleterow: 1,
            insertcol: 1,
            insertcolnext: 1,
            deletecol: 1,
            splittocells: 1,
            splittorows: 1,
            splittocols: 1,
            adaptbytext: 1,
            adaptbywindow: 1,
            adaptbycustomer: 1,
            insertparagraph: 1,
            insertparagraphbeforetable: 1,
            averagedistributecol: 1,
            averagedistributerow: 1
        };
        N.ready(function () {
            utils.cssRule("table", ".selectTdClass{background-color:#edf5fa !important}table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}table{margin-bottom:10px;border-collapse:collapse;display:table;}td,th{padding: 5px 10px;border: 1px solid #DDD;}caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}th{border-top:1px solid #BBB;background-color:#F7F7F7;}table tr.firstRow th{border-top-width:2px;}.ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }td p{margin:0;padding:0;}", N.document);
            var a, c, f;
            N.addListener("keydown", function (b, d) {
                var g = this, h = d.keyCode || d.which;
                if (8 == h) {
                    var i = Z(g);
                    i && i.selectedTds.length && (i.isFullCol() ? g.execCommand("deletecol") : i.isFullRow() ? g.execCommand("deleterow") : g.fireEvent("delcells"), domUtils.preventDefault(d));
                    var j = domUtils.findParentByTagName(g.selection.getStart(), "caption", !0), k = g.selection.getRange();
                    if (k.collapsed && j && e(j)) {
                        g.fireEvent("saveScene");
                        var l = j.parentNode;
                        domUtils.remove(j), l && k.setStart(l.rows[0].cells[0], 0).setCursor(!1, !0), g.fireEvent("saveScene")
                    }
                }
                if (46 == h && (i = Z(g))) {
                    g.fireEvent("saveScene");
                    for (var m, n = 0; m = i.selectedTds[n++];)domUtils.fillNode(g.document, m);
                    g.fireEvent("saveScene"), domUtils.preventDefault(d)
                }
                if (13 == h) {
                    var o = g.selection.getRange(), j = domUtils.findParentByTagName(o.startContainer, "caption", !0);
                    if (j) {
                        var l = domUtils.findParentByTagName(j, "table");
                        return o.collapsed ? j && o.setStart(l.rows[0].cells[0], 0).setCursor(!1, !0) : (o.deleteContents(), g.fireEvent("saveScene")), void domUtils.preventDefault(d)
                    }
                    if (o.collapsed) {
                        var l = domUtils.findParentByTagName(o.startContainer, "table");
                        if (l) {
                            var p = l.rows[0].cells[0], q = domUtils.findParentByTagName(g.selection.getStart(), ["td", "th"], !0), r = l.previousSibling;
                            if (p === q && (!r || 1 == r.nodeType && "TABLE" == r.tagName) && domUtils.isStartInblock(o)) {
                                var s = domUtils.findParent(g.selection.getStart(), function (a) {
                                    return domUtils.isBlockElm(a)
                                }, !0);
                                s && (/t(h|d)/i.test(s.tagName) || s === q.firstChild) && (g.execCommand("insertparagraphbeforetable"), domUtils.preventDefault(d))
                            }
                        }
                    }
                }
                if ((d.ctrlKey || d.metaKey) && "67" == d.keyCode) {
                    a = null;
                    var i = Z(g);
                    if (i) {
                        var t = i.selectedTds;
                        c = i.isFullCol(), f = i.isFullRow(), a = [[i.cloneCell(t[0], null, !0)]];
                        for (var m, n = 1; m = t[n]; n++)m.parentNode !== t[n - 1].parentNode ? a.push([i.cloneCell(m, null, !0)]) : a[a.length - 1].push(i.cloneCell(m, null, !0))
                    }
                }
            }), N.addListener("tablehasdeleted", function () {
                m(this, !1, "", null), ea && domUtils.remove(ea)
            }), N.addListener("beforepaste", function (d, g) {
                var h = this, i = h.selection.getRange();
                if (domUtils.findParentByTagName(i.startContainer, "caption", !0)) {
                    var j = h.document.createElement("div");
                    return j.innerHTML = g.html, void(g.html = j[browser.ie9below ? "innerText" : "textContent"])
                }
                var k = Z(h);
                if (a) {
                    h.fireEvent("saveScene");
                    var l, m, i = h.selection.getRange(), n = domUtils.findParentByTagName(i.startContainer, ["td", "th"], !0);
                    if (n) {
                        var o = Y(n);
                        if (f) {
                            var p = o.getCellInfo(n).rowIndex;
                            "TH" == n.tagName && p++;
                            for (var q, r = 0; q = a[r++];) {
                                for (var s, t = o.insertRow(p++, "td"), u = 0; s = q[u]; u++) {
                                    var v = t.cells[u];
                                    v || (v = t.insertCell(u)), v.innerHTML = s.innerHTML, s.getAttribute("width") && v.setAttribute("width", s.getAttribute("width")), s.getAttribute("vAlign") && v.setAttribute("vAlign", s.getAttribute("vAlign")), s.getAttribute("align") && v.setAttribute("align", s.getAttribute("align")), s.style.cssText && (v.style.cssText = s.style.cssText)
                                }
                                for (var s, u = 0; (s = t.cells[u]) && q[u]; u++)s.innerHTML = q[u].innerHTML, q[u].getAttribute("width") && s.setAttribute("width", q[u].getAttribute("width")), q[u].getAttribute("vAlign") && s.setAttribute("vAlign", q[u].getAttribute("vAlign")), q[u].getAttribute("align") && s.setAttribute("align", q[u].getAttribute("align")), q[u].style.cssText && (s.style.cssText = q[u].style.cssText)
                            }
                        } else {
                            if (c) {
                                y = o.getCellInfo(n);
                                for (var s, w = 0, u = 0, q = a[0]; s = q[u++];)w += s.colSpan || 1;
                                for (h.__hasEnterExecCommand = !0, r = 0; w > r; r++)h.execCommand("insertcol");
                                h.__hasEnterExecCommand = !1, n = o.table.rows[0].cells[y.cellIndex], "TH" == n.tagName && (n = o.table.rows[1].cells[y.cellIndex])
                            }
                            for (var q, r = 0; q = a[r++];) {
                                l = n;
                                for (var s, u = 0; s = q[u++];)if (n)n.innerHTML = s.innerHTML, s.getAttribute("width") && n.setAttribute("width", s.getAttribute("width")), s.getAttribute("vAlign") && n.setAttribute("vAlign", s.getAttribute("vAlign")), s.getAttribute("align") && n.setAttribute("align", s.getAttribute("align")), s.style.cssText && (n.style.cssText = s.style.cssText), m = n, n = n.nextSibling; else {
                                    var x = s.cloneNode(!0);
                                    domUtils.removeAttributes(x, ["class", "rowSpan", "colSpan"]), m.parentNode.appendChild(x)
                                }
                                if (n = o.getNextCell(l, !0, !0), !a[r])break;
                                if (!n) {
                                    var y = o.getCellInfo(l);
                                    o.table.insertRow(o.table.rows.length), o.update(), n = o.getVSideCell(l, !0)
                                }
                            }
                        }
                        o.update()
                    } else {
                        k = h.document.createElement("table");
                        for (var q, r = 0; q = a[r++];) {
                            for (var s, t = k.insertRow(k.rows.length), u = 0; s = q[u++];)x = X.cloneCell(s, null, !0), domUtils.removeAttributes(x, ["class"]), t.appendChild(x);
                            2 == u && x.rowSpan > 1 && (x.rowSpan = 1)
                        }
                        var z = $(h), A = h.body.offsetWidth - (ja ? 2 * parseInt(domUtils.getComputedStyle(h.body, "margin-left"), 10) : 0) - 2 * z.tableBorder - (h.options.offsetWidth || 0);
                        h.execCommand("insertHTML", "<table  " + (c && f ? 'width="' + A + '"' : "") + ">" + k.innerHTML.replace(/>\s*</g, "><").replace(/\bth\b/gi, "td") + "</table>")
                    }
                    return h.fireEvent("contentchange"), h.fireEvent("saveScene"), g.html = "", !0
                }
                var B, j = h.document.createElement("div");
                j.innerHTML = g.html, B = j.getElementsByTagName("table"), domUtils.findParentByTagName(h.selection.getStart(), "table") ? (utils.each(B, function (a) {
                    domUtils.remove(a)
                }), domUtils.findParentByTagName(h.selection.getStart(), "caption", !0) && (j.innerHTML = j[browser.ie ? "innerText" : "textContent"])) : utils.each(B, function (a) {
                    b(a, !0), domUtils.removeAttributes(a, ["style", "border"]), utils.each(domUtils.getElementsByTagName(a, "td"), function (a) {
                        e(a) && domUtils.fillNode(h.document, a), b(a, !0)
                    })
                }), g.html = j.innerHTML
            }), N.addListener("afterpaste", function () {
                utils.each(domUtils.getElementsByTagName(N.body, "table"), function (a) {
                    if (a.offsetWidth > N.body.offsetWidth) {
                        var b = $(N, a);
                        a.style.width = N.body.offsetWidth - (ja ? 2 * parseInt(domUtils.getComputedStyle(N.body, "margin-left"), 10) : 0) - 2 * b.tableBorder - (N.options.offsetWidth || 0) + "px"
                    }
                })
            }), N.addListener("blur", function () {
                a = null
            });
            var i;
            N.addListener("keydown", function () {
                clearTimeout(i), i = setTimeout(function () {
                    var a = N.selection.getRange(), b = domUtils.findParentByTagName(a.startContainer, ["th", "td"], !0);
                    if (b) {
                        var c = b.parentNode.parentNode.parentNode;
                        c.offsetWidth > c.getAttribute("width") && (b.style.wordBreak = "break-all")
                    }
                }, 100)
            }), N.addListener("selectionchange", function () {
                m(N, !1, "", null)
            }), N.addListener("contentchange", function () {
                var a = this;
                if (I(a), !Z(a)) {
                    var b = a.selection.getRange(), c = b.startContainer;
                    c = domUtils.findParentByTagName(c, ["td", "th"], !0), utils.each(domUtils.getElementsByTagName(a.document, "table"), function (b) {
                        a.fireEvent("excludetable", b) !== !0 && (b.ueTable = new X(b), b.onmouseover = function () {
                            a.fireEvent("tablemouseover", b)
                        }, b.onmousemove = function () {
                            a.fireEvent("tablemousemove", b), a.options.tableDragable && h(!0, this, a), utils.defer(function () {
                                a.fireEvent("contentchange", 50)
                            }, !0)
                        }, b.onmouseout = function () {
                            a.fireEvent("tablemouseout", b), m(a, !1, "", null), I(a)
                        }, b.onclick = function (b) {
                            b = a.window.event || b;
                            var c = d(b.target || b.srcElement);
                            if (c) {
                                var e, f = Y(c), g = f.table, h = f.getCellInfo(c), i = a.selection.getRange();
                                if (j(g, c, b, !0)) {
                                    var k = f.getCell(f.indexTable[f.rowsNum - 1][h.colIndex].rowIndex, f.indexTable[f.rowsNum - 1][h.colIndex].cellIndex);
                                    return void(b.shiftKey && f.selectedTds.length ? f.selectedTds[0] !== k ? (e = f.getCellsRange(f.selectedTds[0], k), f.setSelected(e)) : i && i.selectNodeContents(k).select() : c !== k ? (e = f.getCellsRange(c, k), f.setSelected(e)) : i && i.selectNodeContents(k).select())
                                }
                                if (j(g, c, b)) {
                                    var l = f.getCell(f.indexTable[h.rowIndex][f.colsNum - 1].rowIndex, f.indexTable[h.rowIndex][f.colsNum - 1].cellIndex);
                                    b.shiftKey && f.selectedTds.length ? f.selectedTds[0] !== l ? (e = f.getCellsRange(f.selectedTds[0], l), f.setSelected(e)) : i && i.selectNodeContents(l).select() : c !== l ? (e = f.getCellsRange(c, l), f.setSelected(e)) : i && i.selectNodeContents(l).select()
                                }
                            }
                        })
                    }), K(a, !0)
                }
            }), domUtils.on(N.document, "mousemove", g), domUtils.on(N.document, "mouseout", function (a) {
                var b = a.target || a.srcElement;
                "TABLE" == b.tagName && m(N, !1, "", null)
            }), N.addListener("interlacetable", function (a, b, c) {
                if (b)for (var d = this, e = b.rows, f = e.length, g = function (a, b, c) {
                    return a[b] ? a[b] : c ? a[b % a.length] : ""
                }, h = 0; f > h; h++)e[h].className = g(c || d.options.classList, h, !0)
            }), N.addListener("uninterlacetable", function (a, b) {
                if (b)for (var c = this, d = b.rows, e = c.options.classList, f = d.length, g = 0; f > g; g++)domUtils.removeClasses(d[g], e)
            }), N.addListener("mousedown", o), N.addListener("mouseup", w), domUtils.on(N.body, "dragstart", function (a) {
                w.call(N, "dragstart", a)
            }), N.addOutputRule(function (a) {
                utils.each(a.getNodesByTagName("div"), function (a) {
                    "ue_tableDragLine" == a.getAttr("id") && a.parentNode.removeChild(a)
                })
            });
            var k = 0;
            N.addListener("mousedown", function () {
                k = 0
            }), N.addListener("tabkeydown", function () {
                var a = this.selection.getRange(), b = a.getCommonAncestor(!0, !0), c = domUtils.findParentByTagName(b, "table");
                if (c) {
                    if (domUtils.findParentByTagName(b, "caption", !0)) {
                        var d = domUtils.getElementsByTagName(c, "th td");
                        d && d.length && a.setStart(d[0], 0).setCursor(!1, !0)
                    } else {
                        var d = domUtils.findParentByTagName(b, ["td", "th"], !0), f = Y(d);
                        k = d.rowSpan > 1 ? k : f.getCellInfo(d).rowIndex;
                        var g = f.getTabNextCell(d, k);
                        g ? e(g) ? a.setStart(g, 0).setCursor(!1, !0) : a.selectNodeContents(g).select() : (N.fireEvent("saveScene"), N.__hasEnterExecCommand = !0, this.execCommand("insertrownext"), N.__hasEnterExecCommand = !1, a = this.selection.getRange(), a.setStart(c.rows[c.rows.length - 1].cells[0], 0).setCursor(), N.fireEvent("saveScene"))
                    }
                    return !0
                }
            }), browser.ie && N.addListener("selectionchange", function () {
                m(this, !1, "", null)
            }), N.addListener("keydown", function (a, b) {
                var c = this, d = b.keyCode || b.which;
                if (8 != d && 46 != d) {
                    var e = !(b.ctrlKey || b.metaKey || b.shiftKey || b.altKey);
                    e && _(domUtils.getElementsByTagName(c.body, "td"));
                    var f = Z(c);
                    f && e && f.clearSelected()
                }
            }), N.addListener("beforegetcontent", function () {
                K(this, !1), browser.ie && utils.each(this.document.getElementsByTagName("caption"), function (a) {
                    domUtils.isEmptyNode(a) && (a.innerHTML = "&nbsp;")
                })
            }), N.addListener("aftergetcontent", function () {
                K(this, !0)
            }), N.addListener("getAllHtml", function () {
                _(N.document.getElementsByTagName("td"))
            }), N.addListener("fullscreenchanged", function (a, b) {
                if (!b) {
                    var c = this.body.offsetWidth / document.body.offsetWidth, d = domUtils.getElementsByTagName(this.body, "table");
                    utils.each(d, function (a) {
                        if (a.offsetWidth < N.body.offsetWidth)return !1;
                        var b = domUtils.getElementsByTagName(a, "td"), d = [];
                        utils.each(b, function (a) {
                            d.push(a.offsetWidth)
                        });
                        for (var e, f = 0; e = b[f]; f++)e.setAttribute("width", Math.floor(d[f] * c));
                        a.setAttribute("width", Math.floor(L(N, ja, $(N))))
                    })
                }
            });
            var l = N.execCommand;
            N.execCommand = function (a, b) {
                var c = this;
                a = a.toLowerCase();
                var d, f, g = Z(c), h = new dom.Range(c.document), i = c.commands[a] || UE.commands[a];
                if (i) {
                    if (!g || ka[a] || i.notNeedUndo || c.__hasEnterExecCommand)f = l.apply(c, arguments); else {
                        c.__hasEnterExecCommand = !0, c.fireEvent("beforeexeccommand", a), d = g.selectedTds;
                        for (var j, k, m, n = -2, o = -2, p = 0; m = d[p]; p++)e(m) ? h.setStart(m, 0).setCursor(!1, !0) : h.selectNode(m).select(!0), k = c.queryCommandState(a), j = c.queryCommandValue(a), -1 != k && (n === k && o === j || (c._ignoreContentChange = !0, f = l.apply(c, arguments), c._ignoreContentChange = !1), n = c.queryCommandState(a), o = c.queryCommandValue(a), domUtils.isEmptyBlock(m) && domUtils.fillNode(c.document, m));
                        h.setStart(d[0], 0).shrinkBoundary(!0).setCursor(!1, !0), c.fireEvent("contentchange"), c.fireEvent("afterexeccommand", a), c.__hasEnterExecCommand = !1, c._selectionChange()
                    }
                    return f
                }
            }
        });
        var la
    }, UE.UETable.prototype.sortTable = function (a, b) {
        var c = this.table, d = c.rows, e = [], f = "TH" === d[0].cells[0].tagName, g = 0;
        if (this.selectedTds.length) {
            for (var h = this.cellsRange, i = h.endRowIndex + 1, j = h.beginRowIndex; i > j; j++)e[j] = d[j];
            e.splice(0, h.beginRowIndex), g = h.endRowIndex + 1 === this.rowsNum ? 0 : h.endRowIndex + 1;
        } else for (var j = 0, i = d.length; i > j; j++)e[j] = d[j];
        var k = {
            reversecurrent: function (a, b) {
                return 1
            }, orderbyasc: function (a, b) {
                var c = a.innerText || a.textContent, d = b.innerText || b.textContent;
                return c.localeCompare(d)
            }, reversebyasc: function (a, b) {
                var c = a.innerHTML, d = b.innerHTML;
                return d.localeCompare(c)
            }, orderbynum: function (a, b) {
                var c = a[browser.ie ? "innerText" : "textContent"].match(/\d+/), d = b[browser.ie ? "innerText" : "textContent"].match(/\d+/);
                return c && (c = +c[0]), d && (d = +d[0]), (c || 0) - (d || 0)
            }, reversebynum: function (a, b) {
                var c = a[browser.ie ? "innerText" : "textContent"].match(/\d+/), d = b[browser.ie ? "innerText" : "textContent"].match(/\d+/);
                return c && (c = +c[0]), d && (d = +d[0]), (d || 0) - (c || 0)
            }
        };
        c.setAttribute("data-sort-type", b && "string" == typeof b && k[b] ? b : ""), f && e.splice(0, 1), e = utils.sort(e, function (c, d) {
            var e;
            return e = b && "function" == typeof b ? b.call(this, c.cells[a], d.cells[a]) : b && "number" == typeof b ? 1 : b && "string" == typeof b && k[b] ? k[b].call(this, c.cells[a], d.cells[a]) : k.orderbyasc.call(this, c.cells[a], d.cells[a])
        });
        for (var l = c.ownerDocument.createDocumentFragment(), m = 0, i = e.length; i > m; m++)l.appendChild(e[m]);
        var n = c.getElementsByTagName("tbody")[0];
        g ? n.insertBefore(l, d[g - h.endRowIndex + h.beginRowIndex - 1]) : n.appendChild(l)
    }, UE.plugins.tablesort = function () {
        var a = this, b = UE.UETable, c = function (a) {
            return b.getUETable(a)
        }, d = function (a) {
            return b.getTableItemsByRange(a)
        };
        a.ready(function () {
            utils.cssRule("tablesort", "table.sortEnabled tr.firstRow th,table.sortEnabled tr.firstRow td{padding-right:20px;background-repeat: no-repeat;background-position: center right;   background-image:url(" + a.options.themePath + a.options.theme + "/images/sortable.png);}", a.document), a.addListener("afterexeccommand", function (a, b) {
                "mergeright" != b && "mergedown" != b && "mergecells" != b || this.execCommand("disablesort")
            })
        }), UE.commands.sorttable = {
            queryCommandState: function () {
                var a = this, b = d(a);
                if (!b.cell)return -1;
                for (var c, e = b.table, f = e.getElementsByTagName("td"), g = 0; c = f[g++];)if (1 != c.rowSpan || 1 != c.colSpan)return -1;
                return 0
            }, execCommand: function (a, b) {
                var e = this, f = e.selection.getRange(), g = f.createBookmark(!0), h = d(e), i = h.cell, j = c(h.table), k = j.getCellInfo(i);
                j.sortTable(k.cellIndex, b), f.moveToBookmark(g);
                try {
                    f.select()
                } catch (l) {
                }
            }
        }, UE.commands.enablesort = UE.commands.disablesort = {
            queryCommandState: function (a) {
                var b = d(this).table;
                if (b && "enablesort" == a)for (var c = domUtils.getElementsByTagName(b, "th td"), e = 0; e < c.length; e++)if (c[e].getAttribute("colspan") > 1 || c[e].getAttribute("rowspan") > 1)return -1;
                return b ? "enablesort" == a ^ "sortEnabled" != b.getAttribute("data-sort") ? -1 : 0 : -1
            }, execCommand: function (a) {
                var b = d(this).table;
                b.setAttribute("data-sort", "enablesort" == a ? "sortEnabled" : "sortDisabled"), "enablesort" == a ? domUtils.addClass(b, "sortEnabled") : domUtils.removeClasses(b, "sortEnabled")
            }
        }
    }, UE.plugins.contextmenu = function () {
        var a = this;
        if (a.setOpt("enableContextMenu", !0), a.getOpt("enableContextMenu") !== !1) {
            var b, c = a.getLang("contextMenu"), d = a.options.contextMenu || [{
                    label: c.selectall,
                    cmdName: "selectall"
                }, {
                    label: c.cleardoc, cmdName: "cleardoc", exec: function () {
                        confirm(c.confirmclear) && this.execCommand("cleardoc")
                    }
                }, "-", {label: c.unlink, cmdName: "unlink"}, "-", {
                    group: c.paragraph,
                    icon: "justifyjustify",
                    subMenu: [{label: c.justifyleft, cmdName: "justify", value: "left"}, {
                        label: c.justifyright,
                        cmdName: "justify",
                        value: "right"
                    }, {label: c.justifycenter, cmdName: "justify", value: "center"}, {
                        label: c.justifyjustify,
                        cmdName: "justify",
                        value: "justify"
                    }]
                }, "-", {
                    group: c.table,
                    icon: "table",
                    subMenu: [{label: c.inserttable, cmdName: "inserttable"}, {
                        label: c.deletetable,
                        cmdName: "deletetable"
                    }, "-", {label: c.deleterow, cmdName: "deleterow"}, {
                        label: c.deletecol,
                        cmdName: "deletecol"
                    }, {label: c.insertcol, cmdName: "insertcol"}, {
                        label: c.insertcolnext,
                        cmdName: "insertcolnext"
                    }, {label: c.insertrow, cmdName: "insertrow"}, {
                        label: c.insertrownext,
                        cmdName: "insertrownext"
                    }, "-", {label: c.insertcaption, cmdName: "insertcaption"}, {
                        label: c.deletecaption,
                        cmdName: "deletecaption"
                    }, {label: c.inserttitle, cmdName: "inserttitle"}, {
                        label: c.deletetitle,
                        cmdName: "deletetitle"
                    }, {label: c.inserttitlecol, cmdName: "inserttitlecol"}, {
                        label: c.deletetitlecol,
                        cmdName: "deletetitlecol"
                    }, "-", {label: c.mergecells, cmdName: "mergecells"}, {
                        label: c.mergeright,
                        cmdName: "mergeright"
                    }, {label: c.mergedown, cmdName: "mergedown"}, "-", {
                        label: c.splittorows,
                        cmdName: "splittorows"
                    }, {label: c.splittocols, cmdName: "splittocols"}, {
                        label: c.splittocells,
                        cmdName: "splittocells"
                    }, "-", {label: c.averageDiseRow, cmdName: "averagedistributerow"}, {
                        label: c.averageDisCol,
                        cmdName: "averagedistributecol"
                    }, "-", {
                        label: c.edittd, cmdName: "edittd", exec: function () {
                            UE.ui.edittd && new UE.ui.edittd(this), this.getDialog("edittd").open()
                        }
                    }, {
                        label: c.edittable, cmdName: "edittable", exec: function () {
                            UE.ui.edittable && new UE.ui.edittable(this), this.getDialog("edittable").open()
                        }
                    }, {label: c.setbordervisible, cmdName: "setbordervisible"}]
                }, {
                    group: c.tablesort,
                    icon: "tablesort",
                    subMenu: [{label: c.enablesort, cmdName: "enablesort"}, {
                        label: c.disablesort,
                        cmdName: "disablesort"
                    }, "-", {
                        label: c.reversecurrent,
                        cmdName: "sorttable",
                        value: "reversecurrent"
                    }, {label: c.orderbyasc, cmdName: "sorttable", value: "orderbyasc"}, {
                        label: c.reversebyasc,
                        cmdName: "sorttable",
                        value: "reversebyasc"
                    }, {label: c.orderbynum, cmdName: "sorttable", value: "orderbynum"}, {
                        label: c.reversebynum,
                        cmdName: "sorttable",
                        value: "reversebynum"
                    }]
                }, {
                    group: c.borderbk,
                    icon: "borderBack",
                    subMenu: [{
                        label: c.setcolor, cmdName: "interlacetable", exec: function () {
                            this.execCommand("interlacetable")
                        }
                    }, {
                        label: c.unsetcolor, cmdName: "uninterlacetable", exec: function () {
                            this.execCommand("uninterlacetable")
                        }
                    }, {
                        label: c.setbackground, cmdName: "settablebackground", exec: function () {
                            this.execCommand("settablebackground", {repeat: !0, colorList: ["#bbb", "#ccc"]})
                        }
                    }, {
                        label: c.unsetbackground, cmdName: "cleartablebackground", exec: function () {
                            this.execCommand("cleartablebackground")
                        }
                    }, {
                        label: c.redandblue, cmdName: "settablebackground", exec: function () {
                            this.execCommand("settablebackground", {repeat: !0, colorList: ["red", "blue"]})
                        }
                    }, {
                        label: c.threecolorgradient, cmdName: "settablebackground", exec: function () {
                            this.execCommand("settablebackground", {repeat: !0, colorList: ["#aaa", "#bbb", "#ccc"]})
                        }
                    }]
                }, {
                    group: c.aligntd,
                    icon: "aligntd",
                    subMenu: [{
                        cmdName: "cellalignment",
                        value: {align: "left", vAlign: "top"}
                    }, {cmdName: "cellalignment", value: {align: "center", vAlign: "top"}}, {
                        cmdName: "cellalignment",
                        value: {align: "right", vAlign: "top"}
                    }, {cmdName: "cellalignment", value: {align: "left", vAlign: "middle"}}, {
                        cmdName: "cellalignment",
                        value: {align: "center", vAlign: "middle"}
                    }, {cmdName: "cellalignment", value: {align: "right", vAlign: "middle"}}, {
                        cmdName: "cellalignment",
                        value: {align: "left", vAlign: "bottom"}
                    }, {
                        cmdName: "cellalignment",
                        value: {align: "center", vAlign: "bottom"}
                    }, {cmdName: "cellalignment", value: {align: "right", vAlign: "bottom"}}]
                }, {
                    group: c.aligntable,
                    icon: "aligntable",
                    subMenu: [{
                        cmdName: "tablealignment",
                        className: "left",
                        label: c.tableleft,
                        value: "left"
                    }, {
                        cmdName: "tablealignment",
                        className: "center",
                        label: c.tablecenter,
                        value: "center"
                    }, {cmdName: "tablealignment", className: "right", label: c.tableright, value: "right"}]
                }, "-", {
                    label: c.insertparagraphbefore,
                    cmdName: "insertparagraph",
                    value: !0
                }, {label: c.insertparagraphafter, cmdName: "insertparagraph"}, {
                    label: c.copy,
                    cmdName: "copy"
                }, {label: c.paste, cmdName: "paste"}];
            if (d.length) {
                var e = UE.ui.uiUtils;
                a.addListener("contextmenu", function (f, g) {
                    var h = e.getViewportOffsetByEvent(g);
                    a.fireEvent("beforeselectionchange"), b && b.destroy();
                    for (var i, j = 0, k = []; i = d[j]; j++) {
                        var l;
                        !function (b) {
                            function d() {
                                switch (b.icon) {
                                    case"table":
                                        return a.getLang("contextMenu.table");
                                    case"justifyjustify":
                                        return a.getLang("contextMenu.paragraph");
                                    case"aligntd":
                                        return a.getLang("contextMenu.aligntd");
                                    case"aligntable":
                                        return a.getLang("contextMenu.aligntable");
                                    case"tablesort":
                                        return c.tablesort;
                                    case"borderBack":
                                        return c.borderbk;
                                    default:
                                        return ""
                                }
                            }

                            if ("-" == b)(l = k[k.length - 1]) && "-" !== l && k.push("-"); else if (b.hasOwnProperty("group")) {
                                for (var e, f = 0, g = []; e = b.subMenu[f]; f++)!function (b) {
                                    "-" == b ? (l = g[g.length - 1]) && "-" !== l ? g.push("-") : g.splice(g.length - 1) : (a.commands[b.cmdName] || UE.commands[b.cmdName] || b.query) && (b.query ? b.query() : a.queryCommandState(b.cmdName)) > -1 && g.push({
                                        label: b.label || a.getLang("contextMenu." + b.cmdName + (b.value || "")) || "",
                                        className: "edui-for-" + b.cmdName + (b.className ? " edui-for-" + b.cmdName + "-" + b.className : ""),
                                        onclick: b.exec ? function () {
                                            b.exec.call(a)
                                        } : function () {
                                            a.execCommand(b.cmdName, b.value)
                                        }
                                    })
                                }(e);
                                g.length && k.push({
                                    label: d(),
                                    className: "edui-for-" + b.icon,
                                    subMenu: {items: g, editor: a}
                                })
                            } else(a.commands[b.cmdName] || UE.commands[b.cmdName] || b.query) && (b.query ? b.query.call(a) : a.queryCommandState(b.cmdName)) > -1 && k.push({
                                label: b.label || a.getLang("contextMenu." + b.cmdName),
                                className: "edui-for-" + (b.icon ? b.icon : b.cmdName + (b.value || "")),
                                onclick: b.exec ? function () {
                                    b.exec.call(a)
                                } : function () {
                                    a.execCommand(b.cmdName, b.value)
                                }
                            })
                        }(i)
                    }
                    if ("-" == k[k.length - 1] && k.pop(), b = new UE.ui.Menu({
                            items: k,
                            className: "edui-contextmenu",
                            editor: a
                        }), b.render(), b.showAt(h), a.fireEvent("aftershowcontextmenu", b), domUtils.preventDefault(g), browser.ie) {
                        var m;
                        try {
                            m = a.selection.getNative().createRange()
                        } catch (n) {
                            return
                        }
                        if (m.item) {
                            var o = new dom.Range(a.document);
                            o.selectNode(m.item(0)).select(!0, !0)
                        }
                    }
                }), a.addListener("aftershowcontextmenu", function (b, c) {
                    if (a.zeroclipboard) {
                        var d = c.items;
                        for (var e in d)"edui-for-copy" == d[e].className && a.zeroclipboard.clip(d[e].getDom())
                    }
                })
            }
        }
    }, UE.plugins.shortcutmenu = function () {
        var a, b = this, c = b.options.shortcutMenu || [];
        c.length && (b.addListener("contextmenu mouseup", function (b, d) {
            var e = this, f = {
                type: b,
                target: d.target || d.srcElement,
                screenX: d.screenX,
                screenY: d.screenY,
                clientX: d.clientX,
                clientY: d.clientY
            };
            if (setTimeout(function () {
                    var d = e.selection.getRange();
                    d.collapsed !== !1 && "contextmenu" != b || (a || (a = new baidu.editor.ui.ShortCutMenu({
                        editor: e,
                        items: c,
                        theme: e.options.theme,
                        className: "edui-shortcutmenu"
                    }), a.render(), e.fireEvent("afterrendershortcutmenu", a)), a.show(f, !!UE.plugins.contextmenu))
                }), "contextmenu" == b && (domUtils.preventDefault(d), browser.ie9below)) {
                var g;
                try {
                    g = e.selection.getNative().createRange()
                } catch (d) {
                    return
                }
                if (g.item) {
                    var h = new dom.Range(e.document);
                    h.selectNode(g.item(0)).select(!0, !0)
                }
            }
        }), b.addListener("keydown", function (b) {
            "keydown" == b && a && !a.isHidden && a.hide()
        }))
    }, UE.plugins.basestyle = function () {
        var a = {
            bold: ["strong", "b"],
            italic: ["em", "i"],
            subscript: ["sub"],
            superscript: ["sup"]
        }, b = function (a, b) {
            return domUtils.filterNodeList(a.selection.getStartElementPath(), b)
        }, c = this;
        c.addshortcutkey({Bold: "ctrl+66", Italic: "ctrl+73", Underline: "ctrl+85"}), c.addInputRule(function (a) {
            utils.each(a.getNodesByTagName("b i"), function (a) {
                switch (a.tagName) {
                    case"b":
                        a.tagName = "strong";
                        break;
                    case"i":
                        a.tagName = "em"
                }
            })
        });
        for (var d in a)!function (a, d) {
            c.commands[a] = {
                execCommand: function (a) {
                    var e = c.selection.getRange(), f = b(this, d);
                    if (e.collapsed) {
                        if (f) {
                            var g = c.document.createTextNode("");
                            e.insertNode(g).removeInlineStyle(d), e.setStartBefore(g), domUtils.remove(g)
                        } else {
                            var h = e.document.createElement(d[0]);
                            "superscript" != a && "subscript" != a || (g = c.document.createTextNode(""), e.insertNode(g).removeInlineStyle(["sub", "sup"]).setStartBefore(g).collapse(!0)), e.insertNode(h).setStart(h, 0)
                        }
                        e.collapse(!0)
                    } else"superscript" != a && "subscript" != a || f && f.tagName.toLowerCase() == a || e.removeInlineStyle(["sub", "sup"]), f ? e.removeInlineStyle(d) : e.applyInlineStyle(d[0]);
                    e.select()
                }, queryCommandState: function () {
                    return b(this, d) ? 1 : 0
                }
            }
        }(d, a[d])
    }, UE.plugins.elementpath = function () {
        var a, b, c = this;
        c.setOpt("elementPathEnabled", !0), c.options.elementPathEnabled && (c.commands.elementpath = {
            execCommand: function (d, e) {
                var f = b[e], g = c.selection.getRange();
                a = 1 * e, g.selectNode(f).select()
            }, queryCommandValue: function () {
                var c = [].concat(this.selection.getStartElementPath()).reverse(), d = [];
                b = c;
                for (var e, f = 0; e = c[f]; f++)if (3 != e.nodeType) {
                    var g = e.tagName.toLowerCase();
                    if ("img" == g && e.getAttribute("anchorname") && (g = "anchor"), d[f] = g, a == f) {
                        a = -1;
                        break
                    }
                }
                return d
            }
        })
    }, UE.plugins.formatmatch = function () {
        function a(f, g) {
            function h(a) {
                return m && a.selectNode(m), a.applyInlineStyle(d[d.length - 1].tagName, null, d)
            }

            if (browser.webkit)var i = "IMG" == g.target.tagName ? g.target : null;
            c.undoManger && c.undoManger.save();
            var j = c.selection.getRange(), k = i || j.getClosedNode();
            if (b && k && "IMG" == k.tagName)k.style.cssText += ";float:" + (b.style.cssFloat || b.style.styleFloat || "none") + ";display:" + (b.style.display || "inline"), b = null; else if (!b) {
                var l = j.collapsed;
                if (l) {
                    var m = c.document.createTextNode("match");
                    j.insertNode(m).select()
                }
                c.__hasEnterExecCommand = !0;
                var n = c.options.removeFormatAttributes;
                c.options.removeFormatAttributes = "", c.execCommand("removeformat"), c.options.removeFormatAttributes = n, c.__hasEnterExecCommand = !1, j = c.selection.getRange(), d.length && h(j), m && j.setStartBefore(m).collapse(!0), j.select(), m && domUtils.remove(m)
            }
            c.undoManger && c.undoManger.save(), c.removeListener("mouseup", a), e = 0
        }

        var b, c = this, d = [], e = 0;
        c.addListener("reset", function () {
            d = [], e = 0
        }), c.commands.formatmatch = {
            execCommand: function (f) {
                if (e)return e = 0, d = [], void c.removeListener("mouseup", a);
                var g = c.selection.getRange();
                if (b = g.getClosedNode(), !b || "IMG" != b.tagName) {
                    g.collapse(!0).shrinkBoundary();
                    var h = g.startContainer;
                    d = domUtils.findParents(h, !0, function (a) {
                        return !domUtils.isBlockElm(a) && 1 == a.nodeType
                    });
                    for (var i, j = 0; i = d[j]; j++)if ("A" == i.tagName) {
                        d.splice(j, 1);
                        break
                    }
                }
                c.addListener("mouseup", a), e = 1
            }, queryCommandState: function () {
                return e
            }, notNeedUndo: 1
        }
    }, UE.plugin.register("searchreplace", function () {
        function a(a, b, c) {
            var d = b.searchStr;
            -1 == b.dir && (a = a.split("").reverse().join(""), d = d.split("").reverse().join(""), c = a.length - c);
            for (var e, f = new RegExp(d, "g" + (b.casesensitive ? "" : "i")); e = f.exec(a);)if (e.index >= c)return -1 == b.dir ? a.length - e.index - b.searchStr.length : e.index;
            return -1
        }

        function b(b, c, d) {
            var e, f, h = d.all || 1 == d.dir ? "getNextDomNode" : "getPreDomNode";
            domUtils.isBody(b) && (b = b.firstChild);
            for (var i = 1; b;) {
                if (e = 3 == b.nodeType ? b.nodeValue : b[browser.ie ? "innerText" : "textContent"], f = a(e, d, c), i = 0, -1 != f)return {
                    node: b,
                    index: f
                };
                for (b = domUtils[h](b); b && g[b.nodeName.toLowerCase()];)b = domUtils[h](b, !0);
                b && (c = -1 == d.dir ? (3 == b.nodeType ? b.nodeValue : b[browser.ie ? "innerText" : "textContent"]).length : 0)
            }
        }

        function c(a, b, d) {
            for (var e, f = 0, g = a.firstChild, h = 0; g;) {
                if (3 == g.nodeType) {
                    if (h = g.nodeValue.replace(/(^[\t\r\n]+)|([\t\r\n]+$)/, "").length, f += h, f >= b)return {
                        node: g,
                        index: h - (f - b)
                    }
                } else if (!dtd.$empty[g.tagName] && (h = g[browser.ie ? "innerText" : "textContent"].replace(/(^[\t\r\n]+)|([\t\r\n]+$)/, "").length, f += h, f >= b && (e = c(g, h - (f - b), d))))return e;
                g = domUtils.getNextDomNode(g)
            }
        }

        function d(a, d) {
            var f, g = a.selection.getRange(), h = d.searchStr, i = a.document.createElement("span");
            if (i.innerHTML = "$$ueditor_searchreplace_key$$", g.shrinkBoundary(!0), !g.collapsed) {
                g.select();
                var j = a.selection.getText();
                if (new RegExp("^" + d.searchStr + "$", d.casesensitive ? "" : "i").test(j)) {
                    if (void 0 != d.replaceStr)return e(g, d.replaceStr), g.select(), !0;
                    g.collapse(-1 == d.dir)
                }
            }
            g.insertNode(i), g.enlargeToBlockElm(!0), f = g.startContainer;
            var k = f[browser.ie ? "innerText" : "textContent"].indexOf("$$ueditor_searchreplace_key$$");
            g.setStartBefore(i), domUtils.remove(i);
            var l = b(f, k, d);
            if (l) {
                var m = c(l.node, l.index, h), n = c(l.node, l.index + h.length, h);
                return g.setStart(m.node, m.index).setEnd(n.node, n.index), void 0 !== d.replaceStr && e(g, d.replaceStr), g.select(), !0
            }
            g.setCursor()
        }

        function e(a, b) {
            b = f.document.createTextNode(b), a.deleteContents().insertNode(b)
        }

        var f = this, g = {table: 1, tbody: 1, tr: 1, ol: 1, ul: 1};
        return {
            commands: {
                searchreplace: {
                    execCommand: function (a, b) {
                        utils.extend(b, {all: !1, casesensitive: !1, dir: 1}, !0);
                        var c = 0;
                        if (b.all) {
                            var e = f.selection.getRange(), g = f.body.firstChild;
                            for (g && 1 == g.nodeType ? (e.setStart(g, 0), e.shrinkBoundary(!0)) : 3 == g.nodeType && e.setStartBefore(g), e.collapse(!0).select(!0), void 0 !== b.replaceStr && f.fireEvent("saveScene"); d(this, b);)c++;
                            c && f.fireEvent("saveScene")
                        } else void 0 !== b.replaceStr && f.fireEvent("saveScene"), d(this, b) && c++, c && f.fireEvent("saveScene");
                        return c
                    }, notNeedUndo: 1
                }
            }
        }
    }), UE.plugins.customstyle = function () {
        var a = this;
        a.setOpt({
            customstyle: [{
                tag: "h1",
                name: "tc",
                style: "font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;"
            }, {
                tag: "h1",
                name: "tl",
                style: "font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:left;margin:0 0 10px 0;"
            }, {
                tag: "span",
                name: "im",
                style: "font-size:16px;font-style:italic;font-weight:bold;line-height:18px;"
            }, {
                tag: "span",
                name: "hi",
                style: "font-size:16px;font-style:italic;font-weight:bold;color:rgb(51, 153, 204);line-height:18px;"
            }]
        }), a.commands.customstyle = {
            execCommand: function (a, b) {
                var c, d, e = this, f = b.tag, g = domUtils.findParent(e.selection.getStart(), function (a) {
                    return a.getAttribute("label")
                }, !0), h = {};
                for (var i in b)void 0 !== b[i] && (h[i] = b[i]);
                if (delete h.tag, g && g.getAttribute("label") == b.label) {
                    if (c = this.selection.getRange(), d = c.createBookmark(), c.collapsed)if (dtd.$block[g.tagName]) {
                        var j = e.document.createElement("p");
                        domUtils.moveChild(g, j), g.parentNode.insertBefore(j, g), domUtils.remove(g)
                    } else domUtils.remove(g, !0); else {
                        var k = domUtils.getCommonAncestor(d.start, d.end), l = domUtils.getElementsByTagName(k, f);
                        new RegExp(f, "i").test(k.tagName) && l.push(k);
                        for (var m, n = 0; m = l[n++];)if (m.getAttribute("label") == b.label) {
                            var o = domUtils.getPosition(m, d.start), p = domUtils.getPosition(m, d.end);
                            if ((o & domUtils.POSITION_FOLLOWING || o & domUtils.POSITION_CONTAINS) && (p & domUtils.POSITION_PRECEDING || p & domUtils.POSITION_CONTAINS) && dtd.$block[f]) {
                                var j = e.document.createElement("p");
                                domUtils.moveChild(m, j), m.parentNode.insertBefore(j, m)
                            }
                            domUtils.remove(m, !0)
                        }
                        g = domUtils.findParent(k, function (a) {
                            return a.getAttribute("label") == b.label
                        }, !0), g && domUtils.remove(g, !0)
                    }
                    c.moveToBookmark(d).select()
                } else if (dtd.$block[f]) {
                    if (this.execCommand("paragraph", f, h, "customstyle"), c = e.selection.getRange(), !c.collapsed) {
                        c.collapse(), g = domUtils.findParent(e.selection.getStart(), function (a) {
                            return a.getAttribute("label") == b.label
                        }, !0);
                        var q = e.document.createElement("p");
                        domUtils.insertAfter(g, q), domUtils.fillNode(e.document, q), c.setStart(q, 0).setCursor()
                    }
                } else {
                    if (c = e.selection.getRange(), c.collapsed)return g = e.document.createElement(f), domUtils.setAttributes(g, h), void c.insertNode(g).setStart(g, 0).setCursor();
                    d = c.createBookmark(), c.applyInlineStyle(f, h).moveToBookmark(d).select()
                }
            }, queryCommandValue: function () {
                var a = domUtils.filterNodeList(this.selection.getStartElementPath(), function (a) {
                    return a.getAttribute("label")
                });
                return a ? a.getAttribute("label") : ""
            }
        }, a.addListener("keyup", function (b, c) {
            var d = c.keyCode || c.which;
            if (32 == d || 13 == d) {
                var e = a.selection.getRange();
                if (e.collapsed) {
                    var f = domUtils.findParent(a.selection.getStart(), function (a) {
                        return a.getAttribute("label")
                    }, !0);
                    if (f && dtd.$block[f.tagName] && domUtils.isEmptyNode(f)) {
                        var g = a.document.createElement("p");
                        domUtils.insertAfter(f, g), domUtils.fillNode(a.document, g), domUtils.remove(f), e.setStart(g, 0).setCursor()
                    }
                }
            }
        })
    }, UE.plugins.catchremoteimage = function () {
        var me = this, ajax = UE.ajax;
        me.options.catchRemoteImageEnable !== !1 && (me.setOpt({catchRemoteImageEnable: !1}), me.addListener("afterpaste", function () {
            me.fireEvent("catchRemoteImage")
        }), me.addListener("catchRemoteImage", function () {
            function catchremoteimage(a, b) {
                var c = utils.serializeParam(me.queryCommandValue("serverparam")) || "", d = utils.formatUrl(catcherActionUrl + (-1 == catcherActionUrl.indexOf("?") ? "?" : "&") + c), e = utils.isCrossDomainUrl(d), f = {
                    method: "POST",
                    dataType: e ? "jsonp" : "",
                    timeout: 6e4,
                    onsuccess: b.success,
                    onerror: b.error
                };
                f[catcherFieldName] = a, ajax.request(d, f)
            }

            for (var catcherLocalDomain = me.getOpt("catcherLocalDomain"), catcherActionUrl = me.getActionUrl(me.getOpt("catcherActionName")), catcherUrlPrefix = me.getOpt("catcherUrlPrefix"), catcherFieldName = me.getOpt("catcherFieldName"), remoteImages = [], imgs = domUtils.getElementsByTagName(me.document, "img"), test = function (a, b) {
                if (-1 != a.indexOf(location.host) || /(^\.)|(^\/)/.test(a))return !0;
                if (b)for (var c, d = 0; c = b[d++];)if (-1 !== a.indexOf(c))return !0;
                return !1
            }, i = 0, ci; ci = imgs[i++];)if (!ci.getAttribute("word_img")) {
                var src = ci.getAttribute("_src") || ci.src || "";
                /^(https?|ftp):/i.test(src) && !test(src, catcherLocalDomain) && remoteImages.push(src)
            }
            remoteImages.length && catchremoteimage(remoteImages, {
                success: function (r) {
                    try {
                        var info = void 0 !== r.state ? r : eval("(" + r.responseText + ")")
                    } catch (e) {
                        return
                    }
                    var i, j, ci, cj, oldSrc, newSrc, list = info.list;
                    for (i = 0; ci = imgs[i++];)for (oldSrc = ci.getAttribute("_src") || ci.src || "", j = 0; cj = list[j++];)if (oldSrc == cj.source && "SUCCESS" == cj.state) {
                        newSrc = catcherUrlPrefix + cj.url, domUtils.setAttributes(ci, {src: newSrc, _src: newSrc});
                        break
                    }
                    me.fireEvent("catchremotesuccess")
                }, error: function () {
                    me.fireEvent("catchremoteerror")
                }
            })
        }))
    }, UE.plugin.register("snapscreen", function () {
        function getLocation(a) {
            var b, c = document.createElement("a"), d = utils.serializeParam(me.queryCommandValue("serverparam")) || "";
            return c.href = a, browser.ie && (c.href = c.href), b = c.search, d && (b = b + (-1 == b.indexOf("?") ? "?" : "&") + d, b = b.replace(/[&]+/gi, "&")), {
                port: c.port,
                hostname: c.hostname,
                path: c.pathname + b || +c.hash
            }
        }

        var me = this, snapplugin;
        return {
            commands: {
                snapscreen: {
                    execCommand: function (cmd) {
                        function onSuccess(rs) {
                            try {
                                if (rs = eval("(" + rs + ")"), "SUCCESS" == rs.state) {
                                    var opt = me.options;
                                    me.execCommand("insertimage", {
                                        src: opt.snapscreenUrlPrefix + rs.url,
                                        _src: opt.snapscreenUrlPrefix + rs.url,
                                        alt: rs.title || "",
                                        floatStyle: opt.snapscreenImgAlign
                                    })
                                } else alert(rs.state)
                            } catch (e) {
                                alert(lang.callBackErrorMsg)
                            }
                        }

                        var url, local, res, lang = me.getLang("snapScreen_plugin");
                        if (!snapplugin) {
                            var container = me.container, doc = me.container.ownerDocument || me.container.document;
                            snapplugin = doc.createElement("object");
                            try {
                                snapplugin.type = "application/x-pluginbaidusnap"
                            } catch (e) {
                                return
                            }
                            snapplugin.style.cssText = "position:absolute;left:-9999px;width:0;height:0;", snapplugin.setAttribute("width", "0"), snapplugin.setAttribute("height", "0"), container.appendChild(snapplugin)
                        }
                        url = me.getActionUrl(me.getOpt("snapscreenActionName")), local = getLocation(url), setTimeout(function () {
                            try {
                                res = snapplugin.saveSnapshot(local.hostname, local.path, local.port)
                            } catch (a) {
                                return void me.ui._dialogs.snapscreenDialog.open()
                            }
                            onSuccess(res)
                        }, 50)
                    }, queryCommandState: function () {
                        return -1 != navigator.userAgent.indexOf("Windows", 0) ? 0 : -1
                    }
                }
            }
        }
    }), UE.commands.insertparagraph = {
        execCommand: function (a, b) {
            for (var c, d = this, e = d.selection.getRange(), f = e.startContainer; f && !domUtils.isBody(f);)c = f, f = f.parentNode;
            if (c) {
                var g = d.document.createElement("p");
                b ? c.parentNode.insertBefore(g, c) : c.parentNode.insertBefore(g, c.nextSibling), domUtils.fillNode(d.document, g), e.setStart(g, 0).setCursor(!1, !0)
            }
        }
    }, UE.plugin.register("webapp", function () {
        function a(a, c) {
            return c ? '<iframe class="edui-faked-webapp" title="' + a.title + '" ' + (a.align && !a.cssfloat ? 'align="' + a.align + '"' : "") + (a.cssfloat ? 'style="float:' + a.cssfloat + '"' : "") + 'width="' + a.width + '" height="' + a.height + '"  scrolling="no" frameborder="0" src="' + a.url + '" logo_url = "' + a.logo + '"></iframe>' : '<img title="' + a.title + '" width="' + a.width + '" height="' + a.height + '" src="' + b.options.UEDITOR_HOME_URL + 'themes/default/images/spacer.gif" _logo_url="' + a.logo + '" style="background:url(' + a.logo + ') no-repeat center center; border:1px solid gray;" class="edui-faked-webapp" _url="' + a.url + '" ' + (a.align && !a.cssfloat ? 'align="' + a.align + '"' : "") + (a.cssfloat ? 'style="float:' + a.cssfloat + '"' : "") + "/>"
        }

        var b = this;
        return {
            outputRule: function (b) {
                utils.each(b.getNodesByTagName("img"), function (b) {
                    var c;
                    if ("edui-faked-webapp" == b.getAttr("class")) {
                        c = a({
                            title: b.getAttr("title"),
                            width: b.getAttr("width"),
                            height: b.getAttr("height"),
                            align: b.getAttr("align"),
                            cssfloat: b.getStyle("float"),
                            url: b.getAttr("_url"),
                            logo: b.getAttr("_logo_url")
                        }, !0);
                        var d = UE.uNode.createElement(c);
                        b.parentNode.replaceChild(d, b)
                    }
                })
            }, inputRule: function (b) {
                utils.each(b.getNodesByTagName("iframe"), function (b) {
                    if ("edui-faked-webapp" == b.getAttr("class")) {
                        var c = UE.uNode.createElement(a({
                            title: b.getAttr("title"),
                            width: b.getAttr("width"),
                            height: b.getAttr("height"),
                            align: b.getAttr("align"),
                            cssfloat: b.getStyle("float"),
                            url: b.getAttr("src"),
                            logo: b.getAttr("logo_url")
                        }));
                        b.parentNode.replaceChild(c, b)
                    }
                })
            }, commands: {
                webapp: {
                    execCommand: function (b, c) {
                        var d = this, e = a(utils.extend(c, {align: "none"}), !1);
                        d.execCommand("inserthtml", e)
                    }, queryCommandState: function () {
                        var a = this, b = a.selection.getRange().getClosedNode(), c = b && "edui-faked-webapp" == b.className;
                        return c ? 1 : 0
                    }
                }
            }
        }
    }), UE.plugins.template = function () {
        UE.commands.template = {
            execCommand: function (a, b) {
                b.html && this.execCommand("inserthtml", b.html)
            }
        }, this.addListener("click", function (a, b) {
            var c = b.target || b.srcElement, d = this.selection.getRange(), e = domUtils.findParent(c, function (a) {
                return a.className && domUtils.hasClass(a, "ue_t") ? a : void 0
            }, !0);
            e && d.selectNode(e).shrinkBoundary().select()
        }), this.addListener("keydown", function (a, b) {
            var c = this.selection.getRange();
            if (!c.collapsed && !(b.ctrlKey || b.metaKey || b.shiftKey || b.altKey)) {
                var d = domUtils.findParent(c.startContainer, function (a) {
                    return a.className && domUtils.hasClass(a, "ue_t") ? a : void 0
                }, !0);
                d && domUtils.removeClasses(d, ["ue_t"])
            }
        })
    }, UE.plugin.register("music", function () {
        function a(a, c, d, e, f, g) {
            return g ? '<embed type="application/x-shockwave-flash" class="edui-faked-music" pluginspage="http://www.macromedia.com/go/getflashplayer" src="' + a + '" width="' + c + '" height="' + d + '" ' + (e && !f ? 'align="' + e + '"' : "") + (f ? 'style="float:' + f + '"' : "") + ' wmode="transparent" play="true" loop="false" menu="false" allowscriptaccess="never" allowfullscreen="true" >' : "<img " + (e && !f ? 'align="' + e + '"' : "") + (f ? 'style="float:' + f + '"' : "") + ' width="' + c + '" height="' + d + '" _url="' + a + '" class="edui-faked-music" src="' + b.options.langPath + b.options.lang + '/images/music.png" />'
        }

        var b = this;
        return {
            outputRule: function (b) {
                utils.each(b.getNodesByTagName("img"), function (b) {
                    var c;
                    if ("edui-faked-music" == b.getAttr("class")) {
                        var d = b.getStyle("float"), e = b.getAttr("align");
                        c = a(b.getAttr("_url"), b.getAttr("width"), b.getAttr("height"), e, d, !0);
                        var f = UE.uNode.createElement(c);
                        b.parentNode.replaceChild(f, b)
                    }
                })
            }, inputRule: function (b) {
                utils.each(b.getNodesByTagName("embed"), function (b) {
                    if ("edui-faked-music" == b.getAttr("class")) {
                        var c = b.getStyle("float"), d = b.getAttr("align");
                        html = a(b.getAttr("src"), b.getAttr("width"), b.getAttr("height"), d, c, !1);
                        var e = UE.uNode.createElement(html);
                        b.parentNode.replaceChild(e, b)
                    }
                })
            }, commands: {
                music: {
                    execCommand: function (b, c) {
                        var d = this, e = a(c.url, c.width || 400, c.height || 95, "none", !1);
                        d.execCommand("inserthtml", e)
                    }, queryCommandState: function () {
                        var a = this, b = a.selection.getRange().getClosedNode(), c = b && "edui-faked-music" == b.className;
                        return c ? 1 : 0
                    }
                }
            }
        }
    }), UE.plugin.register("autoupload", function () {
        function a(a, b) {
            var c, d, e, f, g, h, i, j, k = b, l = /image\/\w+/i.test(a.type) ? "image" : "file", m = "loading_" + (+new Date).toString(36);
            if (c = k.getOpt(l + "FieldName"), d = k.getOpt(l + "UrlPrefix"), e = k.getOpt(l + "MaxSize"), f = k.getOpt(l + "AllowFiles"), g = k.getActionUrl(k.getOpt(l + "ActionName")), i = function (a) {
                    var b = k.document.getElementById(m);
                    b && domUtils.remove(b), k.fireEvent("showmessage", {
                        id: m,
                        content: a,
                        type: "error",
                        timeout: 4e3
                    })
                }, "image" == l ? (h = '<img class="loadingclass" id="' + m + '" src="' + k.options.themePath + k.options.theme + '/images/spacer.gif" title="' + (k.getLang("autoupload.loading") || "") + '" >', j = function (a) {
                    var b = d + a.url, c = k.document.getElementById(m);
                    c && (c.setAttribute("src", b), c.setAttribute("_src", b), c.setAttribute("title", a.title || ""), c.setAttribute("alt", a.original || ""), c.removeAttribute("id"), domUtils.removeClasses(c, "loadingclass"))
                }) : (h = '<p><img class="loadingclass" id="' + m + '" src="' + k.options.themePath + k.options.theme + '/images/spacer.gif" title="' + (k.getLang("autoupload.loading") || "") + '" ></p>', j = function (a) {
                    var b = d + a.url, c = k.document.getElementById(m), e = k.selection.getRange(), f = e.createBookmark();
                    e.selectNode(c).select(), k.execCommand("insertfile", {url: b}), e.moveToBookmark(f).select()
                }), k.execCommand("inserthtml", h), !k.getOpt(l + "ActionName"))return void i(k.getLang("autoupload.errorLoadConfig"));
            if (a.size > e)return void i(k.getLang("autoupload.exceedSizeError"));
            var n = a.name ? a.name.substr(a.name.lastIndexOf(".")) : "";
            if (n && "image" != l || f && -1 == (f.join("") + ".").indexOf(n.toLowerCase() + "."))return void i(k.getLang("autoupload.exceedTypeError"));
            var o = new XMLHttpRequest, p = new FormData, q = utils.serializeParam(k.queryCommandValue("serverparam")) || "", r = utils.formatUrl(g + (-1 == g.indexOf("?") ? "?" : "&") + q);
            p.append(c, a, a.name || "blob." + a.type.substr("image/".length)), p.append("type", "ajax"), o.open("post", r, !0), o.setRequestHeader("X-Requested-With", "XMLHttpRequest"), o.addEventListener("load", function (a) {
                try {
                    var b = new Function("return " + utils.trim(a.target.response))();
                    "SUCCESS" == b.state && b.url ? j(b) : i(b.state)
                } catch (c) {
                    i(k.getLang("autoupload.loadError"))
                }
            }), o.send(p)
        }

        function b(a) {
            return a.clipboardData && a.clipboardData.items && 1 == a.clipboardData.items.length && /^image\//.test(a.clipboardData.items[0].type) ? a.clipboardData.items : null
        }

        function c(a) {
            return a.dataTransfer && a.dataTransfer.files ? a.dataTransfer.files : null
        }

        return {
            outputRule: function (a) {
                utils.each(a.getNodesByTagName("img"), function (a) {
                    /\b(loaderrorclass)|(bloaderrorclass)\b/.test(a.getAttr("class")) && a.parentNode.removeChild(a)
                }), utils.each(a.getNodesByTagName("p"), function (a) {
                    /\bloadpara\b/.test(a.getAttr("class")) && a.parentNode.removeChild(a)
                })
            }, bindEvents: {
                ready: function (d) {
                    var e = this;
                    window.FormData && window.FileReader && (domUtils.on(e.body, "paste drop", function (d) {
                        var f, g = !1;
                        if (f = "paste" == d.type ? b(d) : c(d)) {
                            for (var h, i = f.length; i--;)h = f[i], h.getAsFile && (h = h.getAsFile()), h && h.size > 0 && (a(h, e), g = !0);
                            g && d.preventDefault()
                        }
                    }), domUtils.on(e.body, "dragover", function (a) {
                        "Files" == a.dataTransfer.types[0] && a.preventDefault()
                    }), utils.cssRule("loading", ".loadingclass{display:inline-block;cursor:default;background: url('" + this.options.themePath + this.options.theme + "/images/loading.gif') no-repeat center center transparent;border:1px solid #cccccc;margin-left:1px;height: 22px;width: 22px;}\n.loaderrorclass{display:inline-block;cursor:default;background: url('" + this.options.themePath + this.options.theme + "/images/loaderror.png') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}", this.document))
                }
            }
        }
    }), UE.plugin.register("autosave", function () {
        function a(a) {
            var f;
            if (!(new Date - c < d)) {
                if (!a.hasContents())return void(e && b.removePreferences(e));
                c = new Date, a._saveFlag = null, f = b.body.innerHTML, a.fireEvent("beforeautosave", {content: f}) !== !1 && (b.setPreferences(e, f), a.fireEvent("afterautosave", {content: f}))
            }
        }

        var b = this, c = new Date, d = 20, e = null;
        return {
            defaultOptions: {saveInterval: 500}, bindEvents: {
                ready: function () {
                    var a = "-drafts-data", c = null;
                    c = b.key ? b.key + a : (b.container.parentNode.id || "ue-common") + a, e = (location.protocol + location.host + location.pathname).replace(/[.:\/]/g, "_") + c
                }, contentchange: function () {
                    e && (b._saveFlag && window.clearTimeout(b._saveFlag), b.options.saveInterval > 0 ? b._saveFlag = window.setTimeout(function () {
                        a(b)
                    }, b.options.saveInterval) : a(b))
                }
            }, commands: {
                clearlocaldata: {
                    execCommand: function (a, c) {
                        e && b.getPreferences(e) && b.removePreferences(e)
                    }, notNeedUndo: !0, ignoreContentChange: !0
                }, getlocaldata: {
                    execCommand: function (a, c) {
                        return e ? b.getPreferences(e) || "" : ""
                    }, notNeedUndo: !0, ignoreContentChange: !0
                }, drafts: {
                    execCommand: function (a, c) {
                        e && (b.body.innerHTML = b.getPreferences(e) || "<p>" + domUtils.fillHtml + "</p>", b.focus(!0))
                    }, queryCommandState: function () {
                        return e ? null === b.getPreferences(e) ? -1 : 0 : -1
                    }, notNeedUndo: !0, ignoreContentChange: !0
                }
            }
        }
    }), UE.plugin.register("charts", function () {
        function a(a) {
            var b = null, c = 0;
            if (a.rows.length < 2)return !1;
            if (a.rows[0].cells.length < 2)return !1;
            b = a.rows[0].cells, c = b.length;
            for (var d, e = 0; d = b[e]; e++)if ("th" !== d.tagName.toLowerCase())return !1;
            for (var f, e = 1; f = a.rows[e]; e++) {
                if (f.cells.length != c)return !1;
                if ("th" !== f.cells[0].tagName.toLowerCase())return !1;
                for (var d, g = 1; d = f.cells[g]; g++) {
                    var h = utils.trim(d.innerText || d.textContent || "");
                    if (h = h.replace(new RegExp(UE.dom.domUtils.fillChar, "g"), "").replace(/^\s+|\s+$/g, ""), !/^\d*\.?\d+$/.test(h))return !1
                }
            }
            return !0
        }

        var b = this;
        return {
            bindEvents: {
                chartserror: function () {
                }
            }, commands: {
                charts: {
                    execCommand: function (c, d) {
                        var e = domUtils.findParentByTagName(this.selection.getRange().startContainer, "table", !0), f = [], g = {};
                        if (!e)return !1;
                        if (!a(e))return b.fireEvent("chartserror"), !1;
                        g.title = d.title || "", g.subTitle = d.subTitle || "", g.xTitle = d.xTitle || "", g.yTitle = d.yTitle || "", g.suffix = d.suffix || "", g.tip = d.tip || "", g.dataFormat = d.tableDataFormat || "", g.chartType = d.chartType || 0;
                        for (var h in g)g.hasOwnProperty(h) && f.push(h + ":" + g[h]);
                        e.setAttribute("data-chart", f.join(";")), domUtils.addClass(e, "edui-charts-table");
                    }, queryCommandState: function (b, c) {
                        var d = domUtils.findParentByTagName(this.selection.getRange().startContainer, "table", !0);
                        return d && a(d) ? 0 : -1
                    }
                }
            }, inputRule: function (a) {
                utils.each(a.getNodesByTagName("table"), function (a) {
                    void 0 !== a.getAttr("data-chart") && a.setAttr("style")
                })
            }, outputRule: function (a) {
                utils.each(a.getNodesByTagName("table"), function (a) {
                    void 0 !== a.getAttr("data-chart") && a.setAttr("style", "display: none;")
                })
            }
        }
    }), UE.plugin.register("section", function () {
        function a(a) {
            this.tag = "", this.level = -1, this.dom = null, this.nextSection = null, this.previousSection = null, this.parentSection = null, this.startAddress = [], this.endAddress = [], this.children = []
        }

        function b(b) {
            var c = new a;
            return utils.extend(c, b)
        }

        function c(a, b) {
            for (var c = b, d = 0; d < a.length; d++) {
                if (!c.childNodes)return null;
                c = c.childNodes[a[d]]
            }
            return c
        }

        var d = this;
        return {
            bindMultiEvents: {
                type: "aftersetcontent afterscencerestore", handler: function () {
                    d.fireEvent("updateSections")
                }
            }, bindEvents: {
                ready: function () {
                    d.fireEvent("updateSections"), domUtils.on(d.body, "drop paste", function () {
                        d.fireEvent("updateSections")
                    })
                }, afterexeccommand: function (a, b) {
                    "paragraph" == b && d.fireEvent("updateSections")
                }, keyup: function (a, b) {
                    var c = this, d = c.selection.getRange();
                    if (1 != d.collapsed)c.fireEvent("updateSections"); else {
                        var e = b.keyCode || b.which;
                        13 != e && 8 != e && 46 != e || c.fireEvent("updateSections")
                    }
                }
            }, commands: {
                getsections: {
                    execCommand: function (a, c) {
                        function d(a) {
                            for (var b = 0; b < f.length; b++)if (f[b](a))return b;
                            return -1
                        }

                        function e(a, c) {
                            for (var f, g, i, k = null, l = a.childNodes, m = 0, n = l.length; n > m; m++)if (i = l[m], f = d(i), f >= 0) {
                                var o = h.selection.getRange().selectNode(i).createAddress(!0).startAddress, p = b({
                                    tag: i.tagName,
                                    title: i.innerText || i.textContent || "",
                                    level: f,
                                    dom: i,
                                    startAddress: utils.clone(o, []),
                                    endAddress: utils.clone(o, []),
                                    children: []
                                });
                                for (j.nextSection = p, p.previousSection = j, g = j; f <= g.level;)g = g.parentSection;
                                p.parentSection = g, g.children.push(p), k = j = p
                            } else 1 === i.nodeType && e(i, c), k && k.endAddress[k.endAddress.length - 1]++
                        }

                        for (var f = c || ["h1", "h2", "h3", "h4", "h5", "h6"], g = 0; g < f.length; g++)"string" == typeof f[g] ? f[g] = function (a) {
                            return function (b) {
                                return b.tagName == a.toUpperCase()
                            }
                        }(f[g]) : "function" != typeof f[g] && (f[g] = function (a) {
                            return null
                        });
                        var h = this, i = b({level: -1, title: "root"}), j = i;
                        return e(h.body, i), i
                    }, notNeedUndo: !0
                }, movesection: {
                    execCommand: function (a, b, d, e) {
                        function f(a, b, c) {
                            for (var d = !1, e = !1, f = 0; f < a.length && !(f >= c.length); f++) {
                                if (c[f] > a[f]) {
                                    d = !0;
                                    break
                                }
                                if (c[f] < a[f])break
                            }
                            for (var f = 0; f < b.length && !(f >= c.length); f++) {
                                if (c[f] < a[f]) {
                                    e = !0;
                                    break
                                }
                                if (c[f] > a[f])break
                            }
                            return d && e
                        }

                        var g, h, i = this;
                        if (b && d && -1 != d.level && (g = e ? d.endAddress : d.startAddress, h = c(g, i.body), g && h && !f(b.startAddress, b.endAddress, g))) {
                            var j, k, l = c(b.startAddress, i.body), m = c(b.endAddress, i.body);
                            if (e)for (j = m; j && !(domUtils.getPosition(l, j) & domUtils.POSITION_FOLLOWING) && (k = j.previousSibling, domUtils.insertAfter(h, j), j != l);)j = k; else for (j = l; j && !(domUtils.getPosition(j, m) & domUtils.POSITION_FOLLOWING) && (k = j.nextSibling, h.parentNode.insertBefore(j, h), j != m);)j = k;
                            i.fireEvent("updateSections")
                        }
                    }
                }, deletesection: {
                    execCommand: function (a, b, c) {
                        function d(a) {
                            for (var b = e.body, c = 0; c < a.length; c++) {
                                if (!b.childNodes)return null;
                                b = b.childNodes[a[c]]
                            }
                            return b
                        }

                        var e = this;
                        if (b) {
                            var f, g = d(b.startAddress), h = d(b.endAddress), i = g;
                            if (c)domUtils.remove(i); else for (; i && domUtils.inDoc(h, e.document) && !(domUtils.getPosition(i, h) & domUtils.POSITION_FOLLOWING);)f = i.nextSibling, domUtils.remove(i), i = f;
                            e.fireEvent("updateSections")
                        }
                    }
                }, selectsection: {
                    execCommand: function (a, b) {
                        if (!b && !b.dom)return !1;
                        var c = this, d = c.selection.getRange(), e = {
                            startAddress: utils.clone(b.startAddress, []),
                            endAddress: utils.clone(b.endAddress, [])
                        };
                        return e.endAddress[e.endAddress.length - 1]++, d.moveToAddress(e).select().scrollToView(), !0
                    }, notNeedUndo: !0
                }, scrolltosection: {
                    execCommand: function (a, b) {
                        if (!b && !b.dom)return !1;
                        var c = this, d = c.selection.getRange(), e = {
                            startAddress: b.startAddress,
                            endAddress: b.endAddress
                        };
                        return e.endAddress[e.endAddress.length - 1]++, d.moveToAddress(e).scrollToView(), !0
                    }, notNeedUndo: !0
                }
            }
        }
    }), UE.plugin.register("simpleupload", function () {
        function a() {
            var a = b.offsetWidth || 20, e = b.offsetHeight || 20, f = document.createElement("iframe"), g = "display:block;width:" + a + "px;height:" + e + "px;overflow:hidden;border:0;margin:0;padding:0;position:absolute;top:0;left:0;filter:alpha(opacity=0);-moz-opacity:0;-khtml-opacity: 0;opacity: 0;cursor:pointer;";
            domUtils.on(f, "load", function () {
                var b, h, i, j = (+new Date).toString(36);
                h = f.contentDocument || f.contentWindow.document, i = h.body, b = h.createElement("div"), b.innerHTML = '<form id="edui_form_' + j + '" target="edui_iframe_' + j + '" method="POST" enctype="multipart/form-data" action="' + c.getOpt("serverUrl") + '" style="' + g + '"><input id="edui_input_' + j + '" type="file" accept="image/*" name="' + c.options.imageFieldName + '" style="' + g + '"></form><iframe id="edui_iframe_' + j + '" name="edui_iframe_' + j + '" style="display:none;width:0;height:0;border:0;margin:0;padding:0;position:absolute;"></iframe>', b.className = "edui-" + c.options.theme, b.id = c.ui.id + "_iframeupload", i.style.cssText = g, i.style.width = a + "px", i.style.height = e + "px", i.appendChild(b), i.parentNode && (i.parentNode.style.width = a + "px", i.parentNode.style.height = a + "px");
                var k = h.getElementById("edui_form_" + j), l = h.getElementById("edui_input_" + j), m = h.getElementById("edui_iframe_" + j);
                domUtils.on(l, "change", function () {
                    function a() {
                        try {
                            var e, f, g, h = (m.contentDocument || m.contentWindow.document).body, i = h.innerText || h.textContent || "";
                            f = new Function("return " + i)(), e = c.options.imageUrlPrefix + f.url, "SUCCESS" == f.state && f.url ? (g = c.document.getElementById(d), g.setAttribute("src", e), g.setAttribute("_src", e), g.setAttribute("title", f.title || ""), g.setAttribute("alt", f.original || ""), g.removeAttribute("id"), domUtils.removeClasses(g, "loadingclass")) : b && b(f.state)
                        } catch (j) {
                            b && b(c.getLang("simpleupload.loadError"))
                        }
                        k.reset(), domUtils.un(m, "load", a)
                    }

                    function b(a) {
                        if (d) {
                            var b = c.document.getElementById(d);
                            b && domUtils.remove(b), c.fireEvent("showmessage", {
                                id: d,
                                content: a,
                                type: "error",
                                timeout: 4e3
                            })
                        }
                    }

                    if (l.value) {
                        var d = "loading_" + (+new Date).toString(36), e = utils.serializeParam(c.queryCommandValue("serverparam")) || "", f = c.getActionUrl(c.getOpt("imageActionName")), g = c.getOpt("imageAllowFiles");
                        if (c.focus(), c.execCommand("inserthtml", '<img class="loadingclass" id="' + d + '" src="' + c.options.themePath + c.options.theme + '/images/spacer.gif" title="' + (c.getLang("simpleupload.loading") || "") + '" >'), !c.getOpt("imageActionName"))return void errorHandler(c.getLang("autoupload.errorLoadConfig"));
                        var h = l.value, i = h ? h.substr(h.lastIndexOf(".")) : "";
                        if (!i || g && -1 == (g.join("") + ".").indexOf(i.toLowerCase() + "."))return void b(c.getLang("simpleupload.exceedTypeError"));
                        domUtils.on(m, "load", a), k.action = utils.formatUrl(f + (-1 == f.indexOf("?") ? "?" : "&") + e), k.submit()
                    }
                });
                var n;
                c.addListener("selectionchange", function () {
                    clearTimeout(n), n = setTimeout(function () {
                        var a = c.queryCommandState("simpleupload");
                        -1 == a ? l.disabled = "disabled" : l.disabled = !1
                    }, 400)
                }), d = !0
            }), f.style.cssText = g, b.appendChild(f)
        }

        var b, c = this, d = !1;
        return {
            bindEvents: {
                ready: function () {
                    utils.cssRule("loading", ".loadingclass{display:inline-block;cursor:default;background: url('" + this.options.themePath + this.options.theme + "/images/loading.gif') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}\n.loaderrorclass{display:inline-block;cursor:default;background: url('" + this.options.themePath + this.options.theme + "/images/loaderror.png') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}", this.document)
                }, simpleuploadbtnready: function (d, e) {
                    b = e, c.afterConfigReady(a)
                }
            }, outputRule: function (a) {
                utils.each(a.getNodesByTagName("img"), function (a) {
                    /\b(loaderrorclass)|(bloaderrorclass)\b/.test(a.getAttr("class")) && a.parentNode.removeChild(a)
                })
            }, commands: {
                simpleupload: {
                    queryCommandState: function () {
                        return d ? 0 : -1
                    }
                }
            }
        }
    }), UE.plugin.register("serverparam", function () {
        var a = {};
        return {
            commands: {
                serverparam: {
                    execCommand: function (b, c, d) {
                        void 0 === c || null === c ? a = {} : utils.isString(c) ? void 0 === d || null === d ? delete a[c] : a[c] = d : utils.isObject(c) ? utils.extend(a, c, !0) : utils.isFunction(c) && utils.extend(a, c(), !0)
                    }, queryCommandValue: function () {
                        return a || {}
                    }
                }
            }
        }
    }), UE.plugin.register("insertfile", function () {
        function a(a) {
            var b = a.substr(a.lastIndexOf(".") + 1).toLowerCase(), c = {
                rar: "icon_rar.gif",
                zip: "icon_rar.gif",
                tar: "icon_rar.gif",
                gz: "icon_rar.gif",
                bz2: "icon_rar.gif",
                doc: "icon_doc.gif",
                docx: "icon_doc.gif",
                pdf: "icon_pdf.gif",
                mp3: "icon_mp3.gif",
                xls: "icon_xls.gif",
                chm: "icon_chm.gif",
                ppt: "icon_ppt.gif",
                pptx: "icon_ppt.gif",
                avi: "icon_mv.gif",
                rmvb: "icon_mv.gif",
                wmv: "icon_mv.gif",
                flv: "icon_mv.gif",
                swf: "icon_mv.gif",
                rm: "icon_mv.gif",
                exe: "icon_exe.gif",
                psd: "icon_psd.gif",
                txt: "icon_txt.gif",
                jpg: "icon_jpg.gif",
                png: "icon_jpg.gif",
                jpeg: "icon_jpg.gif",
                gif: "icon_jpg.gif",
                ico: "icon_jpg.gif",
                bmp: "icon_jpg.gif"
            };
            return c[b] ? c[b] : c.txt
        }

        var b = this;
        return {
            commands: {
                insertfile: {
                    execCommand: function (c, d) {
                        d = utils.isArray(d) ? d : [d];
                        var e, f, g, h, i = "", j = b.getOpt("UEDITOR_HOME_URL"), k = j + ("/" == j.substr(j.length - 1) ? "" : "/") + "dialogs/attachment/fileTypeImages/";
                        for (e = 0; e < d.length; e++)f = d[e], g = k + a(f.url), h = f.title || f.url.substr(f.url.lastIndexOf("/") + 1), i += '<p style="line-height: 16px;"><img style="vertical-align: middle; margin-right: 2px;" src="' + g + '" _src="' + g + '" /><a style="font-size:12px; color:#0066cc;" href="' + f.url + '" title="' + h + '">' + h + "</a></p>";
                        b.execCommand("insertHtml", i)
                    }
                }
            }
        }
    }), UE.plugins.xssFilter = function () {
        function a(a) {
            var b = a.tagName, d = a.attrs;
            return c.hasOwnProperty(b) ? void UE.utils.each(d, function (d, e) {
                -1 === c[b].indexOf(e) && a.setAttr(e)
            }) : (a.parentNode.removeChild(a), !1)
        }

        var b = UEDITOR_CONFIG, c = b.whitList;
        c && b.xssFilterRules && (this.options.filterRules = function () {
            var b = {};
            return UE.utils.each(c, function (c, d) {
                b[d] = function (b) {
                    return a(b)
                }
            }), b
        }());
        var d = [];
        UE.utils.each(c, function (a, b) {
            d.push(b)
        }), c && b.inputXssFilter && this.addInputRule(function (b) {
            b.traversal(function (b) {
                return "element" !== b.type ? !1 : void a(b)
            })
        }), c && b.outputXssFilter && this.addOutputRule(function (b) {
            b.traversal(function (b) {
                return "element" !== b.type ? !1 : void a(b)
            })
        })
    };
    var baidu = baidu || {};
    baidu.editor = baidu.editor || {}, UE.ui = baidu.editor.ui = {}, function () {
        function a() {
            var a = document.getElementById("edui_fixedlayer");
            i.setViewportOffset(a, {left: 0, top: 0})
        }

        function b(b) {
            d.on(window, "scroll", a), d.on(window, "resize", baidu.editor.utils.defer(a, 0, !0))
        }

        var c = baidu.editor.browser, d = baidu.editor.dom.domUtils, e = "$EDITORUI", f = window[e] = {}, g = "ID" + e, h = 0, i = baidu.editor.ui.uiUtils = {
            uid: function (a) {
                return a ? a[g] || (a[g] = ++h) : ++h
            }, hook: function (a, b) {
                var c;
                return a && a._callbacks ? c = a : (c = function () {
                    var b;
                    a && (b = a.apply(this, arguments));
                    for (var d = c._callbacks, e = d.length; e--;) {
                        var f = d[e].apply(this, arguments);
                        void 0 === b && (b = f)
                    }
                    return b
                }, c._callbacks = []), c._callbacks.push(b), c
            }, createElementByHtml: function (a) {
                var b = document.createElement("div");
                return b.innerHTML = a, b = b.firstChild, b.parentNode.removeChild(b), b
            }, getViewportElement: function () {
                return c.ie && c.quirks ? document.body : document.documentElement
            }, getClientRect: function (a) {
                var b;
                try {
                    b = a.getBoundingClientRect()
                } catch (c) {
                    b = {left: 0, top: 0, height: 0, width: 0}
                }
                for (var e, f = {
                    left: Math.round(b.left),
                    top: Math.round(b.top),
                    height: Math.round(b.bottom - b.top),
                    width: Math.round(b.right - b.left)
                }; (e = a.ownerDocument) !== document && (a = d.getWindow(e).frameElement);)b = a.getBoundingClientRect(), f.left += b.left, f.top += b.top;
                return f.bottom = f.top + f.height, f.right = f.left + f.width, f
            }, getViewportRect: function () {
                var a = i.getViewportElement(), b = 0 | (window.innerWidth || a.clientWidth), c = 0 | (window.innerHeight || a.clientHeight);
                return {left: 0, top: 0, height: c, width: b, bottom: c, right: b}
            }, setViewportOffset: function (a, b) {
                var c = i.getFixedLayer();
                a.parentNode === c ? (a.style.left = b.left + "px", a.style.top = b.top + "px") : d.setViewportOffset(a, b)
            }, getEventOffset: function (a) {
                var b = a.target || a.srcElement, c = i.getClientRect(b), d = i.getViewportOffsetByEvent(a);
                return {left: d.left - c.left, top: d.top - c.top}
            }, getViewportOffsetByEvent: function (a) {
                var b = a.target || a.srcElement, c = d.getWindow(b).frameElement, e = {
                    left: a.clientX,
                    top: a.clientY
                };
                if (c && b.ownerDocument !== document) {
                    var f = i.getClientRect(c);
                    e.left += f.left, e.top += f.top
                }
                return e
            }, setGlobal: function (a, b) {
                return f[a] = b, e + '["' + a + '"]'
            }, unsetGlobal: function (a) {
                delete f[a]
            }, copyAttributes: function (a, b) {
                for (var e = b.attributes, f = e.length; f--;) {
                    var g = e[f];
                    "style" == g.nodeName || "class" == g.nodeName || c.ie && !g.specified || a.setAttribute(g.nodeName, g.nodeValue)
                }
                b.className && d.addClass(a, b.className), b.style.cssText && (a.style.cssText += ";" + b.style.cssText)
            }, removeStyle: function (a, b) {
                if (a.style.removeProperty)a.style.removeProperty(b); else {
                    if (!a.style.removeAttribute)throw"";
                    a.style.removeAttribute(b)
                }
            }, contains: function (a, b) {
                return a && b && (a === b ? !1 : a.contains ? a.contains(b) : 16 & a.compareDocumentPosition(b))
            }, startDrag: function (a, b, c) {
                function d(a) {
                    var c = a.clientX - g, d = a.clientY - h;
                    b.ondragmove(c, d, a), a.stopPropagation ? a.stopPropagation() : a.cancelBubble = !0
                }

                function e(a) {
                    c.removeEventListener("mousemove", d, !0), c.removeEventListener("mouseup", e, !0), window.removeEventListener("mouseup", e, !0), b.ondragstop()
                }

                function f() {
                    i.releaseCapture(), i.detachEvent("onmousemove", d), i.detachEvent("onmouseup", f), i.detachEvent("onlosecaptrue", f), b.ondragstop()
                }

                var c = c || document, g = a.clientX, h = a.clientY;
                if (c.addEventListener)c.addEventListener("mousemove", d, !0), c.addEventListener("mouseup", e, !0), window.addEventListener("mouseup", e, !0), a.preventDefault(); else {
                    var i = a.srcElement;
                    i.setCapture(), i.attachEvent("onmousemove", d), i.attachEvent("onmouseup", f), i.attachEvent("onlosecaptrue", f), a.returnValue = !1
                }
                b.ondragstart()
            }, getFixedLayer: function () {
                var d = document.getElementById("edui_fixedlayer");
                return null == d && (d = document.createElement("div"), d.id = "edui_fixedlayer", document.body.appendChild(d), c.ie && c.version <= 8 ? (d.style.position = "absolute", b(), setTimeout(a)) : d.style.position = "fixed", d.style.left = "0", d.style.top = "0", d.style.width = "0", d.style.height = "0"), d
            }, makeUnselectable: function (a) {
                if (c.opera || c.ie && c.version < 9) {
                    if (a.unselectable = "on", a.hasChildNodes())for (var b = 0; b < a.childNodes.length; b++)1 == a.childNodes[b].nodeType && i.makeUnselectable(a.childNodes[b])
                } else void 0 !== a.style.MozUserSelect ? a.style.MozUserSelect = "none" : void 0 !== a.style.WebkitUserSelect ? a.style.WebkitUserSelect = "none" : void 0 !== a.style.KhtmlUserSelect && (a.style.KhtmlUserSelect = "none")
            }
        }
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.uiUtils, c = baidu.editor.EventBase, d = baidu.editor.ui.UIBase = function () {
        };
        d.prototype = {
            className: "", uiName: "", initOptions: function (a) {
                var c = this;
                for (var d in a)c[d] = a[d];
                this.id = this.id || "edui" + b.uid()
            }, initUIBase: function () {
                this._globalKey = a.unhtml(b.setGlobal(this.id, this))
            }, render: function (a) {
                for (var c, d = this.renderHtml(), e = b.createElementByHtml(d), f = domUtils.getElementsByTagName(e, "*"), g = "edui-" + (this.theme || this.editor.options.theme), h = document.getElementById("edui_fixedlayer"), i = 0; c = f[i++];)domUtils.addClass(c, g);
                domUtils.addClass(e, g), h && (h.className = "", domUtils.addClass(h, g));
                var j = this.getDom();
                null != j ? (j.parentNode.replaceChild(e, j), b.copyAttributes(e, j)) : ("string" == typeof a && (a = document.getElementById(a)), a = a || b.getFixedLayer(), domUtils.addClass(a, g), a.appendChild(e)), this.postRender()
            }, getDom: function (a) {
                return a ? document.getElementById(this.id + "_" + a) : document.getElementById(this.id)
            }, postRender: function () {
                this.fireEvent("postrender")
            }, getHtmlTpl: function () {
                return ""
            }, formatHtml: function (a) {
                var b = "edui-" + this.uiName;
                return a.replace(/##/g, this.id).replace(/%%-/g, this.uiName ? b + "-" : "").replace(/%%/g, (this.uiName ? b : "") + " " + this.className).replace(/\$\$/g, this._globalKey)
            }, renderHtml: function () {
                return this.formatHtml(this.getHtmlTpl())
            }, dispose: function () {
                var a = this.getDom();
                a && baidu.editor.dom.domUtils.remove(a), b.unsetGlobal(this.id)
            }
        }, a.inherits(d, c)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.UIBase, c = baidu.editor.ui.Separator = function (a) {
            this.initOptions(a), this.initSeparator()
        };
        c.prototype = {
            uiName: "separator", initSeparator: function () {
                this.initUIBase()
            }, getHtmlTpl: function () {
                return '<div id="##" class="edui-box %%"></div>'
            }
        }, a.inherits(c, b)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.dom.domUtils, c = baidu.editor.ui.UIBase, d = baidu.editor.ui.uiUtils, e = baidu.editor.ui.Mask = function (a) {
            this.initOptions(a), this.initUIBase()
        };
        e.prototype = {
            getHtmlTpl: function () {
                return '<div id="##" class="edui-mask %%" onclick="return $$._onClick(event, this);" onmousedown="return $$._onMouseDown(event, this);"></div>'
            }, postRender: function () {
                var a = this;
                b.on(window, "resize", function () {
                    setTimeout(function () {
                        a.isHidden() || a._fill()
                    })
                })
            }, show: function (a) {
                this._fill(), this.getDom().style.display = "", this.getDom().style.zIndex = a
            }, hide: function () {
                this.getDom().style.display = "none", this.getDom().style.zIndex = ""
            }, isHidden: function () {
                return "none" == this.getDom().style.display
            }, _onMouseDown: function () {
                return !1
            }, _onClick: function (a, b) {
                this.fireEvent("click", a, b)
            }, _fill: function () {
                var a = this.getDom(), b = d.getViewportRect();
                a.style.width = b.width + "px", a.style.height = b.height + "px"
            }
        }, a.inherits(e, c)
    }(), function () {
        function a(a, b) {
            for (var c = 0; c < g.length; c++) {
                var d = g[c];
                if (!d.isHidden() && d.queryAutoHide(b) !== !1) {
                    if (a && /scroll/gi.test(a.type) && "edui-wordpastepop" == d.className)return;
                    d.hide()
                }
            }
            g.length && d.editor.fireEvent("afterhidepop")
        }

        var b = baidu.editor.utils, c = baidu.editor.ui.uiUtils, d = baidu.editor.dom.domUtils, e = baidu.editor.ui.UIBase, f = baidu.editor.ui.Popup = function (a) {
            this.initOptions(a), this.initPopup()
        }, g = [];
        f.postHide = a;
        var h = ["edui-anchor-topleft", "edui-anchor-topright", "edui-anchor-bottomleft", "edui-anchor-bottomright"];
        f.prototype = {
            SHADOW_RADIUS: 5,
            content: null,
            _hidden: !1,
            autoRender: !0,
            canSideLeft: !0,
            canSideUp: !0,
            initPopup: function () {
                this.initUIBase(), g.push(this)
            },
            getHtmlTpl: function () {
                return '<div id="##" class="edui-popup %%" onmousedown="return false;"> <div id="##_body" class="edui-popup-body"> <iframe style="position:absolute;z-index:-1;left:0;top:0;background-color: transparent;" frameborder="0" width="100%" height="100%" src="about:blank"></iframe> <div class="edui-shadow"></div> <div id="##_content" class="edui-popup-content">' + this.getContentHtmlTpl() + "  </div> </div></div>"
            },
            getContentHtmlTpl: function () {
                return this.content ? "string" == typeof this.content ? this.content : this.content.renderHtml() : ""
            },
            _UIBase_postRender: e.prototype.postRender,
            postRender: function () {
                if (this.content instanceof e && this.content.postRender(), this.captureWheel && !this.captured) {
                    this.captured = !0;
                    var a = (document.documentElement.clientHeight || document.body.clientHeight) - 80, b = this.getDom().offsetHeight, f = c.getClientRect(this.combox.getDom()).top, g = this.getDom("content"), h = this.getDom("body").getElementsByTagName("iframe"), i = this;
                    for (h.length && (h = h[0]); f + b > a;)b -= 30;
                    g.style.height = b + "px", h && (h.style.height = b + "px"), window.XMLHttpRequest ? d.on(g, "onmousewheel" in document.body ? "mousewheel" : "DOMMouseScroll", function (a) {
                        a.preventDefault ? a.preventDefault() : a.returnValue = !1, a.wheelDelta ? g.scrollTop -= a.wheelDelta / 120 * 60 : g.scrollTop -= a.detail / -3 * 60
                    }) : d.on(this.getDom(), "mousewheel", function (a) {
                        a.returnValue = !1, i.getDom("content").scrollTop -= a.wheelDelta / 120 * 60
                    })
                }
                this.fireEvent("postRenderAfter"), this.hide(!0), this._UIBase_postRender()
            },
            _doAutoRender: function () {
                !this.getDom() && this.autoRender && this.render()
            },
            mesureSize: function () {
                var a = this.getDom("content");
                return c.getClientRect(a)
            },
            fitSize: function () {
                if (this.captureWheel && this.sized)return this.__size;
                this.sized = !0;
                var a = this.getDom("body");
                a.style.width = "", a.style.height = "";
                var b = this.mesureSize();
                if (this.captureWheel) {
                    a.style.width = -(-20 - b.width) + "px";
                    var c = parseInt(this.getDom("content").style.height, 10);
                    !window.isNaN(c) && (b.height = c)
                } else a.style.width = b.width + "px";
                return a.style.height = b.height + "px", this.__size = b, this.captureWheel && (this.getDom("content").style.overflow = "auto"), b
            },
            showAnchor: function (a, b) {
                this.showAnchorRect(c.getClientRect(a), b)
            },
            showAnchorRect: function (a, b, e) {
                this._doAutoRender();
                var f = c.getViewportRect();
                this.getDom().style.visibility = "hidden", this._show();
                var g, i, j, k, l = this.fitSize();
                b ? (g = this.canSideLeft && a.right + l.width > f.right && a.left > l.width, i = this.canSideUp && a.top + l.height > f.bottom && a.bottom > l.height, j = g ? a.left - l.width : a.right, k = i ? a.bottom - l.height : a.top) : (g = this.canSideLeft && a.right + l.width > f.right && a.left > l.width, i = this.canSideUp && a.top + l.height > f.bottom && a.bottom > l.height, j = g ? a.right - l.width : a.left, k = i ? a.top - l.height : a.bottom);
                var m = this.getDom();
                c.setViewportOffset(m, {
                    left: j,
                    top: k
                }), d.removeClasses(m, h), m.className += " " + h[2 * (i ? 1 : 0) + (g ? 1 : 0)], this.editor && (m.style.zIndex = 1 * this.editor.container.style.zIndex + 10, baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex = m.style.zIndex - 1), this.getDom().style.visibility = "visible"
            },
            showAt: function (a) {
                var b = a.left, c = a.top, d = {left: b, top: c, right: b, bottom: c, height: 0, width: 0};
                this.showAnchorRect(d, !1, !0)
            },
            _show: function () {
                if (this._hidden) {
                    var a = this.getDom();
                    a.style.display = "", this._hidden = !1, this.fireEvent("show")
                }
            },
            isHidden: function () {
                return this._hidden
            },
            show: function () {
                this._doAutoRender(), this._show()
            },
            hide: function (a) {
                !this._hidden && this.getDom() && (this.getDom().style.display = "none", this._hidden = !0, a || this.fireEvent("hide"))
            },
            queryAutoHide: function (a) {
                return !a || !c.contains(this.getDom(), a)
            }
        }, b.inherits(f, e), d.on(document, "mousedown", function (b) {
            var c = b.target || b.srcElement;
            a(b, c)
        }), d.on(window, "scroll", function (b, c) {
            a(b, c)
        })
    }(), function () {
        function a(a, b) {
            for (var c = '<div id="##" class="edui-colorpicker %%"><div class="edui-colorpicker-topbar edui-clearfix"><div unselectable="on" id="##_preview" class="edui-colorpicker-preview"></div><div unselectable="on" class="edui-colorpicker-nocolor" onclick="$$._onPickNoColor(event, this);">' + a + '</div></div><table  class="edui-box" style="border-collapse: collapse;" onmouseover="$$._onTableOver(event, this);" onmouseout="$$._onTableOut(event, this);" onclick="return $$._onTableClick(event, this);" cellspacing="0" cellpadding="0"><tr style="border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;padding-top: 2px"><td colspan="10">' + b.getLang("themeColor") + '</td> </tr><tr class="edui-colorpicker-tablefirstrow" >', d = 0; d < e.length; d++)d && d % 10 === 0 && (c += "</tr>" + (60 == d ? '<tr style="border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;"><td colspan="10">' + b.getLang("standardColor") + "</td></tr>" : "") + "<tr" + (60 == d ? ' class="edui-colorpicker-tablefirstrow"' : "") + ">"), c += 70 > d ? '<td style="padding: 0 2px;"><a hidefocus title="' + e[d] + '" onclick="return false;" href="javascript:" unselectable="on" class="edui-box edui-colorpicker-colorcell" data-color="#' + e[d] + '" style="background-color:#' + e[d] + ";border:solid #ccc;" + (10 > d || d >= 60 ? "border-width:1px;" : d >= 10 && 20 > d ? "border-width:1px 1px 0 1px;" : "border-width:0 1px 0 1px;") + '"></a></td>' : "";
            return c += "</tr></table></div>"
        }

        var b = baidu.editor.utils, c = baidu.editor.ui.UIBase, d = baidu.editor.ui.ColorPicker = function (a) {
            this.initOptions(a), this.noColorText = this.noColorText || this.editor.getLang("clearColor"), this.initUIBase()
        };
        d.prototype = {
            getHtmlTpl: function () {
                return a(this.noColorText, this.editor)
            }, _onTableClick: function (a) {
                var b = a.target || a.srcElement, c = b.getAttribute("data-color");
                c && this.fireEvent("pickcolor", c)
            }, _onTableOver: function (a) {
                var b = a.target || a.srcElement, c = b.getAttribute("data-color");
                c && (this.getDom("preview").style.backgroundColor = c)
            }, _onTableOut: function () {
                this.getDom("preview").style.backgroundColor = ""
            }, _onPickNoColor: function () {
                this.fireEvent("picknocolor")
            }
        }, b.inherits(d, c);
        var e = "ffffff,000000,eeece1,1f497d,4f81bd,c0504d,9bbb59,8064a2,4bacc6,f79646,f2f2f2,7f7f7f,ddd9c3,c6d9f0,dbe5f1,f2dcdb,ebf1dd,e5e0ec,dbeef3,fdeada,d8d8d8,595959,c4bd97,8db3e2,b8cce4,e5b9b7,d7e3bc,ccc1d9,b7dde8,fbd5b5,bfbfbf,3f3f3f,938953,548dd4,95b3d7,d99694,c3d69b,b2a2c7,92cddc,fac08f,a5a5a5,262626,494429,17365d,366092,953734,76923c,5f497a,31859b,e36c09,7f7f7f,0c0c0c,1d1b10,0f243e,244061,632423,4f6128,3f3151,205867,974806,c00000,ff0000,ffc000,ffff00,92d050,00b050,00b0f0,0070c0,002060,7030a0,".split(",")
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.uiUtils, c = baidu.editor.ui.UIBase, d = baidu.editor.ui.TablePicker = function (a) {
            this.initOptions(a), this.initTablePicker()
        };
        d.prototype = {
            defaultNumRows: 10,
            defaultNumCols: 10,
            maxNumRows: 20,
            maxNumCols: 20,
            numRows: 10,
            numCols: 10,
            lengthOfCellSide: 22,
            initTablePicker: function () {
                this.initUIBase()
            },
            getHtmlTpl: function () {
                return '<div id="##" class="edui-tablepicker %%"><div class="edui-tablepicker-body"><div class="edui-infoarea"><span id="##_label" class="edui-label"></span></div><div class="edui-pickarea" onmousemove="$$._onMouseMove(event, this);" onmouseover="$$._onMouseOver(event, this);" onmouseout="$$._onMouseOut(event, this);" onclick="$$._onClick(event, this);"><div id="##_overlay" class="edui-overlay"></div></div></div></div>'
            },
            _UIBase_render: c.prototype.render,
            render: function (a) {
                this._UIBase_render(a), this.getDom("label").innerHTML = "0" + this.editor.getLang("t_row") + " x 0" + this.editor.getLang("t_col")
            },
            _track: function (a, b) {
                var c = this.getDom("overlay").style, d = this.lengthOfCellSide;
                c.width = a * d + "px", c.height = b * d + "px";
                var e = this.getDom("label");
                e.innerHTML = a + this.editor.getLang("t_col") + " x " + b + this.editor.getLang("t_row"), this.numCols = a, this.numRows = b
            },
            _onMouseOver: function (a, c) {
                var d = a.relatedTarget || a.fromElement;
                b.contains(c, d) || c === d || (this.getDom("label").innerHTML = "0" + this.editor.getLang("t_col") + " x 0" + this.editor.getLang("t_row"), this.getDom("overlay").style.visibility = "")
            },
            _onMouseOut: function (a, c) {
                var d = a.relatedTarget || a.toElement;
                b.contains(c, d) || c === d || (this.getDom("label").innerHTML = "0" + this.editor.getLang("t_col") + " x 0" + this.editor.getLang("t_row"), this.getDom("overlay").style.visibility = "hidden")
            },
            _onMouseMove: function (a, c) {
                var d = (this.getDom("overlay").style, b.getEventOffset(a)), e = this.lengthOfCellSide, f = Math.ceil(d.left / e), g = Math.ceil(d.top / e);
                this._track(f, g)
            },
            _onClick: function () {
                this.fireEvent("picktable", this.numCols, this.numRows)
            }
        }, a.inherits(d, c)
    }(), function () {
        var a = baidu.editor.browser, b = baidu.editor.dom.domUtils, c = baidu.editor.ui.uiUtils, d = 'onmousedown="$$.Stateful_onMouseDown(event, this);" onmouseup="$$.Stateful_onMouseUp(event, this);"' + (a.ie ? ' onmouseenter="$$.Stateful_onMouseEnter(event, this);" onmouseleave="$$.Stateful_onMouseLeave(event, this);"' : ' onmouseover="$$.Stateful_onMouseOver(event, this);" onmouseout="$$.Stateful_onMouseOut(event, this);"');
        baidu.editor.ui.Stateful = {
            alwalysHoverable: !1, target: null, Stateful_init: function () {
                this._Stateful_dGetHtmlTpl = this.getHtmlTpl, this.getHtmlTpl = this.Stateful_getHtmlTpl
            }, Stateful_getHtmlTpl: function () {
                var a = this._Stateful_dGetHtmlTpl();
                return a.replace(/stateful/g, function () {
                    return d
                })
            }, Stateful_onMouseEnter: function (a, b) {
                this.target = b, this.isDisabled() && !this.alwalysHoverable || (this.addState("hover"), this.fireEvent("over"))
            }, Stateful_onMouseLeave: function (a, b) {
                this.isDisabled() && !this.alwalysHoverable || (this.removeState("hover"), this.removeState("active"), this.fireEvent("out"))
            }, Stateful_onMouseOver: function (a, b) {
                var d = a.relatedTarget;
                c.contains(b, d) || b === d || this.Stateful_onMouseEnter(a, b)
            }, Stateful_onMouseOut: function (a, b) {
                var d = a.relatedTarget;
                c.contains(b, d) || b === d || this.Stateful_onMouseLeave(a, b)
            }, Stateful_onMouseDown: function (a, b) {
                this.isDisabled() || this.addState("active")
            }, Stateful_onMouseUp: function (a, b) {
                this.isDisabled() || this.removeState("active")
            }, Stateful_postRender: function () {
                this.disabled && !this.hasState("disabled") && this.addState("disabled")
            }, hasState: function (a) {
                return b.hasClass(this.getStateDom(), "edui-state-" + a)
            }, addState: function (a) {
                this.hasState(a) || (this.getStateDom().className += " edui-state-" + a)
            }, removeState: function (a) {
                this.hasState(a) && b.removeClasses(this.getStateDom(), ["edui-state-" + a])
            }, getStateDom: function () {
                return this.getDom("state")
            }, isChecked: function () {
                return this.hasState("checked")
            }, setChecked: function (a) {
                !this.isDisabled() && a ? this.addState("checked") : this.removeState("checked")
            }, isDisabled: function () {
                return this.hasState("disabled")
            }, setDisabled: function (a) {
                a ? (this.removeState("hover"), this.removeState("checked"), this.removeState("active"), this.addState("disabled")) : this.removeState("disabled")
            }
        }
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.UIBase, c = baidu.editor.ui.Stateful, d = baidu.editor.ui.Button = function (a) {
            if (a.name) {
                var b = a.name, c = a.cssRules;
                a.className || (a.className = "edui-for-" + b), a.cssRules = ".edui-default  .edui-for-" + b + " .edui-icon {" + c + "}"
            }
            this.initOptions(a), this.initButton()
        };
        d.prototype = {
            uiName: "button",
            label: "",
            title: "",
            showIcon: !0,
            showText: !0,
            cssRules: "",
            initButton: function () {
                this.initUIBase(), this.Stateful_init(), this.cssRules && a.cssRule("edui-customize-" + this.name + "-style", this.cssRules)
            },
            getHtmlTpl: function () {
                return '<div id="##" class="edui-box %%"><div id="##_state" stateful><div class="%%-wrap"><div id="##_body" unselectable="on" ' + (this.title ? 'title="' + this.title + '"' : "") + ' class="%%-body" onmousedown="return $$._onMouseDown(event, this);" onclick="return $$._onClick(event, this);">' + (this.showIcon ? '<div class="edui-box edui-icon"></div>' : "") + (this.showText ? '<div class="edui-box edui-label">' + this.label + "</div>" : "") + "</div></div></div></div>"
            },
            postRender: function () {
                this.Stateful_postRender(), this.setDisabled(this.disabled)
            },
            _onMouseDown: function (a) {
                var b = a.target || a.srcElement, c = b && b.tagName && b.tagName.toLowerCase();
                return "input" == c || "object" == c || "object" == c ? !1 : void 0
            },
            _onClick: function () {
                this.isDisabled() || this.fireEvent("click")
            },
            setTitle: function (a) {
                var b = this.getDom("label");
                b.innerHTML = a
            }
        }, a.inherits(d, b), a.extend(d.prototype, c)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.uiUtils, c = (baidu.editor.dom.domUtils, baidu.editor.ui.UIBase), d = baidu.editor.ui.Stateful, e = baidu.editor.ui.SplitButton = function (a) {
            this.initOptions(a), this.initSplitButton()
        };
        e.prototype = {
            popup: null, uiName: "splitbutton", title: "", initSplitButton: function () {
                this.initUIBase(), this.Stateful_init();
                if (null != this.popup) {
                    var a = this.popup;
                    this.popup = null, this.setPopup(a)
                }
            }, _UIBase_postRender: c.prototype.postRender, postRender: function () {
                this.Stateful_postRender(), this._UIBase_postRender()
            }, setPopup: function (c) {
                this.popup !== c && (null != this.popup && this.popup.dispose(), c.addListener("show", a.bind(this._onPopupShow, this)), c.addListener("hide", a.bind(this._onPopupHide, this)), c.addListener("postrender", a.bind(function () {
                    c.getDom("body").appendChild(b.createElementByHtml('<div id="' + this.popup.id + '_bordereraser" class="edui-bordereraser edui-background" style="width:' + (b.getClientRect(this.getDom()).width + 20) + 'px"></div>')), c.getDom().className += " " + this.className
                }, this)), this.popup = c)
            }, _onPopupShow: function () {
                this.addState("opened")
            }, _onPopupHide: function () {
                this.removeState("opened")
            }, getHtmlTpl: function () {
                return '<div id="##" class="edui-box %%"><div ' + (this.title ? 'title="' + this.title + '"' : "") + ' id="##_state" stateful><div class="%%-body"><div id="##_button_body" class="edui-box edui-button-body" onclick="$$._onButtonClick(event, this);"><div class="edui-box edui-icon"></div></div><div class="edui-box edui-splitborder"></div><div class="edui-box edui-arrow" onclick="$$._onArrowClick();"></div></div></div></div>'
            }, showPopup: function () {
                var a = b.getClientRect(this.getDom());
                a.top -= this.popup.SHADOW_RADIUS, a.height += this.popup.SHADOW_RADIUS, this.popup.showAnchorRect(a)
            }, _onArrowClick: function (a, b) {
                this.isDisabled() || this.showPopup()
            }, _onButtonClick: function () {
                this.isDisabled() || this.fireEvent("buttonclick")
            }
        }, a.inherits(e, c), a.extend(e.prototype, d, !0)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.uiUtils, c = baidu.editor.ui.ColorPicker, d = baidu.editor.ui.Popup, e = baidu.editor.ui.SplitButton, f = baidu.editor.ui.ColorButton = function (a) {
            this.initOptions(a), this.initColorButton()
        };
        f.prototype = {
            initColorButton: function () {
                var a = this;
                this.popup = new d({
                    content: new c({
                        noColorText: a.editor.getLang("clearColor"),
                        editor: a.editor,
                        onpickcolor: function (b, c) {
                            a._onPickColor(c)
                        },
                        onpicknocolor: function (b, c) {
                            a._onPickNoColor(c)
                        }
                    }), editor: a.editor
                }), this.initSplitButton()
            }, _SplitButton_postRender: e.prototype.postRender, postRender: function () {
                this._SplitButton_postRender(), this.getDom("button_body").appendChild(b.createElementByHtml('<div id="' + this.id + '_colorlump" class="edui-colorlump"></div>')),
                    this.getDom().className += " edui-colorbutton"
            }, setColor: function (a) {
                this.getDom("colorlump").style.backgroundColor = a, this.color = a
            }, _onPickColor: function (a) {
                this.fireEvent("pickcolor", a) !== !1 && (this.setColor(a), this.popup.hide())
            }, _onPickNoColor: function (a) {
                this.fireEvent("picknocolor") !== !1 && this.popup.hide()
            }
        }, a.inherits(f, e)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.Popup, c = baidu.editor.ui.TablePicker, d = baidu.editor.ui.SplitButton, e = baidu.editor.ui.TableButton = function (a) {
            this.initOptions(a), this.initTableButton()
        };
        e.prototype = {
            initTableButton: function () {
                var a = this;
                this.popup = new b({
                    content: new c({
                        editor: a.editor, onpicktable: function (b, c, d) {
                            a._onPickTable(c, d)
                        }
                    }), editor: a.editor
                }), this.initSplitButton()
            }, _onPickTable: function (a, b) {
                this.fireEvent("picktable", a, b) !== !1 && this.popup.hide()
            }
        }, a.inherits(e, d)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.UIBase, c = baidu.editor.ui.AutoTypeSetPicker = function (a) {
            this.initOptions(a), this.initAutoTypeSetPicker()
        };
        c.prototype = {
            initAutoTypeSetPicker: function () {
                this.initUIBase()
            }, getHtmlTpl: function () {
                var a = this.editor, b = a.options.autotypeset, c = a.getLang("autoTypeSet"), d = "textAlignValue" + a.uid, e = "imageBlockLineValue" + a.uid, f = "symbolConverValue" + a.uid;
                return '<div id="##" class="edui-autotypesetpicker %%"><div class="edui-autotypesetpicker-body"><table ><tr><td nowrap><input type="checkbox" name="mergeEmptyline" ' + (b.mergeEmptyline ? "checked" : "") + ">" + c.mergeLine + '</td><td colspan="2"><input type="checkbox" name="removeEmptyline" ' + (b.removeEmptyline ? "checked" : "") + ">" + c.delLine + '</td></tr><tr><td nowrap><input type="checkbox" name="removeClass" ' + (b.removeClass ? "checked" : "") + ">" + c.removeFormat + '</td><td colspan="2"><input type="checkbox" name="indent" ' + (b.indent ? "checked" : "") + ">" + c.indent + '</td></tr><tr><td nowrap><input type="checkbox" name="textAlign" ' + (b.textAlign ? "checked" : "") + ">" + c.alignment + '</td><td colspan="2" id="' + d + '"><input type="radio" name="' + d + '" value="left" ' + (b.textAlign && "left" == b.textAlign ? "checked" : "") + ">" + a.getLang("justifyleft") + '<input type="radio" name="' + d + '" value="center" ' + (b.textAlign && "center" == b.textAlign ? "checked" : "") + ">" + a.getLang("justifycenter") + '<input type="radio" name="' + d + '" value="right" ' + (b.textAlign && "right" == b.textAlign ? "checked" : "") + ">" + a.getLang("justifyright") + '</td></tr><tr><td nowrap><input type="checkbox" name="imageBlockLine" ' + (b.imageBlockLine ? "checked" : "") + ">" + c.imageFloat + '</td><td nowrap id="' + e + '"><input type="radio" name="' + e + '" value="none" ' + (b.imageBlockLine && "none" == b.imageBlockLine ? "checked" : "") + ">" + a.getLang("default") + '<input type="radio" name="' + e + '" value="left" ' + (b.imageBlockLine && "left" == b.imageBlockLine ? "checked" : "") + ">" + a.getLang("justifyleft") + '<input type="radio" name="' + e + '" value="center" ' + (b.imageBlockLine && "center" == b.imageBlockLine ? "checked" : "") + ">" + a.getLang("justifycenter") + '<input type="radio" name="' + e + '" value="right" ' + (b.imageBlockLine && "right" == b.imageBlockLine ? "checked" : "") + ">" + a.getLang("justifyright") + '</td></tr><tr><td nowrap><input type="checkbox" name="clearFontSize" ' + (b.clearFontSize ? "checked" : "") + ">" + c.removeFontsize + '</td><td colspan="2"><input type="checkbox" name="clearFontFamily" ' + (b.clearFontFamily ? "checked" : "") + ">" + c.removeFontFamily + '</td></tr><tr><td nowrap colspan="3"><input type="checkbox" name="removeEmptyNode" ' + (b.removeEmptyNode ? "checked" : "") + ">" + c.removeHtml + '</td></tr><tr><td nowrap colspan="3"><input type="checkbox" name="pasteFilter" ' + (b.pasteFilter ? "checked" : "") + ">" + c.pasteFilter + '</td></tr><tr><td nowrap><input type="checkbox" name="symbolConver" ' + (b.bdc2sb || b.tobdc ? "checked" : "") + ">" + c.symbol + '</td><td id="' + f + '"><input type="radio" name="bdc" value="bdc2sb" ' + (b.bdc2sb ? "checked" : "") + ">" + c.bdc2sb + '<input type="radio" name="bdc" value="tobdc" ' + (b.tobdc ? "checked" : "") + ">" + c.tobdc + '</td><td nowrap align="right"><button >' + c.run + "</button></td></tr></table></div></div>"
            }, _UIBase_render: b.prototype.render
        }, a.inherits(c, b)
    }(), function () {
        function a(a) {
            for (var c, d = {}, e = a.getDom(), f = a.editor.uid, g = null, h = null, i = domUtils.getElementsByTagName(e, "input"), j = i.length - 1; c = i[j--];)if (g = c.getAttribute("type"), "checkbox" == g)if (h = c.getAttribute("name"), d[h] && delete d[h], c.checked) {
                var k = document.getElementById(h + "Value" + f);
                if (k) {
                    if (/input/gi.test(k.tagName))d[h] = k.value; else for (var l, m = k.getElementsByTagName("input"), n = m.length - 1; l = m[n--];)if (l.checked) {
                        d[h] = l.value;
                        break
                    }
                } else d[h] = !0
            } else d[h] = !1; else d[c.getAttribute("value")] = c.checked;
            for (var o, p = domUtils.getElementsByTagName(e, "select"), j = 0; o = p[j++];) {
                var q = o.getAttribute("name");
                d[q] = d[q] ? o.value : ""
            }
            b.extend(a.editor.options.autotypeset, d), a.editor.setPreferences("autotypeset", d)
        }

        var b = baidu.editor.utils, c = baidu.editor.ui.Popup, d = baidu.editor.ui.AutoTypeSetPicker, e = baidu.editor.ui.SplitButton, f = baidu.editor.ui.AutoTypeSetButton = function (a) {
            this.initOptions(a), this.initAutoTypeSetButton()
        };
        f.prototype = {
            initAutoTypeSetButton: function () {
                var b = this;
                this.popup = new c({
                    content: new d({editor: b.editor}), editor: b.editor, hide: function () {
                        !this._hidden && this.getDom() && (a(this), this.getDom().style.display = "none", this._hidden = !0, this.fireEvent("hide"))
                    }
                });
                var e = 0;
                this.popup.addListener("postRenderAfter", function () {
                    var c = this;
                    if (!e) {
                        var d = this.getDom(), f = d.getElementsByTagName("button")[0];
                        f.onclick = function () {
                            a(c), b.editor.execCommand("autotypeset"), c.hide()
                        }, domUtils.on(d, "click", function (d) {
                            var e = d.target || d.srcElement, f = b.editor.uid;
                            if (e && "INPUT" == e.tagName) {
                                if ("imageBlockLine" == e.name || "textAlign" == e.name || "symbolConver" == e.name)for (var g = e.checked, h = document.getElementById(e.name + "Value" + f), i = h.getElementsByTagName("input"), j = {
                                    imageBlockLine: "none",
                                    textAlign: "left",
                                    symbolConver: "tobdc"
                                }, k = 0; k < i.length; k++)g ? i[k].value == j[e.name] && (i[k].checked = "checked") : i[k].checked = !1;
                                if (e.name == "imageBlockLineValue" + f || e.name == "textAlignValue" + f || "bdc" == e.name) {
                                    var l = e.parentNode.previousSibling.getElementsByTagName("input");
                                    l && (l[0].checked = !0)
                                }
                                a(c)
                            }
                        }), e = 1
                    }
                }), this.initSplitButton()
            }
        }, b.inherits(f, e)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.Popup, c = baidu.editor.ui.Stateful, d = baidu.editor.ui.UIBase, e = baidu.editor.ui.CellAlignPicker = function (a) {
            this.initOptions(a), this.initSelected(), this.initCellAlignPicker()
        };
        e.prototype = {
            initSelected: function () {
                var a = {valign: {top: 0, middle: 1, bottom: 2}, align: {left: 0, center: 1, right: 2}, count: 3};
                this.selected && (this.selectedIndex = a.valign[this.selected.valign] * a.count + a.align[this.selected.align])
            }, initCellAlignPicker: function () {
                this.initUIBase(), this.Stateful_init()
            }, getHtmlTpl: function () {
                for (var a = ["left", "center", "right"], b = 9, c = null, d = -1, e = [], f = 0; b > f; f++)c = this.selectedIndex === f ? ' class="edui-cellalign-selected" ' : "", d = f % 3, 0 === d && e.push("<tr>"), e.push('<td index="' + f + '" ' + c + ' stateful><div class="edui-icon edui-' + a[d] + '"></div></td>'), 2 === d && e.push("</tr>");
                return '<div id="##" class="edui-cellalignpicker %%"><div class="edui-cellalignpicker-body"><table onclick="$$._onClick(event);">' + e.join("") + "</table></div></div>"
            }, getStateDom: function () {
                return this.target
            }, _onClick: function (a) {
                var c = a.target || a.srcElement;
                /icon/.test(c.className) && (this.items[c.parentNode.getAttribute("index")].onclick(), b.postHide(a))
            }, _UIBase_render: d.prototype.render
        }, a.inherits(e, d), a.extend(e.prototype, c, !0)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.Stateful, c = baidu.editor.ui.uiUtils, d = baidu.editor.ui.UIBase, e = baidu.editor.ui.PastePicker = function (a) {
            this.initOptions(a), this.initPastePicker()
        };
        e.prototype = {
            initPastePicker: function () {
                this.initUIBase(), this.Stateful_init()
            }, getHtmlTpl: function () {
                return '<div class="edui-pasteicon" onclick="$$._onClick(this)"></div><div class="edui-pastecontainer"><div class="edui-title">' + this.editor.getLang("pasteOpt") + '</div><div class="edui-button"><div title="' + this.editor.getLang("pasteSourceFormat") + '" onclick="$$.format(false)" stateful><div class="edui-richtxticon"></div></div><div title="' + this.editor.getLang("tagFormat") + '" onclick="$$.format(2)" stateful><div class="edui-tagicon"></div></div><div title="' + this.editor.getLang("pasteTextFormat") + '" onclick="$$.format(true)" stateful><div class="edui-plaintxticon"></div></div></div></div></div>'
            }, getStateDom: function () {
                return this.target
            }, format: function (a) {
                this.editor.ui._isTransfer = !0, this.editor.fireEvent("pasteTransfer", a)
            }, _onClick: function (a) {
                var b = domUtils.getNextDomNode(a), d = c.getViewportRect().height, e = c.getClientRect(b);
                e.top + e.height > d ? b.style.top = -e.height - a.offsetHeight + "px" : b.style.top = "", /hidden/gi.test(domUtils.getComputedStyle(b, "visibility")) ? (b.style.visibility = "visible", domUtils.addClass(a, "edui-state-opened")) : (b.style.visibility = "hidden", domUtils.removeClasses(a, "edui-state-opened"))
            }, _UIBase_render: d.prototype.render
        }, a.inherits(e, d), a.extend(e.prototype, b, !0)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.uiUtils, c = baidu.editor.ui.UIBase, d = baidu.editor.ui.Toolbar = function (a) {
            this.initOptions(a), this.initToolbar()
        };
        d.prototype = {
            items: null, initToolbar: function () {
                this.items = this.items || [], this.initUIBase()
            }, add: function (a, b) {
                void 0 === b ? this.items.push(a) : this.items.splice(b, 0, a)
            }, getHtmlTpl: function () {
                for (var a = [], b = 0; b < this.items.length; b++)a[b] = this.items[b].renderHtml();
                return '<div id="##" class="edui-toolbar %%" onselectstart="return false;" onmousedown="return $$._onMouseDown(event, this);">' + a.join("") + "</div>"
            }, postRender: function () {
                for (var a = this.getDom(), c = 0; c < this.items.length; c++)this.items[c].postRender();
                b.makeUnselectable(a)
            }, _onMouseDown: function (a) {
                var b = a.target || a.srcElement, c = b && b.tagName && b.tagName.toLowerCase();
                return "input" == c || "object" == c || "object" == c ? !1 : void 0
            }
        }, a.inherits(d, c)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.dom.domUtils, c = baidu.editor.ui.uiUtils, d = baidu.editor.ui.UIBase, e = baidu.editor.ui.Popup, f = baidu.editor.ui.Stateful, g = baidu.editor.ui.CellAlignPicker, h = baidu.editor.ui.Menu = function (a) {
            this.initOptions(a), this.initMenu()
        }, i = {
            renderHtml: function () {
                return '<div class="edui-menuitem edui-menuseparator"><div class="edui-menuseparator-inner"></div></div>'
            }, postRender: function () {
            }, queryAutoHide: function () {
                return !0
            }
        };
        h.prototype = {
            items: null, uiName: "menu", initMenu: function () {
                this.items = this.items || [], this.initPopup(), this.initItems()
            }, initItems: function () {
                for (var a = 0; a < this.items.length; a++) {
                    var b = this.items[a];
                    "-" == b ? this.items[a] = this.getSeparator() : b instanceof j || (b.editor = this.editor, b.theme = this.editor.options.theme, this.items[a] = this.createItem(b))
                }
            }, getSeparator: function () {
                return i
            }, createItem: function (a) {
                return a.menu = this, new j(a)
            }, _Popup_getContentHtmlTpl: e.prototype.getContentHtmlTpl, getContentHtmlTpl: function () {
                if (0 == this.items.length)return this._Popup_getContentHtmlTpl();
                for (var a = [], b = 0; b < this.items.length; b++) {
                    var c = this.items[b];
                    a[b] = c.renderHtml()
                }
                return '<div class="%%-body">' + a.join("") + "</div>"
            }, _Popup_postRender: e.prototype.postRender, postRender: function () {
                for (var a = this, d = 0; d < this.items.length; d++) {
                    var e = this.items[d];
                    e.ownerMenu = this, e.postRender()
                }
                b.on(this.getDom(), "mouseover", function (b) {
                    b = b || event;
                    var d = b.relatedTarget || b.fromElement, e = a.getDom();
                    c.contains(e, d) || e === d || a.fireEvent("over")
                }), this._Popup_postRender()
            }, queryAutoHide: function (a) {
                if (a) {
                    if (c.contains(this.getDom(), a))return !1;
                    for (var b = 0; b < this.items.length; b++) {
                        var d = this.items[b];
                        if (d.queryAutoHide(a) === !1)return !1
                    }
                }
            }, clearItems: function () {
                for (var a = 0; a < this.items.length; a++) {
                    var b = this.items[a];
                    clearTimeout(b._showingTimer), clearTimeout(b._closingTimer), b.subMenu && b.subMenu.destroy()
                }
                this.items = []
            }, destroy: function () {
                this.getDom() && b.remove(this.getDom()), this.clearItems()
            }, dispose: function () {
                this.destroy()
            }
        }, a.inherits(h, e);
        var j = baidu.editor.ui.MenuItem = function (a) {
            if (this.initOptions(a), this.initUIBase(), this.Stateful_init(), this.subMenu && !(this.subMenu instanceof h))if (a.className && -1 != a.className.indexOf("aligntd")) {
                var c = this;
                this.subMenu.selected = this.editor.queryCommandValue("cellalignment"), this.subMenu = new e({
                    content: new g(this.subMenu),
                    parentMenu: c,
                    editor: c.editor,
                    destroy: function () {
                        this.getDom() && b.remove(this.getDom())
                    }
                }), this.subMenu.addListener("postRenderAfter", function () {
                    b.on(this.getDom(), "mouseover", function () {
                        c.addState("opened")
                    })
                })
            } else this.subMenu = new h(this.subMenu)
        };
        j.prototype = {
            label: "",
            subMenu: null,
            ownerMenu: null,
            uiName: "menuitem",
            alwalysHoverable: !0,
            getHtmlTpl: function () {
                return '<div id="##" class="%%" stateful onclick="$$._onClick(event, this);"><div class="%%-body">' + this.renderLabelHtml() + "</div></div>"
            },
            postRender: function () {
                var a = this;
                this.addListener("over", function () {
                    a.ownerMenu.fireEvent("submenuover", a), a.subMenu && a.delayShowSubMenu()
                }), this.subMenu && (this.getDom().className += " edui-hassubmenu", this.subMenu.render(), this.addListener("out", function () {
                    a.delayHideSubMenu()
                }), this.subMenu.addListener("over", function () {
                    clearTimeout(a._closingTimer), a._closingTimer = null, a.addState("opened")
                }), this.ownerMenu.addListener("hide", function () {
                    a.hideSubMenu()
                }), this.ownerMenu.addListener("submenuover", function (b, c) {
                    c !== a && a.delayHideSubMenu()
                }), this.subMenu._bakQueryAutoHide = this.subMenu.queryAutoHide, this.subMenu.queryAutoHide = function (b) {
                    return b && c.contains(a.getDom(), b) ? !1 : this._bakQueryAutoHide(b)
                }), this.getDom().style.tabIndex = "-1", c.makeUnselectable(this.getDom()), this.Stateful_postRender()
            },
            delayShowSubMenu: function () {
                var a = this;
                a.isDisabled() || (a.addState("opened"), clearTimeout(a._showingTimer), clearTimeout(a._closingTimer), a._closingTimer = null, a._showingTimer = setTimeout(function () {
                    a.showSubMenu()
                }, 250))
            },
            delayHideSubMenu: function () {
                var a = this;
                a.isDisabled() || (a.removeState("opened"), clearTimeout(a._showingTimer), a._closingTimer || (a._closingTimer = setTimeout(function () {
                    a.hasState("opened") || a.hideSubMenu(), a._closingTimer = null
                }, 400)))
            },
            renderLabelHtml: function () {
                return '<div class="edui-arrow"></div><div class="edui-box edui-icon"></div><div class="edui-box edui-label %%-label">' + (this.label || "") + "</div>"
            },
            getStateDom: function () {
                return this.getDom()
            },
            queryAutoHide: function (a) {
                return this.subMenu && this.hasState("opened") ? this.subMenu.queryAutoHide(a) : void 0
            },
            _onClick: function (a, b) {
                this.hasState("disabled") || this.fireEvent("click", a, b) !== !1 && (this.subMenu ? this.showSubMenu() : e.postHide(a))
            },
            showSubMenu: function () {
                var a = c.getClientRect(this.getDom());
                a.right -= 5, a.left += 2, a.width -= 7, a.top -= 4, a.bottom += 4, a.height += 8, this.subMenu.showAnchorRect(a, !0, !0)
            },
            hideSubMenu: function () {
                this.subMenu.hide()
            }
        }, a.inherits(j, d), a.extend(j.prototype, f, !0)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.uiUtils, c = baidu.editor.ui.Menu, d = baidu.editor.ui.SplitButton, e = baidu.editor.ui.Combox = function (a) {
            this.initOptions(a), this.initCombox()
        };
        e.prototype = {
            uiName: "combox", onbuttonclick: function () {
                this.showPopup()
            }, initCombox: function () {
                var a = this;
                this.items = this.items || [];
                for (var b = 0; b < this.items.length; b++) {
                    var d = this.items[b];
                    d.uiName = "listitem", d.index = b, d.onclick = function () {
                        a.selectByIndex(this.index)
                    }
                }
                this.popup = new c({
                    items: this.items,
                    uiName: "list",
                    editor: this.editor,
                    captureWheel: !0,
                    combox: this
                }), this.initSplitButton()
            }, _SplitButton_postRender: d.prototype.postRender, postRender: function () {
                this._SplitButton_postRender(), this.setLabel(this.label || ""), this.setValue(this.initValue || "")
            }, showPopup: function () {
                var a = b.getClientRect(this.getDom());
                a.top += 1, a.bottom -= 1, a.height -= 2, this.popup.showAnchorRect(a)
            }, getValue: function () {
                return this.value
            }, setValue: function (a) {
                var b = this.indexByValue(a);
                -1 != b ? (this.selectedIndex = b, this.setLabel(this.items[b].label), this.value = this.items[b].value) : (this.selectedIndex = -1, this.setLabel(this.getLabelForUnknowValue(a)), this.value = a)
            }, setLabel: function (a) {
                this.getDom("button_body").innerHTML = a, this.label = a
            }, getLabelForUnknowValue: function (a) {
                return a
            }, indexByValue: function (a) {
                for (var b = 0; b < this.items.length; b++)if (a == this.items[b].value)return b;
                return -1
            }, getItem: function (a) {
                return this.items[a]
            }, selectByIndex: function (a) {
                a < this.items.length && this.fireEvent("select", a) !== !1 && (this.selectedIndex = a, this.value = this.items[a].value, this.setLabel(this.items[a].label))
            }
        }, a.inherits(e, d)
    }(), function () {
        var a, b, c, d = baidu.editor.utils, e = baidu.editor.dom.domUtils, f = baidu.editor.ui.uiUtils, g = baidu.editor.ui.Mask, h = baidu.editor.ui.UIBase, i = baidu.editor.ui.Button, j = baidu.editor.ui.Dialog = function (a) {
            if (a.name) {
                var b = a.name, c = a.cssRules;
                a.className || (a.className = "edui-for-" + b), c && (a.cssRules = ".edui-default .edui-for-" + b + " .edui-dialog-content  {" + c + "}")
            }
            this.initOptions(d.extend({
                autoReset: !0, draggable: !0, onok: function () {
                }, oncancel: function () {
                }, onclose: function (a, b) {
                    return b ? this.onok() : this.oncancel()
                }, holdScroll: !1
            }, a)), this.initDialog()
        };
        j.prototype = {
            draggable: !1, uiName: "dialog", initDialog: function () {
                var e = this, f = this.editor.options.theme;
                if (this.cssRules && d.cssRule("edui-customize-" + this.name + "-style", this.cssRules), this.initUIBase(), this.modalMask = a || (a = new g({
                            className: "edui-dialog-modalmask",
                            theme: f,
                            onclick: function () {
                                c && c.close(!1)
                            }
                        })), this.dragMask = b || (b = new g({
                            className: "edui-dialog-dragmask",
                            theme: f
                        })), this.closeButton = new i({
                        className: "edui-dialog-closebutton",
                        title: e.closeDialog,
                        theme: f,
                        onclick: function () {
                            e.close(!1)
                        }
                    }), this.fullscreen && this.initResizeEvent(), this.buttons)for (var h = 0; h < this.buttons.length; h++)this.buttons[h] instanceof i || (this.buttons[h] = new i(d.extend(this.buttons[h], {editor: this.editor}, !0)))
            }, initResizeEvent: function () {
                var a = this;
                e.on(window, "resize", function () {
                    a._hidden || void 0 === a._hidden || (a.__resizeTimer && window.clearTimeout(a.__resizeTimer), a.__resizeTimer = window.setTimeout(function () {
                        a.__resizeTimer = null;
                        var b = a.getDom(), c = a.getDom("content"), d = UE.ui.uiUtils.getClientRect(b), e = UE.ui.uiUtils.getClientRect(c), g = f.getViewportRect();
                        c.style.width = g.width - d.width + e.width + "px", c.style.height = g.height - d.height + e.height + "px", b.style.width = g.width + "px", b.style.height = g.height + "px", a.fireEvent("resize")
                    }, 100))
                })
            }, fitSize: function () {
                var a = this.getDom("body"), b = this.mesureSize();
                return a.style.width = b.width + "px", a.style.height = b.height + "px", b
            }, safeSetOffset: function (a) {
                var b = this, c = b.getDom(), d = f.getViewportRect(), e = f.getClientRect(c), g = a.left;
                g + e.width > d.right && (g = d.right - e.width);
                var h = a.top;
                h + e.height > d.bottom && (h = d.bottom - e.height), c.style.left = Math.max(g, 0) + "px", c.style.top = Math.max(h, 0) + "px"
            }, showAtCenter: function () {
                var a = f.getViewportRect();
                if (this.fullscreen) {
                    var b = this.getDom(), c = this.getDom("content");
                    b.style.display = "block";
                    var d = UE.ui.uiUtils.getClientRect(b), g = UE.ui.uiUtils.getClientRect(c);
                    b.style.left = "-100000px", c.style.width = a.width - d.width + g.width + "px", c.style.height = a.height - d.height + g.height + "px", b.style.width = a.width + "px", b.style.height = a.height + "px", b.style.left = 0, this._originalContext = {
                        html: {
                            overflowX: document.documentElement.style.overflowX,
                            overflowY: document.documentElement.style.overflowY
                        }, body: {overflowX: document.body.style.overflowX, overflowY: document.body.style.overflowY}
                    }, document.documentElement.style.overflowX = "hidden", document.documentElement.style.overflowY = "hidden", document.body.style.overflowX = "hidden", document.body.style.overflowY = "hidden"
                } else {
                    this.getDom().style.display = "";
                    var h = this.fitSize(), i = 0 | this.getDom("titlebar").offsetHeight, j = a.width / 2 - h.width / 2, k = a.height / 2 - (h.height - i) / 2 - i, l = this.getDom();
                    this.safeSetOffset({
                        left: Math.max(0 | j, 0),
                        top: Math.max(0 | k, 0)
                    }), e.hasClass(l, "edui-state-centered") || (l.className += " edui-state-centered")
                }
                this._show()
            }, getContentHtml: function () {
                var a = "";
                return "string" == typeof this.content ? a = this.content : this.iframeUrl && (a = '<span id="' + this.id + '_contmask" class="dialogcontmask"></span><iframe id="' + this.id + '_iframe" class="%%-iframe" height="100%" width="100%" frameborder="0" src="' + this.iframeUrl + '"></iframe>'), a
            }, getHtmlTpl: function () {
                var a = "";
                if (this.buttons) {
                    for (var b = [], c = 0; c < this.buttons.length; c++)b[c] = this.buttons[c].renderHtml();
                    a = '<div class="%%-foot"><div id="##_buttons" class="%%-buttons">' + b.join("") + "</div></div>"
                }
                return '<div id="##" class="%%"><div ' + (this.fullscreen ? 'class="%%-wrap edui-dialog-fullscreen-flag"' : 'class="%%"') + '><div id="##_body" class="%%-body"><div class="%%-shadow"></div><div id="##_titlebar" class="%%-titlebar"><div class="%%-draghandle" onmousedown="$$._onTitlebarMouseDown(event, this);"><span class="%%-caption">' + (this.title || "") + "</span></div>" + this.closeButton.renderHtml() + '</div><div id="##_content" class="%%-content">' + (this.autoReset ? "" : this.getContentHtml()) + "</div>" + a + "</div></div></div>"
            }, postRender: function () {
                this.modalMask.getDom() || (this.modalMask.render(), this.modalMask.hide()), this.dragMask.getDom() || (this.dragMask.render(), this.dragMask.hide());
                var a = this;
                if (this.addListener("show", function () {
                        a.modalMask.show(this.getDom().style.zIndex - 2)
                    }), this.addListener("hide", function () {
                        a.modalMask.hide()
                    }), this.buttons)for (var b = 0; b < this.buttons.length; b++)this.buttons[b].postRender();
                e.on(window, "resize", function () {
                    setTimeout(function () {
                        a.isHidden() || a.safeSetOffset(f.getClientRect(a.getDom()))
                    })
                }), this._hide()
            }, mesureSize: function () {
                var a = this.getDom("body"), b = f.getClientRect(this.getDom("content")).width, c = a.style;
                return c.width = b, f.getClientRect(a)
            }, _onTitlebarMouseDown: function (a, b) {
                if (this.draggable) {
                    var c, d = (f.getViewportRect(), this);
                    f.startDrag(a, {
                        ondragstart: function () {
                            c = f.getClientRect(d.getDom()), d.getDom("contmask").style.visibility = "visible", d.dragMask.show(d.getDom().style.zIndex - 1)
                        }, ondragmove: function (a, b) {
                            var e = c.left + a, f = c.top + b;
                            d.safeSetOffset({left: e, top: f})
                        }, ondragstop: function () {
                            d.getDom("contmask").style.visibility = "hidden", e.removeClasses(d.getDom(), ["edui-state-centered"]), d.dragMask.hide()
                        }
                    })
                }
            }, reset: function () {
                this.getDom("content").innerHTML = this.getContentHtml(), this.fireEvent("dialogafterreset")
            }, _show: function () {
                this._hidden && (this.getDom().style.display = "", this.editor.container.style.zIndex && (this.getDom().style.zIndex = 1 * this.editor.container.style.zIndex + 10), this._hidden = !1, this.fireEvent("show"), baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex = this.getDom().style.zIndex - 4)
            }, isHidden: function () {
                return this._hidden
            }, _hide: function () {
                if (!this._hidden) {
                    var a = this.getDom();
                    a.style.display = "none", a.style.zIndex = "", a.style.width = "", a.style.height = "", this._hidden = !0, this.fireEvent("hide")
                }
            }, open: function () {
                if (this.autoReset)try {
                    this.reset()
                } catch (a) {
                    this.render(), this.open()
                }
                if (this.showAtCenter(), this.iframeUrl)try {
                    this.getDom("iframe").focus()
                } catch (b) {
                }
                c = this
            }, _onCloseButtonClick: function (a, b) {
                this.close(!1)
            }, close: function (a) {
                if (this.fireEvent("close", a) !== !1) {
                    this.fullscreen && (document.documentElement.style.overflowX = this._originalContext.html.overflowX, document.documentElement.style.overflowY = this._originalContext.html.overflowY, document.body.style.overflowX = this._originalContext.body.overflowX, document.body.style.overflowY = this._originalContext.body.overflowY, delete this._originalContext), this._hide();
                    var b = this.getDom("content"), c = this.getDom("iframe");
                    if (b && c) {
                        var d = c.contentDocument || c.contentWindow.document;
                        d && (d.body.innerHTML = ""), e.remove(b)
                    }
                }
            }
        }, d.inherits(j, h)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.Menu, c = baidu.editor.ui.SplitButton, d = baidu.editor.ui.MenuButton = function (a) {
            this.initOptions(a), this.initMenuButton()
        };
        d.prototype = {
            initMenuButton: function () {
                var a = this;
                this.uiName = "menubutton", this.popup = new b({
                    items: a.items,
                    className: a.className,
                    editor: a.editor
                }), this.popup.addListener("show", function () {
                    for (var b = this, c = 0; c < b.items.length; c++)b.items[c].removeState("checked"), b.items[c].value == a._value && (b.items[c].addState("checked"), this.value = a._value)
                }), this.initSplitButton()
            }, setValue: function (a) {
                this._value = a
            }
        }, a.inherits(d, c)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.Popup, c = baidu.editor.ui.SplitButton, d = baidu.editor.ui.MultiMenuPop = function (a) {
            this.initOptions(a), this.initMultiMenu()
        };
        d.prototype = {
            initMultiMenu: function () {
                var a = this;
                this.popup = new b({
                    content: "", editor: a.editor, iframe_rendered: !1, onshow: function () {
                        this.iframe_rendered || (this.iframe_rendered = !0, this.getDom("content").innerHTML = '<iframe id="' + a.id + '_iframe" src="' + a.iframeUrl + '" frameborder="0"></iframe>', a.editor.container.style.zIndex && (this.getDom().style.zIndex = 1 * a.editor.container.style.zIndex + 1))
                    }
                }), this.onbuttonclick = function () {
                    this.showPopup()
                }, this.initSplitButton()
            }
        }, a.inherits(d, c)
    }(), function () {
        function a(a) {
            var b = a.target || a.srcElement, c = g.findParent(b, function (a) {
                return g.hasClass(a, "edui-shortcutmenu") || g.hasClass(a, "edui-popup")
            }, !0);
            if (!c)for (var d, e = 0; d = h[e++];)d.hide()
        }

        var b, c = baidu.editor.ui, d = c.UIBase, e = c.uiUtils, f = baidu.editor.utils, g = baidu.editor.dom.domUtils, h = [], i = !1, j = c.ShortCutMenu = function (a) {
            this.initOptions(a), this.initShortCutMenu()
        };
        j.postHide = a, j.prototype = {
            isHidden: !0, SPACE: 5, initShortCutMenu: function () {
                this.items = this.items || [], this.initUIBase(), this.initItems(), this.initEvent(), h.push(this)
            }, initEvent: function () {
                var a = this, c = a.editor.document;
                g.on(c, "mousemove", function (c) {
                    if (a.isHidden === !1) {
                        if (a.getSubMenuMark() || "contextmenu" == a.eventType)return;
                        var d = !0, e = a.getDom(), f = e.offsetWidth, g = e.offsetHeight, h = f / 2 + a.SPACE, i = g / 2, j = Math.abs(c.screenX - a.left), k = Math.abs(c.screenY - a.top);
                        clearTimeout(b), b = setTimeout(function () {
                            k > 0 && i > k ? a.setOpacity(e, "1") : k > i && i + 70 > k ? (a.setOpacity(e, "0.5"), d = !1) : k > i + 70 && i + 140 > k && a.hide(), d && j > 0 && h > j ? a.setOpacity(e, "1") : j > h && h + 70 > j ? a.setOpacity(e, "0.5") : j > h + 70 && h + 140 > j && a.hide()
                        })
                    }
                }), browser.chrome && g.on(c, "mouseout", function (b) {
                    var c = b.relatedTarget || b.toElement;
                    null != c && "HTML" != c.tagName || a.hide()
                }), a.editor.addListener("afterhidepop", function () {
                    a.isHidden || (i = !0)
                })
            }, initItems: function () {
                if (f.isArray(this.items))for (var a = 0, b = this.items.length; b > a; a++) {
                    var d = this.items[a].toLowerCase();
                    c[d] && (this.items[a] = new c[d](this.editor), this.items[a].className += " edui-shortcutsubmenu ")
                }
            }, setOpacity: function (a, b) {
                browser.ie && browser.version < 9 ? a.style.filter = "alpha(opacity = " + 100 * parseFloat(b) + ");" : a.style.opacity = b
            }, getSubMenuMark: function () {
                i = !1;
                for (var a, b = e.getFixedLayer(), c = g.getElementsByTagName(b, "div", function (a) {
                    return g.hasClass(a, "edui-shortcutsubmenu edui-popup")
                }), d = 0; a = c[d++];)"none" != a.style.display && (i = !0);
                return i
            }, show: function (a, b) {
                function c(a) {
                    a.left < 0 && (a.left = 0), a.top < 0 && (a.top = 0), i.style.cssText = "position:absolute;left:" + a.left + "px;top:" + a.top + "px;"
                }

                function d(a) {
                    a.tagName || (a = a.getDom()), h.left = parseInt(a.style.left), h.top = parseInt(a.style.top), h.top -= i.offsetHeight + 15, c(h)
                }

                var f = this, h = {}, i = this.getDom(), j = e.getFixedLayer();
                if (f.eventType = a.type, i.style.cssText = "display:block;left:-9999px", "contextmenu" == a.type && b) {
                    var k = g.getElementsByTagName(j, "div", "edui-contextmenu")[0];
                    k ? d(k) : f.editor.addListener("aftershowcontextmenu", function (a, b) {
                        d(b)
                    })
                } else h = e.getViewportOffsetByEvent(a), h.top -= i.offsetHeight + f.SPACE, h.left += f.SPACE + 20, c(h), f.setOpacity(i, .2);
                f.isHidden = !1, f.left = a.screenX + i.offsetWidth / 2 - f.SPACE, f.top = a.screenY - i.offsetHeight / 2 - f.SPACE, f.editor && (i.style.zIndex = 1 * f.editor.container.style.zIndex + 10, j.style.zIndex = i.style.zIndex - 1)
            }, hide: function () {
                this.getDom() && (this.getDom().style.display = "none"), this.isHidden = !0
            }, postRender: function () {
                if (f.isArray(this.items))for (var a, b = 0; a = this.items[b++];)a.postRender()
            }, getHtmlTpl: function () {
                var a;
                if (f.isArray(this.items)) {
                    a = [];
                    for (var b = 0; b < this.items.length; b++)a[b] = this.items[b].renderHtml();
                    a = a.join("")
                } else a = this.items;
                return '<div id="##" class="%% edui-toolbar" data-src="shortcutmenu" onmousedown="return false;" onselectstart="return false;" >' + a + "</div>"
            }
        }, f.inherits(j, d), g.on(document, "mousedown", function (b) {
            a(b)
        }), g.on(window, "scroll", function (b) {
            a(b)
        })
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui.UIBase, c = baidu.editor.ui.Breakline = function (a) {
            this.initOptions(a), this.initSeparator()
        };
        c.prototype = {
            uiName: "Breakline", initSeparator: function () {
                this.initUIBase()
            }, getHtmlTpl: function () {
                return "<br/>"
            }
        }, a.inherits(c, b)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.dom.domUtils, c = baidu.editor.ui.UIBase, d = baidu.editor.ui.Message = function (a) {
            this.initOptions(a), this.initMessage()
        };
        d.prototype = {
            initMessage: function () {
                this.initUIBase()
            }, getHtmlTpl: function () {
                return '<div id="##" class="edui-message %%"> <div id="##_closer" class="edui-message-closer">ร—</div> <div id="##_body" class="edui-message-body edui-message-type-info"> <iframe style="position:absolute;z-index:-1;left:0;top:0;background-color: transparent;" frameborder="0" width="100%" height="100%" src="about:blank"></iframe> <div class="edui-shadow"></div> <div id="##_content" class="edui-message-content">  </div> </div></div>'
            }, reset: function (a) {
                var b = this;
                a.keepshow || (clearTimeout(this.timer), b.timer = setTimeout(function () {
                    b.hide()
                }, a.timeout || 4e3)), void 0 !== a.content && b.setContent(a.content), void 0 !== a.type && b.setType(a.type), b.show()
            }, postRender: function () {
                var a = this, c = this.getDom("closer");
                c && b.on(c, "click", function () {
                    a.hide()
                })
            }, setContent: function (a) {
                this.getDom("content").innerHTML = a
            }, setType: function (a) {
                a = a || "info";
                var b = this.getDom("body");
                b.className = b.className.replace(/edui-message-type-[\w-]+/, "edui-message-type-" + a)
            }, getContent: function () {
                return this.getDom("content").innerHTML
            }, getType: function () {
                var a = this.getDom("body").match(/edui-message-type-([\w-]+)/);
                return a ? a[1] : ""
            }, show: function () {
                this.getDom().style.display = "block"
            }, hide: function () {
                var a = this.getDom();
                a && (a.style.display = "none", a.parentNode && a.parentNode.removeChild(a))
            }
        }, a.inherits(d, c)
    }(), function () {
        var a = baidu.editor.utils, b = baidu.editor.ui, c = b.Dialog;
        b.buttons = {}, b.Dialog = function (a) {
            var b = new c(a);
            return b.addListener("hide", function () {
                if (b.editor) {
                    var a = b.editor;
                    try {
                        if (browser.gecko) {
                            var c = a.window.scrollY, d = a.window.scrollX;
                            a.body.focus(), a.window.scrollTo(d, c)
                        } else a.focus()
                    } catch (e) {
                    }
                }
            }), b
        };
        for (var d, e = {
            anchor: "~/dialogs/anchor/anchor.html",
            insertimage: "~/dialogs/image/image.html",
            link: "~/dialogs/link/link.html",
            spechars: "~/dialogs/spechars/spechars.html",
            searchreplace: "~/dialogs/searchreplace/searchreplace.html",
            map: "~/dialogs/map/map.html",
            gmap: "~/dialogs/gmap/gmap.html",
            insertvideo: "~/dialogs/video/video.html",
            help: "~/dialogs/help/help.html",
            preview: "~/dialogs/preview/preview.html",
            emotion: "~/dialogs/emotion/emotion.html",
            wordimage: "~/dialogs/wordimage/wordimage.html",
            attachment: "~/dialogs/attachment/attachment.html",
            insertframe: "~/dialogs/insertframe/insertframe.html",
            edittip: "~/dialogs/table/edittip.html",
            edittable: "~/dialogs/table/edittable.html",
            edittd: "~/dialogs/table/edittd.html",
            webapp: "~/dialogs/webapp/webapp.html",
            snapscreen: "~/dialogs/snapscreen/snapscreen.html",
            scrawl: "~/dialogs/scrawl/scrawl.html",
            music: "~/dialogs/music/music.html",
            template: "~/dialogs/template/template.html",
            background: "~/dialogs/background/background.html",
            charts: "~/dialogs/charts/charts.html"
        }, f = ["undo", "redo", "formatmatch", "bold", "italic", "underline", "fontborder", "touppercase", "tolowercase", "strikethrough", "subscript", "superscript", "source", "indent", "outdent", "blockquote", "pasteplain", "pagebreak", "selectall", "print", "horizontal", "removeformat", "time", "date", "unlink", "insertparagraphbeforetable", "insertrow", "insertcol", "mergeright", "mergedown", "deleterow", "deletecol", "splittorows", "splittocols", "splittocells", "mergecells", "deletetable", "drafts"], g = 0; d = f[g++];)d = d.toLowerCase(), b[d] = function (a) {
            return function (c) {
                var d = new b.Button({
                    className: "edui-for-" + a,
                    title: c.options.labelMap[a] || c.getLang("labelMap." + a) || "",
                    onclick: function () {
                        c.execCommand(a)
                    },
                    theme: c.options.theme,
                    showText: !1
                });
                return b.buttons[a] = d, c.addListener("selectionchange", function (b, e, f) {
                    var g = c.queryCommandState(a);
                    -1 == g ? (d.setDisabled(!0), d.setChecked(!1)) : f || (d.setDisabled(!1), d.setChecked(g))
                }), d
            }
        }(d);
        b.cleardoc = function (a) {
            var c = new b.Button({
                className: "edui-for-cleardoc",
                title: a.options.labelMap.cleardoc || a.getLang("labelMap.cleardoc") || "",
                theme: a.options.theme,
                onclick: function () {
                    confirm(a.getLang("confirmClear")) && a.execCommand("cleardoc")
                }
            });
            return b.buttons.cleardoc = c, a.addListener("selectionchange", function () {
                c.setDisabled(-1 == a.queryCommandState("cleardoc"))
            }), c
        };
        var h = {
            justify: ["left", "right", "center", "justify"],
            imagefloat: ["none", "left", "center", "right"],
            directionality: ["ltr", "rtl"]
        };
        for (var i in h)!function (a, c) {
            for (var d, e = 0; d = c[e++];)!function (c) {
                b[a.replace("float", "") + c] = function (d) {
                    var e = new b.Button({
                        className: "edui-for-" + a.replace("float", "") + c,
                        title: d.options.labelMap[a.replace("float", "") + c] || d.getLang("labelMap." + a.replace("float", "") + c) || "",
                        theme: d.options.theme,
                        onclick: function () {
                            d.execCommand(a, c)
                        }
                    });
                    return b.buttons[a] = e, d.addListener("selectionchange", function (b, f, g) {
                        e.setDisabled(-1 == d.queryCommandState(a)), e.setChecked(d.queryCommandValue(a) == c && !g)
                    }), e
                }
            }(d)
        }(i, h[i]);
        for (var d, g = 0; d = ["backcolor", "forecolor"][g++];)b[d] = function (a) {
            return function (c) {
                var d = new b.ColorButton({
                    className: "edui-for-" + a,
                    color: "default",
                    title: c.options.labelMap[a] || c.getLang("labelMap." + a) || "",
                    editor: c,
                    onpickcolor: function (b, d) {
                        c.execCommand(a, d)
                    },
                    onpicknocolor: function () {
                        c.execCommand(a, "default"), this.setColor("transparent"), this.color = "default"
                    },
                    onbuttonclick: function () {
                        c.execCommand(a, this.color)
                    }
                });
                return b.buttons[a] = d, c.addListener("selectionchange", function () {
                    d.setDisabled(-1 == c.queryCommandState(a))
                }), d
            }
        }(d);
        var j = {
            noOk: ["searchreplace", "help", "spechars", "webapp", "preview"],
            ok: ["attachment", "anchor", "link", "insertimage", "map", "gmap", "insertframe", "wordimage", "insertvideo", "insertframe", "edittip", "edittable", "edittd", "scrawl", "template", "music", "background", "charts"]
        };
        for (var i in j)!function (c, d) {
            for (var f, g = 0; f = d[g++];)browser.opera && "searchreplace" === f || !function (d) {
                b[d] = function (f, g, h) {
                    g = g || (f.options.iframeUrlMap || {})[d] || e[d], h = f.options.labelMap[d] || f.getLang("labelMap." + d) || "";
                    var i;
                    g && (i = new b.Dialog(a.extend({
                        iframeUrl: f.ui.mapUrl(g),
                        editor: f,
                        className: "edui-for-" + d,
                        title: h,
                        holdScroll: "insertimage" === d,
                        fullscreen: /charts|preview/.test(d),
                        closeDialog: f.getLang("closeDialog")
                    }, "ok" == c ? {
                        buttons: [{
                            className: "edui-okbutton",
                            label: f.getLang("ok"),
                            editor: f,
                            onclick: function () {
                                i.close(!0)
                            }
                        }, {
                            className: "edui-cancelbutton",
                            label: f.getLang("cancel"),
                            editor: f,
                            onclick: function () {
                                i.close(!1)
                            }
                        }]
                    } : {})), f.ui._dialogs[d + "Dialog"] = i);
                    var j = new b.Button({
                        className: "edui-for-" + d,
                        title: h,
                        onclick: function () {
                            if (i)switch (d) {
                                case"wordimage":
                                    var a = f.execCommand("wordimage");
                                    a && a.length && (i.render(), i.open());
                                    break;
                                case"scrawl":
                                    -1 != f.queryCommandState("scrawl") && (i.render(), i.open());
                                    break;
                                default:
                                    i.render(), i.open()
                            }
                        },
                        theme: f.options.theme,
                        disabled: "scrawl" == d && -1 == f.queryCommandState("scrawl") || "charts" == d
                    });
                    return b.buttons[d] = j, f.addListener("selectionchange", function () {
                        var a = {edittable: 1};
                        if (!(d in a)) {
                            var b = f.queryCommandState(d);
                            j.getDom() && (j.setDisabled(-1 == b), j.setChecked(b))
                        }
                    }), j
                }
            }(f.toLowerCase())
        }(i, j[i]);
        b.snapscreen = function (a, c, d) {
            d = a.options.labelMap.snapscreen || a.getLang("labelMap.snapscreen") || "";
            var f = new b.Button({
                className: "edui-for-snapscreen", title: d, onclick: function () {
                    a.execCommand("snapscreen")
                }, theme: a.options.theme
            });
            if (b.buttons.snapscreen = f, c = c || (a.options.iframeUrlMap || {}).snapscreen || e.snapscreen) {
                var g = new b.Dialog({
                    iframeUrl: a.ui.mapUrl(c),
                    editor: a,
                    className: "edui-for-snapscreen",
                    title: d,
                    buttons: [{
                        className: "edui-okbutton", label: a.getLang("ok"), editor: a, onclick: function () {
                            g.close(!0)
                        }
                    }, {
                        className: "edui-cancelbutton", label: a.getLang("cancel"), editor: a, onclick: function () {
                            g.close(!1)
                        }
                    }]
                });
                g.render(), a.ui._dialogs.snapscreenDialog = g
            }
            return a.addListener("selectionchange", function () {
                f.setDisabled(-1 == a.queryCommandState("snapscreen"))
            }), f
        }, b.insertcode = function (c, d, e) {
            d = c.options.insertcode || [], e = c.options.labelMap.insertcode || c.getLang("labelMap.insertcode") || "";
            var f = [];
            a.each(d, function (a, b) {
                f.push({
                    label: a, value: b, theme: c.options.theme, renderLabelHtml: function () {
                        return '<div class="edui-label %%-label" >' + (this.label || "") + "</div>"
                    }
                })
            });
            var g = new b.Combox({
                editor: c, items: f, onselect: function (a, b) {
                    c.execCommand("insertcode", this.items[b].value)
                }, onbuttonclick: function () {
                    this.showPopup()
                }, title: e, initValue: e, className: "edui-for-insertcode", indexByValue: function (a) {
                    if (a)for (var b, c = 0; b = this.items[c]; c++)if (-1 != b.value.indexOf(a))return c;
                    return -1
                }
            });
            return b.buttons.insertcode = g, c.addListener("selectionchange", function (a, b, d) {
                if (!d) {
                    var f = c.queryCommandState("insertcode");
                    if (-1 == f)g.setDisabled(!0); else {
                        g.setDisabled(!1);
                        var h = c.queryCommandValue("insertcode");
                        if (!h)return void g.setValue(e);
                        h && (h = h.replace(/['"]/g, "").split(",")[0]), g.setValue(h)
                    }
                }
            }), g
        }, b.fontfamily = function (c, d, e) {
            if (d = c.options.fontfamily || [], e = c.options.labelMap.fontfamily || c.getLang("labelMap.fontfamily") || "", d.length) {
                for (var f, g = 0, h = []; f = d[g]; g++) {
                    var i = c.getLang("fontfamily")[f.name] || "";
                    !function (b, d) {
                        h.push({
                            label: b, value: d, theme: c.options.theme, renderLabelHtml: function () {
                                return '<div class="edui-label %%-label" style="font-family:' + a.unhtml(this.value) + '">' + (this.label || "") + "</div>"
                            }
                        })
                    }(f.label || i, f.val)
                }
                var j = new b.Combox({
                    editor: c, items: h, onselect: function (a, b) {
                        c.execCommand("FontFamily", this.items[b].value)
                    }, onbuttonclick: function () {
                        this.showPopup()
                    }, title: e, initValue: e, className: "edui-for-fontfamily", indexByValue: function (a) {
                        if (a)for (var b, c = 0; b = this.items[c]; c++)if (-1 != b.value.indexOf(a))return c;
                        return -1
                    }
                });
                return b.buttons.fontfamily = j, c.addListener("selectionchange", function (a, b, d) {
                    if (!d) {
                        var e = c.queryCommandState("FontFamily");
                        if (-1 == e)j.setDisabled(!0); else {
                            j.setDisabled(!1);
                            var f = c.queryCommandValue("FontFamily");
                            f && (f = f.replace(/['"]/g, "").split(",")[0]), j.setValue(f)
                        }
                    }
                }), j
            }
        }, b.fontsize = function (a, c, d) {
            if (d = a.options.labelMap.fontsize || a.getLang("labelMap.fontsize") || "", c = c || a.options.fontsize || [], c.length) {
                for (var e = [], f = 0; f < c.length; f++) {
                    var g = c[f] + "px";
                    e.push({
                        label: g, value: g, theme: a.options.theme, renderLabelHtml: function () {
                            return '<div class="edui-label %%-label" style="line-height:1;font-size:' + this.value + '">' + (this.label || "") + "</div>"
                        }
                    })
                }
                var h = new b.Combox({
                    editor: a, items: e, title: d, initValue: d, onselect: function (b, c) {
                        a.execCommand("FontSize", this.items[c].value)
                    }, onbuttonclick: function () {
                        this.showPopup()
                    }, className: "edui-for-fontsize"
                });
                return b.buttons.fontsize = h, a.addListener("selectionchange", function (b, c, d) {
                    if (!d) {
                        var e = a.queryCommandState("FontSize");
                        -1 == e ? h.setDisabled(!0) : (h.setDisabled(!1), h.setValue(a.queryCommandValue("FontSize")))
                    }
                }), h
            }
        }, b.paragraph = function (c, d, e) {
            if (e = c.options.labelMap.paragraph || c.getLang("labelMap.paragraph") || "", d = c.options.paragraph || [], !a.isEmptyObject(d)) {
                var f = [];
                for (var g in d)f.push({
                    value: g,
                    label: d[g] || c.getLang("paragraph")[g],
                    theme: c.options.theme,
                    renderLabelHtml: function () {
                        return '<div class="edui-label %%-label"><span class="edui-for-' + this.value + '">' + (this.label || "") + "</span></div>"
                    }
                });
                var h = new b.Combox({
                    editor: c,
                    items: f,
                    title: e,
                    initValue: e,
                    className: "edui-for-paragraph",
                    onselect: function (a, b) {
                        c.execCommand("Paragraph", this.items[b].value)
                    },
                    onbuttonclick: function () {
                        this.showPopup()
                    }
                });
                return b.buttons.paragraph = h, c.addListener("selectionchange", function (a, b, d) {
                    if (!d) {
                        var e = c.queryCommandState("Paragraph");
                        if (-1 == e)h.setDisabled(!0); else {
                            h.setDisabled(!1);
                            var f = c.queryCommandValue("Paragraph"), g = h.indexByValue(f);
                            -1 != g ? h.setValue(f) : h.setValue(h.initValue)
                        }
                    }
                }), h
            }
        }, b.customstyle = function (a) {
            var c = a.options.customstyle || [], d = a.options.labelMap.customstyle || a.getLang("labelMap.customstyle") || "";
            if (c.length) {
                for (var e, f = a.getLang("customstyle"), g = 0, h = []; e = c[g++];)!function (b) {
                    var c = {};
                    c.label = b.label ? b.label : f[b.name], c.style = b.style, c.className = b.className, c.tag = b.tag, h.push({
                        label: c.label,
                        value: c,
                        theme: a.options.theme,
                        renderLabelHtml: function () {
                            return '<div class="edui-label %%-label"><' + c.tag + " " + (c.className ? ' class="' + c.className + '"' : "") + (c.style ? ' style="' + c.style + '"' : "") + ">" + c.label + "</" + c.tag + "></div>"
                        }
                    })
                }(e);
                var i = new b.Combox({
                    editor: a,
                    items: h,
                    title: d,
                    initValue: d,
                    className: "edui-for-customstyle",
                    onselect: function (b, c) {
                        a.execCommand("customstyle", this.items[c].value)
                    },
                    onbuttonclick: function () {
                        this.showPopup()
                    },
                    indexByValue: function (a) {
                        for (var b, c = 0; b = this.items[c++];)if (b.label == a)return c - 1;
                        return -1
                    }
                });
                return b.buttons.customstyle = i, a.addListener("selectionchange", function (b, c, d) {
                    if (!d) {
                        var e = a.queryCommandState("customstyle");
                        if (-1 == e)i.setDisabled(!0); else {
                            i.setDisabled(!1);
                            var f = a.queryCommandValue("customstyle"), g = i.indexByValue(f);
                            -1 != g ? i.setValue(f) : i.setValue(i.initValue)
                        }
                    }
                }), i
            }
        }, b.inserttable = function (a, c, d) {
            d = a.options.labelMap.inserttable || a.getLang("labelMap.inserttable") || "";
            var e = new b.TableButton({
                editor: a,
                title: d,
                className: "edui-for-inserttable",
                onpicktable: function (b, c, d) {
                    a.execCommand("InsertTable", {numRows: d, numCols: c, border: 1})
                },
                onbuttonclick: function () {
                    this.showPopup()
                }
            });
            return b.buttons.inserttable = e, a.addListener("selectionchange", function () {
                e.setDisabled(-1 == a.queryCommandState("inserttable"))
            }), e
        }, b.lineheight = function (a) {
            var c = a.options.lineheight || [];
            if (c.length) {
                for (var d, e = 0, f = []; d = c[e++];)f.push({
                    label: d,
                    value: d,
                    theme: a.options.theme,
                    onclick: function () {
                        a.execCommand("lineheight", this.value)
                    }
                });
                var g = new b.MenuButton({
                    editor: a,
                    className: "edui-for-lineheight",
                    title: a.options.labelMap.lineheight || a.getLang("labelMap.lineheight") || "",
                    items: f,
                    onbuttonclick: function () {
                        var b = a.queryCommandValue("LineHeight") || this.value;
                        a.execCommand("LineHeight", b)
                    }
                });
                return b.buttons.lineheight = g, a.addListener("selectionchange", function () {
                    var b = a.queryCommandState("LineHeight");
                    if (-1 == b)g.setDisabled(!0); else {
                        g.setDisabled(!1);
                        var c = a.queryCommandValue("LineHeight");
                        c && g.setValue((c + "").replace(/cm/, "")), g.setChecked(b)
                    }
                }), g
            }
        };
        for (var k, l = ["top", "bottom"], m = 0; k = l[m++];)!function (a) {
            b["rowspacing" + a] = function (c) {
                var d = c.options["rowspacing" + a] || [];
                if (!d.length)return null;
                for (var e, f = 0, g = []; e = d[f++];)g.push({
                    label: e,
                    value: e,
                    theme: c.options.theme,
                    onclick: function () {
                        c.execCommand("rowspacing", this.value, a)
                    }
                });
                var h = new b.MenuButton({
                    editor: c,
                    className: "edui-for-rowspacing" + a,
                    title: c.options.labelMap["rowspacing" + a] || c.getLang("labelMap.rowspacing" + a) || "",
                    items: g,
                    onbuttonclick: function () {
                        var b = c.queryCommandValue("rowspacing", a) || this.value;
                        c.execCommand("rowspacing", b, a)
                    }
                });
                return b.buttons[a] = h, c.addListener("selectionchange", function () {
                    var b = c.queryCommandState("rowspacing", a);
                    if (-1 == b)h.setDisabled(!0); else {
                        h.setDisabled(!1);
                        var d = c.queryCommandValue("rowspacing", a);
                        d && h.setValue((d + "").replace(/%/, "")), h.setChecked(b)
                    }
                }), h
            }
        }(k);
        for (var n, o = ["insertorderedlist", "insertunorderedlist"], p = 0; n = o[p++];)!function (a) {
            b[a] = function (c) {
                var d = c.options[a], e = function () {
                    c.execCommand(a, this.value)
                }, f = [];
                for (var g in d)f.push({
                    label: d[g] || c.getLang()[a][g] || "",
                    value: g,
                    theme: c.options.theme,
                    onclick: e
                });
                var h = new b.MenuButton({
                    editor: c,
                    className: "edui-for-" + a,
                    title: c.getLang("labelMap." + a) || "",
                    items: f,
                    onbuttonclick: function () {
                        var b = c.queryCommandValue(a) || this.value;
                        c.execCommand(a, b)
                    }
                });
                return b.buttons[a] = h, c.addListener("selectionchange", function () {
                    var b = c.queryCommandState(a);
                    if (-1 == b)h.setDisabled(!0); else {
                        h.setDisabled(!1);
                        var d = c.queryCommandValue(a);
                        h.setValue(d), h.setChecked(b)
                    }
                }), h
            }
        }(n);
        b.fullscreen = function (a, c) {
            c = a.options.labelMap.fullscreen || a.getLang("labelMap.fullscreen") || "";
            var d = new b.Button({
                className: "edui-for-fullscreen",
                title: c,
                theme: a.options.theme,
                onclick: function () {
                    a.ui && a.ui.setFullScreen(!a.ui.isFullScreen()), this.setChecked(a.ui.isFullScreen())
                }
            });
            return b.buttons.fullscreen = d, a.addListener("selectionchange", function () {
                var b = a.queryCommandState("fullscreen");
                d.setDisabled(-1 == b), d.setChecked(a.ui.isFullScreen())
            }), d
        }, b.emotion = function (a, c) {
            var d = "emotion", f = new b.MultiMenuPop({
                title: a.options.labelMap[d] || a.getLang("labelMap." + d) || "",
                editor: a,
                className: "edui-for-" + d,
                iframeUrl: a.ui.mapUrl(c || (a.options.iframeUrlMap || {})[d] || e[d])
            });
            return b.buttons[d] = f, a.addListener("selectionchange", function () {
                f.setDisabled(-1 == a.queryCommandState(d))
            }), f
        }, b.autotypeset = function (a) {
            var c = new b.AutoTypeSetButton({
                editor: a,
                title: a.options.labelMap.autotypeset || a.getLang("labelMap.autotypeset") || "",
                className: "edui-for-autotypeset",
                onbuttonclick: function () {
                    a.execCommand("autotypeset")
                }
            });
            return b.buttons.autotypeset = c, a.addListener("selectionchange", function () {
                c.setDisabled(-1 == a.queryCommandState("autotypeset"))
            }), c
        }, b.simpleupload = function (a) {
            var c = "simpleupload", d = new b.Button({
                className: "edui-for-" + c,
                title: a.options.labelMap[c] || a.getLang("labelMap." + c) || "",
                onclick: function () {
                },
                theme: a.options.theme,
                showText: !1
            });
            return b.buttons[c] = d, a.addListener("ready", function () {
                var b = d.getDom("body"), c = b.children[0];
                a.fireEvent("simpleuploadbtnready", c)
            }), a.addListener("selectionchange", function (b, e, f) {
                var g = a.queryCommandState(c);
                -1 == g ? (d.setDisabled(!0), d.setChecked(!1)) : f || (d.setDisabled(!1), d.setChecked(g))
            }), d
        }
    }(), function () {
        function a(a) {
            this.initOptions(a), this.initEditorUI()
        }

        var b = baidu.editor.utils, c = baidu.editor.ui.uiUtils, d = baidu.editor.ui.UIBase, e = baidu.editor.dom.domUtils, f = [];
        a.prototype = {
            uiName: "editor", initEditorUI: function () {
                function a(a, b) {
                    a.setOpt({
                        wordCount: !0,
                        maximumWords: 1e4,
                        wordCountMsg: a.options.wordCountMsg || a.getLang("wordCountMsg"),
                        wordOverFlowMsg: a.options.wordOverFlowMsg || a.getLang("wordOverFlowMsg")
                    });
                    var c = a.options, d = c.maximumWords, e = c.wordCountMsg, f = c.wordOverFlowMsg, g = b.getDom("wordcount");
                    if (c.wordCount) {
                        var h = a.getContentLength(!0);
                        h > d ? (g.innerHTML = f, a.fireEvent("wordcountoverflow")) : g.innerHTML = e.replace("{#leave}", d - h).replace("{#count}", h)
                    }
                }

                this.editor.ui = this, this._dialogs = {}, this.initUIBase(), this._initToolbars();
                var b = this.editor, c = this;
                b.addListener("ready", function () {
                    function d() {
                        a(b, c), e.un(b.document, "click", arguments.callee)
                    }

                    b.getDialog = function (a) {
                        return b.ui._dialogs[a + "Dialog"]
                    }, e.on(b.window, "scroll", function (a) {
                        baidu.editor.ui.Popup.postHide(a)
                    }), b.ui._actualFrameWidth = b.options.initialFrameWidth, UE.browser.ie && 6 === UE.browser.version && b.container.ownerDocument.execCommand("BackgroundImageCache", !1, !0), b.options.elementPathEnabled && (b.ui.getDom("elementpath").innerHTML = '<div class="edui-editor-breadcrumb">' + b.getLang("elementPathTip") + ":</div>"), b.options.wordCount && (e.on(b.document, "click", d), b.ui.getDom("wordcount").innerHTML = b.getLang("wordCountTip")), b.ui._scale(), b.options.scaleEnabled ? (b.autoHeightEnabled && b.disableAutoHeight(), c.enableScale()) : c.disableScale(), b.options.elementPathEnabled || b.options.wordCount || b.options.scaleEnabled || (b.ui.getDom("elementpath").style.display = "none", b.ui.getDom("wordcount").style.display = "none", b.ui.getDom("scale").style.display = "none"), b.selection.isFocus() && b.fireEvent("selectionchange", !1, !0)
                }), b.addListener("mousedown", function (a, b) {
                    var c = b.target || b.srcElement;
                    baidu.editor.ui.Popup.postHide(b, c), baidu.editor.ui.ShortCutMenu.postHide(b)
                }), b.addListener("delcells", function () {
                    UE.ui.edittip && new UE.ui.edittip(b), b.getDialog("edittip").open()
                });
                var d, f, g = !1;
                b.addListener("afterpaste", function () {
                    b.queryCommandState("pasteplain") || (baidu.editor.ui.PastePicker && (d = new baidu.editor.ui.Popup({
                        content: new baidu.editor.ui.PastePicker({editor: b}),
                        editor: b,
                        className: "edui-wordpastepop"
                    }), d.render()), g = !0)
                }), b.addListener("afterinserthtml", function () {
                    clearTimeout(f), f = setTimeout(function () {
                        if (d && (g || b.ui._isTransfer)) {
                            if (d.isHidden()) {
                                var a = e.createElement(b.document, "span", {
                                    style: "line-height:0px;",
                                    innerHTML: "\ufeff"
                                }), c = b.selection.getRange();
                                c.insertNode(a);
                                var f = getDomNode(a, "firstChild", "previousSibling");
                                f && d.showAnchor(3 == f.nodeType ? f.parentNode : f), e.remove(a)
                            } else d.show();
                            delete b.ui._isTransfer, g = !1
                        }
                    }, 200)
                }), b.addListener("contextmenu", function (a, b) {
                    baidu.editor.ui.Popup.postHide(b)
                }), b.addListener("keydown", function (a, b) {
                    d && d.dispose(b);
                    var c = b.keyCode || b.which;
                    b.altKey && 90 == c && UE.ui.buttons.fullscreen.onclick()
                }), b.addListener("wordcount", function (b) {
                    a(this, c)
                }), b.addListener("selectionchange", function () {
                    b.options.elementPathEnabled && c[(-1 == b.queryCommandState("elementpath") ? "dis" : "en") + "ableElementPath"](), b.options.scaleEnabled && c[(-1 == b.queryCommandState("scale") ? "dis" : "en") + "ableScale"]()
                });
                var h = new baidu.editor.ui.Popup({
                    editor: b,
                    content: "",
                    className: "edui-bubble",
                    _onEditButtonClick: function () {
                        this.hide(), b.ui._dialogs.linkDialog.open()
                    },
                    _onImgEditButtonClick: function (a) {
                        this.hide(), b.ui._dialogs[a] && b.ui._dialogs[a].open()
                    },
                    _onImgSetFloat: function (a) {
                        this.hide(), b.execCommand("imagefloat", a)
                    },
                    _setIframeAlign: function (a) {
                        var b = h.anchorEl, c = b.cloneNode(!0);
                        switch (a) {
                            case-2:
                                c.setAttribute("align", "");
                                break;
                            case-1:
                                c.setAttribute("align", "left");
                                break;
                            case 1:
                                c.setAttribute("align", "right")
                        }
                        b.parentNode.insertBefore(c, b), e.remove(b), h.anchorEl = c, h.showAnchor(h.anchorEl)
                    },
                    _updateIframe: function () {
                        var a = b._iframe = h.anchorEl;
                        e.hasClass(a, "ueditor_baidumap") ? (b.selection.getRange().selectNode(a).select(), b.ui._dialogs.mapDialog.open(), h.hide()) : (b.ui._dialogs.insertframeDialog.open(), h.hide())
                    },
                    _onRemoveButtonClick: function (a) {
                        b.execCommand(a), this.hide()
                    },
                    queryAutoHide: function (a) {
                        return a && a.ownerDocument == b.document && ("img" == a.tagName.toLowerCase() || e.findParentByTagName(a, "a", !0)) ? a !== h.anchorEl : baidu.editor.ui.Popup.prototype.queryAutoHide.call(this, a)
                    }
                });
                h.render(), b.options.imagePopup && (b.addListener("mouseover", function (a, c) {
                    c = c || window.event;
                    var d = c.target || c.srcElement;
                    if (b.ui._dialogs.insertframeDialog && /iframe/gi.test(d.tagName)) {
                        var e = h.formatHtml("<nobr>" + b.getLang("property") + ': <span onclick=$$._setIframeAlign(-2) class="edui-clickable">' + b.getLang("default") + '</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(-1) class="edui-clickable">' + b.getLang("justifyleft") + '</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(1) class="edui-clickable">' + b.getLang("justifyright") + '</span>&nbsp;&nbsp; <span onclick="$$._updateIframe( this);" class="edui-clickable">' + b.getLang("modify") + "</span></nobr>");
                        e ? (h.getDom("content").innerHTML = e, h.anchorEl = d, h.showAnchor(h.anchorEl)) : h.hide()
                    }
                }), b.addListener("selectionchange", function (a, c) {
                    if (c) {
                        var d = "", f = "", g = b.selection.getRange().getClosedNode(), i = b.ui._dialogs;
                        if (g && "IMG" == g.tagName) {
                            var j = "insertimageDialog";
                            if (-1 == g.className.indexOf("edui-faked-video") && -1 == g.className.indexOf("edui-upload-video") || (j = "insertvideoDialog"), -1 != g.className.indexOf("edui-faked-webapp") && (j = "webappDialog"), -1 != g.src.indexOf("http://api.map.baidu.com") && (j = "mapDialog"), -1 != g.className.indexOf("edui-faked-music") && (j = "musicDialog"), -1 != g.src.indexOf("http://maps.google.com/maps/api/staticmap") && (j = "gmapDialog"), g.getAttribute("anchorname") && (j = "anchorDialog", d = h.formatHtml("<nobr>" + b.getLang("property") + ': <span onclick=$$._onImgEditButtonClick("anchorDialog") class="edui-clickable">' + b.getLang("modify") + "</span>&nbsp;&nbsp;<span onclick=$$._onRemoveButtonClick('anchor') class=\"edui-clickable\">" + b.getLang("delete") + "</span></nobr>")), g.getAttribute("word_img") && (b.word_img = [g.getAttribute("word_img")], j = "wordimageDialog"), (e.hasClass(g, "loadingclass") || e.hasClass(g, "loaderrorclass")) && (j = ""), !i[j])return;
                            f = "<nobr>" + b.getLang("property") + ': <span onclick=$$._onImgSetFloat("none") class="edui-clickable">' + b.getLang("default") + '</span>&nbsp;&nbsp;<span onclick=$$._onImgSetFloat("left") class="edui-clickable">' + b.getLang("justifyleft") + '</span>&nbsp;&nbsp;<span onclick=$$._onImgSetFloat("right") class="edui-clickable">' + b.getLang("justifyright") + '</span>&nbsp;&nbsp;<span onclick=$$._onImgSetFloat("center") class="edui-clickable">' + b.getLang("justifycenter") + "</span>&nbsp;&nbsp;<span onclick=\"$$._onImgEditButtonClick('" + j + '\');" class="edui-clickable">' + b.getLang("modify") + "</span></nobr>", !d && (d = h.formatHtml(f))
                        }
                        if (b.ui._dialogs.linkDialog) {
                            var k, l = b.queryCommandValue("link");
                            if (l && (k = l.getAttribute("_href") || l.getAttribute("href", 2))) {
                                var m = k;
                                k.length > 30 && (m = k.substring(0, 20) + "..."), d && (d += '<div style="height:5px;"></div>'), d += h.formatHtml("<nobr>" + b.getLang("anthorMsg") + ': <a target="_blank" href="' + k + '" title="' + k + '" >' + m + '</a> <span class="edui-clickable" onclick="$$._onEditButtonClick();">' + b.getLang("modify") + '</span> <span class="edui-clickable" onclick="$$._onRemoveButtonClick(\'unlink\');"> ' + b.getLang("clear") + "</span></nobr>"), h.showAnchor(l)
                            }
                        }
                        d ? (h.getDom("content").innerHTML = d, h.anchorEl = g || l, h.showAnchor(h.anchorEl)) : h.hide()
                    }
                }))
            }, _initToolbars: function () {
                for (var a = this.editor, c = this.toolbars || [], d = [], e = 0; e < c.length; e++) {
                    for (var f = c[e], g = new baidu.editor.ui.Toolbar({theme: a.options.theme}), h = 0; h < f.length; h++) {
                        var i = f[h], j = null;
                        if ("string" == typeof i) {
                            if (i = i.toLowerCase(), "|" == i && (i = "Separator"), "||" == i && (i = "Breakline"), baidu.editor.ui[i] && (j = new baidu.editor.ui[i](a)), "fullscreen" == i) {
                                d && d[0] ? d[0].items.splice(0, 0, j) : j && g.items.splice(0, 0, j);
                                continue
                            }
                        } else j = i;
                        j && j.id && g.add(j)
                    }
                    d[e] = g
                }
                b.each(UE._customizeUI, function (b, c) {
                    var d, e;
                    return b.id && b.id != a.key ? !1 : (d = b.execFn.call(a, a, c), void(d && (e = b.index, void 0 === e && (e = g.items.length), g.add(d, e))))
                }), this.toolbars = d
            }, getHtmlTpl: function () {
                return '<div id="##" class="%%"><div id="##_toolbarbox" class="%%-toolbarbox">' + (this.toolbars.length ? '<div id="##_toolbarboxouter" class="%%-toolbarboxouter"><div class="%%-toolbarboxinner">' + this.renderToolbarBoxHtml() + "</div></div>" : "") + '<div id="##_toolbarmsg" class="%%-toolbarmsg" style="display:none;"><div id = "##_upload_dialog" class="%%-toolbarmsg-upload" onclick="$$.showWordImageDialog();">' + this.editor.getLang("clickToUpload") + '</div><div class="%%-toolbarmsg-close" onclick="$$.hideToolbarMsg();">x</div><div id="##_toolbarmsg_label" class="%%-toolbarmsg-label"></div><div style="height:0;overflow:hidden;clear:both;"></div></div><div id="##_message_holder" class="%%-messageholder"></div></div><div id="##_iframeholder" class="%%-iframeholder"></div><div id="##_bottombar" class="%%-bottomContainer"><table><tr><td id="##_elementpath" class="%%-bottombar"></td><td id="##_wordcount" class="%%-wordcount"></td><td id="##_scale" class="%%-scale"><div class="%%-icon"></div></td></tr></table></div><div id="##_scalelayer"></div></div>'
            }, showWordImageDialog: function () {
                this._dialogs.wordimageDialog.open()
            }, renderToolbarBoxHtml: function () {
                for (var a = [], b = 0; b < this.toolbars.length; b++)a.push(this.toolbars[b].renderHtml());
                return a.join("")
            }, setFullScreen: function (a) {
                var b = this.editor, c = b.container.parentNode.parentNode;
                if (this._fullscreen != a) {
                    if (this._fullscreen = a, this.editor.fireEvent("beforefullscreenchange", a), baidu.editor.browser.gecko)var d = b.selection.getRange().createBookmark();
                    if (a) {
                        for (; "BODY" != c.tagName;) {
                            var e = baidu.editor.dom.domUtils.getComputedStyle(c, "position");
                            f.push(e), c.style.position = "static", c = c.parentNode
                        }
                        this._bakHtmlOverflow = document.documentElement.style.overflow, this._bakBodyOverflow = document.body.style.overflow, this._bakAutoHeight = this.editor.autoHeightEnabled, this._bakScrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop), this._bakEditorContaninerWidth = b.iframe.parentNode.offsetWidth, this._bakAutoHeight && (b.autoHeightEnabled = !1, this.editor.disableAutoHeight()), document.documentElement.style.overflow = "hidden", window.scrollTo(0, window.scrollY), this._bakCssText = this.getDom().style.cssText, this._bakCssText1 = this.getDom("iframeholder").style.cssText, b.iframe.parentNode.style.width = "", this._updateFullScreen()
                    } else {
                        for (; "BODY" != c.tagName;)c.style.position = f.shift(), c = c.parentNode;
                        this.getDom().style.cssText = this._bakCssText, this.getDom("iframeholder").style.cssText = this._bakCssText1, this._bakAutoHeight && (b.autoHeightEnabled = !0, this.editor.enableAutoHeight()), document.documentElement.style.overflow = this._bakHtmlOverflow, document.body.style.overflow = this._bakBodyOverflow, b.iframe.parentNode.style.width = this._bakEditorContaninerWidth + "px", window.scrollTo(0, this._bakScrollTop)
                    }
                    if (browser.gecko && "true" === b.body.contentEditable) {
                        var g = document.createElement("input");
                        document.body.appendChild(g), b.body.contentEditable = !1, setTimeout(function () {
                            g.focus(), setTimeout(function () {
                                b.body.contentEditable = !0, b.fireEvent("fullscreenchanged", a), b.selection.getRange().moveToBookmark(d).select(!0), baidu.editor.dom.domUtils.remove(g), a && window.scroll(0, 0)
                            }, 0)
                        }, 0)
                    }
                    "true" === b.body.contentEditable && (this.editor.fireEvent("fullscreenchanged", a), this.triggerLayout())
                }
            }, _updateFullScreen: function () {
                if (this._fullscreen) {
                    var a = c.getViewportRect();
                    if (this.getDom().style.cssText = "border:0;position:absolute;left:0;top:" + (this.editor.options.topOffset || 0) + "px;width:" + a.width + "px;height:" + a.height + "px;z-index:" + (1 * this.getDom().style.zIndex + 100), c.setViewportOffset(this.getDom(), {
                            left: 0,
                            top: this.editor.options.topOffset || 0
                        }), this.editor.setHeight(a.height - this.getDom("toolbarbox").offsetHeight - this.getDom("bottombar").offsetHeight - (this.editor.options.topOffset || 0), !0), browser.gecko)try {
                        window.onresize()
                    } catch (b) {
                    }
                }
            }, _updateElementPath: function () {
                var a, b = this.getDom("elementpath");
                if (this.elementPathEnabled && (a = this.editor.queryCommandValue("elementpath"))) {
                    for (var c, d = [], e = 0; c = a[e]; e++)d[e] = this.formatHtml('<span unselectable="on" onclick="$$.editor.execCommand(&quot;elementpath&quot;, &quot;' + e + '&quot;);">' + c + "</span>");
                    b.innerHTML = '<div class="edui-editor-breadcrumb" onmousedown="return false;">' + this.editor.getLang("elementPathTip") + ": " + d.join(" &gt; ") + "</div>"
                } else b.style.display = "none"
            }, disableElementPath: function () {
                var a = this.getDom("elementpath");
                a.innerHTML = "", a.style.display = "none", this.elementPathEnabled = !1
            }, enableElementPath: function () {
                var a = this.getDom("elementpath");
                a.style.display = "", this.elementPathEnabled = !0, this._updateElementPath()
            }, _scale: function () {
                function a() {
                    o = e.getXY(h), p || (p = g.options.minFrameHeight + j.offsetHeight + k.offsetHeight), m.style.cssText = "position:absolute;left:0;display:;top:0;background-color:#41ABFF;opacity:0.4;filter: Alpha(opacity=40);width:" + h.offsetWidth + "px;height:" + h.offsetHeight + "px;z-index:" + (g.options.zIndex + 1), e.on(f, "mousemove", b), e.on(i, "mouseup", c), e.on(f, "mouseup", c)
                }

                function b(a) {
                    d();
                    var b = a || window.event;
                    r = b.pageX || f.documentElement.scrollLeft + b.clientX, s = b.pageY || f.documentElement.scrollTop + b.clientY, t = r - o.x, u = s - o.y, t >= q && (n = !0, m.style.width = t + "px"), u >= p && (n = !0, m.style.height = u + "px")
                }

                function c() {
                    n && (n = !1, g.ui._actualFrameWidth = m.offsetWidth - 2, h.style.width = g.ui._actualFrameWidth + "px", g.setHeight(m.offsetHeight - k.offsetHeight - j.offsetHeight - 2, !0)), m && (m.style.display = "none"), d(), e.un(f, "mousemove", b), e.un(i, "mouseup", c), e.un(f, "mouseup", c)
                }

                function d() {
                    browser.ie ? f.selection.clear() : window.getSelection().removeAllRanges()
                }

                var f = document, g = this.editor, h = g.container, i = g.document, j = this.getDom("toolbarbox"), k = this.getDom("bottombar"), l = this.getDom("scale"), m = this.getDom("scalelayer"), n = !1, o = null, p = 0, q = g.options.minFrameWidth, r = 0, s = 0, t = 0, u = 0, v = this;
                this.editor.addListener("fullscreenchanged", function (a, b) {
                    if (b)v.disableScale(); else if (v.editor.options.scaleEnabled) {
                        v.enableScale();
                        var c = v.editor.document.createElement("span");
                        v.editor.body.appendChild(c), v.editor.body.style.height = Math.max(e.getXY(c).y, v.editor.iframe.offsetHeight - 20) + "px", e.remove(c)
                    }
                }), this.enableScale = function () {
                    1 != g.queryCommandState("source") && (l.style.display = "", this.scaleEnabled = !0, e.on(l, "mousedown", a))
                }, this.disableScale = function () {
                    l.style.display = "none", this.scaleEnabled = !1, e.un(l, "mousedown", a)
                }
            }, isFullScreen: function () {
                return this._fullscreen
            }, postRender: function () {
                d.prototype.postRender.call(this);
                for (var a = 0; a < this.toolbars.length; a++)this.toolbars[a].postRender();
                var b, c = this, e = baidu.editor.dom.domUtils, f = function () {
                    clearTimeout(b), b = setTimeout(function () {
                        c._updateFullScreen()
                    })
                };
                e.on(window, "resize", f), c.addListener("destroy", function () {
                    e.un(window, "resize", f), clearTimeout(b)
                })
            }, showToolbarMsg: function (a, b) {
                if (this.getDom("toolbarmsg_label").innerHTML = a, this.getDom("toolbarmsg").style.display = "", !b) {
                    var c = this.getDom("upload_dialog");
                    c.style.display = "none"
                }
            }, hideToolbarMsg: function () {
                this.getDom("toolbarmsg").style.display = "none"
            }, mapUrl: function (a) {
                return a ? a.replace("~/", this.editor.options.UEDITOR_HOME_URL || "") : ""
            }, triggerLayout: function () {
                var a = this.getDom();
                "1" == a.style.zoom ? a.style.zoom = "100%" : a.style.zoom = "1"
            }
        }, b.inherits(a, baidu.editor.ui.UIBase);
        var g = {};
        UE.ui.Editor = function (c) {
            var d = new UE.Editor(c);
            d.options.editor = d, b.loadFile(document, {
                href: d.options.themePath + d.options.theme + "/css/ueditor.css",
                tag: "link",
                type: "text/css",
                rel: "stylesheet"
            });
            var f = d.render;
            return d.render = function (c) {
                c.constructor === String && (d.key = c, g[c] = d), b.domReady(function () {
                    function b() {
                        if (d.setOpt({labelMap: d.options.labelMap || d.getLang("labelMap")}), new a(d.options), c && (c.constructor === String && (c = document.getElementById(c)), c && c.getAttribute("name") && (d.options.textarea = c.getAttribute("name")), c && /script|textarea/gi.test(c.tagName))) {
                            var b = document.createElement("div");
                            c.parentNode.insertBefore(b, c);
                            var g = c.value || c.innerHTML;
                            d.options.initialContent = /^[\t\r\n ]*$/.test(g) ? d.options.initialContent : g.replace(/>[\n\r\t]+([ ]{4})+/g, ">").replace(/[\n\r\t]+([ ]{4})+</g, "<").replace(/>[\n\r\t]+</g, "><"), c.className && (b.className = c.className), c.style.cssText && (b.style.cssText = c.style.cssText), /textarea/i.test(c.tagName) ? (d.textarea = c, d.textarea.style.display = "none") : c.parentNode.removeChild(c), c.id && (b.id = c.id, e.removeAttributes(c, "id")), c = b, c.innerHTML = ""
                        }
                        e.addClass(c, "edui-" + d.options.theme), d.ui.render(c);
                        var h = d.options;
                        d.container = d.ui.getDom();
                        for (var i, j = e.findParents(c, !0), k = [], l = 0; i = j[l]; l++)k[l] = i.style.display, i.style.display = "block";
                        if (h.initialFrameWidth)h.minFrameWidth = h.initialFrameWidth; else {
                            h.minFrameWidth = h.initialFrameWidth = c.offsetWidth;
                            var m = c.style.width;
                            /%$/.test(m) && (h.initialFrameWidth = m)
                        }
                        h.initialFrameHeight ? h.minFrameHeight = h.initialFrameHeight : h.initialFrameHeight = h.minFrameHeight = c.offsetHeight;
                        for (var i, l = 0; i = j[l]; l++)i.style.display = k[l];
                        c.style.height && (c.style.height = ""), d.container.style.width = h.initialFrameWidth + (/%$/.test(h.initialFrameWidth) ? "" : "px"), d.container.style.zIndex = h.zIndex, f.call(d, d.ui.getDom("iframeholder")), d.fireEvent("afteruiready")
                    }

                    d.langIsReady ? b() : d.addListener("langReady", b)
                })
            }, d
        }, UE.getEditor = function (a, b) {
            var c = g[a];
            return c || (c = g[a] = new UE.ui.Editor(b), c.render(a)), c
        }, UE.delEditor = function (a) {
            var b;
            (b = g[a]) && (b.key && b.destroy(), delete g[a])
        }, UE.registerUI = function (a, c, d, e) {
            b.each(a.split(/\s+/), function (a) {
                UE._customizeUI[a] = {id: e, execFn: c, index: d}
            })
        }
    }(), UE.registerUI("message", function (a) {
        function b() {
            var a = g.ui.getDom("toolbarbox");
            a && (c.style.top = a.offsetHeight + 3 + "px"), c.style.zIndex = Math.max(g.options.zIndex, g.iframe.style.zIndex) + 1
        }

        var c, d = baidu.editor.ui, e = d.Message, f = [], g = a;
        g.addListener("ready", function () {
            c = document.getElementById(g.ui.id + "_message_holder"), b(), setTimeout(function () {
                b()
            }, 500)
        }), g.addListener("showmessage", function (a, d) {
            d = utils.isString(d) ? {content: d} : d;
            var h = new e({
                timeout: d.timeout,
                type: d.type,
                content: d.content,
                keepshow: d.keepshow,
                editor: g
            }), i = d.id || "msg_" + (+new Date).toString(36);
            return h.render(c), f[i] = h, h.reset(d), b(), i
        }), g.addListener("updatemessage", function (a, b, d) {
            d = utils.isString(d) ? {content: d} : d;
            var e = f[b];
            e.render(c), e && e.reset(d)
        }), g.addListener("hidemessage", function (a, b) {
            var c = f[b];
            c && c.hide()
        })
    }), UE.registerUI("autosave", function (a) {
        var b = null, c = null;
        a.on("afterautosave", function () {
            clearTimeout(b), b = setTimeout(function () {
                c && a.trigger("hidemessage", c), c = a.trigger("showmessage", {
                    content: a.getLang("autosave.success"),
                    timeout: 2e3
                })
            }, 2e3)
        })
    })
}();