Wanikani Reorder Ultimate 2

Learn in the order you want to.

As of 2018-06-24. See the latest version.

// ==UserScript==
// @name          Wanikani Reorder Ultimate 2
// @namespace     https://www.wanikani.com
// @description   Learn in the order you want to.
// @version       2.2.1
// @include       *://www.wanikani.com/lesson/session*
// @include       *://www.wanikani.com/review/session*
// @grant         none
// ==/UserScript==

// Original source:  https://gist.github.com/xMunch/6beafa1a79a77386cd92/raw/WKU.user.js
// Wanikani thread:  https://www.wanikani.com/chat/api-and-third-party-apps/8471/page/31#post332221
// Author: xMunch

window.reorder = {};

(function(gobj) {

    //===================================================================
    // Initialization of the Wanikani Open Framework.
    //-------------------------------------------------------------------
    var script_name = 'Reorder Ultimate 2';
    if (!window.wkof) {
        if (confirm(script_name+' requires Wanikani Open Framework.\nDo you want to be forwarded to the installation instructions?'))
            window.location.href = 'https://community.wanikani.com/t/instructions-installing-wanikani-open-framework/28549';
        return;
    }

    // HTML5 Sortable jQuery Plugin
    // http://farhadi.ir/projects/html5sortable
    // Copyright 2012, Ali Farhadi
    // Released under the MIT license.
    (function(e){var t,n=e();e.fn.sortable=function(r){var i=String(r);r=e.extend({connectWith:false},r);return this.each(function(){var s;if(/^enable|disable|destroy$/.test(i)){s=e(this).children(e(this).data("items")).attr("draggable",i=="enable");if(i=="destroy"){s.add(this).removeData("connectWith items").off("dragstart.h5s dragend.h5s selectstart.h5s dragover.h5s dragenter.h5s drop.h5s");}return;}var o,u;s=e(this).children(r.items);var a=e("<"+(/^ul|ol$/i.test(this.tagName)?"li":"div")+' class="sortable-placeholder">');s.find(r.handle).mousedown(function(){o=true;}).mouseup(function(){o=false;});e(this).data("items",r.items);n=n.add(a);if(r.connectWith){e(r.connectWith).add(this).data("connectWith",r.connectWith);}s.attr("draggable","true").on("dragstart.h5s",function(n){if(r.handle&&!o){return false;}o=false;var i=n.originalEvent.dataTransfer;i.effectAllowed="move";i.setData("Text","dummy");u=(t=e(this)).addClass("sortable-dragging").index();}).on("dragend.h5s",function(){if(!t){return;}t.removeClass("sortable-dragging").show();n.detach();if(u!=t.index()){t.parent().trigger("sortupdate",{item:t});}t=null;}).not("a[href], img").on("selectstart.h5s",function(){if(this.dragDrop&&this.dragDrop()){return false;}}).end().add([this,a]).on("dragover.h5s dragenter.h5s drop.h5s",function(i){if(!s.is(t)&&r.connectWith!==e(t).parent().data("connectWith")){return true;}if(i.type=="drop"){i.stopPropagation();n.filter(":visible").after(t);t.trigger("dragend.h5s");return false;}i.preventDefault();i.originalEvent.dataTransfer.dropEffect="move";if(s.is(this)){if(r.forcePlaceholderSize){a.height(t.outerHeight());}t.hide();e(this)[a.index()<e(this).index()?"after":"before"](a);n.not(a).detach();}else if(!n.is(this)&&!e(this).children(r.items).length){n.detach();e(this).append(a);}return false;});});};})(jQuery);

    var rad_levels, kan_levels, voc_levels;

    var ui_css =
        '.ui, .ui-small {'+
        '	list-style: none;'+
        '	color: rgb(255, 255, 255);'+
        '	border-radius: 6px;'+
        '	margin: 5px;'+
        '	padding: 5px;'+
        '	min-height: 30px;'+
        '	background: rgb(85, 85, 85);'+
        '}'+
        '.ui-small {text-align: right; margin-bottom: 5px;}'+
        '.center {margin: 0 auto;}'+
        '#left {min-width: 150px; min-height: 150px;}'+
        '#mid {padding-top: 20px; text-align: center;}'+
        '#right {min-width: 150px; min-height: 150px; text-align: right;}'+
        '.unsorted, .hidden {display: none !important; visibility: none !important}'+
        'item[id^=level-] {background: gray}'+
        '.sortable {padding: 0}'+
        '.sortable item {'+
        '    display: inline-block;'+
        '    font-size: 12px;'+
        '    height: 20px;'+
        '    width: 55px;'+
        '    list-style: none;'+
        '    border-radius: 6px;'+
        '    text-align: center;'+
        '    margin: 5px;'+
        '    padding: 5px 15px;'+
        '    border: 1px solid rgb(51, 51, 51)'+
        '}'+
        '.sortable-placeholder {'+
        '    display: inline !important;'+
        '    border: 1px dashed #CCC !important;'+
        '    background: none;'+
        '    padding: 6px 40px !important'+
        '}'+
        '#priority, #priority2 {'+
        '    background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcgAAAEwCAMAAAAEvhGsAAACbVBMVEUAAAD///+AgICqqqqAgICZmZmAgICSkpKAgICOjo6AgICLi4uAgICJiYmAgICIiIiAgICHh4eAgICGhoaAgIB/f3+FhYWFhYWEhISAgICEhISAgICEhISAgICDg4OAgICDg4OGhoaDg4OGhoaDg4OGhoaCgoKFhYWFhYWCgoKCgoKFhYWCgoKEhISCgoKEhISEhISCgoKEhISCgoKEhISEhISCgoKDg4OBgYGBgYGDg4OBgYGDg4OFhYWDg4OFhYWEhISDg4OEhISEhISDg4OEhISDg4OEhISCgoKCgoKEhISCgoKEhISCgoKEhISCgoKCgoKDg4OCgoKCgoKDg4OCgoKDg4OCgoKDg4OEhISEhISEhISEhISDg4OEhISEhISDg4OEhISDg4ODg4OCgoKDg4OCgoKDg4OCgoKDg4OCgoKCgoKCgoKDg4OCgoKDg4OCgoKDg4OEhISDg4OEhISDg4OEhISDg4OEhISDg4OEhISDg4OEhISEhISDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OCgoKDg4OCgoKDg4OCgoKDg4OCgoKDg4OCgoKDg4OCgoKDg4OEhISEhISDg4OEhISDg4OEhISDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OCgoKDg4OCgoKDg4OCgoKDg4OEhISDg4OEhISEhISDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4NZz3VxAAAAznRSTlMAAQIDBAUGBwgJCgsMDQ4PEBESExQWFxkbHB0eHyAhIiMmJygpKissLi8xMjM0NTY4OTo7PD4/QEFDREdISUpLTU5PUVJTVFVWWFlaW1xdYGJjZGZnaGtsbW5ydHZ3enx9fn+AgYKFhoeIiYuNjo+QkZKTlJWWl5iZmpucnZ+hpKWnqKmqq6ytrq+wsbKztLW2t7i6u7y9vr/AwcLDxMXGx8jKy8zO0NHT1NXW19jZ2tvc3d/g4eLj5ebn6Onq6+zt7vDx8vT19vj5+vz9/r0sL9gAABkaSURBVHja7Z39v9xEvcc/5/SJYqGkWqwWzKE862opyINBUFsuK5RrgUFAYOSIgKwCV1BkCtYCdy/SipaHoFIeihJAewHtIA+Vc7gEVCjS+ZvuD3nYZDfZzWSSnElf8/3hvHazJ9+85/vJZibzzXcHMGbM2CFslugAPeLZhqsNXEyE5gCe6yQ+oT4A2yM9AOh5hktrrrRR343PJ8sPgCkAwKOGqz1cAPqeFb7q+faAqCNsw6U1lx1dKQRLbPQtENGNL/xAzzVcWnMNzE1cC/p9EEFdrwfQ4FrPCSy/a7j057L8Qb/d45btE6DDRD+g6fpW+Mdw6c2VHGW5fmeA2w9OOQYAPWa4dOeiIoIh3uBGyOFu2DEEm4RjuNS4NtxVZ+fZYZwHh3QYF3Rw0kWvey5lzBVCNHtzdKhxzcz+VQhxYm0DaCFYCODHrwD48a2QL0SfMWZFQ7KGBvaHFtdR5KmDQgghejDWWluysf9hdNvyoglHW239nfORih8+JJaagLTS1l7/cqTiwT3fXgVhQtJCW3np7o8jGffdOAPACNk+W3z+Ax9EKr7LzpgKthohW2ad2+ciFT/aeeGyeHuDQk5f/PC8mH/44mnNQtMirs/SP8eT689d9cnkfzcnpO2FBJql4FvDtWLLE3HH+Lebjh/698aEtOMrgpjTKWIt4Vr01e3/it6/d8+ZUyP/35SQ08+LgT2vz1WsHVyn3vZW3DH+5pvLs3ZoSsjNImmbtQlYO7hi876zOmeHpoR8NMXzqDYBawdXYK/fckL+DupCivrskOQqZu8MH/Mf284Ze+E3Quop5NARd12yfNIORkgthXw3dcC5As01Quon5PLNu4Rs312BkLWNDsUhyTXxxuPsbe8Pnzmb9RGyzP2aOCS5xtvxP3h99ApQhKspITGTmKmYgTZCNs81xlZf7cUwr/5TjqsxITETzx3OQCMhG+fKs8O6v/4oku6t206V5WpOSExfHFzvp6GVkE1zZdrUmVvfi1T8YPt5i+S5GhQyHEjW4rlFXBl23E2vRSp+/MSWFaW4jJALLeSqq/bEveFeurYk1+zP1xshF1DIZRfsjDvGuds7pblOmLvmpcVGyAUScur0u+MJnA8eOH9Jea6pp6/AI9cZIRdEyJkb9sXPM+6+dKUS1xXPTOHYedsI2biQq8izByMZX75+rSLXp+dOBHDtY0bIZoVcsvHB+EH/d+5cr87VvxEAFr+w2QjZqJAvxQ/69zcuqYDr668ET0V+af8qI2STQvaCjvFpclQlXCtePyt8dce9RsgmhTxJCLFvdqYqrh9vjV4d8cZZRsgmBzuu2FAd1/q3Bj8psPGVZUbIJketojquxS9elHj30A1GyJYKSXcl362ZX2eEbKWQM/PHpN5f+eSUEbKNQj5+Tfr99HOXGSFbKOS3vEVDW055e3U5Jpn8iVzA1DIzunJVKuSn/v75kW0/vK8UklT+RCpgapkZXbmqFfIXPxrddjg/twSRXP5EJmBqmRlduaoV8iv8Exlbz+WHyxPJ5U9kAqaWmdGVq1Ihl+/L/u7dJ//bSZL5E4mAqWVmdOWqVshbcnrD1W+fIgskmT+RCJhaZkZXrkqFzB+fXvacZMWubP6keMDUMjO6clUq5KI/bMntx5+8UgpHOn9SOGBqmRlduaoV8urf5c/hrJtfI4MjnT8pHDC1zIyuXJUK+Zn548bs+f2HJGjk8ydFA6aWmdGVq1ohf/XdcXsue2VjYZgS+ZOCAVPLzOjKVa2QF/5p7EMiOOuNI4rClMifFAyYWmZGV65KhVz55ukT9r33joIsZfInxQKmlpnRlataIX/200n7rtr/xWIHKZM/KRYwtcyMrlyVCnnGm0dGL63U2hF88LP1m18oNCNcKn9SKGBqmRlduSoVcuneTQCALiHEdQkhXdDgPxNC4rFrCxyiXP6kSMDUMjO6cqWtaCIsj2t2R9hpM8EYY4JRUGYLEjwtG80D2/PHTj5EufxJkYCpZWZ05UpZ4URYDld0u99hzHcZczljHcrs4W8krntk4hFK5k8KBEwtM6MrV3oCrXAiLJsrnoCzCQ2N2FlCLnnpogkHKJs/mRwwtcyMrlxpK54Iy+a6fE80JU58zjnn3LdBmS3c5EKTAHDa/gmraJXNn0wOmFpmRleulEkkwjK5jp47OXpJPMYYYywUEqAivbLST7aO9V86fzIxYGqZGV250iaRCMvkuv/m+CVxgysrD4XscJ+nVnw98s0vj3FfPn8yKWBqmRldudImkwjL4jrvL4fFrzvMczljjFmgQgjb7/BuqpfEpr1j1nUpnz+ZFDC1zIyuXCmTSoRlcK147ZzBG2ZzQnsW7fVAGTo+AXc6fkrJndfnelfIn0wImFpmRleutEklwjK4bt02eO144D1CKLf9LmBxB+AOiGcVY1fIn0wImFpmRleulMklwka5vrA/sUaE46DDGGNdOJ3RKbpJVxOV/Mn4gKllZnTlSplkImyU6ynpZ4UW/TG7f1fKn4wNmFpmRleutEkmwka57irx67K/zPStlD8ZGzC1zIyuXCmTTYSNct0qr+PHma4T+ZNcy8+fjAvYRM89QfM9T9ib0Sq4VDNG0omwUa5vyAu5O8tzlD8Zb7n5kzEBW7p3E0CH1zTuJSYqOHiu56V7N1mMMQugNFfI8lyoJGMknwjL4Pree3IyfvTbz2V5nt0BQAxPE3b7jESHtjEmfzImYLM7APChmUsiHJABFM31PLsDIIR0Ofd9zrtwhBDhbBUd7H9/WS5UkjGST4TV9gPqwc1vSkgqPBu86wEgbvRZXv4kH2zd/BrEmnVi3yQhKs/3vG5+DSjnvGvbjNkhXo/FEyDRMUtyoZKMUYlEWF1ChtNRSSE7outGN6ADIfPyJ7lgU09eCVh+P3AZ+LPc1BwFdXM9B3tTSm3OfZ+Hl2OXApwAgBMdsxwXUEXGqEwirC4hw/xJQkiL9wDXGxYyL3+SC3b5nmnA5RYQd5Q9IVjyX/q9XM+X75kGLMaYE8Q6YPA7kZDd4IvulOQKGqeaMSqTCKtJyCh/EgnZp+i7ACyvH39nos+y8yd5YEfPnQy4vCsYATgFCBMeYUkhLdHN8xxwWZzzvscYYx6BxYQQwmc+BYBeHwCEU44rFFIxY1QqEVaTkFH+JBSLcZsG3yGLs6hTEjZg87z8SR7Y/TcD1LMB6vl9bqErWAdICdnj4YtRzyGX4ziUul23S7uW51qMwWHC7wPwaCykPFckpFrGqFwirB4h4/yJsAFYHrfhhcMSm9MwXsIGPIac/EkOWDIzQ6NvXlpIMtg87Dncm/jct8E7nADURUfYgOMHXaQ1OP/KcilmjMolwmoRcpA/ETZA/NSFpeMTOL4FCBvh4Ccrf5INlszM9BID1YGQVj85fk17jvYmDNx2fIuTLmW9TnxqwQq+OXY4hirHpZgxKpkIq0XIQf5E2NTjJP2p43X8LgBBvHAQm5U/yQaLPXeY7yV+1jsSkjKR3DzkOdqbeMx3OAHv9XsdIXoAGLcAywtOuZ6PslxQzhiVTITVIWQifyKElzF94hMAED4dcxJmgsWeu4KlzvBAyI7gzMk/vQd7M0IYARzGwgFX17MB9PsArGDQWo4r6IBVMkZlE2F1CFlJ/iQTTM2zrlwpK5sIq0PISvInmWBqnnXlSlrpRFgdQlaSP8kEU/OsK1fSSifC6hCykvxJJpiaZ125ElY+xVbLqLWK/Ek2mJpnXbliU0ixNbUOsLTpClYrl0KKzQipEZdKis0IqQ+XUorNCKkPl1KKzQipDZdais0IqQ2XWorNCKkLl2KKzQipCZdqis0IqQmXaorNCKkHl3KKzQipB5dyIswIqQeXciLMCKkHl3IizAipB5dyIswIqQmXaiLMCGm4TMAMlwmYEdJwGSENlwEzXCZgRkgTMCOk4TJghssEzHCZgBkhDZcR0nCZgBkuEzAjpOEyQhouA2a4TMAMlwmYEdJwGTDDZQJmuEzAjJCGywhpuAyY4TIBM0IaLiOk4TJghssEzHCZgBkhDZcR0nBJ2drHD4ha7cDjaw1X/VxwRe32e8NVPxcO1A/2b8NVPxdEA2a46ucyATtUhDRmzJgxY5qYJTpAj3i24WoDF4t6Xwfw3OTqp9QHYHukBwA9z3BpzZU26rvx+WT5AXCwdJtHDVd7uAD043Wle749IOoI23BpzWXHNzYssdG3QEQ3vvADPddwac2VmF9MXAv6fRBBXa8H0OBazwksv2u49Oey/EG/3eOW7ROgw0Q/oOn6VvjHcOnNlRxluX5ngNsPTjkGJJfFNFy6clERwRBvcCPkhAti2mHXLZzh/TbcVUVn4N61oWKuii6fmnLlWYdxHhzSYVzQwUkXve65lDFXCJG+OZqZ/asQ4kTl458khPjr7ExlXFWZrlx5A2ghWAjgx68A+PGtkC9EnzFmRUMyAMBR5KmDQohgKTDFy5QQQoiDT5OjKuCq8vKpKVeFtmRj/8NoGP6isreXIlcf9jcu0aiVunJVZuvvnI+b+JBYqn5aiAfj0+KdO9frc7pqylWNrb3+5ahxB/d8exWqyJAKrLri2YOR25evX6tJW3XlUreVl+7+OGrXvhtngsZWETAAMzfsi5cQ233pSj2E1JNL0Raf/8AHUZPeZWdMJRpbRcCAqdPvfjc6wAcPnL9YDyE15FK7R7l9Ll7ja+eFy4YbW0XAACz7j50fRYeZu72jh5DacRW06YsfnhfzD188Pdj0WfrneLL4uas+md3YKgIGYNVVe+Jj7aWfHcvVmJB6cRUz2wtpoxmLFVueiDvGv910/LjGVhEwAOtuei3ulp7YsiKHq2EhNeIqpmN8BRVzNrDoq9v/Fb1/754zpyY2toqAAVNn3hOv6fiv7V9dNMK1IELqwlXouvp84tnL50+97a24Y/zNN5cXa2wVAQOwvPvruFt667ZTU1zTCyWkHlxFbHP247Ted1bLNLaKgAFY/R0vG2fzAgqpAVcRezQD7/VbTpBvbBUBA3D8La9nED26sEIuNFcRe2eY7R/bzpku2dgqAgZMn7Pt/WGo/Qsu5IJyFWJP265Llqs0toqAAVh+ya6h+kINhFxAriL2bgpsTr2xVQSsDBcOYa6JtnzzLulrfkNCDvXduzYv10PIBeGacONx9ug1f7M2Qo6Mpt/fdva0BkIuCNc4O/4HGaOwIvdFDQmZur+NRtM/OH7BhVwQrlxbffXgvujVfw6u+DPQRkjMDGZQ/vnq4FS7evXCCrkgXNl2WHqmAjPx3OEMNBIyxXXqbfvjGadfdw9bSCEXgivDps7cGs8dfrD9vEUAMH1x0D9OQysh01yLztseJ0ff25oxB4xDmGvEjsuazYfcDwA1J+Qw1xFbfhtnZV676bgFE7J5rrSl82tr88HG2uzP1R9KKuxjhGst/d+4DXuuWlVxhHTlStqyC8ZlvIsLecLcNS+pPvpQ3EcWV+e/4tHGgZ0XLKswRrpyJTrG9DMoSwqBZXt6+go8cp0iTXEf2VxLvvbfg2eJ7t5QVbekK9dglDV4KuxgzlNhhYW84pkpHDuvlk+V8JHLtfKy3fFTi/tumKkkTrpyhR0jKfKcZlEhPz13IoBrH1MhkvExjuuY2cHzts8S9W5JVy4AWLKx4JPTRYXs3wgAi19QyafK+JjAddqd/xc/Af+g6kP+unIBErUMBYX8+itBH/6l/eVPNCkfE7mWbPyfimpSdOUCkFddVFrIFa+fFb66496ySHI+inCtIs9UUCWmK1dgJwkh9s3OVAMG/HhrfAv8xlklkeR8FLxSBMO5k1RCpStXaK7YoDCcHrL1bw1K5De+Uu5GSdJH8duiDeIJlUDpyiU751QEbPGLFyXePXRDGRxZHxIzTkozh7py1SIk3ZV8t2Z+XQkcWR9NBUxXrjqEnJk/JvX+yiflZy6kfTQUMF25ahHy8WvS76efu0yaRtpHQwHTlasOIb/lLRracsrbsjlxeR/NBExXrjqE/NTfPz+y7Yf3ybGU8NFIwHTlqkXIX/xodNvh/FwplhI+GgmYrlx1CPkV/omMrefywyVQyvhoImC6ctUh5PJ92efnfRKzT6V8NBAwXblqEfKWnB5j9dunFCYp5aOBgOnKVYeQ+WO4y54r+pB1OR/1B0xXrjqEXPSHLXkfTT15ZbEDlPRRe8B05apFyKt/lz/PsW5+TaEDlPRRe8B05apDyM/Mj3tS8/sPFfFf1kfdAdOVqxYhf/XdcXsue2VjAf9lfdQdMF256hDywj+Nf+bkrDeOmOi+tI+aA6YrVx1Crnzz9An73nvHJO/lfdQbMF25ahHyZz+dtO+q/V+c8B/lfdQbMF256hDyjDePHL9nT9DNL4x/zn68j+C3pXN81BqwiW1bIK46hFy6d1O8RElCvMRCAxwcj107zvfSvf/JGLMASvOFzPFRZ8CW7t1U4L+a58q0ouVFeWCzOwDwoVlHIhyQQd01hT1/7DiGHSCEdDn3fc67cIQQIjgT6MAJy/ZRPGDyRWKzOwCMrGjV7TMSHdwG0DxXlhUuL8oBWze/BrFmUQUXFSQhKgeA6x7BuNtqyjnv2jZjdhi2wUInnfiomT4KB0y+SCy43U8JSYVng3c9AMSNPmuaK3OSqXB5UTbY1JNXxmvNdETwvKDl+qklFF0AWPLSReMmuixKqc2574fLncClACcA4MRHzfRRNGDyRWLhBFxSyI7outFSdAMhG+bKtOLlRdlgl++ZBlxuAXFH2Ust2gb0g8vuafvzVoW6fM80LMaYQymllAYwficSshuvsZnpo2jA5IvELt8zPSSkxXuA6w0L2TBXlkmUF2WCHT13MuDyrmAE4BQgTHiEJYW0RLhA20+2Zjs+eu5kwOKc9z3GGPMILCaEED7zKQD0+kC0ElGGj4IBky8SO3ruZCSF7FP0XQCW14+vNNFnTXJlmkR5USbY/TcD1LMB6vl9bqErWAdICdnj4Ysj3/xypuP7bwYAx3Eodbtul3Ytz7UYg8OE30e0imYgZIaPggGTLxILuGKxGLdpcOWxeLxcmbABmzfLlWUy5UVZYOf95bDEMCBeGjEpJBls3rQ3a12XwAfxuW+DdzgBqBssfur4QRdpJcI56qNYwOSLxOK2CRuA5XEbXjiYszkNTzBhAx5rlCvLpMqLMsBWvHZO4q5/MFAdCGn1k+PXnddnMAQ+CAO3Hd/ipEtZrxNHChanAGCHA6lRH4UCJl8kNmibsAHipxbg6/gEjm8BwkY4+GmKK9OkyosywG7dFjWM+V7ixyMiISkTyc2ZGaHQB/GY73AC3uv3OkGZGeMWYHlBBHt+no9CAZMvEovbBmFTj5P0p47X8bsABPHCQWxTXFkmV140CvaF/eEaEV3BUosiBkJ2BGdDayWO5mgjH11GCCOAw1g4fuh6NoB+H4AVDlozfRQJmHyRWNw2QIis1cp9AgDCp81yZZlkedEo2FPSHfSiPw4/NaHuo0DAShSJ6cqVZZLlRaNgdwl5++WQV3UfBQJWokhMV64Mky0vGgW7Vb6tH490Rco+JgesTJGYrlwZJlteNAr2DfnG7h72qu5jcsDKFInpyjVq0uVFGWDfe0+uqR/99nMjbpV9TAxYuSIxXbmGTb68SObXIZu0SVxVFIlpzCVfXtRWIasoEtOXq0R5UUuFrKJITF+uMuVF7RSyiiIxjbnKlBe1U8gqisT05SpVXtRKIasoEtOXq1x5URuFrKJITGOucuVFbRSyiiIxfblKlhe1UMgqisQ05ipZXtRCIasoEtOXq2x5UfuErKJITF+u0uVFrROyiiIxjblKlxe1TsgqisT05SpfXtQ2IVMtTT0/zOj4ljbIlWUFiteUyotaJmTc0g4hpMcJIQRO8OzPQMgJRWK1cSkWr0GpvKhlQs7uCF8Q5ruMMd9llsPBw3qjsL3ji8Rq41IsXlMrL2qXkPFttcWY5zHW9xkjDgdPfyPHFonVxqVYvKZYXtQqIRMTXYSGRjoZQo4pEquNS7F4DYrlRa0SMmwpANg+55xz7hM4HNwNvgxxn5RfJFYbl2Lxmmp5UZuEjFoaCMlYWOUVfCMd4SdjlFckVhuXYvEaVMuL2iRk1FIAsHlwZXVDIS3u8X7if/OKxOriUi1eUy4vapGQySIxWMx1eZ8x5gS3Hx5ltJ+sAcguEqubq2zxmnp5UXuETBaJAZQw5rigxIXDYXkMjIYlXqFlFYnVzVW2eA3q5UXtEXLQUgAWt5lLCPFttxeMC8AoOjxRJTY+q1QDl0LxWgXlRa0RMtFSADaF3WOMUdhkZIouu6V1cykUr6GC8qLWCFlFkZjGXMrlRa0RsooiMY25lMuLWiNkFUViGnMplxe1RsgqisR05lItL2rPqLWKIrFDl6u1RTyGywTMCGm4jJCGywTMcJmAGSENlxHScBkww2UCZoQ0ATNCGi4DZrhMwAyXCZgR0nAZIQ2XCZjhMgEzQhouI6ThMmCGywTMcJmAGSENlwEzXCZghssEzAhpuIyQhsuAGS4TMCOk4TJCGi4DZrhMwA51rrWPHxC12oHH1xqu+rngitrt94arfi4cqB/s34arfi6IBsxw1c9lAnaoCGmsTfb/aU9UqSuyTeAAAAAASUVORK5CYII=");'+
        '    background-repeat: no-repeat;'+
        '    width: 150px;'+
        '    height: 150px;'+
        '    display: block'+
        '}'+
        '#priority {float: right;}'+
        '.balance {background-position: -1px -1px !important}'+
        '.balance2 {background-position: -153px -1px !important}'+
        '.level-heavy {background-position: -1px -153px !important}'+
        '.meaning-heavy {background-position: -153px -153px !important}'+
        '.reading-heavy {background-position: -305px -1px !important}'+
        '.type-heavy {background-position: -305px -153px !important}'+
        '#overlay {'+
        '  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATAAAAEwCAMAAAAHJd3BAAAC4lBMVEUAAAAAAACAgIBVVVVAQEBmZmZVVVVJSUlgYGBVVVVNTU1GRkZVVVVOTk5JSUlVVVVQUFBLS0tRUVFNTU1RUVFOTk5VVVVSUlJOTk5SUlJPT09NTU1QUFBNTU1TU1NQUFBOTk5OTk5TU1NNTU1NU01RUVFPT09OTk5OTlNRUVFSUlJQUFBOTk5QUFBPT09PT09SUlJOTk5RUVFQUFBOTk5QUFBPT09PT09PU09TT09RUVFSUlJRUVFPT09OTk5OTlJSTk5RUVFQUFBPT09PUk9RUVFRUVFQUFBRUVFQUFBQUFBPT09PT09RUVFQUFBQUFBPT09QUFBPT09PUk9RUVFQUFBQUFBQUFJQUlBPT09PT1FRUVFQUFBPT09PT1FRUVFQUFBQUFBQUFJSUFBRUVFQUFBQUFBPT09QUFBQUFBQUFJPT09PUU9RUVFQUFBRUVFQUFBQUFBPT09PUU9QUFBQUFBQUlBRUVFQUFBQUlBSUFBQUFBSUFBQUFBQUVBRUFBRUVFRUVFQUFBQUFBPT09QUFBQUVBRUFBPT09QUFBRUFBRUVFQUFBQUFBRUVFQUFBQUlBQUFBPT09PT09PUU9QUFBQUFBQUFBRUVFQUFBQUFFQUFBRUVFPT09PUU9RT09QUFBQUFJSUFBQUFBQUFJQUlBQUFBQUFBQUFBQUFFQUVBQUFBQUFBRUVFQUFBQUFBRUFBRUVFPT09PT1FRT09QUFBQUFBQUFJQUFBRUFBQUFBQUFBSUFBQUFBRUFBQUFBQUFBQUFFRUFBQUFBQUFBRUFBQUFBPT09PUU9RT09QUFBQUFBQUVBQUFBQUFBQUFFRUFBQUFBQUFBQUFFQUVBQUFBQUFBRUFBQUFBRUFBQUFBQUFBQUlBQUFBQUVBQUFBQUVBPT09RT09QUFBQUVBRUFBQUFBRUFBQUFBQUFBQUFFQUVBRUFBQUFBQUFFQUFBQUFFQUFBQUFBQUFFQUVBRUFBekKCXAAAA8nRSTlMAAQIDBAUGBwgJCgsMDQ4PEBETFBYXGBkaHB0eICEiIyQnKCsrLC0uLi8yMzQ2Nzo7Pj9AQUNER0dHSEtMTU5OTk9QVFRVWFlbXF1eYWJjZmdpamprb3BwcHFxcnN0dHh5fX19fn+AgYKGhoeHi42Oj5CUlJWWlpiZmZmcnJ2dnZ6hoqOkpqamp6qqq6+wsbKys7S3t7i7vL6/v8DBxMTExcXFyMjIycvMzMzN0NHS09PU19fX2Nvb3Nzd3t7f3+Hi4uLj5eXm5+fn6Onp6+zs7O7v7+/w8fHy8vP09PX19vb39/j4+Pn5+vv7+/v8/P39/pju4PwAAB1bSURBVBgZ7OHRkqxJ1h3G+drRA6Nu+P7PyQsJmOmIpfgys87pHvAHBRpoVgXBnf/lv0v8H9j//Oeff/7rX3+ef/3zX//6c+/+5/2vP8+f/+q//jz/n73/PPvPf53/3H/ts//sP//VP88+55/d+5w/zzl7d5/jO5tZWWtm/phZK/9pZs0f+cd/yh9r1j/yv80//ljzx1r/r/njH/nHH/PHP9b/lrX++Mc//tM/5o9//OOPP/7Tf1r438fbYugxjL02J9R26nQT4qoSNEGQ+vYaBEkRqq4Qdo8eW8lhr20YpwzL2/jlSGY81saURcQE9VtdUdL4MdJQcdVvRUaERQd7ecwkjl/Gx1T0HBbbirflZcVLsYir9SO1rrBQL1lelrcsm8U5FR0f4+NEvWzXrutsOsWuj8ZHEhX1Q1RUEh+pj250yj6ubtf2Ujk+xi+TGn8zy8shxku6qVKPivoBKupRquzGywjHyxp/M5rxy/jSU47fDoedEywOFR9xVRoSP0BCGnXFR5TDQk42h+O3Q099GV8i8VtMzPaxa7k6HvHR1Et9a/XS1Ec8pq6l28ceGfFbIr6Mj+m0Buuw1GkOOh6xT3DEVcdbKOJbC0q8HXXFQc4WjylOetTiLIx2Oj7Gx8nBwR72UilWylAZiWulYgRB/RBFECOa5UpMlKFZaNTazMbByfExfom/2DI1bPVWbUN341FXNX6IVF31SHdJW/VWm9GJ7S/il/G2px3hWMcVB8uqOla8dMTVeov4MSLeWldMvWQ5qsvCEddZDjHtbG/jbZ2olz3egopgE1eOlyD1aONHSOvRIF5OXGEjooi32V4qZ3kbXzrUtVyLkbOzqauI34KgktYP0CaKIH4L6io7+8SwXMtVpr6MxzA545e165pleYsSf1UhrsS3l7hC1F+Firdljat7+WVOhvEYL3VqE4PYHrVt4m/qUZS2rvr26mpLUY/6m7Bt9diCEbYe9TIeJySog3qpg6qp69QjqIhHvNW3Vm/xiCji0ePqqOKol+IoEnI8xsdogrG9nbAs4sQ1wSiCSqm3+NbirTSKoAYZV46wLHK8bYOkxse4Fvugob5MzfYyRU7FER8pSYr49oImofERR/QEHS97dHwpKc5muca1Y42hxDpYSLCjjquoRzymCZpS315piqTjEY+irqOykWDhLKGMWbJd4xHqVJQ9lo3WYxBk1EsVh9I0fog0pRxUvdQEwXi02JbZVPQo8RiPYwchx/J2OOiJVDl+iStCmqofoJqGiCt+OVQjpzgcb8sJQbbjMd7WcdW12a4RTFQiKlEsb1VXI/HtJVJX1dtCJSoSlUGMa7NddZ3lbfyWeixfOksqjiuU0e1liCvV+vZajSuMl11DieuIxpr6sjwav42PMWX8RRx2lKLTxGGFcoLWFT9AXC1yKFkcSacolc0RfzF0jI/xto8jYezD8jLohKgcrWsjHg1p/BBpSD2C7WqdqJApxsvibEPiONvb+JiKHodhu8q2HMZjEFfVoypSP0Qjqh5VVzAew7Fs6toMx6no+BhvSxT1slxx7eAQPV6CcDSERv0AlRJShyBeToWDbFdcy0tRsbyN3yIy49quequrjEdROiK0qfgBommJmFLUY6ir3urarpmI+G18HKq+LL+FiitMuoS4qokQ316IpOoKsZohrijx2/KlyvExfksNVlk7xFlUicbLYatriKirvr26KsK4anO8pEKVdYTsRRdG47fxMTSOc4StDrO7giEldYW4jqsN6gco0rqOK8TV0DDI6h6O2sQ5jpTxMd4240u85ax4HC8N461eoip+gKiKl3obUi/HI+vEW3wZtrfxto6jGTNOkY7adoehiJfliquaSPwIiaTqimt5Ccow3baaBj1mTOo4y9v4LXqcY7AaZZETh6D0sL1MRVrqRyhtRMfL5pQiHDlhUenCOMep+G18jCGD49qI2VbV+Ajq7VASV3x7cSWU462Ij1Fd9gi262DCGB/jt+pBsbwcRBzq0fhlgrZofXst2iLjl9SjHBEcLwvFqfpt/HIIY2G7apbtSzzGX4QEob61EiTEX4xHfNnWqGtjGcLxy/g4JsrheItrdWoqiL86VWldEd9axNVG9firIDo6Xa54Oxwq4/gYH0NdY4/lY9s5iKrSw6JegrTqB6g2iJeyOKWqgpNt+1hmG1cZH+NtHycxjmtbnDos4hAvIUgZjzSob69I4zE0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");'+
        '  background-repeat: no-repeat;'+
        '	display: block;'+
        '}'+
        '.left {width: 150px; height: 150px; background-position: -1px -1px;}'+
        '.right {width: 150px; height: 150px; background-position: -153px -1px;}'+
        '.top {width: 150px; height: 150px; background-position: -1px -153px;}'+
        '#reverse {margin-left:20px; cursor:pointer;}'+
        '#quick-next {cursor: pointer; display: inline-block; color: gray; font-size: 20px;}'+
        '#quick-next.active {color: green;}'+
        '#version {float: right;}';

    var ui_html =
        '<div class="ui-small hidden pure-g-r">'+
        '  <button class="icon-plus"></button>'+
        '</div>'+
        '<div class="ui pure-g-r">'+
        '  <div class="pure-u-1-4" id="left">'+
        '    <div id="r-only">'+
        '      <div style="padding: 10px;"><input type="checkbox" id="mode">1x1 Mode</div>'+
        '      <div class="balance2" id="priority2">'+
        '        <div id="overlay" class=""></div>'+
        '      </div>'+
        '    </div>'+
        '  </div>'+
        '  <div class="pure-u-1-2" id="mid">'+
        '    <div>'+
        '      <ul class="sortable" id="types">'+
        '        <div>'+
        '          <input type="checkbox" id="sort-types" value="checked" checked=""> Sort Types'+
        '          <span id="reverse" class="icon-refresh"> Reverse</span>'+
        '        </div>'+
        '        <item class="radical" style="background-color:#0af;" draggable="true">部首</item>'+
        '        <item class="kanji" style="background-color:#f0a;" draggable="true">漢字</item>'+
        '        <item class="vocabulary" style="background-color:#a0f;" draggable="true">単語</item>'+
        '      </ul>'+
        '    </div>'+
        '    <div>'+
        '      <ul class="sortable" id="levels">'+
        '        <div>'+
        '          <input type="checkbox" id="sort-levels" checked=""> Sort Levels'+
        '          <span id="reverse" class="icon-refresh"> Reverse</span>'+
        '        </div>'+
        '      </ul>'+
        '    </div>'+
        '    <div>'+
        '      <button id="reorder" onclick="this.blur();" tabindex="-1" style="border-radius: 6px; padding: 5px; color: black;">Force Reorder</button>'+
        '    </div>'+
        '  </div>'+
        '  <div class="pure-u-1-4" id="right">'+
        '    <div><button class="icon-minus" style="color:black; margin-bottom: 17px;"></button></div>'+
        '    <div class="balance" id="priority">'+
        '      <div id="overlay" class=""></div>'+
        '    </div>'+
        '  </div>'+
        '  <div class="pure-u-1">'+
        '    <div id="quick-next" class="icon-fast-forward"></div>'+
        '    <div id="version">v2.0.X</div>'+
        '  </div>'+
        '</div>';

    var activeLevels = [];
    var dataset = {};
    var lastUpdate = new Date().getTime();
    var lessonset = {
        quick: 'l',
        queue: 'l/lessonQueue',
        active: 'l/activeQueue',
        updateVisual: function() {
            $('li[data-index="0"]').click();
            var items = $.jStorage.get(dataset.queue).concat($.jStorage.get(dataset.active));
            $.jStorage.set('l/count/rad', sorter.filterType("rad", items).length);
            $.jStorage.set('l/count/kan', sorter.filterType("kan", items).length);
            $.jStorage.set('l/count/voc', sorter.filterType("voc", items).length);
        }
    };

    var showerr = function(err) {
        $('#supplement-info, #information').first().after('<div id="error" style="text-align:center;">An error has occurred within WaniKani Reorder Ultimate.  Please post the error below on the forum thread.<br><a href="https://www.wanikani.com/chat/api-and-third-party-apps/8471" target="_blank">https://www.wanikani.com/chat/api-and-third-party-apps/8471</a><br><br>' + err + '<br>' + err.stack + '<br><br>Logs:<br>' + console.dlog.join('<br>') + '</div>');
    };

    var reviewset = {
        quick: 'r',
        queue: 'reviewQueue',
        active: 'activeQueue',
        updateVisual: function() {
            var item = $.jStorage.get(dataset.active)[Math.floor(window.Math.random(true))];
            if (item.rad) {
                $.jStorage.set('questionType', 'meaning');
            }
            if (item) {
                $.jStorage.set('currentItem', item);
            }
            var count = $.jStorage.get(dataset.queue).length + $.jStorage.get(dataset.active).length;
            $("#available-count").html(count); // to stop the double-up bug.
        }
    };
    var ordered = false;
    var settings = {
        data: {
            sorttypes: !0,
            sortlevels: !0,
            onebyone: !1,
            quickNext: !1,
            priority: {
                'rad': 1,
                'kan': 2,
                'voc': 3,
            },
            questionTypeMode: "0",
            typePriorityMode: "0"
        },
        load: function() {
            var a = $.jStorage.get('WKU/' + dataset.quick + '/settings');
            if (a === null) {
                settings.save();
                return settings.load();
            }
            utilities.log("Loading settings...");
            for (var s in settings.data) {
                if (a[s] !== null) settings.data[s] = a[s];
            }
            $('#types item').sort(function(a, b) {
                return sorter.getHTMLElementPriority(a) - sorter.getHTMLElementPriority(b);
            }).appendTo('#types');
            $('#sort-types').prop('checked', settings.data.sorttypes).change();
            $('#sort-levels').prop('checked', settings.data.sortlevels).change();
            $('#priority').removeClass().addClass(utilities.settingsValueToClass('priority', settings.data.typePriorityMode));
            $('#quick-next').toggleClass('active', settings.data.quickNext);
            if (dataset.quick === 'r') {
                $('#mode').prop('checked', settings.data.onebyone).change();
                $('#priority2').removeClass().addClass(utilities.settingsValueToClass('priority2', settings.data.questionTypeMode));
            }
            utilities.log(settings.data);
        },
        save: function() {
            $.jStorage.set('WKU/' + dataset.quick + '/settings', settings.data);
        }
    };
    var setup = {
        init: function() {
            try {
                $('div[id*="loading"]').off('hide');
                console.dlog = [];
                utilities.log("WKU Init()");
                setup.ui.create();
            } catch (err) {
                showerr(err);
            }
        },
        update: {
            apply: function() {
                try {
                    utilities.log("Applying UID levels");
                    var queue = $.jStorage.get(dataset.active).concat($.jStorage.get(dataset.queue));
                    var current = $.jStorage.get('currentItem');
                    $.each(queue, function() {
                        if (this.voc !== undefined)
                            this.level = voc_levels[this.voc];
                        else if (this.kan !== undefined)
                            this.level = kan_levels[this.kan];
                        else {
                            this.level = rad_levels[this.en[0].toLowerCase().replace(' ','-')];
                        }
                        if (current && utilities.toUID(this) === utilities.toUID(current)) {
                            $.jStorage.set('currentItem', this);
                        }
                        if (activeLevels.indexOf(this.level) == -1) {
                            activeLevels.push(this.level);
                        }
                    });
                    activeLevels.sort(function(a, b) {
                        return a - b;
                    });
                    var review = queue.splice((dataset.quick === 'r' ? 10 : $.jStorage.get('l/batchSize')));
                    $.jStorage.set(dataset.active, queue);
                    $.jStorage.set(dataset.queue, review);
                    dataset.updateVisual();
                } catch (err) {
                    showerr(err);
                }
            }
        },
        ui: {
            create: function() {
                setup.update.apply();
                $('head').append('<style>'+ui_css+'</style>');
                utilities.log("Creating UI...");
                var info = $('#supplement-info, #information').first();
                info.after(ui_html);
                $('#version').text("v" + GM_info.script.version);
                if (dataset.quick === 'l') {
                    $('.ui').find('#r-only').remove();
                }
                $('fieldset').on('addClass', function(evt) {
                    if (settings.data.quickNext) {
                        setTimeout(function() {
                            if ($('fieldset').hasClass('correct')) {
                                $('fieldset button').click();
                            }
                        }, 25);
                    }
                });
                $('#quick-next').click(function() {
                    $(this).toggleClass('active');
                    settings.data.quickNext = $(this).hasClass('active');
                    settings.save();
                });
                $('#priority, #priority2').click(function(e) {
                    var offset = $(this).offset();
                    var x = (e.pageX - offset.left);
                    var y = (e.pageY - offset.top);
                    var id = $(this).attr('id');
                    if (y > 50) {
                        if (x < 75) {
                            if (id === "priority") {
                                $(this).removeClass().addClass("level-heavy");
                                settings.data.typePriorityMode = "1";
                                sorter.reorder();
                            } else {
                                $(this).removeClass().addClass("reading-heavy");
                                settings.data.questionTypeMode = "1";
                                utilities.forceQuestionTypeUpdate();
                            }
                        } else {
                            if (id === "priority") {
                                $(this).removeClass().addClass("type-heavy");
                                settings.data.typePriorityMode = "2";
                                sorter.reorder();
                            } else {
                                $(this).removeClass().addClass("meaning-heavy");
                                settings.data.questionTypeMode = "2";
                                utilities.forceQuestionTypeUpdate();
                            }
                        }
                    } else {
                        if (id === "priority") {
                            $(this).removeClass().addClass("balance");
                            settings.data.typePriorityMode = "0";
                            sorter.reorder();
                        } else {
                            $(this).removeClass().addClass("balance2");
                            settings.data.questionTypeMode = "0";
                            utilities.forceQuestionTypeUpdate();
                        }
                    }
                    settings.save();
                }).mousemove(function(e) {
                    var offset = $(this).offset();
                    var x = (e.pageX - offset.left);
                    var y = (e.pageY - offset.top);
                    var ele = $(this).find('#overlay');
                    if (y > 50) {
                        if (x < 75) {
                            ele.removeClass().addClass('left');
                        } else {
                            ele.removeClass().addClass('right');
                        }
                    } else {
                        ele.removeClass().addClass('top');
                    }
                }).mouseleave(function(e) {
                    $(this).find('#overlay').removeClass();
                });
                activeLevels.forEach(function(ele) {
                    $('.ui #levels').append('<item id="level-' + ele + '">' + ele + '</item>');
                });
                $('span#reverse').click(function() {
                    var parent = $(this).parents('.sortable');
                    var items = parent.children('item');
                    parent.append(items.get().reverse());
                    sorter.reorder();
                    settings.save();
                });
                $('.icon-minus, .icon-plus').click(function() {
                    $('.ui, .ui-small').toggleClass('hidden');
                });
                $('#sort-types, #sort-levels').change(function() {
                    $(this).parents('.sortable').find('item').toggleClass('unsorted', !this.checked);
                    settings.data[$(this).attr('id').replace("-", "")] = this.checked;
                    settings.save();
                });
                if (dataset.quick === 'r') {
                    $('#mode').on('change', function() {
                        settings.data.onebyone = this.checked;
                        if (settings.data.questionTypeMode > 0) {
                            utilities.forceQuestionTypeUpdate();
                        }
                        settings.save();
                    });
                    $('#option-wrap-up').click(function() {
                        if ($(this).attr('class') === 'wrap-up-selected') {
                            var fullQueue = $.jStorage.get(dataset.active).concat($.jStorage.get(dataset.queue));
                            $.jStorage.set(dataset.active, fullQueue.splice(0, 10));
                            $.jStorage.set(dataset.queue, fullQueue);
                        } else {
                            if (ordered) {
                                sorter.reorder();
                            }
                        }
                    });
                }
                settings.load();
                setup.ui.toggler();
                $('#reorder').click(function() {
                    sorter.reorder();
                });
                $('body').on('contextmenu', '.ui', function(e) {
                    e.preventDefault();
                });
                $('item').mousedown(function(event) {
                    if (event.which === 3) {
                        var ele = $(this).addClass('hidden');
                        if (ele.attr('id')) {
                            sorter.removeLevel(parseInt(ele.text()));
                        } else {
                            sorter.removeType(ele.attr('class'));
                        }
                    }
                });
                $('.sortable').sortable({
                    items: ':not(div, button)'
                }).bind('sortupdate', function() {
                    sorter.reorder();
                    settings.save();
                });
            },
            toggler: function() {
                if ($('.sortable').length) {
                    var fq = $.jStorage.get(dataset.queue).concat($.jStorage.get(dataset.active));
                    if (!fq.length) {
                        utilities.log("There are no options available... Removing UI.");
                        $('.ui').remove();
                    } else {
                        $('#types .radical').toggleClass('hidden', !sorter.filterType("rad", fq).length).prop('title', function() {
                            var filtered = sorter.filterType("rad", fq);
                            var text = "Total: " + filtered.length;
                            $.each(activeLevels, function() {
                                var amount = sorter.filterLevel(this, filtered).length;
                                if (amount) {
                                    text += "\nLevel " + this + ": " + amount + "";
                                }
                            });
                            return text;
                        });
                        $('#types .kanji').toggleClass('hidden', !sorter.filterType("kan", fq).length).prop('title', function() {
                            var filtered = sorter.filterType("kan", fq);
                            var text = "Total: " + filtered.length;
                            $.each(activeLevels, function() {
                                var amount = sorter.filterLevel(this, filtered).length;
                                if (amount) {
                                    text += "\nLevel " + this + ": " + amount + "";
                                }
                            });
                            return text;
                        });
                        $('#types .vocabulary').toggleClass('hidden', !sorter.filterType("voc", fq).length).prop('title', function() {
                            var filtered = sorter.filterType("voc", fq);
                            var text = "Total: " + filtered.length;
                            $.each(activeLevels, function() {
                                var amount = sorter.filterLevel(this, filtered).length;
                                if (amount) {
                                    text += "\nLevel " + this + ": " + amount + "";
                                }
                            });
                            return text;
                        });
                        activeLevels.forEach(function(level) {
                            $('#level-' + level).toggleClass('hidden', !sorter.filterLevel(level, fq).length).prop('title', function() {
                                var filtered = sorter.filterLevel(level, fq);
                                var rad = sorter.filterType("rad", filtered).length;
                                var kan = sorter.filterType("kan", filtered).length;
                                var voc = sorter.filterType("voc", filtered).length;
                                var text = "Total: " + filtered.length;
                                if (rad) {
                                    text += "\nRadicals: " + rad;
                                }
                                if (kan) {
                                    text += "\nKanji: " + kan;
                                }
                                if (voc) {
                                    text += "\nVocabulary: " + voc;
                                }
                                return text;
                            });
                        });
                        $('input[type="checkbox"]:disabled').removeAttr('disabled');
                    }
                }
            }
        },
        listeners: function() {
            var lastCount = $.jStorage.get(dataset.active).length + $.jStorage.get(dataset.queue).length;
            $.jStorage.listenKeyChange('currentItem', function() {
                if (lastCount < ($.jStorage.get(dataset.active).length + $.jStorage.get(dataset.queue).length)) {
                    lastCount = $.jStorage.get(dataset.active).length + $.jStorage.get(dataset.queue).length; // will infinitely trigger if not here.
                    setup.init();
                }
                lastCount = $.jStorage.get(dataset.active).length + $.jStorage.get(dataset.queue).length;
            });
            $.jStorage.listenKeyChange('currentItem', utilities.forceQuestionTypeUpdate);
            $.jStorage.listenKeyChange(dataset.active, setup.ui.toggler);
        }
    };
    var sorter = {
        filterLevel: function(level, list) {
            if (!list) {
                return [];
            }
            return list.filter(function(ele, ind) {
                return ele.level == level;
            });
        },
        filterType: function(type, list) {
            if (!list) {
                return [];
            }
            return list.filter(function(ele, ind) {
                return ele[type.substr(0, 3)];
            });
        },
        getHTMLElementPriority: function(a) {
            return a.className === 'radical' ? settings.data.priority.rad : a.className === 'kanji' ? settings.data.priority.kan : settings.data.priority.voc;
        },
        getPriority: function(a) {
            return a.rad ? settings.data.priority.rad : a.kan ? settings.data.priority.kan : settings.data.priority.voc;
        },
        randomize: function(list) {
            // Old randomizer used sort() with comparison function {return 0.5 - random();}.
            // Due to internals of sort algorithm, the resulting list doesn't randomize very well (values are unevenly favored).
            // Method below attaches a random number to each list item, sorts by the random numbers, then removes the random numbers.
            return list.map(function(v){return [window.Math.randomB(),v];}).sort(function(a,b){return a[0]-b[0];}).map(function(v){return v[1];});
        },
        reorder: function() {
            ordered = true;
            sorter.setPriorities();
            var fullQueue = $.jStorage.get(dataset.queue).concat($.jStorage.get(dataset.active));
            fullQueue = sorter.randomize(fullQueue);
            if (parseInt(settings.data.typePriorityMode) == 1) {
                if (settings.data.sortlevels) {
                    $('#levels > item').each(function() {
                        var level = parseInt(this.innerHTML);
                        var sorted = sorter.filterLevel(level, fullQueue);
                        if (settings.data.sorttypes) {
                            sorted = sorter.sortByType(sorted);
                        } else {
                            sorted = sorter.randomize(sorted);
                        }
                        fullQueue = sorter.removeLevel(level, fullQueue);
                        fullQueue = fullQueue.concat(sorted);
                    });
                }
            }
            if (parseInt(settings.data.typePriorityMode) == 2) {
                if (settings.data.sorttypes) {
                    $('#types > item').each(function() {
                        var typeFilter = sorter.filterType(this.className, fullQueue);
                        if (settings.data.sortlevels) {
                            $('#levels > item').each(function() {
                                var level = parseInt(this.innerHTML);
                                var sorted = sorter.filterLevel(level, typeFilter);
                                typeFilter = sorter.removeLevel(level, typeFilter);
                                typeFilter = typeFilter.concat(sorted);
                            });
                        } else {
                            typeFilter = sorter.randomize(typeFilter);
                        }
                        fullQueue = sorter.removeType(this.className, fullQueue);
                        fullQueue = fullQueue.concat(typeFilter);
                    });
                }
            }
            $.jStorage.set(dataset.active, (dataset.quick === 'r' ? fullQueue : fullQueue.splice(0, $.jStorage.get('l/batchSize'))));
            $.jStorage.set(dataset.queue, (dataset.quick === 'r' ? [] : fullQueue));
            dataset.updateVisual();
        },
        removeLevel: function(level, list) {
            if (!list) {
                var fullQueue = sorter.removeLevel(level, $.jStorage.get(dataset.queue));
                var activeQueue = sorter.removeLevel(level, $.jStorage.get(dataset.active));
                $.jStorage.set(dataset.queue, fullQueue);
                $.jStorage.set(dataset.active, activeQueue);
                sorter.reorder();
                return;
            }
            return list.filter(function(ele, ind) {
                return ele.level != level;
            });
        },
        removeType: function(type, list) {
            if (!list) {
                var fullQueue = sorter.removeType(type, $.jStorage.get(dataset.queue));
                var activeQueue = sorter.removeType(type, $.jStorage.get(dataset.active));
                $.jStorage.set(dataset.queue, fullQueue);
                $.jStorage.set(dataset.active, activeQueue);
                sorter.reorder();
                return;
            }
            return list.filter(function(ele, ind) {
                return !ele[type.substr(0, 3)];
            });
        },
        sortByType: function(list) {
            return list.sort(function(a, b) {
                return (sorter.getPriority(a) - sorter.getPriority(b));
            });
        },
        setPriorities: function() {
            settings.data.priority.rad = $('#types .radical').index();
            settings.data.priority.kan = $('#types .kanji').index();
            settings.data.priority.voc = $('#types .vocabulary').index();
        }
    };
    var utilities = {
        forceQuestionTypeUpdate: function() {
            var current = $.jStorage.get("currentItem");
            if (!current) {
                return;
            }
            var type = $.jStorage.get("questionType");
            if (current.rad) {
                if (type !== "meaning") {
                    $.jStorage.set("questionType", "meaning");
                    $.jStorage.set("currentItem", current);
                }
                return;
            }
            var typeMethod = parseInt(settings.data.questionTypeMode);
            var data = $.jStorage.get(utilities.toUID(current));
            if (!typeMethod && (!data || (!data.mc && !data.rc))) {
                if ((new Date().getTime() - lastUpdate) > 500) {
                    lastUpdate = new Date().getTime();
                    var nextRandType = ["reading", "meaning"][Math.round(window.Math.randomB())];
                    if (type != nextRandType) {
                        $.jStorage.set('questionType', nextRandType);
                        $.jStorage.set("currentItem", current);
                    }
                }
            }
            if (typeMethod === 1) {
                if (!data || !data.rc) {
                    if (type !== "reading") {
                        $.jStorage.set("questionType", "reading");
                        $.jStorage.set("currentItem", current);
                    }
                } else {
                    if (type !== "meaning") {
                        $.jStorage.set("questionType", "meaning");
                        $.jStorage.set("currentItem", current);
                    }
                }
            }
            if (typeMethod === 2) {
                if (!data || !data.mc) {
                    if (type !== "meaning") {
                        $.jStorage.set("questionType", "meaning");
                        $.jStorage.set("currentItem", current);
                    }
                } else {
                    if (type !== "reading") {
                        $.jStorage.set("questionType", "reading");
                        $.jStorage.set("currentItem", current);
                    }
                }
            }
        },
        highestPriorityType: function() {
            return $('#types item:not(.hidden)').first().attr('class');
        },
        highestPriorityLevel: function() {
            return parseInt($('#levels item:not(.hidden)').first().text());
        },
        log: function(msg) {
            console.dlog.push(msg);
            console.debug(msg);
        },
        newRandom: function(fullVal) {
            if (!settings.data.onebyone && ordered) {
                var fullQueue = $.jStorage.get(dataset.active).concat($.jStorage.get(dataset.queue));
                var fullLength = fullQueue.length;
                if (settings.data.sortlevels && parseInt(settings.data.typePriorityMode) == 1) {
                    fullQueue = sorter.filterLevel(utilities.highestPriorityLevel(), fullQueue);
                    if (settings.data.sorttypes) {
                        fullQueue = sorter.filterType(utilities.toType(fullQueue[0]), fullQueue);
                    }
                }
                if (settings.data.sorttypes && parseInt(settings.data.typePriorityMode) == 2) {
                    fullQueue = sorter.filterType(utilities.highestPriorityType(), fullQueue);
                    if (settings.data.sortlevels) {
                        fullQueue = sorter.filterLevel(fullQueue[0].level, fullQueue);
                    }
                }
                return Math.floor(window.Math.randomB() * Math.min(10, fullQueue.length)) / (fullVal ? 1 : Math.max(fullLength, 1));
            }
            return settings.data.onebyone ? 0 : window.Math.randomB();
        },
        toType: function(item) {
            return (item && item.rad) ? 'rad' : item.kan ? 'kan' : 'voc' || "-1";
        },
        toUID: function(item) {
            return ((item && item.rad) ? 'r' : item.kan ? 'k' : 'v') + item.id || "-1";
        },
        settingsValueToClass: function(id, val) {
            val = parseInt(val);
            if (id === "priority") {
                switch (val) {
                    case 0:
                        return "balance";
                    case 1:
                        return "level-heavy";
                    case 2:
                        return "type-heavy";
                }
            } else {
                switch (val) {
                    case 0:
                        return "balance2";
                    case 1:
                        return "reading-heavy";
                    case 2:
                        return "meaning-heavy";
                }
            }
        }
    };
    wkof.include('ItemData');
    var items_ready = wkof.ready('ItemData').then(function() {
        return wkof.ItemData.get_items().then(items => {
            var by_type = wkof.ItemData.get_index(items, 'item_type');
            rad_levels = {};
            kan_levels = {};
            voc_levels = {};
            by_type.radical.map(item => rad_levels[item.data.slug] = item.data.level);
            by_type.kanji.map(item => kan_levels[item.data.slug] = item.data.level);
            by_type.vocabulary.map(item => voc_levels[item.data.slug] = item.data.level);
        });
    });

    $('div[id*="loading"]:visible').on('hide', items_ready.then(function() {
        (function ($) {$.each(['hide', 'addClass'], function (i, ev) { var el = $.fn[ev]; $.fn[ev] = function () { this.trigger(ev); return el.apply(this, arguments); }; }); })(jQuery);
        dataset = (location.pathname.match('review') ? reviewset : lessonset);
        window.Math.randomB = window.Math.random;
        if (dataset.quick === 'r') {
            window.Math.random = utilities.newRandom;
        }
        setup.listeners();
        setup.init();
        sorter.reorder();
    }));

})(window.reorder);