themebuilder.js 102 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
if (kendo.support.browser.webkit || kendo.support.browser.mozilla || (kendo.support.browser.msie &&  kendo.support.browser.version >= 10)) {
    (function ($, undefined) {

        var devices = [ "ios7", "ios", "android", "blackberry", "wp", "flat" ], CtrlDown = false,
            originalToggle, visibleOSes, wasActive, helpRead,
            deviceClasses = $.map(devices, function (value) { return ".km-" + value; }),
            extend = $.extend, importWindow, exportWindow,
            each = $.each,
            dragging = false,
            globalUndoBuffer = [],
            globalRedoBuffer = [],
            click = kendo.support.mobileOS ? "touchend" : "click",
            defaultCSS = { cursor: "default", background: "", color: "", "border-color": "", font: "", "text-shadow": "" },
            browsers = [ "-webkit-", "-moz-", "-ms-" ],
            propertyTargets = {
                color: [ "background-color", "color", "border-color" ],
                gradient: [ "background-image" ],
                pattern: [ "background-image" ],
                font: [ "font" ]
            },
            packages = {
                color: [ "background-color" ],
                "background-color": [ "background-color" ],
                "border-color": [ "background-color" ],
                "background-image": [ "background-image", "background-repeat", "background-position" ],
                gradient: [ "background-image" ],
                pattern: [ "background-image", "background-repeat", "background-position" ],
                font: [ "font-family", "font-size", "font-weight", "font-style", "line-height", "text-shadow" ]
            },
            tools = {
                color: new Color(),
                gradient: new Gradient(),
                pattern: {
                    get: function () { return this.result; },
                    set: function (result) { this.result = result; return this; }
                },
                font: {
                    get: function () { return this.result; },
                    set: function (result) { this.result = result; return this; }
                }
            },
            engineTool = null,
            backgroundSplitRegExp = /\s*,\s*(?=-|url)/i,
            properties = propertyTargets.color.concat(propertyTargets.gradient, propertyTargets.pattern, propertyTargets.font),
            TRANSITION = kendo.support.transitions.css + "transition",
            fillSvg = 'url(\'data:image/svg+xml;utf-8,<svg version="1.1" xmlns="http:%2F%2Fwww.w3.org%2F2000%2Fsvg" xmlns:xlink="http:%2F%2Fwww.w3.org%2F1999%2Fxlink" width="28" height="38"><linearGradient id="shadow" gradientUnits="userSpaceOnUse" x1="14" y1="25" x2="14" y2="0"><stop offset="0" style="stop-color:rgba(0,0,0,.3)"%2F><%2FlinearGradient><path fill="url(%23shadow)" d="M26.667,15.236c0-6.996-5.671-12.667-12.667-12.667c-6.995,0-12.667,5.672-12.667,12.667c0,4.78,2.651,8.938,6.562,11.097 C10.695,31.772,14,36.95,14,36.95s3.305-5.178,6.105-10.617C24.017,24.175,26.667,20.017,26.667,15.236z"%2F><path fill="%23FFF" d="M26.667,13.819c0-6.996-5.671-12.667-12.667-12.667c-6.995,0-12.667,5.672-12.667,12.667 c0,4.78,2.651,8.938,6.562,11.097C10.695,30.355,14,35.533,14,35.533s3.305-5.178,6.105-10.617 C24.017,22.758,26.667,18.6,26.667,13.819z"%2F><linearGradient id="ID" gradientUnits="userSpaceOnUse" x1="50%" y1="0" x2="50%" y2="28"><stop offset="0"%2F><%2FlinearGradient><circle fill="url(%23sq)" cx="14" cy="14" r="11"%2F><pattern id="sq" patternUnits="userSpaceOnUse" x="0" y="0" width="14" height="14" patternTransform="rotate(45)"><rect fill="%23888" x="0" y="0" width="14" height="14"%2f><rect fill="%23666" x="0" y="0" width="7" height="7"%2f><rect fill="%23666" x="7" y="7" width="7" height="7"%2f></pattern><circle fill="url(%23ID)" cx="14" cy="14" r="11"%2F><path fill="rgba(0,0,0,.3)" d="M14,4.403c5.616,0,10.189,4.413,10.473,9.958c0.009-0.18,0.027-0.359,0.027-0.542c0-5.799-4.701-10.5-10.5-10.5 S3.5,8.021,3.5,13.82c0,0.183,0.018,0.361,0.027,0.542C3.811,8.816,8.384,4.403,14,4.403z"%2F><linearGradient id="gr1" gradientUnits="userSpaceOnUse" x1="0" y1="0" x2="100%" y2="100%"><stop offset=".25" stop-color="%23666"%2F><stop offset=".25" stop-opacity="0"%2F><%2FlinearGradient><linearGradient id="gr2" gradientUnits="userSpaceOnUse" x1="0" y1="100%" x2="0" y2="100%"><stop offset=".25" stop-color="%23666"%2F><stop offset=".25" stop-opacity="0"%2F><%2FlinearGradient><linearGradient id="gr3" gradientUnits="userSpaceOnUse" x1="0" y1="0" x2="100%" y2="100%"><stop offset=".75" stop-opacity="0"%2F><stop offset=".75" stop-color="%23666"%2F><%2FlinearGradient><linearGradient id="gr4" gradientUnits="userSpaceOnUse" x1="0" y1="100%" x2="0" y2="100%"><stop offset=".75" stop-opacity="0"%2F><stop offset=".75" stop-color="%23666"%2F><%2FlinearGradient><%2Fsvg>\')',
            ie10fillSvg = "<div class='ie10hint'>" + fillSvg.replace("url(\'data:image/svg+xml;utf-8,", "").replace(/\)$/, "").replace(/%2f/gi, "/").replace(/%23/gi, "#") + "</div>",
            cursorSvg = fillSvg + ' 14 37, crosshair',
            defaultColor = '<circle fill="url(%23ID)" cx="14" cy="14" r="11"%2F>',
            defaultIE10Color = '<circle fill="url(#ID)" cx="14" cy="14" r="11"/>',
            defaultPattern = '<circle fill="url(%23pattern)" cx="14" cy="14" r="11"%2F><pattern id="pattern" patternUnits="userSpaceOnUse" x="0" y="0" width="8" height="8"><image x="0" y="0" width="8" height="8" xlink:href="##" clip-path="url(%23clipmask)" %2F><%2Fpattern>',
            defaultFont = '<text x="14" y="17" width="28" text-anchor="middle" fill="%23fff" style="##">Aa<%2Ftext>',
            defaultStop = '<linearGradient id="ID" gradientUnits="userSpaceOnUse" x1="50%" y1="0" x2="50%" y2="28"><stop offset="0"%2F><%2FlinearGradient>',
            defaultIE10Stop = '<linearGradient id="ID" gradientUnits="userSpaceOnUse" x1="50%" y1="0" x2="50%" y2="28"><stop offset="0"/></linearGradient>',
            ui = kendo.ui,
            Widget = ui.Widget,
            applications = {},
            counter = 1,
            clones = extend([], devices),
            widgetList = {
                listitemactiveicon: {
                    name: "Active List Icon",
                    selector: ".km-state-active .km-listview-link .km-icon",
                    whitelist: [ "color", "background-image" ]
                },
                activeicon: {
                    name: "Active Icon",
                    selector: ".km-state-active span.km-icon",
                    whitelist: [ "color", "background-image" ]
                },
                icon: {
                    name: "Icon",
                    selector: ".km-icon",
                    whitelist: [ "color", "background-image", "width", "height" ]
                },
                activetext: {
                    name: "Active Text",
                    selector: ".km-active-state .km-text",
                    whitelist: [ "color" ],
                    blacklist: ".km-android .km-tabstrip .km-text, .km-blackberry .km-tabstrip .km-text, .km-meego .km-tabstrip .km-text"
                },
                text: {
                    name: "Text",
                    selector: ".km-text",
                    whitelist: [ "color" ],
                    blacklist: ".km-android .km-tabstrip .km-text, .km-blackberry .km-tabstrip .km-text, .km-meego .km-tabstrip .km-text"
                },
                grouptitleinset: {
                    name: "Group Title Inset",
                    selector: ".km-listgroupinset .km-group-title",
                    whitelist: [ "color", "background-color", "background-image" ]
                },
                grouptitle: {
                    name: "Group Title",
                    selector: ".km-listgroup .km-group-title",
                    whitelist: [ "color", "background-color", "background-image" ]
                },
                viewtitle: {
                    name: "View Title",
                    selector: ".km-view-title > *",
                    whitelist: [ "color" ]
                },
                listitemactivelink: {
                    name: "Active List Link",
                    selector: ".km-state-active .km-listview-link",
                    whitelist: [ "background-color", "background-image", "border-radius", "color", "border-color" ]
                },
                listitem: {
                    name: "List Item",
                    selector: ".km-list > li",
                    activeSelector: ".km-state-active",
                    whitelist: [ "background-color", "background-image", "border-radius", "color", "border-color" ]
                },
                scrollitem: {
                    name: "ScrollView Item",
                    selector: ".km-scrollview > div > *",
                    whitelist: [ "width", "height" ]
                },
                switchback: {
                    name: "Switch Background",
                    selector: ".km-switch-background",
                    whitelist: [ "background-color", "background-image" ]
                },
                switchcontainer: {
                    name: "Switch Container",
                    selector: ".km-switch-container",
                    whitelist: [ "background-color", "background-image" ]
                },
                switchhandleon: {
                    name: "Active Switch Handle",
                    selector: ".km-android .km-switch-on .km-switch-handle",
                    whitelist: [ "border-color" ]
                },
                switchhandleoff: {
                    name: "Inactive Switch Handle",
                    selector: ".km-android .km-switch-off .km-switch-handle",
                    whitelist: [ "border-color" ]
                },
                switchhandle: {
                    name: "Switch Handle",
                    selector: ".km-switch-handle",
                    whitelist: [ "width", "height", "background-color", "background-image" ]
                },
                switchon: {
                    name: "Switch On Label",
                    selector: ".km-switch-label-on",
                    whitelist: [ "left", "width", "height", "color" ]
                },
                switchoff: {
                    name: "Switch Off Label",
                    selector: ".km-switch-label-off",
                    whitelist: [ "left", "width", "height", "color" ]
                },
                switcher: {
                    name: "Switch",
                    selector: ".km-switch",
                    activeSelector: ".km-switch-on",
                    whitelist: [ "width", "height" ],
                    children: [ "switchback", "switchhandle", "switchon", "switchoff" ]
                },
                buttongroup: {
                    selector: ".km-button-group",
                    whitelist: [ "box-shadow", "border-radius" ],
                    children: [ "button" ]
                },
                scrollview: {
                    name: "ScrollView",
                    selector: ".km-scrollview",
                    whitelist: [ "background-color", "background-image", "box-shadow" ],
                    children: [ "scrollitem" ]
                },
                activebutton: {
                    name: "Active Button",
                    selector: ".km-button.km-state-active",
                    activeSelector: ".km-state-active",
                    whitelist: [ "background-color", "background-image", "border-color" ]
                },
                button: {
                    name: "Button",
                    selector: ".km-button",
                    activeSelector: ".km-state-active",
                    whitelist: [ "background-color", "background-image", "border-color" ],
                    children: [ "icon", "text" ]
                },
                navbar: {
                    name: "NavBar",
                    selector: ".km-navbar",
                    whitelist: [ "background-color", "background-image", "font" ],
                    children: [ "button", "viewtitle" ]
                },
                listview: {
                    name: "ListView",
                    selector: ".km-list",
                    whitelist: [ "border-color" ],
                    children: [ "icon", "button", "switch", "listitem", "grouptitle" ]
                },
                content: {
                    name: "View Content",
                    selector: ".km-content",
                    whitelist: [ "background-color", "color", "background-image", "font" ],
                    children: [ "button", "listview", "scrollview", "switch", "buttongroup" ]
                },
                tabstrip: {
                    name: "TabStrip",
                    selector: ".km-tabstrip",
                    whitelist: [ "background-color", "background-image", "border-color", "border-width", "border-style", "font" ],
                    children: [ "button" ]
                },
                view: {
                    name: "View",
                    selector: ".km-view",
                    whitelist: [ "background-color" ],
                    children: [ "navbar", "content", "tabstrip", "loader" ]
                },
                ios: {
                    selector: ".km-ios"
                },
                ios7: {
                    selector: ".km-ios7"
                },
                android: {
                    selector: ".km-android"
                },
                blackberry: {
                    selector: ".km-blackberry"
                },
                wp: {
                    selector: ".km-wp"
                },
                flat: {
                    selector: ".km-flat"
                },
                meego: {
                    selector: ".km-meego"
                }
            },
            pickers = {},

            defaults = {
                color: [
                    { "background-color": "#c5007c" },
                    { "background-color": "#6300a5" },
                    { "background-color": "#0010a5" },
                    { "background-color": "#0064b5" },
                    { "background-color": "#00a3c7" },
                    { "background-color": "#0fad00" },
                    { "background-color": "#8cc700" },
                    { "background-color": "#ff0" },
                    { "background-color": "#fec500" },
                    { "background-color": "#ff9400" },
                    { "background-color": "#f60" },
                    { "background-color": "#f00" },

                    { "background-color": "#fff" },
                    { "background-color": "#e5e5e5" },
                    { "background-color": "#ccc" },
                    { "background-color": "#b2b2b2" },
                    { "background-color": "#999" },
                    { "background-color": "#7f7f7f" },
                    { "background-color": "#666" },
                    { "background-color": "#4c4c4c" },
                    { "background-color": "#333" },
                    { "background-color": "#191919" },
                    { "background-color": "#000" },
                    { "background-color": "none" }
                ],

                gradient: [
                    { "background-image": "linear-gradient(top, #fff, rgba(255,255,255,.2) 50%, rgba(255,255,255,.3) 50%, rgba(255,255,255,.7))" },
                    { "background-image": "linear-gradient(top, rgba(255,255,255,.2), rgba(255,255,255,.4) 50%, rgba(255,255,255,.5) 50%, rgba(255,255,255,.8))" },
                    { "background-image": "linear-gradient(top, rgba(255,255,255,.2), rgba(255,255,255,.35) 50%, rgba(255,255,255,.45) 50%, rgba(255,255,255,.4))" },
                    { "background-image": "linear-gradient(top, rgba(255,255,255,.2), rgba(255,255,255,.4) 50%, rgba(255,255,255,.45) 50%, rgba(255,255,255,.4))" },
                    { "background-image": "linear-gradient(top, rgba(255,255,255,.6), rgba(255,255,255,.35) 50%, rgba(255,255,255,.4) 50%, rgba(255,255,255,.6))" },
                    { "background-image": "linear-gradient(top, rgba(255,255,255,.4), rgba(255,255,255,.6))" },
                    { "background-image": "linear-gradient(top, rgba(255,255,255,.2), rgba(255,255,255,.8))" },
                    { "background-image": "linear-gradient(top, rgba(255,255,255,.5), rgba(255,255,255,.2) 50%, rgba(255,255,255,.5))" },
                    { "background-image": "linear-gradient(top, rgba(255,255,255,.5), rgba(255,255,255,.2) 73%, rgba(255,255,255,.5))" },
                    { "background-image": "linear-gradient(top, rgba(255,255,255,.2), rgba(255,255,255,.5) 73%, rgba(255,255,255,.2))" },
                    { "background-image": "linear-gradient(top, rgba(255,255,255,.2), rgba(255,255,255,.35) 12%, rgba(255,255,255,.65) 40%, rgba(255,255,255,.4) 80%, rgba(255,255,255,.6))" },

                    { "background-image": "linear-gradient(top, rgba(0,0,0,.2), rgba(0,0,0,.4) 50%, rgba(0,0,0,.5) 50%, rgba(0,0,0,.8))" },
                    { "background-image": "linear-gradient(top, rgba(0,0,0,.2), rgba(0,0,0,.35) 50%, rgba(0,0,0,.45) 50%, rgba(0,0,0,.4))" },
                    { "background-image": "linear-gradient(top, rgba(0,0,0,.2), rgba(0,0,0,.4) 50%, rgba(0,0,0,.45) 50%, rgba(0,0,0,.4))" },
                    { "background-image": "linear-gradient(top, rgba(0,0,0,.6), rgba(0,0,0,.35) 50%, rgba(0,0,0,.4) 50%, rgba(0,0,0,.6))" },
                    { "background-image": "linear-gradient(top, rgba(0,0,0,.4), rgba(0,0,0,.6))" },
                    { "background-image": "linear-gradient(top, rgba(0,0,0,.2), rgba(0,0,0,.8))" },
                    { "background-image": "linear-gradient(top, rgba(0,0,0,.5), rgba(0,0,0,.2) 50%, rgba(0,0,0,.5))" },
                    { "background-image": "linear-gradient(top, rgba(0,0,0,.5), rgba(0,0,0,.2) 73%, rgba(0,0,0,.5))" },
                    { "background-image": "linear-gradient(top, rgba(0,0,0,.2), rgba(0,0,0,.5) 73%, rgba(0,0,0,.2))" },
                    { "background-image": "linear-gradient(top, rgba(0,0,0,.2), rgba(0,0,0,.35) 12%, rgba(0,0,0,.65) 40%, rgba(0,0,0,.4) 80%, rgba(0,0,0,.6))" },
                    { "background-image": "none" }
                ],

                pattern: [
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAECAYAAACk7+45AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpiYGBg+M+ADfxn/P8fIgMQYAA+7gT90CvwKgAAAABJRU5ErkJggg==)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUeNpiZGBg+A8EjECagRHIYIABJgYkABBgAM3TBv+4J7s8AAAAAElFTkSuQmCC)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUeNpiYGBg+M8ABf//w5nYBf6DBBjRRQECDADOlA30CxD9AQAAAABJRU5ErkJggg==)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAICAYAAADeM14FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpiYGBg+M8ABf//w5nkCvwHCTCiixIWAAgwAP5EGepXPmrSAAAAAElFTkSuQmCC)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABxJREFUeNpiZGBg+A8EjAxQwAjkMCADwgIAAQYAGS4M+cNlSrIAAAAASUVORK5CYII=)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHVJREFUeNpiZGBgaGCAgL////9vZkADjIyMVUCKjQlJ7DEDdgAWhym8A8TrcSjcBJJnBFqHbA0fkPIGYhWo5q1A+U/IJsKAPxCrAzEzlA6CSaArlMXFZ8LmcGx8JmwOx+ZBRiCuRXc4WjiCPciEzeHYPAgQYADTTSDE4AZRlgAAAABJRU5ErkJggg==)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAKCAYAAACE2W/HAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHxJREFUeNpiZGBgaGCAgL////9vZiAAGBkZq4AUGxOS2GMG4gBYHUzjHSBeT6TGTSD1jEDnYXMOH5DyBmIVqKFbgeo+IathwmGqPxCrAzEzlA5CV4BLoywBPk6NjwnwcWrcBPUbzoBjBOJaXAGAIx7BAceELwDwBRxAgAEAdXkgxF84rxcAAAAASUVORK5CYII=)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAKCAYAAACE2W/HAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAK5JREFUeNpiZGBgaGCAgL9QzMaAAH/////fjMRnYGRkrAKpYUISewzFDGhiDNjEYBrvAPF6IN4EZSOLoQOwGkYgwQd0zic05/ABKW8gVoEasBUqBRcDaUwAalyApjEWSCkjCT2A+h8uxgLEslicI4uF/xdZgAlfAOALOJBT+YFO/YjmVH4g5Yvkx81QKV9kP9biCgCQGK6AA/mRGYjVgZgdLQBgYgvQnO0PUgMQYAB8nzZRZvZqnQAAAABJRU5ErkJggg==)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALNJREFUeNpiZGBgqALix0C8EYiLGFDBXyCeBMR+zEDCGYiFoPgDlIaB20CsAcQqTEiCKkC8GYgfQE0C0Vuh4gwsSArv/P///yOQXoBsNyMj4x2Yici6sQGwLTCFfxnwg78ghWxArAzE3jgU+YLkkd2oAnQPPygogFgWKcjAngEFjwN6UEDFUYKMCVtQYAsyRmCQIAdFDJrim0D55SAGE7agwBZkTNiCAluQMWELCmxBBhBgAMO1Mzvr3GK6AAAAAElFTkSuQmCC)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQ9JREFUeNqMkz8KwjAUxpP4B6GiuDq4CNrdsR7AGzg7OioewBO4egYXDyHSC+hSsKurVCyIS/0Cr8WG2LwHv6bkvXwvCV+kEGIryvHMsmwn/oSUco2hY84rS20kqsOaN4U+IHQIhVRXirohcgAPbL+LcQpGQP8n4AZOOLbO67o5aBZHBhva7lmLgKFZZDaDWAyxHjUbg7bE5O9F6u5L0Ko42hvssS6puqPAISIoH7gu2xe88F1CHlPIcwmlTKHUJRQxhSKXkNVsHNNqH61ys5HxnD4CMRm1MG0Nnxnogwm4U9EVNOhxasEXuIAj1ehmCzDI7SKN1281m/H6raZVHLNxTKs4ZuPkFcdsnPxXgAEAitpFKbukwF4AAAAASUVORK5CYII=)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANtJREFUeNpiZGBgaGCAgNP////fysjIWAtkMzOQCJig9C8gPgZlf2UgAzBBDVkJdM17oGv4geyf5BjECMSCUEOUgexwIGYjQt9fIP4BxNxA/AWIb7IAiXygIZ+BNBeRYQP2ARDfBWKQD+yAWIUFKslLpA9eAfFyIH4PxCg+YCIxKDhAwQB1SShyMJBqEDeUtgYZii36iQWwpKGBKx0RC26iuYwsg/AmWiYSDMGbaFmISWxAfIRQomUhJrEBsTGhRMtCTGIjJtEyEZPYSClG8CY2Ug3CmdiIAQABBgCRyUSyesNqjgAAAABJRU5ErkJggg==)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAYAAACEYr13AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAaJJREFUeNqUks1ugkAQx4FdRUUq4EeTXlqTNo16gcZ40hfoS/SNfCx7a9OTTW+aNLERCEKQb+iQ1IYa2E0n2Zgd3P/8Z+bHDofDK+YnEELsaDTSeJ6PmYoIggCv1+vXJEmy/M4VP3a7Xb7X6zGkGAwGbP6/0/2PwHQ6vW61Wpgk0Gg00Gw2u/l1LcuyOJ/PpcVicYcxlkzTDKMoSkki+RtVVaVOpxOyy+XyKQzDZL/fe7quB67rxgwlBEHA0Crf7/ebeLVafTH/jLxIfjabjYurJn04HETHcS7AHV+v1wNRFG2w7JxvCJc9NgxDsm3bh3hO09SEnAJzuY/jWFYUxYJBRpUCYK0JVS34fTnlYOc63HWorh6PR6EowJW1AALvZXlw8MGybFbMcSUT9qCKVzE8DzjxiQLnpNFI5Wik0UhF4/H4lkTadrv1SaSWbSHe7XY+WG1PJpMHTdNQgVT/nFRMI41GJYK1PAI0bVgRBxZjOCntUQ4btNIBp5cIEP2Engw4ClAn1mq1iCRyItWyrBDW/YazLEtJpNFI5Wik0Uj9FmAAlmwVK4mYI6QAAAAASUVORK5CYII=)" },

                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE8AAABPCAYAAACqNJiGAAATuUlEQVR4Xo3c64oFtRKG4b4OEVERRUVRPCEeUPHC5tI334IHXopB9o+m13TSSVXlq2PS8/z0009v33zzzdu333779vnnn7999913b99///3bnu/v/d71+++/v/3yyy9vX3311drX/9X3yy+/fPX9+eef377++uu3H3/88fXs119/ffviiy/efvjhhz3b782z58ZY256tfeO92j/++OM9X7/Nt7E33sbee/v79fuvv/5C665X+2effbbno3Vte7b7xt618dYXf2vbXHs2Xvd7Y4wez9G59rWh+TXWs0ExtY4Y28CE0hf30h9//DGGdq19bRvD++uztv2N4bW9nmPk008/xcSujbE2fSfs9R8jm2PjbX6LtnF3X/t+j/793jidt/RsYfZ+hbXn6zP6N9764gVINuZoWBvaXvdnjQgYuqwIAsYkFGB2d8SvbQSYaH0Rsmtjrg3hG2dE7/3Nu76Qumto2fX3339jbP031p7tbr7ezb07QZeu15i//fbbhEA4wLFrvwmODAia5r1kAWwb/4E0L3lh0oayPQNlKqIfFZtwdt970ER1MEYFEb42jI8wQt19yBs6xrA++9u8u482qofxzUOge4b2zWfO3StcYCha23/tALA58THkEQDEsHd7Nqagbs8QOKbWBtYblPrsvsHXF6GD/dqLDMJh9ywa4ox1Ga993HsvOwcEBEKl2eT1HXo2LxDUzHzyySe06EWX92vGqD+5PBtog+/lEQQ9I5S66GMQKrhnmMFkDTJbQoiEtGsEUmEMErSFoxEQiukKlwAIyiKOTu9DHvuMJ5rTRV2bhV9/9z3HBxA9DDiCuoJVA4whyoSEQEXYTUKk5vpQObauKMcAIhl/am8sAudUoGlCWj80Yh6i2VwI02d3zml2dc/Rs4v24YPjetaJzdgEVRUCorLUmqpr44EwDo0udoywd10Bcx5UBWrR0vk4I7RAIy8o9MIs1HN861fzQW0hcTRsbB4amGrShvBnxIHlJgNVAhmSPvjgAw4A0wiEiN0J2EVor3eEJgTEhmDeIrrWbwRCYdHKO6LFQkPp2iHQew2fRguhQXDtez04YUEsraO2Oo4pDIE0DwOVUFgV4Dg4AEYYsww9IZkcM4gnWMEqQjkbAoNkizTUvN4jbOpNeOyh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)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAVCAYAAABljp99AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWpJREFUeNo0kd9LwlAUx91VnKWhYwY2fZFJ9eCmhCAMRFgQ/cU9iS+ChpAsUcLQMRHSzKttIYNgrfM1uy8fPufcH+eeIxSLxYdGo/G42+2mo9Hoq1wun0mSVGKyLH+v12sFwQgtEM5o95PjOAWKpSN/Kw1niUSC53K5CQWMY8KAs3a7/U6nFrFY7JyCGgiPxuPxUjKZjGSz2WC5XNar1erQ87w3hrP9fv9TEIQ0bRBA+CERBIE4Ho9VwzCeQTg7PlhPpVILRVFWIByJAmOsZJqm3el0ViAciTtVVSdbWrZt+yCciaJ4QleEvV5viztBONN1/XUwGFzv9/vDYyCcaZo2C8OQU6xyLKQCZ5Zl8WazOaX6bygogXBGx1yqYkP9cShxD8IP/+h2u5zm4FKfZBAepaFc+b7/47qumc/nOZV8wTm3/n9+SdUE1NUhCEfiFDOo1Wov8/ncA+FI3GYyGQxr02q1PkD4rwADAPUIvqcPnGiJAAAAAElFTkSuQmCC)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGJJREFUeNqUkMEJAEEIA/fAWq8DO9rG7EAU3ZdwW0DyuDwNQ3AeVX0XyN4bnZeYGSzOORhwd1hkJga6GxYzg4GIWH9CFyhQVbC49jDAbDB7wmwwe8JssN+EPcfsUYAtfAIMABlKNaG74oyiAAAAAElFTkSuQmCC)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAj1JREFUeNpkU8mqIkEQTLsU9w0Vcb0ouB0E26NfoKBeRLwKzl/6EZ4U9SSCK+77+joSynHmFRTVVRkVmZEVrWs2m386nQ51u126XC70er3oe8RiMSoUCtRut2kymXD8/X7/g1ECgQAlEgkKhUK/gslkkmq1Gp9Ho1HS6/W/MI1Gg4TP51OPxyMDTqcTT0lQrVZpPp/Tdrsls9lMJpOJdrsd3e/3D0EkEiH9+XxmGUIICofDHLTZbB8CTGAejwcZDAbyeDy8b7Va5Ha7qd/v/yXBBNBqtVI+n6f9fs8V4ByZUS2+LRYLOZ1OJhwMBly5CAaDKj6u1+sHiAYul0uWCALEkex2uzEOzR0OhywRGOH3+1VZDQCoZjab8cRAxsPhwGSyYuDW6zUnRVxohyo6jiwAgvD5fPIroAJcQkZIQwIQyB6BBGRKPB4nnU7HG2QEQHoFF9BYWACkIERcvg4G9kqxWKRsNsvNwqX/fVCv1/lFvF4vN/ubACOdTpPQKmE5kLBarXj9NhJMtlgsWBKSQKKsNJPJUKVSIaE5VoWB0CBFURgEvdJIeAVpQJhNGjKXy1GpVKLpdEp66QM01uFwkOZgSqVS/M/gf4JmOYF1uVzcu3K5TOPxmKsUWjb2CQJYQYj+bDYbrgwv8G0BSMfEOfZIznJAgA2AWHu9Hr8KfgXoBwkuIC7ljkYjlmi320loOlU0EyA5pUsxjUbjxy/SSzIGWwAvtJJVBFEeyKTZvn2CHmHFuSTEQJV4lB8BBgB2zhzgn3iZ8wAAAABJRU5ErkJggg==)" },
                    { "background-image": "url(data:image/png;base64,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)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKBJREFUeNq81T0OgCAMhmGp3IHNS7hwGnZOxM45TTB1MCHKX9J+79SFPGkXjPf+3BaLMdoQwrX6LqVkCYnlnC9CYjwTEpsGpbApUBIbgtJYF9TAmqAW9gtqYh9QG6tABPaCKOwBkRhnSiknCuPlCInxJQmJLf0WEtg0KIVNgZLYEJTGuqAG1gS1sF9QE/uA2lgFIrAXRGHc7pw7UBh3CzAAGoDd5dFuw6wAAAAASUVORK5CYII=)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMtJREFUeNq81b0NwyAQBeBEWMxgWcgrUKHMxBY0XgF6FvAibjwIExChKC4sWf7j8B1XXfP0de+9rbUfrfX3BTzvfeOcA+dYCKGNMTZKqQQJSikT57yZpgmUY0KIbp7nVAtdwP9TC13BWugGrIHuQGr0EKRET0Eq9BKkQG9BbDQLxESzQSwUBGKgbBiGHlrAT1A2jmNb0vqlKDPGdKVTU4Iu4JN9g6IrWAvdgDXQHUiNHoKU6ClIhV6CFOgtiI1mgZhoNoiFgkAM9CfAAO0Pfd+RDuL0AAAAAElFTkSuQmCC)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFRJREFUeNpiKigoMGJgYDBGwgpfvnwR////vwoMM0IlYOAtUMF3bm5uXphAYWEhHwM+E5BsIagArIiQAmMGggqAhjAQUgAyhIGQApAcAyEFIAwQYAD+7HsO5fo76wAAAABJRU5ErkJggg==)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFZJREFUeNpi/P//vwoDFHz9+vUzDw8PJ5ApDBMrKCj4DyKMQAph+MuXL+JAOQUgNkbCDMZEKIQwCChEGItHIar9WBVicyi6QgZcPkJWyIDP6zCFAAEGAPRWfgx4dcnyAAAAAElFTkSuQmCC)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAABCAYAAADeko4lAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABlJREFUeNpiZGBgUGMgAvz///8LMeoAAgwAo98EGXpqjeMAAAAASUVORK5CYII=)" },
                    { "background-image": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAABCAYAAADn9T9+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpiZGBgUGNAA/////+CLgYQYABOywQZlafNQAAAAABJRU5ErkJggg==)" },
                    { "background-image": "none" }
                ],

                font: [
                    { font: "0.9em/normal HelveticaNeue, Roboto, 'Myriad Pro', 'Nokia Pure', Arial, sans-serif", "text-shadow" : "none" },
                    { font: "1em/normal HelveticaNeue, Roboto, 'Myriad Pro', 'Nokia Pure', Arial, sans-serif", "text-shadow" : "none" },
                    { font: "italic 1em/1.2em HelveticaNeue, Roboto, 'Myriad Pro', 'Nokia Pure', Arial, sans-serif", "text-shadow" : "none" },
                    { font: "0.9em/normal HelveticaNeue, Roboto, 'Myriad Pro', 'Nokia Pure', Arial, sans-serif", "text-shadow" : "0 -1px #000" },
                    { font: "1em/normal HelveticaNeue, Roboto, 'Myriad Pro', 'Nokia Pure', Arial, sans-serif", "text-shadow" : "0 -1px #000" },
                    { font: "italic 1em HelveticaNeue, Roboto, 'Myriad Pro', 'Nokia Pure', Arial, sans-serif", "text-shadow" : "0 -1px #000" },
                    { font: "0.9em/normal Roboto, HelveticaNeue, sans-serif", "text-shadow" : "none" },
                    { font: "1em/normal Roboto, HelveticaNeue, sans-serif", "text-shadow" : "none" },
                    { font: "italic 1em Roboto, HelveticaNeue, sans-serif", "text-shadow" : "none" },
                    { font: "0.9em/normal Roboto, HelveticaNeue, sans-serif", "text-shadow" : "0 -1px #000" },
                    { font: "1em/normal Roboto, HelveticaNeue, sans-serif", "text-shadow" : "0 -1px #000" },
                    { font: "italic 1em Roboto, HelveticaNeue, sans-serif", "text-shadow" : "0 -1px #000" },

                    { font: "0.9em/normal 'Lucida Sans Unicode', 'Lucida Grande', sans-serif", "text-shadow" : "none" },
                    { font: "1em/normal 'Lucida Sans Unicode', 'Lucida Grande', sans-serif", "text-shadow" : "none" },
                    { font: "italic 1em 'Lucida Sans Unicode', 'Lucida Grande', sans-serif", "text-shadow" : "none" },
                    { font: "0.9em/normal 'Lucida Sans Unicode', 'Lucida Grande', sans-serif", "text-shadow" : "0 -1px #000" },
                    { font: "1em/normal 'Lucida Sans Unicode', 'Lucida Grande', sans-serif", "text-shadow" : "0 -1px #000" },
                    { font: "italic 1em 'Lucida Sans Unicode', 'Lucida Grande', sans-serif", "text-shadow" : "0 -1px #000" },
                    { font: "0.9em/normal Arial, Helvetica, sans-serif", "text-shadow" : "none" },
                    { font: "1em/normal Arial, Helvetica, sans-serif", "text-shadow" : "none" },
                    { font: "italic 1em Arial, Helvetica, sans-serif", "text-shadow" : "0 -1px #000" },
                    { "font-family": "inherit", "font-size": "inherit", "font-weight": "inherit", "font-style": "inherit", "line-height": "inherit", "text-shadow" : "inherit" }
                ]
            },

            i = 0,
            events = {
                color: {
                    cursorOffset: {
                        left: -50,
                        top: -38
                    },
                    hint: function (element) {
                        if (kendo.support.browser.msie) {
                            return $(ie10fillSvg.replace(defaultIE10Color, '<circle fill="' + element.css("background-color") + '" cx="14" cy="14" r="11"/>'));
                        } else {
                            return kendo.support.touch ?
                                $("<div " + (kendo.support.browser.msie ? "class='iehint'" : "") + "style='width: 28px; height: 38px'/>")
                                    .css("background-image", fillSvg.replace(defaultColor, '<circle fill="' + element.css("background-color") + '" cx="14" cy="14" r="11"%2F>'))
                                : undefined;
                        }
                    },
                    dragstart: function () {
                        var element = this.element,
                            color = element.css("background-color"),
                            doc = document.documentElement;

                        dragging = true;
                        element.data("property", "color");
                        element.data("background-color", tools.color.compress(color));

                        $(doc).addClass("drop-override");
                        if (!kendo.support.touch) {
                            doc.style.cssText = "cursor: " + (kendo.support.browser.msie ? "none" : cursorSvg.replace(defaultColor, '<circle fill="' + color + '" cx="14" cy="14" r="11"%2F>'));
                        }
                        addRecentItem(element, "color");
                    },
                    dragend: function () {
                        var doc = document.documentElement;

                        dragging = false;
                        widgetTarget.hide();

                        $(doc).removeClass("drop-override");
                        doc.style.cssText = "";
                    }
                }
            },
            widgetTarget = $("<div class='widgetTarget'><div><div /><div /></div><span /><div><span /></div></div>").appendTo(document.body),

            StyleEngine = Widget.extend({
                init: function (element, options) {
                    var that = this, key;

                    Widget.fn.init.call(that, element, options);
                    element = that.element;
                    options = that.options;

                    that.object = {};
                    that.undoBuffer = [];
                    that.redoBuffer = [];

                    if (options.restoreFromStorage) {
                        if (localStorage && localStorage.length) {
                            try {
                                for (var i = 0; i < localStorage.length; i++){
                                    key = localStorage.key(i);
                                    if (key.indexOf(".km-" + options.platform) === 0) {
                                        that.object[key] = JSON.parse(localStorage.getItem(key));
                                    }
                                }
                            } catch(err) {}
                        }
                    }

                    that.styleElement = $("<style scoped>\n" + that.getCSS() + "</style>").insertBefore(element);
                },
                options: {
                    name: "StyleEngine",
                    restoreFromStorage: false,
                    platform: ""
                },
                cleanse: function() {
                    var that = this, idx;

                    for (idx in that.object) {
                        if (!that.object[idx]) {
                            delete that.object[idx];
                        }
                    }
                },
                populate: function(styles) {
                    var that = this, style;

                    that.object = kendo.deepExtend(that.object, styles);
                    that.cleanse();

                    style = $("<style scoped>\n" + that.getCSS() + "</style>").insertAfter(that.styleElement);

                    that.styleElement.remove();
                    that.styleElement = style;
                },
                getElementSelector: function (element, agnostic) {
                    var output = "", widget,
                        parents = element.parentsUntil(agnostic ? ".km-pane" : ".km-root");

                    $(parents.add(element).get().reverse()).each(function (idx, value) {
                        widget = matchWidget(value);
                        if (widget && !(new RegExp(widget.selector + "\\s" + (widget.activeSelector ? "|" + widget.activeSelector + "\\s" : "")).test(output))) {
                            output = widget.selector + " " + output;
                        }
                    });

                    return output.substr(0, output.length-1);
                },
                update: function(element, styles, selector) {
                    element = $(element);
                    var that = this, style = {},
                        output = selector || that.getElementSelector(element),
                        undoItem = {};

                    if (output) {
                        undoItem[output] = kendo.deepExtend({}, that.object[output]);
                        that.undoBuffer.push(undoItem);

                        if (this.object[output]) {
                            style[output] = kendo.deepExtend(this.object[output], styles);
                        } else {
                            style[output] = styles;
                        }
                        that.store(output, style[output]);

                        that.populate(style);

                        if (globalUndoBuffer) {
                            globalUndoBuffer.push(that);
                        }
                    }
                },
                undo: function() {
                    var that = this, key, redoItem = {},
                        item = that.undoBuffer.pop();

                    if (item) {
                        key = Object.keys(item)[0];

                        redoItem[key] = kendo.deepExtend({}, that.object[key]);
                        that.redoBuffer.push(redoItem);
                        if (globalRedoBuffer) {
                            globalRedoBuffer.push(that);
                        }

                        that.store(key, item[key]);

                        if (!kendo.size(item[key])) {
                            item[key] = "";
                        }

                        that.populate(item);
                    }
                },
                redo: function() {
                    var that = this, key, undoItem = {},
                        item = that.redoBuffer.pop();

                    if (item) {
                        key = Object.keys(item)[0];

                        undoItem[key] = kendo.deepExtend({}, that.object[key]);
                        that.undoBuffer.push(undoItem);
                        if (globalUndoBuffer) {
                            globalUndoBuffer.push(that);
                        }

                        that.store(key, item[key]);

                        if (!kendo.size(item[key])) {
                            item[key] = "";
                        }

                        that.populate(item);
                    }
                },
                getCSS: function () {
                    var object = this.object, output = "";

                    for (var i in object) {
                        output += i + " {\n";
                        for (var j in object[i]) {
                            output += "    " + j + ": " + object[i][j] + ";\n";
                        }
                        output += "}\n";
                    }

                    return output;
                },
                getFullCSS: function () {
                    var object = this.object, output = "", outputs, backgrounds, firstLetter;

                    for (var i in object) {
                        output += i + " {\n";
                        for (var j in object[i]) {
                            if (j == "background-image") {
                                backgrounds = object[i][j].split(backgroundSplitRegExp);
                                outputs = [];
                                browsers.forEach(function () {
                                    outputs.push([]);
                                });

                                backgrounds.forEach(function (value) {
                                    firstLetter = value[0].toLowerCase();

                                    if (firstLetter != "u" && firstLetter != "n") {
                                        tools.gradient.set(value).get(browsers).forEach(function (val, idx) {
                                            outputs[idx].push(val);
                                        });
                                    } else {
                                        browsers.forEach(function (val, idx) {
                                            outputs[idx].push(value);
                                        })
                                    }
                                });

                                browsers.forEach(function (val, idx) {
                                    output += "    " + j + ": " + outputs[idx].join(",") + ";\n";
                                });
                            } else {
                                output += "    " + j + ": " + object[i][j] + ";\n";
                            }
                        }
                        output += "}\n";
                    }

                    return output;
                },
                mixBackground: function (css, element, replace, forceUrl) {
                    var that = this, idx, imageHash, repeats, url, comma, grPosition, grRepeat,
                        color = element.css("background-color"),
                        backgrounds = [ element.css("background-image").split(backgroundSplitRegExp), css["background-image"].split(backgroundSplitRegExp) ],
                        backSplits = [ { gradient: [], url: [] }, { gradient: [] }],
                        position = css["background-position"],
                        repeat = css["background-repeat"];

                    position = position ? position.substring(position.indexOf(",") + 1) : "";
                    repeat = repeat ? repeat.substring(repeat.indexOf(",") + 1) : "";

                    backgrounds.forEach(function (val, idx) {
                        val.forEach(function (value) {
                            if (value[0].toLowerCase() == "u" || (forceUrl && value.trim() == "none")) {
                                backSplits[0].url = [ value ];
                            } else {
                                if (!forceUrl && value.trim() == "none") {
                                    backSplits[0].gradient = [ "none" ];
                                } else {
                                    backSplits[idx].gradient.push( value );
                                }
                            }
                        });
                    });

                    idx = -1;
                    if (backSplits[1].gradient[0]) {
                        imageHash = that.createHash(backSplits[1].gradient[0]);
                        backSplits[0].gradient.forEach(function (value, i) {
                            if (that.createHash(value) == imageHash) {
                                idx = i;
                            }
                        });
                    }

                    if (replace && backSplits[1].gradient[0]) { idx = 0; }

                    if (idx > -1) {
                        backSplits[0].gradient[idx] = backSplits[1].gradient[0];
                    } else if (backSplits[0].gradient.length < 4 && backSplits[1].gradient[0]) {
                        backSplits[0].gradient.splice(0, 0, backSplits[1].gradient[0]);
                    }

                    repeats = new Array(backSplits[0].gradient.length+1);
                    grPosition = repeats.join("0 0,");
                    grRepeat = repeats.join("repeat,");
                    url = backSplits[0].url[0];
                    comma = (url ? "," :"");

                    return {
                        "background-color": color,
                        "background-image": (backSplits[0].gradient.length ? backSplits[0].gradient.join(",") + comma : "") + (url ? url : ""),
                        "background-position": grPosition.substr(0, grPosition.length - 1) + comma  + (url ? position : ""),
                        "background-repeat": grRepeat.substr(0, grRepeat.length - 1) + comma + (url ? repeat : "")
                    }
                },
                createHash: function(str) {
                    var hash = 0, i, len = str.length;

                    if (!len) {
                        return hash;
                    }

                    for (i = 0; i < len; i++) {
                        hash = ((hash << 5) - hash) + str.charCodeAt(i);
                        hash = hash & hash;
                    }

                    return hash;
                },
                store: function(property, obj) {
                    if (localStorage) {
                        try {
                            localStorage.setItem(property, JSON.stringify(obj));
                        } catch(err) {}
                    }
                },
                retrieve: function (property) {
                    if (localStorage && localStorage.length) {
                        try {
                            return JSON.parse(localStorage.getItem(property));
                        } catch(err) {}
                    }
                    return {};
                },
                reset: function () {
                    var that = this, key, style;

                    that.object = {};

                    style = $("<style scoped>\n" + that.getCSS() + "</style>").insertAfter(that.styleElement);

                    that.styleElement.remove();
                    that.styleElement = style;

                    if (that.options.restoreFromStorage) {
                        if (localStorage && localStorage.length) {
                            for (var i = 0; i < localStorage.length; i++){
                                key = localStorage.key(i);
                                if (key.indexOf(".km-" + that.options.platform) !== -1) {
                                    localStorage.removeItem(key);
                                    i--;
                                }
                            }
                        }
                    }
                }
            });

        kendo.ui.plugin(StyleEngine);

        if (localStorage) {
            try {
                helpRead = localStorage.getItem("helpRead");

                if (!helpRead) {
                    var help = $("<div class='help'><div><div class='closeHelp'></div></div></div>").appendTo(document.body);
                    $(".closeHelp").on(click, function () {
                        try {
                            localStorage.setItem("helpRead", true);
                            help.remove();
                        } catch(err) {}
                    });
                }

                visibleOSes = JSON.parse(localStorage.getItem("visibility"));
                visibleOSes.forEach(function (value) {
                    document.getElementById(value).checked = "checked";
                });
            } catch(err) {
                visibleOSes = [ "ios7box", "androidbox", "blackberrybox", "wpbox" ];
                visibleOSes.forEach(function (value) {
                    document.getElementById(value).checked = "checked";
                });
            }
        }

        window.URL = window.webkitURL || window.mozURL || window.URL;
        window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;

        extend(events, {
            gradient: extend({}, events.color, {
                hint: function (element) {
                    if (kendo.support.browser.msie) {
                        return $(ie10fillSvg.replace(defaultIE10Stop, tools.gradient.set(element.css("background-image")).get("svg")));
                    } else {
                        return kendo.support.touch ?
                            $("<div style='width: 28px; height: 38px'/>")
                                .css("background-image", fillSvg.replace(defaultStop, tools.gradient.set(element.css("background-image")).get("svg"))) :
                            undefined;
                    }
                },
                dragstart: function () {
                    var element = this.element,
                        gradient = element.css("background-image"),
                        doc = document.documentElement;

                    dragging = true;
                    element.data("property", "gradient");
                    element.data("background-image", tools.gradient.set(gradient).get());

                    $(doc).addClass("drop-override");
                    if (!kendo.support.touch) {
                        doc.style.cssText = "cursor: " + (kendo.support.browser.msie ? "none" : cursorSvg.replace(defaultStop, tools.gradient.get("svg")));
                    }
                    addRecentItem(element, "gradient");
                }
            }),
            pattern: extend({}, events.color, {
                hint: function (element) {
                    if (kendo.support.browser.msie) {
                        return $(ie10fillSvg.replace(defaultIE10Color, defaultPattern.replace("##", element.css("background-image").replace(/^url\("?|"?\)$/ig, ""))));
                    } else {
                        return kendo.support.touch ?
                            $("<div style='width: 28px; height: 38px'/>")
                                .css("background-image", fillSvg.replace(defaultColor, defaultPattern.replace("##", element.css("background-image").replace(/^url\("?|"?\)$/ig, "").replace("/", "%2F")))) :
                            undefined;
                    }
                },
                dragstart: function () {
                    var element = this.element,
                        pattern = element.css("background-image"),
                        doc = document.documentElement;

                    dragging = true;
                    element.data("property", "pattern");
                    element.data("background-image", pattern);

                    $(doc).addClass("drop-override");
                    if (!kendo.support.touch) {
                        doc.style.cssText = "cursor: " + (kendo.support.browser.msie ? "none" : cursorSvg.replace(defaultColor, defaultPattern.replace("##", pattern.replace(/^url\("?|"?\)$/ig, ""))));
                    }
                    addRecentItem(element, "pattern");
                }
            }),
            font: extend({}, events.color, {
                hint: function (element) {
                    if (kendo.support.browser.msie) {
                        return $(ie10fillSvg.replace(defaultIE10Color, defaultFont.replace("##", JSON.stringify(kendo.getComputedStyles(element[0], [ "font-family", "font-size", "font-weight", "font-style" ])).replace(/","/g, ";").replace(/"|{|}|'/g, "")).replace(/%2f/gi, "/")));
                    } else {
                        return kendo.support.touch ?
                            $("<div style='width: 28px; height: 38px'/>")
                                .css("background-image", fillSvg.replace(defaultColor, defaultFont.replace("##", JSON.stringify(kendo.getComputedStyles(element[0], [ "font-family", "font-size", "font-weight", "font-style" ])).replace(/","/g, ";").replace(/"|{|}|'/g, "")))) :
                            undefined;
                    }
                },
                dragstart: function () {
                    var element = this.element,
                        font = JSON.stringify(kendo.getComputedStyles(element[0], [ "font-family", "font-size", "font-weight", "font-style" ])).replace(/","/g, ";").replace(/"|{|}|'/g, ""),
                        doc = document.documentElement;

                    dragging = true;
                    element.data("property", "font");
                    element.data("font", element.css("font"));

                    $(doc).addClass("drop-override");
                    if (!kendo.support.touch) {
                        doc.style.cssText = "cursor: " + (kendo.support.browser.msie ? "none" : cursorSvg.replace(defaultColor, defaultFont.replace("##", font)));
                    }
                    addRecentItem(element, "font");
                }
            })
        });

        for (var idx in widgetList) {
            var children = widgetList[idx].children;
            if (children) {
                children.forEach(function (name) {
                    var item = widgetList[name];
                    if (item) { item.parents = [ idx ].concat(item.parents || []); }
                });
            }
        }

        function matchWidget(element, properties) {
            if ($(element).hasClass("km-root")) return false;

            var widget, props;

            for(var idx in widgetList) {
                widget = widgetList[idx];

                if (kendo.support.matchesSelector.call(element, widget.selector) && !kendo.support.matchesSelector.call(element, widget.blacklist)) {
                    if (properties && widget.whitelist) {
                        props = widget.whitelist.filter(function (value) { return properties.indexOf(value) !== -1 });
                        if (props.length) {
                            return kendo.deepExtend( { widget: idx, element: element, properties: props, idx: 0 }, widget );
                        }
                    } else {
                        return kendo.deepExtend( { widget: idx, element: element }, widget );
                    }
                }
            }

            return matchWidget(element.parentNode, properties);
        }

        function getPropertySelector(property) {
            var output = "", widget;

            for(var idx in widgetList) {
                widget = widgetList[idx];
                if (((widget.whitelist && widget.whitelist.indexOf(property) != -1) || !property) && widget.selector[0] != ">") {
                    output += widget.selector + ",";
                }
            }
            return output.substring(0, output.length-1);
        }

        function getWidgets(property) {
            var widget, qualifiedWhiteList, widgets = { selector: "" };

            if (typeof property == "string")
                property = [ property ];

            for(var idx in widgetList) {
                widget = widgetList[idx];
                qualifiedWhiteList = widget.whitelist ? widget.whitelist.filter(function (value) { return property.indexOf(value) != -1; }) : [];

                if (((widget.whitelist && qualifiedWhiteList.length) || !property.length) && widget.selector[0] != ">") {
                    widgets[idx] = widget;
                    widgets[idx].whitelist = qualifiedWhiteList;
                    widgets.selector += widget.selector + ",";
                }
            }

            widgets.selector = widgets.selector.substring(0, widgets.selector.length-1);

            return widgets;
        }

        window.globalUndo = function() {
            var lastEngine = globalUndoBuffer.pop();

            if (lastEngine) {
                lastEngine.undo();
            }
        };

        window.globalRedo = function() {
            var lastEngine = globalRedoBuffer.pop();

            if (lastEngine) {
                lastEngine.redo();
            }
        };

        // Wheel scrolling affects property chooser
        kendo.mobile.ui.Scroller.prototype._wheelScroll = function(e) {};

        // Override Kendo Pane bindToRouter to avoid URL breaks and bad refresh
        kendo.mobile.ui.Pane.prototype.bindToRouter = function(router) {
            var that = this,
                options = that.options,
                initial = options.initial,
                viewEngine = this.viewEngine;

            router.bind("init", function(e) {
                var url = e.url,
                    attrUrl = router.pushState ? url : "/";

                viewEngine.rootView.attr(kendo.attr("url"), attrUrl);

                if (url === "/" && initial) {
                    router.navigate(initial, true);
                    e.preventDefault(); // prevents from executing routeMissing, by default
                }
            });

            router.bind("routeMissing", function(e) {
                if (!that.historyCallback(e.url, e.params)) {
                    e.preventDefault();
                }
            });

            router.bind("same", function() {
                that.trigger("sameViewRequested");
            });
        };

        originalToggle = kendo.mobile.ui.ListView.prototype._toggle;

        kendo.mobile.ui.ListView.prototype._toggle = function(e) {
            if ((!dragging && "mousemove touchmove".indexOf(e.type) == -1) && "mouseleave touchcancel".indexOf(e.type) == -1) {
                if (e.type != kendo.support.mouseup) {
                    wasActive = $(e.currentTarget).closest("li").hasClass("km-state-active");
                    originalToggle(e);
                } else {
                    if (!wasActive) {
                        originalToggle(e);
                    }
                }
            }
        };

        $(".device").on("mouseenter", ".km-list > li > .km-listview-link, .km-list > li > .km-listview-label, .km-button", function(e) {
            wasActive = $(e.currentTarget).hasClass("km-state-active") || $(e.currentTarget).parent().hasClass("km-state-active");
        });

        kendo.mobile.ui.Button.prototype._deactivate = function (e) {
            if ((!dragging && e.type != kendo.support.mousemove) && e.type != kendo.support.mousecancel) {
                if (e.type !== kendo.support.mouseup) {
                    wasActive = $(e.currentTarget).closest(".km-button,.km-detail").hasClass("km-state-active");
                    $(e.target).closest(".km-button,.km-detail").addClass("km-state-active");
                } else {
                    if (!wasActive) {
                        $(e.target).closest(".km-button,.km-detail").removeClass("km-state-active");
                    }
                }
            }
        };
        function replaceIDs() {
            var id = this.id;
            this.id += counter;
            $(this).closest(".device").find("[href^=#" + id + "]").attr("href", "#" + this.id);
        }

        function replaceLayouts() {
            var that = $(this),
                newId = that.attr("data-id") + counter++;

            that.attr("data-id", newId);
            that.closest(".device").find("[data-layout]").attr("data-layout", newId);
        }

        clones.shift();
        each(clones.reverse(), function () {
            $("#ios7Device")
                .clone(true)
                .find("[id]") // Make sure there are no duplicate IDs.
                .each(replaceIDs)
                .end()
                .find("[data-id]")
                .each(replaceLayouts)
                .end()
                .attr("id", this.toString() + "Device")
                .insertAfter("#ios7Device");
        });

        $("#" + clones[0] + "Device [data-role=view]").attr("data-init", "initTargets");

        each(devices, function () {
            var that = this.toString(),
                deviceId = "#" + that + "Device",
                device = $(deviceId),
                checkbox = $("#" + that + "box")[0];

            applications[that] = new kendo.mobile.Application(device, {
                skin: that,
                platform: that,
                icon: {
                  "72x72" : "../content/mobilethemebuilder/images/Icon-72.png",
                  "144x144" : "../content/mobilethemebuilder/images/Icon2x.png"
                },
                updateDocumentTitle: false
            });
            kendo.mobile.application.element = device;
            engineTool = device.kendoStyleEngine({ restoreFromStorage: true, platform: that }).data("kendoStyleEngine");

            device.toggleClass("hiddenOS", !checkbox.checked);
        });

        pickers = {
            color: $(".recent-colors").kendoHSLPicker({ filter: ".drop" }).data("kendoHSLPicker"),
            gradient: $(".recent-gradients").kendoGradientPicker({ filter: ".drop", styleEngine: engineTool }).data("kendoGradientPicker"),
            pattern: $(".recent-patterns").kendoPatternPicker({ filter: ".drop", styleEngine: engineTool }).data("kendoPatternPicker"),
            font: $(".recent-fonts").kendoFontPicker({ filter: ".drop", styleEngine: engineTool }).data("kendoFontPicker")
        };

        window.initTargets = function() {
            setTimeout(function () {
                var whitelisted = false,
                    draggedElement, css, widget = false,
                    color = "transparent";

                $(document.documentElement).off("touchmove");

                $(".color-holder .drop").kendoDraggable(events.color);
                $(".gradient-holder .drop").kendoDraggable(events.gradient);
                $(".pattern-holder .drop").kendoDraggable(events.pattern);
                $(".font-holder .drop").kendoDraggable(events.font);

                function applyHint(element, target, pkg) {
                    var engine = target.parents(".device").data("kendoStyleEngine"), color;

                    css = kendo.getComputedStyles(element, pkg);

                    if (css["background-color"]) {
                        color = css["background-color"];
                        delete css["background-color"];
                        css[whitelisted] = color;
                    }

                    if (css["background-image"]) {
                        kendo.deepExtend(css, engine.mixBackground(css, target, true, $(element).attr("data-pattern") !== undefined));
                    }

                    if (draggedElement.hasClass("k-none") && css["font-family"]) {
                        packages.font.forEach(function (value) {
                            delete css[value];
                        });

                        kendo.deepExtend(css, defaults.font[defaults.font.length - 1]);
                    }

                    target.css(css);

                    widgetTarget
                        .children("div")
                        .last()
                        .children()
                        .text(whitelisted);
                }

                $(".device").on("DOMMouseScroll mousewheel", "*", function (e) {
                    if (!dragging) { return; }

                    if (widget) {
                        e.preventDefault();
                        e.stopImmediatePropagation();

                        var properties = widget.properties,
                            target = $(widget.element),
                            maxIndex = properties.length - 1;

                        widget.idx += (e.originalEvent.wheelDelta / 120 || e.originalEvent.detail / 3);
                        widget.idx < 0 && (widget.idx = maxIndex);
                        widget.idx > maxIndex && (widget.idx = 0);

                        target.css(defaultCSS);

                        whitelisted = widget.whitelist.indexOf(properties[widget.idx]) != -1 ? properties[widget.idx] : false;

                        if (!whitelisted) {
                            return;
                        }

                        applyHint(draggedElement[0], target, packages[properties[widget.idx]]);
                    }
                });

                $(".device").kendoDropTargetArea({
                    filter: getWidgets(properties).selector,
                    dragenter: function (e) {
                        draggedElement = $(e.draggable.element);

                        var properties = propertyTargets[draggedElement.data("property")];

                        widget = matchWidget(e.dropTarget[0], properties);
                        properties = widget.properties;

                        var target = $(widget.element),
                            offset = target.offset(),
                            height = target.outerHeight(),
                            widgetChildren = widgetTarget.children("div");

                        if (widget && widget.whitelist) {
                            whitelisted = widget.whitelist.indexOf(properties[widget.idx]) != -1 ? properties[widget.idx] : false;

                            if (!whitelisted) {
                                return;
                            }

                            applyHint(draggedElement[0], target, packages[whitelisted]);

                            widgetTarget
                                .show()
                                .css(TRANSITION, "all 100ms")
                                .css("display");

                            widgetTarget
                                .css({
                                    top: offset.top,
                                    left: offset.left
                                })
                                .children("span")
                                .text(widget.name);

                            widgetChildren
                                .width(target.outerWidth())
                                .css(TRANSITION, "all 100ms")
                                .last()
                                .css("top", height)
                                .end()
                                .css("display");

                            widgetChildren
                                .children("div")
                                .height(height)
                                .css(TRANSITION, "all 100ms")
                                .css("display");
                        }
                    },
                    dragleave: function () {
                        $(widget.element).css(defaultCSS);
                        widgetTarget.hide();
                    },
                    drop: function (e) {
                        if (!whitelisted) {
                            return;
                        }

                        var target = $(widget.element),
                            engines = $("#applyall")[0].checked ?
                                $.map(visibleOSes, function (value) { return $("#" + value.replace("box", "Device")).data("kendoStyleEngine"); }) :
                                [ target.parents(".device").data("kendoStyleEngine") ],
                            targetSelector = engines[0].getElementSelector(target, true);

                        target.css(defaultCSS);
                        widgetTarget.hide();

                        engines.forEach(function (value) {
                            var currentTarget = value.element.find(targetSelector);

                            if (css["background-image"]) {
                                kendo.deepExtend(css, value.mixBackground(css, currentTarget, true, draggedElement.attr("data-pattern") !== undefined));
                            }

                            value.update(currentTarget, css, ".km-" + value.options.platform + " " + targetSelector);
                        });
                    }
                });

                $(document).on({
                    keydown: function (e) { CtrlDown = e.which == 17; },
                    keyup: function (e) {
                        var Y = e.which == 89 || e.which == 121,
                            Z = e.which == 90 || e.which == 122;

                        if (e.ctrlKey && (Y || Z)) {
                            e.stopImmediatePropagation();
                            e.preventDefault();
                            if (e.shiftKey || Y) {
                                globalRedo();
                            } else {
                                globalUndo();
                            }
                        }
                        e.which == 17 && (CtrlDown = false);
                    }
                });

                $(".device").on(click, ".utility-active", function (e) {
                    var target = $(e.currentTarget),
                        width = target.outerWidth();

                    if (width - 20 < e.offsetX && e.offsetX < width && e.offsetY > 0 && e.offsetY < 20) {
                        e.stopImmediatePropagation();
                        e.preventDefault();
                    }
                });

            }, 200);
        };

        window.mobileAccountViewInit = function () {
            var listviews = this.element.find("ul.km-listview");

            this.element.find("[id^=settings-view]").kendoMobileButtonGroup({
                select: function() {
                    listviews.hide()
                             .eq(this.selectedIndex)
                             .show();
                },
                index: 0
            });
        };

        function addRecentItem(element, type) {
            element = $(element);

            var existing = $('.recent-' + type + 's [data-' + type + '="' + element.attr("data-" + type) + '"]');

            if (existing[0]) {
                existing
                    .addClass("k-state-active")
                    .trigger(click)
                    .siblings(".k-state-active")
                    .removeClass("k-state-active")
            } else {
                var recent = element.clone()
                    .prependTo(".recent-" + type + "s")
                    .addClass("k-state-active")
                    .siblings(".k-state-active")
                    .removeClass("k-state-active").end();

                recent.kendoDraggable(events[type]);
                pickers[type].popup.wrapper.addClass("k-static-shown");
                pickers[type].open(recent);

                recent.on(click, function (e) {
                    var that = $(this), item;

                    if (e.button == 0) {
                        that.addClass("k-state-active")
                            .siblings(".k-state-active")
                            .removeClass("k-state-active");
                    } else if (e.button == 1) {
                        if (this == pickers[type].target[0]) {
                            item = that.next();
                            !item[0] && (item = that.prev());

                            if (!item[0]) {
                                pickers[type].popup.wrapper.removeClass("k-static-shown");
                                pickers[type].close();
                            } else {
                                pickers[type].open(item);
                            }
                        }
                        that.remove();
                    }
                });
            }
        }

        ["color", "gradient", "pattern", "font"].forEach(function (type) {
            i = 0;
            while (defaults[type][i]) {
                var value = defaults[type][i], drop, style;

                if (value["background-image"]) {
                    value["background-image"] = tools[type].set(value["background-image"]).get();
                }

                if (value["background-color"]) {

                }

                drop = $('<div class="drop"></div>')
                        .css(value)
                        .insertBefore(".recent-" + type + "s")
                        .on(click, function () {
                            addRecentItem(this, type);
                        });

                style = JSON.stringify(kendo.getComputedStyles(drop[0], packages[type]));
                drop.attr("data-" + type, (type == "color" ? value["background-color"] : engineTool.createHash(style)));

                i++;

                if (!(i % (type != "gradient" && type != "font" ? 12 : 11))) {
                   $("<br />").insertBefore(".recent-" + type + "s");
                }
            }

            $("." + type + "-holder .drop:last").addClass("k-none");
            kendo.wrap(pickers[type].popup.element).addClass("k-static-picker k-static-" + type);
        });

        $(".tools").kendoTabStrip({
            animation: {
                open: {
                    effects: "fade:in"
                }
            },
            select: function (e) {

            }
        });

        $("body").css("visibility", "visible");

        $(".optionsSheet input").on("change", function () {
            $("#" + this.id.replace("box", "Device")).toggleClass("hiddenOS", !this.checked);

            visibleOSes = $(this)
                            .parents(".optionsSheet")
                            .find("label")
                            .prev(":checked")
                            .map(function() {
                                return this.id;
                            }).toArray();

            if (localStorage && localStorage.length) {
                try {
                    localStorage.setItem("visibility", JSON.stringify(visibleOSes));
                } catch(err) {}
            }
        });

        $(".optionsSheet label, .optionsSheet input").on(click, function (e) { e.stopImmediatePropagation(); });

        $(".optionsSheet").on(click, function (e) {
            e.preventDefault();

            $(".optionsSheet .items")
                .css("z-index", "");

            $(".optionsSheet .cover")
                .one(kendo.support.transitions.event, function () {
                    if ($(this).parent().hasClass("k-state-opened")) {
                        $(".optionsSheet .items").css("z-index", 10);
                    }
                }).css("overflow");

            $(this).toggleClass("k-state-opened");
        });

        importWindow = $("#importWindow").kendoWindow({
            width: "400px",
            height: "400px",
            maxHeight: "400px",
            title: "Import Styles",
            visible: false,
            modal: true
        }).data("kendoWindow");

        exportWindow = $("#exportWindow");

        exportWindow.append('<br /><br /><a class="k-button" target="_blank" download="kendo.mobile.exported.css">Download CSS</a>');

        exportWindow = exportWindow.kendoWindow({
            width: "400px",
            height: "400px",
            maxHeight: "400px",
            title: "Export Styles",
            visible: false,
            modal: true
        }).data("kendoWindow");

        $("#resetStyles").on(click, function () {
            each(devices, function () {
                var that = this.toString();

                $("#" + that + "Device").data("kendoStyleEngine").reset();
            });
        });

        $("#importStyles").on(click, function () {
            if (sessionStorage && sessionStorage.length) {
                try {
                    $("#importWindow .k-textbox")[0].value = sessionStorage.getItem("import");
                } catch(err) {}
            }

            importWindow.center().open();
        });

        $("#exportStyles").on(click, function () {
            var output = "", blob = "", BlobBuilder,
                textarea = exportWindow.element.find("textarea"),
                anchor = exportWindow.element.find("a");

            each(devices, function () {
                var that = this.toString();
                if ($("#" + that + "box")[0].checked) {
                    output += $("#" + that + "Device").data("kendoStyleEngine").getFullCSS();
                }
            });

            textarea.text(output);
            try {
                blob = new Blob([output], {type: "text/plain"});
            } catch (e) {
                BlobBuilder = window.WebKitBlobBuilder || window.MozBlobBuilder;

                if (BlobBuilder) {
                    var bb = new BlobBuilder();
                    bb.append(output);

                    blob = bb.getBlob("text/plain");
                }
            }

            if (anchor[0].download) {
                anchor.attr("href", window.URL.createObjectURL(blob));
            } else {
                anchor.remove();
                textarea.css("height", "365px");
            }

            exportWindow.center().open();
        });

        $("#import").on(click, function () {
            var imports = $("#importWindow .k-textbox")[0].value.replace(/<\s*\/.*?>/gm, ""),
                stylesheet = $("<style scoped>" + imports + "</style>").appendTo(document.body),
                styles = {}, style;

            if (stylesheet[0].sheet) {
                each((stylesheet[0].sheet.rules || stylesheet[0].sheet.cssRules), function () {
                    deviceClasses.forEach(function (value) {
                        if (this.selectorText.indexOf(value) === 0) {

                            style = {};
                            for (var i = 0, len = this.style.length; i < len; i++) {
                                if (!style[this.selectorText]){
                                    style[this.selectorText] = {};
                                }
                                style[this.selectorText][this.style[i]] = this.style[this.style[i]] || this.style[$.camelCase(this.style[i])];
                            }

                            styles[value] = extend(styles[value], style);
                        }
                    }, this);
                });
            }

            for (var idx in styles) {
                var engine = $(idx).data("kendoStyleEngine");

                if (!$("#mixStyles")[0].checked) {
                    engine.object = {};
                }

                engine.populate(styles[idx]);

                for (i in styles[idx]) {
                    engine.store(i, styles[idx][i]);
                }
            }

            stylesheet.remove();

            try {
                sessionStorage.setItem("import", imports);
            } catch(err) {}

            importWindow.close();
        });

        window.tools = tools;
    })(jQuery);
} else {
    $(document.body).addClass("old-browser").show();
    $(".header, .tools, .files").hide();
    $(".box").empty().html("<span class='centered'><strong>The Kendo UI Mobile <span>ThemeBuilder</span></strong><span>is fully supported in WebKit based browsers and partially supported in Firefox.</span><br>Please use a compatible desktop browser.</span>")
}